diff --git a/fdroidMergeRequest.sh b/fdroidMergeRequest.sh index 4f8c8ee54034dce0b6085ca86b32a25c64b96f2e..e2ea50c7934425ed253fc2ed5bb9c415fe7d1bc0 100755 --- a/fdroidMergeRequest.sh +++ b/fdroidMergeRequest.sh @@ -69,6 +69,7 @@ echo " - versionName: ${versionName} - client-uwp - client-qt - plugins + - extensions - docker - docs - lrc diff --git a/jami-android/app/src/main/java/cx/ring/about/AboutFragment.kt b/jami-android/app/src/main/java/cx/ring/about/AboutFragment.kt index b8eb81f17852755b113a817b50ba657fcafe8d13..880f2baed4dafacd175b604bf9bf98602500e47f 100644 --- a/jami-android/app/src/main/java/cx/ring/about/AboutFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/about/AboutFragment.kt @@ -20,7 +20,6 @@ import android.content.Intent import android.net.Uri import android.os.Bundle import android.view.LayoutInflater -import android.view.MenuItem import android.view.View import android.view.ViewGroup import androidx.annotation.StringRes @@ -37,10 +36,10 @@ class AboutFragment : Fragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View = FragAboutBinding.inflate(inflater, container, false).apply { release.text = getString(R.string.app_release, BuildConfig.VERSION_NAME) - logo.setOnClickListener { openWebsite(getString(R.string.app_website)) } - sflLogo.setOnClickListener { openWebsite(getString(R.string.savoirfairelinux_website)) } - contributeContainer.setOnClickListener { openWebsite(getString(R.string.ring_contribute_website)) } - licenseContainer.setOnClickListener { openWebsite(getString(R.string.gnu_license_website)) } + logo.setOnClickListener { visitWebpage(getString(R.string.app_website)) } + sflLogo.setOnClickListener { visitWebpage(getString(R.string.savoirfairelinux_website)) } + contributeContainer.setOnClickListener { visitWebpage(getString(R.string.ring_contribute_website)) } + licenseContainer.setOnClickListener { visitWebpage(getString(R.string.gnu_license_website)) } emailReportContainer.setOnClickListener { sendFeedbackEmail() } credits.setOnClickListener { creditsClicked() } toolbar.setNavigationOnClickListener { activity?.onBackPressedDispatcher?.onBackPressed() } @@ -58,7 +57,7 @@ class AboutFragment : Fragment() { dialog.show(childFragmentManager, dialog.tag) } - private fun openWebsite(url: String) { + private fun visitWebpage(url: String) { launchSystemIntent(Intent(Intent.ACTION_VIEW, Uri.parse(url)), R.string.no_browser_app_installed) } diff --git a/jami-android/app/src/main/java/cx/ring/account/AccountEditionFragment.kt b/jami-android/app/src/main/java/cx/ring/account/AccountEditionFragment.kt index 8b02dd37656cbfc3eb3266628057ffbde9285343..b74143d94657813b2e3e66c1d1eea3c2641bc372 100644 --- a/jami-android/app/src/main/java/cx/ring/account/AccountEditionFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/account/AccountEditionFragment.kt @@ -33,7 +33,7 @@ import cx.ring.fragments.GeneralAccountFragment import cx.ring.fragments.MediaPreferenceFragment import cx.ring.fragments.SecurityAccountFragment import cx.ring.mvp.BaseSupportFragment -import cx.ring.settings.pluginssettings.PluginsListSettingsFragment +import cx.ring.settings.extensionssettings.ExtensionsListSettingsFragment import cx.ring.utils.ActionHelper.openJamiDonateWebPage import dagger.hilt.android.AndroidEntryPoint import net.jami.account.AccountEditionPresenter @@ -112,7 +112,7 @@ class AccountEditionFragment : BaseSupportFragment<AccountEditionPresenter, Acco 1 -> MediaPreferenceFragment.newInstance(accountId) 2 -> fragmentWithBundle(AdvancedAccountFragment()) 3 -> fragmentWithBundle(SecurityAccountFragment()) - 4 -> fragmentWithBundle(PluginsListSettingsFragment()) + 4 -> fragmentWithBundle(ExtensionsListSettingsFragment()) else -> throw IllegalArgumentException() } @@ -133,7 +133,7 @@ class AccountEditionFragment : BaseSupportFragment<AccountEditionPresenter, Acco 1 -> R.string.account_preferences_media_tab 2 -> R.string.account_preferences_advanced_tab 3 -> R.string.account_preferences_security_tab - 4 -> R.string.account_preference_plugin_tab + 4 -> R.string.account_preferences_extension_tab else -> -1 } } diff --git a/jami-android/app/src/main/java/cx/ring/adapters/ConversationAdapter.kt b/jami-android/app/src/main/java/cx/ring/adapters/ConversationAdapter.kt index fab76cd9e441d5a710bc49e2b7ad89d2ab06e946..0561aae0ed3223cf3ed77cef5f13faf7b6cb315f 100644 --- a/jami-android/app/src/main/java/cx/ring/adapters/ConversationAdapter.kt +++ b/jami-android/app/src/main/java/cx/ring/adapters/ConversationAdapter.kt @@ -1545,8 +1545,8 @@ class ConversationAdapter( ContactEvent.Event.ADDED -> R.string.conversation_contact_added ContactEvent.Event.INVITED -> R.string.conversation_contact_invited ContactEvent.Event.REMOVED -> R.string.conversation_contact_left - ContactEvent.Event.BANNED -> R.string.conversation_contact_banned - ContactEvent.Event.UNBANNED -> R.string.conversation_contact_unbanned + ContactEvent.Event.BANNED -> R.string.conversation_contact_blocked + ContactEvent.Event.UNBANNED -> R.string.conversation_contact_unblocked else -> R.string.hist_contact_added }, vm.displayName) viewHolder.mMsgTxt?.text = "$eventString, $timestamp" @@ -1556,8 +1556,8 @@ class ConversationAdapter( ContactEvent.Event.ADDED -> R.string.hist_contact_added ContactEvent.Event.INVITED -> R.string.hist_contact_invited ContactEvent.Event.REMOVED -> R.string.hist_contact_left - ContactEvent.Event.BANNED -> R.string.hist_contact_banned - ContactEvent.Event.UNBANNED -> R.string.hist_contact_unbanned + ContactEvent.Event.BANNED -> R.string.hist_contact_blocked + ContactEvent.Event.UNBANNED -> R.string.hist_contact_unblocked ContactEvent.Event.INCOMING_REQUEST -> R.string.hist_invitation_received else -> R.string.hist_contact_added } diff --git a/jami-android/app/src/main/java/cx/ring/adapters/PluginsAdapter.kt b/jami-android/app/src/main/java/cx/ring/adapters/ExtensionsAdapter.kt similarity index 60% rename from jami-android/app/src/main/java/cx/ring/adapters/PluginsAdapter.kt rename to jami-android/app/src/main/java/cx/ring/adapters/ExtensionsAdapter.kt index ae7aca71ccbdb5f82d87b7f88c701314b6fd988d..6e63d14b2bf1d3f2dc629349c306d169e93c87ca 100644 --- a/jami-android/app/src/main/java/cx/ring/adapters/PluginsAdapter.kt +++ b/jami-android/app/src/main/java/cx/ring/adapters/ExtensionsAdapter.kt @@ -20,18 +20,18 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import cx.ring.R -import cx.ring.settings.pluginssettings.PluginDetails -import cx.ring.viewholders.PluginViewHolder +import cx.ring.settings.extensionssettings.ExtensionDetails +import cx.ring.viewholders.ExtensionViewHolder -class PluginsAdapter(private var mList: List<PluginDetails>, private val listener: PluginListItemListener, private val accountId: String ?= "") : - RecyclerView.Adapter<PluginViewHolder>() { +class ExtensionsAdapter(private var mList: List<ExtensionDetails>, private val listener: ExtensionListItemListener, private val accountId: String ?= "") : + RecyclerView.Adapter<ExtensionViewHolder>() { - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PluginViewHolder { - val view = LayoutInflater.from(parent.context).inflate(R.layout.frag_plugins_list_item, parent, false) - return PluginViewHolder(view, listener) + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ExtensionViewHolder { + val view = LayoutInflater.from(parent.context).inflate(R.layout.frag_extensions_list_item, parent, false) + return ExtensionViewHolder(view, listener) } - override fun onBindViewHolder(holderSetting: PluginViewHolder, position: Int) { + override fun onBindViewHolder(holderSetting: ExtensionViewHolder, position: Int) { for (item in mList) { item.accountId = accountId } @@ -40,10 +40,10 @@ class PluginsAdapter(private var mList: List<PluginDetails>, private val listene override fun getItemCount(): Int { if (accountId!!.isNotEmpty()) { - val copy = mutableListOf<PluginDetails>() + val copy = mutableListOf<ExtensionDetails>() for (item in mList) { item.accountId = accountId - if (item.pluginPreferences.isNotEmpty()) + if (item.extensionPreferences.isNotEmpty()) copy += item } mList = copy @@ -51,20 +51,20 @@ class PluginsAdapter(private var mList: List<PluginDetails>, private val listene return mList.size } - fun updatePluginsList(listPlugins: List<PluginDetails>) { - for (item in listPlugins) { + fun updateExtensionsList(listExtensions: List<ExtensionDetails>) { + for (item in listExtensions) { item.accountId = accountId } - mList = listPlugins + mList = listExtensions notifyDataSetChanged() } - interface PluginListItemListener { - fun onPluginItemClicked(pluginDetails: PluginDetails) - fun onPluginEnabled(pluginDetails: PluginDetails) + interface ExtensionListItemListener { + fun onExtensionItemClicked(extensionDetails: ExtensionDetails) + fun onExtensionEnabled(extensionDetails: ExtensionDetails) } companion object { - val TAG = PluginsAdapter::class.simpleName!! + val TAG = ExtensionsAdapter::class.simpleName!! } } \ No newline at end of file diff --git a/jami-android/app/src/main/java/cx/ring/client/CallActivity.kt b/jami-android/app/src/main/java/cx/ring/client/CallActivity.kt index 08914dab37272ec9b5d0953a673f27a10ad36654..f1ddfa24ae0a58d62f8ef67a9b80d11a7e1778d5 100644 --- a/jami-android/app/src/main/java/cx/ring/client/CallActivity.kt +++ b/jami-android/app/src/main/java/cx/ring/client/CallActivity.kt @@ -177,8 +177,8 @@ class CallActivity : AppCompatActivity() { callFragment.resetBottomSheetState() callFragment.moveBottomSheet(CallFragment.BottomSheetAnimation.DOWN) isFullscreen = true - if (!callFragment.isChoosePluginMode) { - //callFragment.toggleVideoPluginsCarousel(false) + if (!callFragment.isChooseExtensionMode) { + //callFragment.toggleVideoExtensionsCarousel(false) } handler?.removeCallbacks(onNoInteraction) } @@ -194,7 +194,7 @@ class CallActivity : AppCompatActivity() { WindowInsetsControllerCompat(window, this).show(WindowInsetsCompat.Type.systemBars()) } callFragment.moveBottomSheet(CallFragment.BottomSheetAnimation.UP) - //callFragment.toggleVideoPluginsCarousel(true) + //callFragment.toggleVideoExtensionsCarousel(true) restartNoInteractionTimer() } isFullscreen = false diff --git a/jami-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.kt b/jami-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.kt index e290b4f82e20a382476262f18eee696c8ecb7c61..712ba3a261628abc706df78328802ed403ec4cd7 100644 --- a/jami-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.kt +++ b/jami-android/app/src/main/java/cx/ring/client/ContactDetailsActivity.kt @@ -186,7 +186,7 @@ class ContactDetailsActivity : AppCompatActivity(), TabLayout.OnTabSelectedListe binding.title.setOnClickListener(null) binding.description.setOnClickListener(null) binding.contactImage.setOnClickListener(null) - binding.tabLayout.removeTabAt(TAB_MEMBER) + binding.tabLayout.removeTabAt(TAB_MEMBERS) } else if(vm.isGroup() and !conversation.isUserGroupAdmin()) { // Block conversation edition for non-admin users. binding.addMember.isVisible = true @@ -475,9 +475,9 @@ class ContactDetailsActivity : AppCompatActivity(), TabLayout.OnTabSelectedListe companion object { private val TAG = ContactDetailsActivity::class.simpleName!! - const val TAB_ABOUT = 0 - const val TAB_MEMBER = 1 - const val TAB_DOCUMENT = 2 + const val TAB_MEMBERS = 0 + const val TAB_FILES = 1 + const val TAB_SETTINGS = 2 const val REQUEST_CODE_CALL = 3 const val REQUEST_PERMISSION_READ_STORAGE = 114 } diff --git a/jami-android/app/src/main/java/cx/ring/plugins/PluginPreferences.kt b/jami-android/app/src/main/java/cx/ring/extensions/ExtensionPreferences.kt similarity index 52% rename from jami-android/app/src/main/java/cx/ring/plugins/PluginPreferences.kt rename to jami-android/app/src/main/java/cx/ring/extensions/ExtensionPreferences.kt index d2bd77968671dfae74d45649af201afe21f5d0b1..f56b3ed7b371d8fd827916a7c9c2931504eeb0eb 100644 --- a/jami-android/app/src/main/java/cx/ring/plugins/PluginPreferences.kt +++ b/jami-android/app/src/main/java/cx/ring/extensions/ExtensionPreferences.kt @@ -14,21 +14,21 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package cx.ring.plugins +package cx.ring.extensions import android.content.Context import android.view.View import androidx.preference.Preference import androidx.preference.PreferenceViewHolder import cx.ring.R -import cx.ring.databinding.FragPluginSettingsBinding -import cx.ring.settings.pluginssettings.PluginDetails +import cx.ring.databinding.FragExtensionSettingsBinding +import cx.ring.settings.extensionssettings.ExtensionDetails -class PluginPreferences : Preference { - private var mPluginDetails: PluginDetails? = null +class ExtensionPreferences : Preference { + private var mExtensionDetails: ExtensionDetails? = null private var resetClickListener: View.OnClickListener? = null private var installClickListener: View.OnClickListener? = null - private var openPluginSettingsListener: View.OnClickListener? = null + private var openExtensionSettingsListener: View.OnClickListener? = null private var mAccountId: String? = "" fun setResetClickListener(clickListener: View.OnClickListener?) { resetClickListener = clickListener @@ -38,42 +38,42 @@ class PluginPreferences : Preference { installClickListener = clickListener } - fun setPluginSettingsRedirect(clickListener: View.OnClickListener?) { - openPluginSettingsListener = clickListener + fun setExtensionSettingsRedirect(clickListener: View.OnClickListener?) { + openExtensionSettingsListener = clickListener } - constructor(context: Context?, pluginDetails: PluginDetails?, accountId: String? = "") : super( + constructor(context: Context?, extensionDetails: ExtensionDetails?, accountId: String? = "") : super( context!! ) { - mPluginDetails = pluginDetails + mExtensionDetails = extensionDetails mAccountId = accountId - layoutResource = R.layout.frag_plugin_settings + layoutResource = R.layout.frag_extension_settings } override fun onBindViewHolder(holder: PreferenceViewHolder) { super.onBindViewHolder(holder) - val binding = FragPluginSettingsBinding.bind(holder.itemView) - if (mPluginDetails != null) { - binding.pluginSettingIcon.setImageDrawable(mPluginDetails!!.icon) - binding.pluginSettingTitle.text = mPluginDetails!!.name + val binding = FragExtensionSettingsBinding.bind(holder.itemView) + if (mExtensionDetails != null) { + binding.extensionSettingIcon.setImageDrawable(mExtensionDetails!!.icon) + binding.extensionSettingTitle.text = mExtensionDetails!!.name } if (resetClickListener != null) { - binding.pluginSettingReset.setOnClickListener(resetClickListener) + binding.extensionSettingReset.setOnClickListener(resetClickListener) } if (mAccountId!!.isEmpty()) { if (installClickListener != null) { - binding.pluginSettingInstall.setOnClickListener(installClickListener) + binding.extensionSettingInstall.setOnClickListener(installClickListener) } } else { - binding.pluginSettingButtons.weightSum = 1.0F - binding.pluginSettingInstall.visibility = View.GONE + binding.extensionSettingButtons.weightSum = 1.0F + binding.extensionSettingInstall.visibility = View.GONE } if (mAccountId!!.isEmpty()) { - binding.pluginAccountSettingRedirect.setText(R.string.open_account_plugin_settings) + binding.extensionAccountSettingRedirect.setText(R.string.open_account_extension_settings) } else { - binding.pluginAccountSettingRedirect.setText(R.string.open_general_plugin_settings) + binding.extensionAccountSettingRedirect.setText(R.string.open_general_extension_settings) } - if (openPluginSettingsListener != null) - binding.pluginAccountSettingRedirect.setOnClickListener(openPluginSettingsListener) + if (openExtensionSettingsListener != null) + binding.extensionAccountSettingRedirect.setOnClickListener(openExtensionSettingsListener) } } \ No newline at end of file diff --git a/jami-android/app/src/main/java/cx/ring/plugins/PluginUtils.kt b/jami-android/app/src/main/java/cx/ring/extensions/ExtensionUtils.kt similarity index 64% rename from jami-android/app/src/main/java/cx/ring/plugins/PluginUtils.kt rename to jami-android/app/src/main/java/cx/ring/extensions/ExtensionUtils.kt index ef373e9e066f9bd20201f6aaf3d6228ca0b04f35..81b441105b0696154a326e76769e23dbf363d0c1 100644 --- a/jami-android/app/src/main/java/cx/ring/plugins/PluginUtils.kt +++ b/jami-android/app/src/main/java/cx/ring/extensions/ExtensionUtils.kt @@ -14,47 +14,47 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package cx.ring.plugins +package cx.ring.extensions import android.content.Context import android.util.Log import cx.ring.fragments.CallFragment -import cx.ring.settings.pluginssettings.PluginDetails +import cx.ring.settings.extensionssettings.ExtensionDetails import net.jami.daemon.JamiService import java.io.File import java.lang.StringBuilder import java.util.* -object PluginUtils { - val TAG = PluginUtils::class.simpleName!! +object ExtensionUtils { + val TAG = ExtensionUtils::class.simpleName!! /** - * Fetches the plugins folder in the internal storage for plugins subfolder - * Gathers the details of each plugin in a PluginDetails instance + * Fetches the extensions folder in the internal storage for extensions subfolder + * Gathers the details of each extension in a ExtensionDetails instance * @param mContext The current context - * @return List of PluginDetails + * @return List of ExtensionDetails */ - fun getInstalledPlugins(mContext: Context): List<PluginDetails> { - //tree(mContext.filesDir.toString() + File.separator + "plugins", 0) + fun getInstalledExtensions(mContext: Context): List<ExtensionDetails> { + //tree(mContext.filesDir.toString() + File.separator + "extensions", 0) //tree(mContext.cacheDir.absolutePath, 0) - val pluginsPaths: List<String> = JamiService.getInstalledPlugins() - val loadedPluginsPaths: List<String> = JamiService.getLoadedPlugins() - val pluginsList: MutableList<PluginDetails> = ArrayList(pluginsPaths.size) - for (pluginPath in pluginsPaths) { - val pluginFolder = File(pluginPath) - if (pluginFolder.isDirectory) { - val pluginHandler = retrieveHandlerId(pluginFolder.name) - pluginsList.add( - PluginDetails( - pluginFolder.name, - pluginFolder.absolutePath, - loadedPluginsPaths.contains(pluginPath), - pluginHandler + val extensionsPaths: List<String> = JamiService.getInstalledPlugins() + val loadedExtensionsPaths: List<String> = JamiService.getLoadedPlugins() + val extensionsList: MutableList<ExtensionDetails> = ArrayList(extensionsPaths.size) + for (extensionPath in extensionsPaths) { + val extensionFolder = File(extensionPath) + if (extensionFolder.isDirectory) { + val extensionHandler = retrieveHandlerId(extensionFolder.name) + extensionsList.add( + ExtensionDetails( + extensionFolder.name, + extensionFolder.absolutePath, + loadedExtensionsPaths.contains(extensionPath), + extensionHandler ) ) } } - return pluginsList + return extensionsList } private fun retrieveHandlerId(name: String): String{ @@ -62,7 +62,7 @@ object PluginUtils { val mediaHandlers = JamiService.getCallMediaHandlers().toList() for (callMediaHandler in mediaHandlers) { val pDetail = JamiService.getCallMediaHandlerDetails(callMediaHandler) - if (pDetail["pluginId"]!!.lowercase(Locale.getDefault()).contains(name.lowercase(Locale.getDefault()))) + if (pDetail["extensionId"]!!.lowercase(Locale.getDefault()).contains(name.lowercase(Locale.getDefault()))) { res = callMediaHandler!! } @@ -71,48 +71,48 @@ object PluginUtils { } /** - * Fetches the plugins folder in the internal storage for plugins subfolder - * Gathers the details of each plugin in a PluginDetails instance + * Fetches the extensions folder in the internal storage for extensions subfolder + * Gathers the details of each extension in a ExtensionDetails instance * @param mContext The current context * @param accountId The current account id * @param peerId The current conversation peer id - * @return List of PluginDetails + * @return List of ExtensionDetails */ - fun getChatHandlersDetails(mContext: Context, accountId: String, peerId: String): List<PluginDetails> { - //tree(mContext.filesDir.toString() + File.separator + "plugins", 0) + fun getChatHandlersDetails(mContext: Context, accountId: String, peerId: String): List<ExtensionDetails> { + //tree(mContext.filesDir.toString() + File.separator + "extensions", 0) //tree(mContext.cacheDir.absolutePath, 0) val chatHandlersId: List<String> = JamiService.getChatHandlers() val chatHandlerStatus: List<String> = JamiService.getChatHandlerStatus(accountId, peerId) - val handlersList: MutableList<PluginDetails> = ArrayList(chatHandlersId.size) + val handlersList: MutableList<ExtensionDetails> = ArrayList(chatHandlersId.size) for (handlerId in chatHandlersId) { val handlerDetails = JamiService.getChatHandlerDetails(handlerId) - var pluginPath = handlerDetails["pluginId"] - pluginPath = pluginPath!!.substring(0, pluginPath.lastIndexOf("/data")) + var extensionPath = handlerDetails["extensionId"] + extensionPath = extensionPath!!.substring(0, extensionPath.lastIndexOf("/data")) var enabled = false if (chatHandlerStatus.contains(handlerId)) { enabled = true } - handlersList.add(PluginDetails(handlerDetails["name"]!!, pluginPath, enabled, handlerId)) + handlersList.add(ExtensionDetails(handlerDetails["name"]!!, extensionPath, enabled, handlerId)) } return handlersList } /** - * Loads the so file and instantiates the plugin init function (toggle on) - * @param path root path of the plugin + * Loads the so file and instantiates the extension init function (toggle on) + * @param path root path of the extension * @return true if loaded */ - fun loadPlugin(path: String): Boolean { + fun loadExtension(path: String): Boolean { return JamiService.loadPlugin(path) } /** - * Toggles the plugin off (destroying any objects created by the plugin) + * Toggles the extension off (destroying any objects created by the extension) * then unloads the so file - * @param path root path of the plugin + * @param path root path of the extension * @return true if unloaded */ - fun unloadPlugin(path: String): Boolean { + fun unloadExtension(path: String): Boolean { return JamiService.unloadPlugin(path) } diff --git a/jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPicker.java b/jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPicker.java similarity index 99% rename from jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPicker.java rename to jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPicker.java index 6e3d4465cf3e6cd1e99150f32c697300738672b2..6626826c7756ca80a96598d38902bce3563b7892 100644 --- a/jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPicker.java +++ b/jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPicker.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package cx.ring.plugins.RecyclerPicker; +package cx.ring.extensions.RecyclerPicker; import android.content.Context; import android.graphics.drawable.Drawable; diff --git a/jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPickerAdapter.java b/jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPickerAdapter.java similarity index 98% rename from jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPickerAdapter.java rename to jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPickerAdapter.java index 3cd0dfaa862118fdf93f4028ec221fef4d01917f..2f8bae1d8311ea0107b14a4886fc034f185031f9 100644 --- a/jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPickerAdapter.java +++ b/jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPickerAdapter.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package cx.ring.plugins.RecyclerPicker; +package cx.ring.extensions.RecyclerPicker; import android.content.Context; import android.graphics.drawable.Drawable; diff --git a/jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPickerLayoutManager.kt b/jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPickerLayoutManager.kt similarity index 98% rename from jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPickerLayoutManager.kt rename to jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPickerLayoutManager.kt index aba16b5c06ef0fea3b9ab437199edd0f24c52130..ca58bccbbec8ac80b7e5769f298750a3aa2fdc49 100644 --- a/jami-android/app/src/main/java/cx/ring/plugins/RecyclerPicker/RecyclerPickerLayoutManager.kt +++ b/jami-android/app/src/main/java/cx/ring/extensions/RecyclerPicker/RecyclerPickerLayoutManager.kt @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package cx.ring.plugins.RecyclerPicker +package cx.ring.extensions.RecyclerPicker import android.content.Context import androidx.recyclerview.widget.LinearLayoutManager diff --git a/jami-android/app/src/main/java/cx/ring/fragments/CallFragment.kt b/jami-android/app/src/main/java/cx/ring/fragments/CallFragment.kt index 42889ac78b9a05d8263b2c4fc7de5cef00e3d889..50d5e4cbd5d1ca2dd5d7dad075c5d69d9689bd64 100644 --- a/jami-android/app/src/main/java/cx/ring/fragments/CallFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/fragments/CallFragment.kt @@ -59,13 +59,13 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior import cx.ring.R import cx.ring.adapters.ConfParticipantAdapter import cx.ring.adapters.ConfParticipantAdapter.ConfParticipantSelected -import cx.ring.adapters.PluginsAdapter +import cx.ring.adapters.ExtensionsAdapter import cx.ring.client.* import cx.ring.databinding.FragCallBinding import cx.ring.mvp.BaseSupportFragment -import cx.ring.plugins.PluginUtils +import cx.ring.extensions.ExtensionUtils import cx.ring.service.DRingService -import cx.ring.settings.pluginssettings.PluginDetails +import cx.ring.settings.extensionssettings.ExtensionDetails import cx.ring.utils.ActionHelper import cx.ring.utils.ContentUri import cx.ring.utils.ConversationPath @@ -108,9 +108,9 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, private var mBackstackLost = false private var confAdapter: ConfParticipantAdapter? = null private var mConferenceMode = false - var isChoosePluginMode = false + var isChooseExtensionMode = false private set - private var callMediaHandlers: List<PluginDetails> ?= null + private var callMediaHandlers: List<ExtensionDetails> ?= null private val animation = ValueAnimator().apply { duration = 150 } private var previewDrag: PointF? = null private val previewSnapAnimation = ValueAnimator().apply { @@ -128,7 +128,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, lateinit var mDeviceRuntimeService: DeviceRuntimeService private val mCompositeDisposable = CompositeDisposable() private var bottomSheetParams: BottomSheetBehavior<View>? = null - private var pluginsAdapter: PluginsAdapter? = null + private var extensionsAdapter: ExtensionsAdapter? = null private val cameraPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted -> if (isGranted) { @@ -181,7 +181,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, b.addParticipantBtn.setOnClickListener { addParticipantClicked() } b.callDialpadBtn.setOnClickListener { displayDialPadKeyboard() } b.callRaiseHandBtn.setOnClickListener { raiseHandClicked() } - b.callPluginsBtn.setOnClickListener { pluginsButtonClicked() } + b.callExtensionsBtn.setOnClickListener { extensionsButtonClicked() } b.callCameraFlipBtn.setOnClickListener { cameraFlip() } bottomSheetParams = binding?.callOptionsBottomSheet?.let { BottomSheetBehavior.from(it) } }.root @@ -253,16 +253,16 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, disableTransitionType(LayoutTransition.CHANGE_APPEARING) } - binding.pluginPreviewSurface.holder.setFormat(PixelFormat.RGBX_8888) - binding.pluginPreviewSurface.holder.addCallback(object : SurfaceHolder.Callback { + binding.extensionPreviewSurface.holder.setFormat(PixelFormat.RGBX_8888) + binding.extensionPreviewSurface.holder.addCallback(object : SurfaceHolder.Callback { override fun surfaceCreated(holder: SurfaceHolder) { - presenter.pluginSurfaceCreated(holder) + presenter.extensionSurfaceCreated(holder) } override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {} override fun surfaceDestroyed(holder: SurfaceHolder) { - presenter.pluginSurfaceDestroyed() + presenter.extensionSurfaceDestroyed() } }) @@ -286,10 +286,10 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, binding.callSpeakerBtn.isChecked = presenter.isSpeakerphoneOn() binding.callMicBtn.isChecked = presenter.isMicrophoneMuted - binding.pluginPreviewSurface.addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ -> + binding.extensionPreviewSurface.addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ -> configureTransform(mPreviewSurfaceWidth, mPreviewSurfaceHeight) } - binding.pluginPreviewContainer.setOnTouchListener { v: View, event: MotionEvent -> + binding.extensionPreviewContainer.setOnTouchListener { v: View, event: MotionEvent -> val action = event.actionMasked val parent = v.parent as RelativeLayout val params = v.layoutParams as RelativeLayout.LayoutParams @@ -321,7 +321,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, -(currentYPosition + v.height - event.y.toInt()) ) v.layoutParams = params - val outPosition = binding.pluginPreviewContainer.width * 0.85f + val outPosition = binding.extensionPreviewContainer.width * 0.85f var drapOut = 0f if (currentXPosition < 0) { drapOut = min(1f, -currentXPosition / outPosition) @@ -342,7 +342,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, var mr = 0; var mt = 0; var mb = 0 - val hp = binding.pluginPreviewHandle.layoutParams as FrameLayout.LayoutParams + val hp = binding.extensionPreviewHandle.layoutParams as FrameLayout.LayoutParams if (params.leftMargin + v.width / 2 > parent.width / 2) { params.removeRule(RelativeLayout.ALIGN_PARENT_LEFT) params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT) @@ -356,7 +356,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, previewPosition = PreviewPosition.LEFT hp.gravity = Gravity.CENTER_VERTICAL or Gravity.RIGHT } - binding.pluginPreviewHandle.layoutParams = hp + binding.extensionPreviewHandle.layoutParams = hp if (params.topMargin + v.height / 2 > parent.height / 2) { params.removeRule(RelativeLayout.ALIGN_PARENT_TOP) params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM) @@ -372,7 +372,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, previewMargins[3] = mb params.setMargins(ml, mt, mr, mb) v.layoutParams = params - val outPosition = binding.pluginPreviewContainer.width * 0.85f + val outPosition = binding.extensionPreviewContainer.width * 0.85f previewHiddenState = when { currentXPosition < 0 -> min(1f, -currentXPosition / outPosition) currentXPosition + v.width > parent.width -> min( @@ -530,9 +530,9 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, private fun setPreviewDragHiddenState(hiddenState: Float) { binding?.let { binding -> binding.previewSurface.alpha = 1f - 3 * hiddenState / 4 - binding.pluginPreviewSurface.alpha = 1f - 3 * hiddenState / 4 + binding.extensionPreviewSurface.alpha = 1f - 3 * hiddenState / 4 binding.previewHandle.alpha = hiddenState - binding.pluginPreviewHandle.alpha = hiddenState + binding.extensionPreviewHandle.alpha = hiddenState } } @@ -662,7 +662,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, (previewMargins[3] * r + f).toInt() ) binding.previewContainer.layoutParams = params - binding.pluginPreviewContainer.layoutParams = params + binding.extensionPreviewContainer.layoutParams = params } /** @@ -744,11 +744,11 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, override fun displayLocalVideo(display: Boolean) { Log.w(TAG, "displayLocalVideo -> $display") binding?.apply { - val pluginMode = isChoosePluginMode - previewContainer.isVisible = !pluginMode && display - pluginPreviewContainer.isVisible = pluginMode && display - pluginPreviewSurface.isVisible = pluginMode && display - if (pluginMode) pluginPreviewSurface.setZOrderMediaOverlay(true) + val extensionMode = isChooseExtensionMode + previewContainer.isVisible = !extensionMode && display + extensionPreviewContainer.isVisible = extensionMode && display + extensionPreviewSurface.isVisible = extensionMode && display + if (extensionMode) extensionPreviewSurface.setZOrderMediaOverlay(true) } } @@ -756,7 +756,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, Log.w(TAG, "displayHangupButton $display") /* binding?.apply { confControlGroup.visibility = when { !mConferenceMode -> View.GONE - display && !isChoosePluginMode -> View.VISIBLE + display && !isChooseExtensionMode -> View.VISIBLE else -> View.INVISIBLE }} */ } @@ -876,28 +876,28 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, binding.root.post { setBottomSheet() } if(callMediaHandlers == null) - callMediaHandlers = PluginUtils.getInstalledPlugins(binding.pluginslistContainer.context) + callMediaHandlers = ExtensionUtils.getInstalledExtensions(binding.extensionsListContainer.context) .filter { !it.handlerId.isNullOrEmpty() } - pluginsAdapter = PluginsAdapter( + extensionsAdapter = ExtensionsAdapter( mList = callMediaHandlers!!, - listener = object : PluginsAdapter.PluginListItemListener { - override fun onPluginItemClicked(pluginDetails: PluginDetails) {} - - override fun onPluginEnabled(pluginDetails: PluginDetails) { - pluginDetails.isRunning = !pluginDetails.isRunning - if (!isChoosePluginMode) { - presenter.startPlugin(pluginDetails.handlerId!!) - isChoosePluginMode = true + listener = object : ExtensionsAdapter.ExtensionListItemListener { + override fun onExtensionItemClicked(extensionDetails: ExtensionDetails) {} + + override fun onExtensionEnabled(extensionDetails: ExtensionDetails) { + extensionDetails.isRunning = !extensionDetails.isRunning + if (!isChooseExtensionMode) { + presenter.startExtension(extensionDetails.handlerId!!) + isChooseExtensionMode = true } else { - if (pluginDetails.isRunning) { - presenter.toggleCallMediaHandler(pluginDetails.handlerId!!, true) + if (extensionDetails.isRunning) { + presenter.toggleCallMediaHandler(extensionDetails.handlerId!!, true) } else { - presenter.toggleCallMediaHandler(pluginDetails.handlerId!!, false) + presenter.toggleCallMediaHandler(extensionDetails.handlerId!!, false) for (handler in callMediaHandlers!!) if (handler.isRunning) break else { - presenter.stopPlugin() - isChoosePluginMode = false + presenter.stopExtension() + isChooseExtensionMode = false } } } @@ -905,7 +905,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, }, accountId = if (participantInfo.isNotEmpty()) participantInfo[0].call?.account else null ) - binding.pluginslistContainer.adapter = pluginsAdapter + binding.extensionsListContainer.adapter = extensionsAdapter } private fun generateParticipantOverlay(participantsInfo: List<ParticipantInfo>) { @@ -951,13 +951,13 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, isMicrophoneMuted: Boolean, hasMultipleCamera: Boolean, canDial: Boolean, - showPluginBtn: Boolean, + showExtensionBtn: Boolean, onGoingCall: Boolean, hasActiveCameraVideo: Boolean, hasActiveScreenShare: Boolean ) { binding?.apply { - pluginsBtnContainer.isVisible = showPluginBtn + extensionsBtnContainer.isVisible = showExtensionBtn raiseHandBtnContainer.isVisible = mConferenceMode callDialpadBtn.isClickable = canDial dialpadBtnContainer.isVisible = canDial @@ -1126,8 +1126,8 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, if (previewWidth != null ) mPreviewWidth = previewWidth if (previewHeight != null ) mPreviewHeight = previewHeight val flip = rot % 180 != 0 - if (isChoosePluginMode) { - binding?.pluginPreviewSurface?.setAspectRatio( + if (isChooseExtensionMode) { + binding?.extensionPreviewSurface?.setAspectRatio( if (flip) mPreviewHeight else mPreviewWidth, if (flip) mPreviewWidth else mPreviewHeight ) @@ -1159,7 +1159,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, } else if (Surface.ROTATION_180 == rotation) { matrix.postRotate(180f, centerX, centerY) } - if (!isChoosePluginMode) { + if (!isChooseExtensionMode) { binding.previewSurface.setTransform(matrix) } } @@ -1267,8 +1267,8 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, private fun startScreenShare(resultCode: Int, data: Intent) { if (presenter.startScreenShare(resultCode, data)) { - if (isChoosePluginMode) { - binding!!.pluginPreviewSurface.visibility = View.GONE + if (isChooseExtensionMode) { + binding!!.extensionPreviewSurface.visibility = View.GONE displayLocalVideo(false) } else { binding!!.previewContainer.visibility = View.GONE @@ -1350,7 +1350,7 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, presenter.toggleButtonClicked() } - override fun displayPluginsButton(): Boolean { + override fun displayExtensionsButton(): Boolean { return JamiService.getPluginsEnabled() && JamiService.getCallMediaHandlers().size > 0 } @@ -1359,10 +1359,10 @@ class CallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView, return mProjectionManager.getMediaProjection(resultCode, dataIntent) } - public fun pluginsButtonClicked() { + public fun extensionsButtonClicked() { val binding = binding ?: return - if(binding.callPluginsBtn.isChecked){ - binding.confControlGroup.adapter = pluginsAdapter + if(binding.callExtensionsBtn.isChecked){ + binding.confControlGroup.adapter = extensionsAdapter } else { binding.confControlGroup.adapter = confAdapter } diff --git a/jami-android/app/src/main/java/cx/ring/fragments/ConversationFragment.kt b/jami-android/app/src/main/java/cx/ring/fragments/ConversationFragment.kt index cb2e1ef06c85daeed37b7d3fb57feb1fbc8f6313..b18d2162123d862ad27bc83ad64bd34c681fcb3a 100644 --- a/jami-android/app/src/main/java/cx/ring/fragments/ConversationFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/fragments/ConversationFragment.kt @@ -400,20 +400,20 @@ class ConversationFragment : BaseSupportFragment<ConversationPresenter, Conversa R.id.conv_send_file -> openFilePicker() R.id.conv_select_media -> openGallery() R.id.conv_share_location -> shareLocation() - R.id.chat_plugins -> presenter.showPluginListHandlers() + R.id.chat_extensions -> presenter.showExtensionListHandlers() } false } - popup.menu.findItem(R.id.chat_plugins).isVisible = JamiService.getPluginsEnabled() && !JamiService.getChatHandlers().isEmpty() + popup.menu.findItem(R.id.chat_extensions).isVisible = JamiService.getPluginsEnabled() && !JamiService.getChatHandlers().isEmpty() popup.setForceShowIcon(true) popup.show() } - override fun showPluginListHandlers(accountId: String, contactId: String) { - Log.w(TAG, "show Plugin Chat Handlers List") - val fragment = PluginHandlersListFragment.newInstance(accountId, contactId) + override fun showExtensionListHandlers(accountId: String, contactId: String) { + Log.w(TAG, "show Extension Chat Handlers List") + val fragment = ExtensionHandlersListFragment.newInstance(accountId, contactId) childFragmentManager.beginTransaction() - .add(R.id.pluginListHandlers, fragment, PluginHandlersListFragment.TAG) + .add(R.id.extensionListHandlers, fragment, ExtensionHandlersListFragment.TAG) .commit() binding?.let { binding -> val params = binding.mapCard.layoutParams as RelativeLayout.LayoutParams @@ -426,11 +426,11 @@ class ConversationFragment : BaseSupportFragment<ConversationPresenter, Conversa } } - fun hidePluginListHandlers() { + fun hideExtensionListHandlers() { if (binding!!.mapCard.visibility != View.GONE) { binding!!.mapCard.visibility = View.GONE val fragmentManager = childFragmentManager - val fragment = fragmentManager.findFragmentById(R.id.pluginListHandlers) + val fragment = fragmentManager.findFragmentById(R.id.extensionListHandlers) if (fragment != null) { fragmentManager.beginTransaction() .remove(fragment) diff --git a/jami-android/app/src/main/java/cx/ring/fragments/PluginHandlersListFragment.kt b/jami-android/app/src/main/java/cx/ring/fragments/PluginHandlersListFragment.kt index 0c583f1d4fbbd20eab51473dd5997cec172c8d9b..f5efc6bb92a312eed40a54066b55ff59c62f28d7 100644 --- a/jami-android/app/src/main/java/cx/ring/fragments/PluginHandlersListFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/fragments/PluginHandlersListFragment.kt @@ -22,16 +22,16 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment import cx.ring.account.AccountEditionFragment -import cx.ring.databinding.FragPluginHandlersListBinding -import cx.ring.plugins.PluginUtils -import cx.ring.settings.pluginssettings.PluginDetails -import cx.ring.settings.pluginssettings.PluginsListAdapter -import cx.ring.settings.pluginssettings.PluginsListAdapter.PluginListItemListener +import cx.ring.databinding.FragExtensionHandlersListBinding +import cx.ring.extensions.ExtensionUtils +import cx.ring.settings.extensionssettings.ExtensionDetails +import cx.ring.settings.extensionssettings.ExtensionsListAdapter +import cx.ring.settings.extensionssettings.ExtensionsListAdapter.ExtensionListItemListener import cx.ring.utils.ConversationPath import net.jami.daemon.JamiService -class PluginHandlersListFragment : Fragment(), PluginListItemListener { - private var binding: FragPluginHandlersListBinding? = null +class ExtensionHandlersListFragment : Fragment(), ExtensionListItemListener { + private var binding: FragExtensionHandlersListBinding? = null private lateinit var mPath: ConversationPath override fun onCreate(savedInstanceState: Bundle?) { @@ -40,10 +40,10 @@ class PluginHandlersListFragment : Fragment(), PluginListItemListener { } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { - return FragPluginHandlersListBinding.inflate(inflater, container, false).also { b -> + return FragExtensionHandlersListBinding.inflate(inflater, container, false).also { b -> b.handlerList.setHasFixedSize(true) - b.handlerList.adapter = PluginsListAdapter( - PluginUtils.getChatHandlersDetails(b.handlerList.context, mPath.accountId, mPath.conversationId.removePrefix("swarm:")), this, "") + b.handlerList.adapter = ExtensionsListAdapter( + ExtensionUtils.getChatHandlersDetails(b.handlerList.context, mPath.accountId, mPath.conversationId.removePrefix("swarm:")), this, "") binding = b }.root } @@ -55,27 +55,27 @@ class PluginHandlersListFragment : Fragment(), PluginListItemListener { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding!!.chatPluginsToolbar.visibility = View.VISIBLE - binding!!.chatPluginsToolbar.setOnClickListener { v: View? -> + binding!!.chatExtensionsToolbar.visibility = View.VISIBLE + binding!!.chatExtensionsToolbar.setOnClickListener { v: View? -> val fragment = parentFragment if (fragment is ConversationFragment) { - fragment.hidePluginListHandlers() + fragment.hideExtensionListHandlers() } } } - override fun onPluginItemClicked(pluginDetails: PluginDetails) { - JamiService.toggleChatHandler(pluginDetails.handlerId, mPath.accountId, mPath.conversationId.removePrefix("swarm:"), pluginDetails.isEnabled) + override fun onExtensionItemClicked(extensionDetails: ExtensionDetails) { + JamiService.toggleChatHandler(extensionDetails.handlerId, mPath.accountId, mPath.conversationId.removePrefix("swarm:"), extensionDetails.isEnabled) } - override fun onPluginEnabled(pluginDetails: PluginDetails) { - JamiService.toggleChatHandler(pluginDetails.handlerId, mPath.accountId, mPath.conversationId.removePrefix("swarm:"), pluginDetails.isEnabled) + override fun onExtensionEnabled(extensionDetails: ExtensionDetails) { + JamiService.toggleChatHandler(extensionDetails.handlerId, mPath.accountId, mPath.conversationId.removePrefix("swarm:"), extensionDetails.isEnabled) } companion object { - val TAG = PluginHandlersListFragment::class.simpleName!! - fun newInstance(accountId: String, peerId: String): PluginHandlersListFragment { - val fragment = PluginHandlersListFragment() + val TAG = ExtensionHandlersListFragment::class.simpleName!! + fun newInstance(accountId: String, peerId: String): ExtensionHandlersListFragment { + val fragment = ExtensionHandlersListFragment() fragment.arguments = ConversationPath.toBundle(accountId, peerId) return fragment } diff --git a/jami-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.kt b/jami-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.kt index f4f13c92c5e28dbd1974f1bc43766c8f1b641540..48aa341f0e9986f0ee04fe4856f95a63708ba1a8 100644 --- a/jami-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.kt +++ b/jami-android/app/src/main/java/cx/ring/services/DeviceRuntimeServiceImpl.kt @@ -48,10 +48,10 @@ class DeviceRuntimeServiceImpl( private val logService: LogService ) : DeviceRuntimeService() { private fun copyAssets() { - val pluginsPath = File(mContext.filesDir, "plugins") - Log.w(TAG, "Plugins: " + pluginsPath.absolutePath) - // Overwrite existing plugins folder in order to use newer plugins - AndroidFileUtils.copyAssetFolder(mContext.assets, "plugins", pluginsPath) + val extensionsPath = File(mContext.filesDir, "extensions") + Log.w(TAG, "Extensions: " + extensionsPath.absolutePath) + // Overwrite existing extensions folder in order to use newer extensions + AndroidFileUtils.copyAssetFolder(mContext.assets, "extensions", extensionsPath) } override fun loadNativeLibrary() { diff --git a/jami-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.kt b/jami-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.kt index 3c74d570379661aa29bc347933cbede4e6a2e7a2..b9484723bb08f2e4383aa55f14b722c62005b862 100644 --- a/jami-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.kt +++ b/jami-android/app/src/main/java/cx/ring/services/HardwareServiceImpl.kt @@ -74,9 +74,9 @@ class HardwareServiceImpl( private val shouldCapture = HashSet<String>() private var mShouldSpeakerphone = false private val mHasSpeakerPhone: Boolean by lazy { hasSpeakerphone() } - private var mIsChoosePlugin = false + private var mIsChooseExtension = false private var mMediaHandlerId: String? = null - private var mPluginCallId: String? = null + private var mExtensionCallId: String? = null override fun initVideo(): Completable = cameraService.init() @@ -452,7 +452,7 @@ class HardwareServiceImpl( } override fun startMediaHandler(mediaHandlerId: String?) { - mIsChoosePlugin = true + mIsChooseExtension = true mMediaHandlerId = mediaHandlerId } @@ -461,13 +461,13 @@ class HardwareServiceImpl( } override fun stopMediaHandler() { - mIsChoosePlugin = false + mIsChooseExtension = false mMediaHandlerId = null } override fun startCapture(camId: String?) { val cam = camId ?: cameraService.switchInput(true) ?: return - Log.i(TAG, "startCapture > camId: $camId, cam: $cam, mIsChoosePlugin: $mIsChoosePlugin") + Log.i(TAG, "startCapture > camId: $camId, cam: $cam, mIsChooseExtension: $mIsChooseExtension") shouldCapture.add(cam) val videoParams = cameraService.getParams(cam) ?: return if (videoParams.isCapturing) return @@ -481,7 +481,7 @@ class HardwareServiceImpl( } val conf = mCameraPreviewCall.get() val useHardwareCodec = - mPreferenceService.isHardwareAccelerationEnabled && (conf == null || !conf.isConference) && !mIsChoosePlugin + mPreferenceService.isHardwareAccelerationEnabled && (conf == null || !conf.isConference) && !mIsChooseExtension if (conf != null && useHardwareCodec) { val call = conf.call if (call != null) { @@ -508,15 +508,15 @@ class HardwareServiceImpl( object : CameraListener { override fun onOpened() { val currentCall = conf?.id ?: return - if (mPluginCallId != null && mPluginCallId != currentCall) { + if (mExtensionCallId != null && mExtensionCallId != currentCall) { if (mMediaHandlerId != null) { JamiService.toggleCallMediaHandler(mMediaHandlerId, currentCall,false) } - mIsChoosePlugin = false + mIsChooseExtension = false mMediaHandlerId = null - mPluginCallId = null - } else if (mIsChoosePlugin && mMediaHandlerId != null) { - mPluginCallId = currentCall + mExtensionCallId = null + } else if (mIsChooseExtension && mMediaHandlerId != null) { + mExtensionCallId = currentCall toggleMediaHandler(currentCall) } } @@ -694,7 +694,7 @@ class HardwareServiceImpl( private val TAG = HardwareServiceImpl::class.simpleName!! private var mCameraPreviewSurface = WeakReference<TextureView>(null) - private var mCameraPluginPreviewSurface = WeakReference<SurfaceView>(null) + private var mCameraExtensionPreviewSurface = WeakReference<SurfaceView>(null) private var mCameraPreviewCall = WeakReference<Conference>(null) private val videoSurfaces = HashMap<String, WeakReference<SurfaceHolder>>() } diff --git a/jami-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.kt b/jami-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.kt index 2725fd015a3d1c9dbfa4d102e2d2971146aaa83f..e8db12a17d3c1249d06e2c1957c1178728bcb1c6 100644 --- a/jami-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.kt +++ b/jami-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.kt @@ -217,7 +217,7 @@ class SharedPreferencesServiceImpl(private val context: Context, accountService: private const val PREF_ON_STARTUP = "on_startup" const val PREF_DARK_MODE = "darkMode" private const val PREF_ACCEPT_IN_MAX_SIZE = "acceptIncomingFilesMaxSize" - const val PREF_PLUGINS = "plugins" + const val PREF_EXTENSIONS = "extensions" private const val PREF_LOG_IS_ACTIVE = "log_is_active" fun getConversationPreferences(context: Context, accountId: String, conversationUri: Uri): SharedPreferences = diff --git a/jami-android/app/src/main/java/cx/ring/settings/SettingsFragment.kt b/jami-android/app/src/main/java/cx/ring/settings/SettingsFragment.kt index 68ccf1fc850b60e05b21a0964bb80a215a980b5a..483047a1c6c58206379c4c72d758738fd0506868 100644 --- a/jami-android/app/src/main/java/cx/ring/settings/SettingsFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/settings/SettingsFragment.kt @@ -36,10 +36,10 @@ import cx.ring.client.LogsActivity import cx.ring.databinding.FragSettingsBinding import cx.ring.interfaces.AppBarStateListener import cx.ring.mvp.BaseSupportFragment -import cx.ring.settings.pluginssettings.PluginDetails -import cx.ring.settings.pluginssettings.PluginPathPreferenceFragment -import cx.ring.settings.pluginssettings.PluginSettingsFragment -import cx.ring.settings.pluginssettings.PluginsListSettingsFragment +import cx.ring.settings.extensionssettings.ExtensionDetails +import cx.ring.settings.extensionssettings.ExtensionPathPreferenceFragment +import cx.ring.settings.extensionssettings.ExtensionSettingsFragment +import cx.ring.settings.extensionssettings.ExtensionsListSettingsFragment import cx.ring.utils.ActionHelper.openJamiDonateWebPage import dagger.hilt.android.AndroidEntryPoint import net.jami.daemon.JamiService @@ -86,15 +86,15 @@ class SettingsFragment : } } - settingsPluginsLayout.setOnClickListener { + settingsExtensionsLayout.setOnClickListener { if (JamiService.getPluginsEnabled()) { - goToPluginsListSettings() + goToExtensionsListSettings() } } settingsDarkTheme.setOnCheckedChangeListener { _, isChecked: Boolean -> presenter.darkMode = isChecked } - settingsPluginsSwitch.setOnCheckedChangeListener { _, isChecked: Boolean -> + settingsExtensionsSwitch.setOnCheckedChangeListener { _, isChecked: Boolean -> JamiService.setPluginsEnabled(isChecked) } val save = CompoundButton.OnCheckedChangeListener { _, isChecked: Boolean -> @@ -134,7 +134,7 @@ class SettingsFragment : activity?.onBackPressedDispatcher?.onBackPressed() } settingsDarkTheme.isChecked = presenter.darkMode - settingsPluginsSwitch.isChecked = JamiService.getPluginsEnabled() + settingsExtensionsSwitch.isChecked = JamiService.getPluginsEnabled() if (TextUtils.isEmpty(JamiApplication.instance?.pushToken)) { settingsPushNotificationsLayout.visibility = View.GONE } @@ -154,43 +154,43 @@ class SettingsFragment : backPressedCallback.isEnabled = true } - private fun goToPluginsListSettings(accountId: String? = "") { + private fun goToExtensionsListSettings(accountId: String? = "") { val binding = binding ?: return - val content = PluginsListSettingsFragment.newInstance(accountId) + val content = ExtensionsListSettingsFragment.newInstance(accountId) childFragmentManager .beginTransaction() .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) - .replace(R.id.fragment_container, content, PLUGINS_LIST_SETTINGS_TAG) - .addToBackStack(PLUGINS_LIST_SETTINGS_TAG).commit() + .replace(R.id.fragment_container, content, EXTENSIONS_LIST_SETTINGS_TAG) + .addToBackStack(EXTENSIONS_LIST_SETTINGS_TAG).commit() binding.fragmentContainer.isVisible = true binding.donateButton.isVisible = false backPressedCallback.isEnabled = true } - fun goToPluginSettings(pluginDetails: PluginDetails) { - val content = PluginSettingsFragment.newInstance(pluginDetails) + fun goToExtensionSettings(extensionDetails: ExtensionDetails) { + val content = ExtensionSettingsFragment.newInstance(extensionDetails) val fragmentTransaction = childFragmentManager .beginTransaction() .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) - .replace(R.id.fragment_container, content, PLUGIN_SETTINGS_TAG) + .replace(R.id.fragment_container, content, EXTENSION_SETTINGS_TAG) val backStackEntryCount = childFragmentManager.backStackEntryCount if(backStackEntryCount > 0) { val topBackStackEntry = childFragmentManager.getBackStackEntryAt(backStackEntryCount-1) - if (topBackStackEntry.name != PLUGIN_SETTINGS_TAG) - fragmentTransaction.addToBackStack(PLUGIN_SETTINGS_TAG) + if (topBackStackEntry.name != EXTENSION_SETTINGS_TAG) + fragmentTransaction.addToBackStack(EXTENSION_SETTINGS_TAG) } fragmentTransaction.commit() binding!!.fragmentContainer.isVisible = true backPressedCallback.isEnabled = true } - fun goToPluginPathPreference(pluginDetails: PluginDetails, preferenceKey: String) { - val content = PluginPathPreferenceFragment.newInstance(pluginDetails, preferenceKey) + fun goToExtensionPathPreference(extensionDetails: ExtensionDetails, preferenceKey: String) { + val content = ExtensionPathPreferenceFragment.newInstance(extensionDetails, preferenceKey) childFragmentManager .beginTransaction() .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) - .replace(R.id.fragment_container, content, PLUGIN_PATH_PREFERENCE_TAG) - .addToBackStack(PLUGIN_PATH_PREFERENCE_TAG).commit() + .replace(R.id.fragment_container, content, EXTENSION_PATH_PREFERENCE_TAG) + .addToBackStack(EXTENSION_PATH_PREFERENCE_TAG).commit() binding!!.fragmentContainer.isVisible = true backPressedCallback.isEnabled = true } @@ -304,8 +304,8 @@ class SettingsFragment : const val NOTIFICATION_PUBLIC = 1 const val NOTIFICATION_SECRET = 2 const val VIDEO_SETTINGS_TAG = "VideoPrefs" - const val PLUGINS_LIST_SETTINGS_TAG = "PluginsListSettings" - const val PLUGIN_SETTINGS_TAG = "PluginSettings" - const val PLUGIN_PATH_PREFERENCE_TAG = "PluginPathPreference" + const val EXTENSIONS_LIST_SETTINGS_TAG = "ExtensionsListSettings" + const val EXTENSION_SETTINGS_TAG = "ExtensionSettings" + const val EXTENSION_PATH_PREFERENCE_TAG = "ExtensionPathPreference" } } \ No newline at end of file diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginDetails.kt b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionDetails.kt similarity index 74% rename from jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginDetails.kt rename to jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionDetails.kt index 8e5711606929e085ed1d7afbfcfa97ee7f34bfdb..fa950acedb8ab61348ffefdb61a7ffd7e12d6a1e 100644 --- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginDetails.kt +++ b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionDetails.kt @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package cx.ring.settings.pluginssettings +package cx.ring.settings.extensionssettings import android.graphics.drawable.Drawable import android.util.Log @@ -25,10 +25,10 @@ import java.io.File import java.util.* /** - * Class that contains PluginDetails like name, rootPath + * Class that contains ExtensionDetails like name, rootPath */ -class PluginDetails(val name: String, val rootPath: String, var isEnabled: Boolean, var handlerId: String?= null, var accountId: String? = "") { - private val details: Map<String, String> = pluginDetails +class ExtensionDetails(val name: String, val rootPath: String, var isEnabled: Boolean, var handlerId: String?= null, var accountId: String? = "") { + private val details: Map<String, String> = extensionDetails var icon: Drawable? = null private set var isRunning: Boolean = false @@ -45,19 +45,19 @@ class PluginDetails(val name: String, val rootPath: String, var isEnabled: Boole } } - private val pluginDetails: Map<String, String> + private val extensionDetails: Map<String, String> get() = JamiService.getPluginDetails(rootPath).toNative() - val pluginPreferences: List<Map<String, String>> + val extensionPreferences: List<Map<String, String>> get() = JamiService.getPluginPreferences(rootPath, accountId).toNative() - val pluginPreferencesValues: Map<String, String> + val extensionPreferencesValues: Map<String, String> get() = JamiService.getPluginPreferencesValues(rootPath, accountId) - fun setPluginPreference(key: String, value: String): Boolean { + fun setExtensionPreference(key: String, value: String): Boolean { return JamiService.setPluginPreference(rootPath, accountId, key, value) } companion object { - val TAG = PluginDetails::class.simpleName!! + val TAG = ExtensionDetails::class.simpleName!! } init { diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListAdapter.kt b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionListAdapter.kt similarity index 55% rename from jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListAdapter.kt rename to jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionListAdapter.kt index ccfdad0d528f69e91b824ab7a781c47de19f5208..283b223d872f4b4d5e16bca536e3e8eee16ec678 100644 --- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListAdapter.kt +++ b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionListAdapter.kt @@ -14,25 +14,25 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package cx.ring.settings.pluginssettings +package cx.ring.settings.extensionssettings import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import cx.ring.R -import cx.ring.viewholders.PluginSettingViewHolder +import cx.ring.viewholders.ExtensionSettingViewHolder -class PluginsListAdapter(private var mList: List<PluginDetails>, private val listener: PluginListItemListener, private val accountId: String? = "") : - RecyclerView.Adapter<PluginSettingViewHolder>() { - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): PluginSettingViewHolder { - val view = LayoutInflater.from(parent.context).inflate(R.layout.frag_plugins_list_item, parent, false) - return PluginSettingViewHolder(view, listener) +class ExtensionsListAdapter(private var mList: List<ExtensionDetails>, private val listener: ExtensionListItemListener, private val accountId: String? = "") : + RecyclerView.Adapter<ExtensionSettingViewHolder>() { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ExtensionSettingViewHolder { + val view = LayoutInflater.from(parent.context).inflate(R.layout.frag_extensions_list_item, parent, false) + return ExtensionSettingViewHolder(view, listener) } - fun notifyItemChanged(pluginDetails: PluginDetails) = - mList.indexOf(pluginDetails).let { if (it != -1) notifyItemChanged(it) } + fun notifyItemChanged(extensionDetails: ExtensionDetails) = + mList.indexOf(extensionDetails).let { if (it != -1) notifyItemChanged(it) } - override fun onBindViewHolder(holderSetting: PluginSettingViewHolder, position: Int) { + override fun onBindViewHolder(holderSetting: ExtensionSettingViewHolder, position: Int) { for (item in mList) { item.accountId = accountId } @@ -41,10 +41,10 @@ class PluginsListAdapter(private var mList: List<PluginDetails>, private val lis override fun getItemCount(): Int { if (!accountId!!.isEmpty()) { - var copy: List<PluginDetails> = ArrayList() + var copy: List<ExtensionDetails> = ArrayList() for (item in mList) { item.accountId = accountId - if (!item.pluginPreferences.isEmpty()) + if (!item.extensionPreferences.isEmpty()) copy += item } mList = copy @@ -52,20 +52,20 @@ class PluginsListAdapter(private var mList: List<PluginDetails>, private val lis return mList.size } - fun updatePluginsList(listPlugins: List<PluginDetails>) { - for (item in listPlugins) { + fun updateExtensionsList(listExtensions: List<ExtensionDetails>) { + for (item in listExtensions) { item.accountId = accountId } - mList = listPlugins + mList = listExtensions notifyDataSetChanged() } - interface PluginListItemListener { - fun onPluginItemClicked(pluginDetails: PluginDetails) - fun onPluginEnabled(pluginDetails: PluginDetails) + interface ExtensionListItemListener { + fun onExtensionItemClicked(extensionDetails: ExtensionDetails) + fun onExtensionEnabled(extensionDetails: ExtensionDetails) } companion object { - val TAG = PluginsListAdapter::class.simpleName!! + val TAG = ExtensionsListAdapter::class.simpleName!! } } \ No newline at end of file diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListSettingsFragment.kt b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionListSettingsFragment.kt similarity index 53% rename from jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListSettingsFragment.kt rename to jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionListSettingsFragment.kt index 311c86aacb370b9b304fc7f42122665e0a19abef..15599403f16c74c70549c1241fbc37e50097c587 100644 --- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginsListSettingsFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionListSettingsFragment.kt @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package cx.ring.settings.pluginssettings +package cx.ring.settings.extensionssettings import android.app.Activity import android.content.Intent @@ -33,14 +33,14 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.snackbar.Snackbar import cx.ring.R import cx.ring.account.AccountEditionFragment -import cx.ring.databinding.FragPluginsListSettingsBinding +import cx.ring.databinding.FragExtensionsListSettingsBinding import cx.ring.databinding.ItemProgressDialogBinding import cx.ring.interfaces.AppBarStateListener -import cx.ring.plugins.PluginUtils.getInstalledPlugins -import cx.ring.plugins.PluginUtils.loadPlugin -import cx.ring.plugins.PluginUtils.unloadPlugin +import cx.ring.extensions.ExtensionUtils.getInstalledExtensions +import cx.ring.extensions.ExtensionUtils.loadExtension +import cx.ring.extensions.ExtensionUtils.unloadExtension import cx.ring.settings.SettingsFragment -import cx.ring.settings.pluginssettings.PluginsListAdapter.PluginListItemListener +import cx.ring.settings.extensionssettings.ExtensionsListAdapter.ExtensionListItemListener import cx.ring.utils.AndroidFileUtils.getCacheFile import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.disposables.CompositeDisposable @@ -48,31 +48,31 @@ import net.jami.daemon.JamiService import java.io.File import java.io.IOException -class PluginsListSettingsFragment : Fragment(), PluginListItemListener { - private var binding: FragPluginsListSettingsBinding? = null - private var mAdapter: PluginsListAdapter? = null +class ExtensionsListSettingsFragment : Fragment(), ExtensionListItemListener { + private var binding: FragExtensionsListSettingsBinding? = null + private var mAdapter: ExtensionsListAdapter? = null private val mCompositeDisposable = CompositeDisposable() private var mProgress: AlertDialog? = null override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { - binding = FragPluginsListSettingsBinding.inflate(inflater, container, false) + binding = FragExtensionsListSettingsBinding.inflate(inflater, container, false) val accountId = requireArguments().getString(AccountEditionFragment.ACCOUNT_ID_KEY)!! val appBarStateListener = parentFragment as? AppBarStateListener - appBarStateListener?.onToolbarTitleChanged(getString(R.string.menu_item_plugin_list)) - appBarStateListener?.onAppBarScrollTargetViewChanged(binding!!.pluginsList) + appBarStateListener?.onToolbarTitleChanged(getString(R.string.menu_item_extension_list)) + appBarStateListener?.onAppBarScrollTargetViewChanged(binding!!.extensionsList) // use this setting to improve performance if you know that changes // in content do not change the layout size of the RecyclerView - binding!!.pluginsList.setHasFixedSize(true) + binding!!.extensionsList.setHasFixedSize(true) - mAdapter = PluginsListAdapter(getInstalledPlugins(binding!!.pluginsList.context), this, accountId) - binding!!.pluginsList.adapter = mAdapter + mAdapter = ExtensionsListAdapter(getInstalledExtensions(binding!!.extensionsList.context), this, accountId) + binding!!.extensionsList.adapter = mAdapter //Fab if (accountId.isEmpty()) { - binding!!.pluginsListSettingsFab.visibility = View.VISIBLE - binding!!.pluginsListSettingsFab.setOnClickListener { + binding!!.extensionsListSettingsFab.visibility = View.VISIBLE + binding!!.extensionsListSettingsFab.setOnClickListener { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT) intent.addCategory(Intent.CATEGORY_OPENABLE) intent.type = "*/*" @@ -83,33 +83,33 @@ class PluginsListSettingsFragment : Fragment(), PluginListItemListener { } /** - * Implements PluginListItemListener.onPluginItemClicked which is called when we click on - * a plugin list item - * @param pluginDetails instance of a plugin details that is sent to PluginSettingsFragment + * Implements ExtensionListItemListener.onExtensionItemClicked which is called when an extension + * list item is clicked + * @param extensionDetails instance of an extension details that is sent to ExtensionSettingsFragment */ - override fun onPluginItemClicked(pluginDetails: PluginDetails) { - (parentFragment as SettingsFragment).goToPluginSettings(pluginDetails) + override fun onExtensionItemClicked(extensionDetails: ExtensionDetails) { + (parentFragment as SettingsFragment).goToExtensionSettings(extensionDetails) } /** - * Implements PluginListItemListener.onPluginEnabled which is called when the checkbox - * associated with the plugin list item is called - * @param pluginDetails instance of a plugin details that is sent to PluginSettingsFragment + * Implements ExtensionListItemListener.onExtensionEnabled which is called when the checkbox + * associated with the extension list item is called + * @param extensionDetails instance of an extension details that is sent to ExtensionSettingsFragment */ - override fun onPluginEnabled(pluginDetails: PluginDetails) { + override fun onExtensionEnabled(extensionDetails: ExtensionDetails) { var status: String? - if (pluginDetails.isEnabled) { - pluginDetails.isEnabled = loadPlugin(pluginDetails.rootPath) + if (extensionDetails.isEnabled) { + extensionDetails.isEnabled = loadExtension(extensionDetails.rootPath) status = - if (pluginDetails.isEnabled) getString(R.string.load_sucess, pluginDetails.name) + if (extensionDetails.isEnabled) getString(R.string.load_success, extensionDetails.name) else { - mAdapter?.notifyItemChanged(pluginDetails) - getString(R.string.unable_to_load, pluginDetails.name) + mAdapter?.notifyItemChanged(extensionDetails) + getString(R.string.unable_to_load, extensionDetails.name) } } else { - unloadPlugin(pluginDetails.rootPath) - status = getString(R.string.unload_sucess, pluginDetails.name) + unloadExtension(extensionDetails.rootPath) + status = getString(R.string.unload_success, extensionDetails.name) } Toast.makeText(requireContext(), status, Toast.LENGTH_SHORT).show() } @@ -119,26 +119,26 @@ class PluginsListSettingsFragment : Fragment(), PluginListItemListener { if (data != null) { val uri = data.data if (uri != null) { - installPluginFromUri(uri, false) + installExtensionFromUri(uri, false) } } } } @Throws(IOException::class) - private fun installPluginFile(pluginFile: File, force: Boolean): String { - val i = JamiService.installPlugin(pluginFile.absolutePath, force) - if (!pluginFile.delete()) { - Log.e(TAG, "Plugin Jpl file in the cache not freed") + private fun installExtensionFile(extensionFile: File, force: Boolean): String { + val i = JamiService.installPlugin(extensionFile.absolutePath, force) + if (!extensionFile.delete()) { + Log.e(TAG, "Extension Jpl file in the cache not freed.") } return when (i) { - 0 -> pluginFile.name - 100 -> throw IOException(getString(R.string.plugin_same_version_exception, pluginFile.name)) - 200 -> throw IOException(getString(R.string.plugin_recent_version_exception, pluginFile.name)) - 300 -> throw IOException(getString(R.string.plugin_invalid_signature, pluginFile.name)) - 400 -> throw IOException(getString(R.string.plugin_invalid_authority, pluginFile.name)) - 500 -> throw IOException(getString(R.string.plugin_invalid_format, pluginFile.name)) - else -> throw IOException(getString(R.string.plugin_install_failure, pluginFile.name)) + 0 -> extensionFile.name + 100 -> throw IOException(getString(R.string.extension_same_version_exception, extensionFile.name)) + 200 -> throw IOException(getString(R.string.extension_recent_version_exception, extensionFile.name)) + 300 -> throw IOException(getString(R.string.extension_invalid_signature, extensionFile.name)) + 400 -> throw IOException(getString(R.string.extension_invalid_authority, extensionFile.name)) + 500 -> throw IOException(getString(R.string.extension_invalid_format, extensionFile.name)) + else -> throw IOException(getString(R.string.extension_install_failure, extensionFile.name)) } } @@ -154,30 +154,30 @@ class PluginsListSettingsFragment : Fragment(), PluginListItemListener { progress.dismiss() } - private fun installPluginFromUri(uri: Uri, force: Boolean) { + private fun installExtensionFromUri(uri: Uri, force: Boolean) { showLoading(true) mCompositeDisposable.add( getCacheFile(requireContext(), uri) .observeOn(AndroidSchedulers.mainThread()) - .map { file: File -> installPluginFile(file, force) } + .map { file: File -> installExtensionFile(file, force) } .subscribe({ filename: String -> - val plugin = filename.split(".jpl".toRegex()).toTypedArray() - val availablePlugins = getInstalledPlugins(requireContext()) - for (availablePlugin in availablePlugins) { - if (availablePlugin.name == plugin[0]) { - availablePlugin.isEnabled = true - onPluginEnabled(availablePlugin) + val extension = filename.split(".jpl".toRegex()).toTypedArray() + val availableExtensions = getInstalledExtensions(requireContext()) + for (availableExtension in availableExtensions) { + if (availableExtension.name == extension[0]) { + availableExtension.isEnabled = true + onExtensionEnabled(availableExtension) } } - mAdapter!!.updatePluginsList(getInstalledPlugins(requireContext())) + mAdapter!!.updateExtensionsList(getInstalledExtensions(requireContext())) showLoading(false) - Toast.makeText(requireContext(), getString(R.string.install_sucess, filename), Toast.LENGTH_LONG) + Toast.makeText(requireContext(), getString(R.string.install_success, filename), Toast.LENGTH_LONG) .show() }) { e: Throwable -> if (binding != null) { - Log.e(TAG, "Error importing plugin", e) + Log.e(TAG, "An error occurred while importing the extension.", e) val sb = Snackbar.make(binding!!.listLayout, getString(R.string.install_error), Snackbar.LENGTH_LONG) - sb.setAction(R.string.plugin_force_install) { v: View? -> installPluginFromUri(uri, true) } + sb.setAction(R.string.extension_force_install) { v: View? -> installExtensionFromUri(uri, true) } sb.show() } showLoading(false) @@ -195,11 +195,11 @@ class PluginsListSettingsFragment : Fragment(), PluginListItemListener { } companion object { - val TAG = PluginsListSettingsFragment::class.java.simpleName + val TAG = ExtensionsListSettingsFragment::class.java.simpleName private const val ARCHIVE_REQUEST_CODE = 42 - fun newInstance(accountId: String?): PluginsListSettingsFragment { - val fragment = PluginsListSettingsFragment() + fun newInstance(accountId: String?): ExtensionsListSettingsFragment { + val fragment = ExtensionsListSettingsFragment() fragment.arguments = Bundle().apply { putString(AccountEditionFragment.ACCOUNT_ID_KEY, accountId) } return fragment } diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginPathPreferenceFragment.kt b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionPathPreferenceFragment.kt similarity index 81% rename from jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginPathPreferenceFragment.kt rename to jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionPathPreferenceFragment.kt index d38671b8d050a14aafc5f5668c83054310ad0124..4483b277541f871088faba5029fb8d2e17d47bc7 100644 --- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginPathPreferenceFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionPathPreferenceFragment.kt @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package cx.ring.settings.pluginssettings +package cx.ring.settings.extensionssettings import android.app.Activity import android.content.Intent @@ -25,32 +25,32 @@ import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.fragment.app.Fragment -import cx.ring.databinding.FragPluginsPathPreferenceBinding +import cx.ring.databinding.FragExtensionsPathPreferenceBinding import cx.ring.interfaces.AppBarStateListener -import cx.ring.settings.pluginssettings.PathListAdapter.PathListItemListener +import cx.ring.settings.extensionssettings.PathListAdapter.PathListItemListener import cx.ring.utils.AndroidFileUtils import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import java.io.File -class PluginPathPreferenceFragment : Fragment(), PathListItemListener { +class ExtensionPathPreferenceFragment : Fragment(), PathListItemListener { private val pathList: MutableList<String> = ArrayList() - private lateinit var mPluginDetails: PluginDetails + private lateinit var mExtensionDetails: ExtensionDetails private lateinit var mCurrentKey: String private var mCurrentValue: String? = null private var subtitle: String = "" private var supportedMimeTypes = arrayOf("*/*") - private var binding: FragPluginsPathPreferenceBinding? = null + private var binding: FragExtensionsPathPreferenceBinding? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val arguments = requireArguments() - val details = PluginDetails(arguments.getString("name")!!, arguments.getString("rootPath")!!, arguments.getBoolean("enabled")) - mPluginDetails = details + val details = ExtensionDetails(arguments.getString("name")!!, arguments.getString("rootPath")!!, arguments.getBoolean("enabled")) + mExtensionDetails = details val key = arguments.getString("preferenceKey")!! mCurrentKey = key - val mPreferencesAttributes = details.pluginPreferences + val mPreferencesAttributes = details.extensionPreferences if (mPreferencesAttributes.isNotEmpty()) { - mCurrentValue = details.pluginPreferencesValues[key] + mCurrentValue = details.extensionPreferencesValues[key] setHasOptionsMenu(true) for (preferenceAttributes in mPreferencesAttributes) { if (preferenceAttributes["key"] == key) { @@ -79,12 +79,12 @@ class PluginPathPreferenceFragment : Fragment(), PathListItemListener { } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View = - FragPluginsPathPreferenceBinding.inflate(inflater, container, false).apply { + FragExtensionsPathPreferenceBinding.inflate(inflater, container, false).apply { if (pathList.isNotEmpty()) - pathPreferences.adapter = PathListAdapter(pathList, this@PluginPathPreferenceFragment) + pathPreferences.adapter = PathListAdapter(pathList, this@ExtensionPathPreferenceFragment) binding = this - pluginSettingSubtitle.text = subtitle - pluginsPathPreferenceFab.setOnClickListener { + extensionSettingSubtitle.text = subtitle + extensionsPathPreferenceFab.setOnClickListener { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { addCategory(Intent.CATEGORY_OPENABLE) type = supportedMimeTypes[0] @@ -115,7 +115,7 @@ class PluginPathPreferenceFragment : Fragment(), PathListItemListener { } else { binding.currentPathItemIcon.visibility = View.INVISIBLE binding.currentPathItemName.visibility = View.INVISIBLE - binding.pluginsPathPreferenceFab.performClick() + binding.extensionsPathPreferenceFab.performClick() } (parentFragment as? AppBarStateListener)?.onAppBarScrollTargetViewChanged(binding.pathPreferences) @@ -133,7 +133,7 @@ class PluginPathPreferenceFragment : Fragment(), PathListItemListener { } override fun onResume() { -// (requireActivity() as HomeActivity).setToolbarTitle(R.string.menu_item_plugin_list) +// (requireActivity() as HomeActivity).setToolbarTitle(R.string.menu_item_extension_list) super.onResume() } @@ -143,7 +143,7 @@ class PluginPathPreferenceFragment : Fragment(), PathListItemListener { } private fun setPreferencePath(path: String) { - if (mPluginDetails.setPluginPreference(mCurrentKey, path)) { + if (mExtensionDetails.setExtensionPreference(mCurrentKey, path)) { mCurrentValue = path val binding = binding ?: return if (path.isNotEmpty()) { @@ -168,14 +168,14 @@ class PluginPathPreferenceFragment : Fragment(), PathListItemListener { } companion object { - val TAG = PluginPathPreferenceFragment::class.simpleName!! + val TAG = ExtensionPathPreferenceFragment::class.simpleName!! private const val PATH_REQUEST_CODE = 1 - fun newInstance(pluginDetails: PluginDetails, preferenceKey: String?): PluginPathPreferenceFragment { - val ppf = PluginPathPreferenceFragment() + fun newInstance(extensionDetails: ExtensionDetails, preferenceKey: String?): ExtensionPathPreferenceFragment { + val ppf = ExtensionPathPreferenceFragment() ppf.arguments = Bundle().apply { - putString("name", pluginDetails.name) - putString("rootPath", pluginDetails.rootPath) - putBoolean("enabled", pluginDetails.isEnabled) + putString("name", extensionDetails.name) + putString("rootPath", extensionDetails.rootPath) + putBoolean("enabled", extensionDetails.isEnabled) putString("preferenceKey", preferenceKey) } return ppf diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginPreferencesDataStore.kt b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionPreferencesDataStore.kt similarity index 82% rename from jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginPreferencesDataStore.kt rename to jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionPreferencesDataStore.kt index 26797f54932005d1af9d80986555eb0f306b18fe..cce9237270cc053fc951af6ee943186af9fd5761 100644 --- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginPreferencesDataStore.kt +++ b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionPreferencesDataStore.kt @@ -14,16 +14,16 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package cx.ring.settings.pluginssettings +package cx.ring.settings.extensionssettings import androidx.preference.PreferenceDataStore import java.util.concurrent.locks.ReadWriteLock import java.util.concurrent.locks.ReentrantReadWriteLock -class PluginPreferencesDataStore(private val mPluginDetails: PluginDetails) : PreferenceDataStore() { +class ExtensionPreferencesDataStore(private val mExtensionDetails: ExtensionDetails) : PreferenceDataStore() { private val mPreferenceTypes: MutableMap<String, String> = HashMap() - private var preferencesValues: Map<String, String> = mPluginDetails.pluginPreferencesValues + private var preferencesValues: Map<String, String> = mExtensionDetails.extensionPreferencesValues private val lock: ReadWriteLock = ReentrantReadWriteLock() fun addToPreferenceTypes(preferenceModel: Map<String, String>) { @@ -37,39 +37,39 @@ class PluginPreferencesDataStore(private val mPluginDetails: PluginDetails) : Pr } override fun putBoolean(key: String, value: Boolean) { - if (mPluginDetails.setPluginPreference(key, if (value) "1" else "0")) { + if (mExtensionDetails.setExtensionPreference(key, if (value) "1" else "0")) { notifyPreferencesValuesChange() } } override fun putString(key: String, value: String?) { - if (mPluginDetails.setPluginPreference(key, value ?: "")) { + if (mExtensionDetails.setExtensionPreference(key, value ?: "")) { notifyPreferencesValuesChange() } } override fun putStringSet(key: String, values: Set<String>?) { if (values != null) { - if (mPluginDetails.setPluginPreference(key, values.joinToString(","))) { + if (mExtensionDetails.setExtensionPreference(key, values.joinToString(","))) { notifyPreferencesValuesChange() } } } override fun putInt(key: String, value: Int) { - if (mPluginDetails.setPluginPreference(key, value.toString())) { + if (mExtensionDetails.setExtensionPreference(key, value.toString())) { notifyPreferencesValuesChange() } } override fun putLong(key: String, value: Long) { - if (mPluginDetails.setPluginPreference(key, value.toString())) { + if (mExtensionDetails.setExtensionPreference(key, value.toString())) { notifyPreferencesValuesChange() } } override fun putFloat(key: String, value: Float) { - if (mPluginDetails.setPluginPreference(key, value.toString())) { + if (mExtensionDetails.setExtensionPreference(key, value.toString())) { notifyPreferencesValuesChange() } } @@ -111,7 +111,7 @@ class PluginPreferencesDataStore(private val mPluginDetails: PluginDetails) : Pr val writeLock = lock.writeLock() preferencesValues = try { writeLock.lock() - mPluginDetails.pluginPreferencesValues + mExtensionDetails.extensionPreferencesValues } finally { writeLock.unlock() } diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginSettingsFragment.kt b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionSettingsFragment.kt similarity index 86% rename from jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginSettingsFragment.kt rename to jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionSettingsFragment.kt index a0da329f9f34dec6af3e9542a5d94caeb5ab80bf..ed418b963749282d845155b1c54f83b6b94d40a0 100644 --- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PluginSettingsFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/ExtensionSettingsFragment.kt @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package cx.ring.settings.pluginssettings +package cx.ring.settings.extensionssettings import android.content.DialogInterface import android.os.Bundle @@ -24,15 +24,15 @@ import androidx.preference.* import com.google.android.material.dialog.MaterialAlertDialogBuilder import cx.ring.R import cx.ring.client.HomeActivity -import cx.ring.plugins.PluginPreferences -import cx.ring.plugins.PluginUtils.stringListToListString +import cx.ring.extensions.ExtensionPreferences +import cx.ring.extensions.ExtensionUtils.stringListToListString import cx.ring.settings.SettingsFragment import net.jami.daemon.JamiService -class PluginSettingsFragment : PreferenceFragmentCompat() { +class ExtensionSettingsFragment : PreferenceFragmentCompat() { private var mPreferencesAttributes: List<Map<String, String>>? = null - private var pluginDetails: PluginDetails? = null - private var ppds: PluginPreferencesDataStore? = null + private var extensionDetails: ExtensionDetails? = null + private var ppds: ExtensionPreferencesDataStore? = null private var accountId: String? = "" override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {} @@ -40,11 +40,11 @@ class PluginSettingsFragment : PreferenceFragmentCompat() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val arguments = requireArguments() - val details = PluginDetails(arguments.getString("name")!!, arguments.getString("rootPath")!!, arguments.getBoolean("enabled"), null, accountId) - mPreferencesAttributes = details.pluginPreferences + val details = ExtensionDetails(arguments.getString("name")!!, arguments.getString("rootPath")!!, arguments.getBoolean("enabled"), null, accountId) + mPreferencesAttributes = details.extensionPreferences val preferenceManager = preferenceManager - ppds = PluginPreferencesDataStore(details) - pluginDetails = details + ppds = ExtensionPreferencesDataStore(details) + extensionDetails = details preferenceManager.preferenceDataStore = ppds } @@ -92,11 +92,11 @@ class PluginSettingsFragment : PreferenceFragmentCompat() { } private fun createHeadPreference(): Preference { - val preference = PluginPreferences(requireContext(), pluginDetails, accountId) + val preference = ExtensionPreferences(requireContext(), extensionDetails, accountId) val message = run { - var value = R.string.plugin_reset_preferences_ask + var value = R.string.extension_reset_preferences_ask if (accountId!!.isNotEmpty()) { - value = R.string.plugin_reset_account_preferences_ask + value = R.string.extension_reset_account_preferences_ask } value } @@ -105,7 +105,7 @@ class PluginSettingsFragment : PreferenceFragmentCompat() { .setTitle(preference.title) .setMessage(message) .setPositiveButton(android.R.string.ok) { dialog: DialogInterface?, id: Int -> - JamiService.resetPluginPreferencesValues(pluginDetails!!.rootPath, pluginDetails!!.accountId) + JamiService.resetPluginPreferencesValues(extensionDetails!!.rootPath, extensionDetails!!.accountId) parentFragmentManager.popBackStack() } .setNegativeButton(android.R.string.cancel) { dialog: DialogInterface?, whichButton: Int -> } @@ -114,22 +114,22 @@ class PluginSettingsFragment : PreferenceFragmentCompat() { preference.setInstallClickListener { MaterialAlertDialogBuilder(requireContext()) .setMessage(R.string.account_delete_dialog_message) - .setTitle(R.string.plugin_uninstall_title) + .setTitle(R.string.extension_uninstall_title) .setPositiveButton(android.R.string.ok) { dialog: DialogInterface?, whichButton: Int -> - pluginDetails!!.isEnabled = false - JamiService.uninstallPlugin(pluginDetails!!.rootPath) + extensionDetails!!.isEnabled = false + JamiService.uninstallPlugin(extensionDetails!!.rootPath) parentFragmentManager.popBackStack() } .setNegativeButton(android.R.string.cancel, null) .show() } - preference.setPluginSettingsRedirect { + preference.setExtensionSettingsRedirect { if (accountId!!.isEmpty()) { val act = requireActivity() as HomeActivity val acc = act.mAccountService.currentAccount!!.accountId - (parentFragment as SettingsFragment).goToPluginSettings(PluginDetails(pluginDetails!!.name, pluginDetails!!.rootPath, pluginDetails!!.isEnabled, null, acc)) + (parentFragment as SettingsFragment).goToExtensionSettings(ExtensionDetails(extensionDetails!!.name, extensionDetails!!.rootPath, extensionDetails!!.isEnabled, null, acc)) } else { - (parentFragment as SettingsFragment).goToPluginSettings(PluginDetails(pluginDetails!!.name, pluginDetails!!.rootPath, pluginDetails!!.isEnabled)) + (parentFragment as SettingsFragment).goToExtensionSettings(ExtensionDetails(extensionDetails!!.name, extensionDetails!!.rootPath, extensionDetails!!.isEnabled)) } } return preference @@ -171,7 +171,7 @@ class PluginSettingsFragment : PreferenceFragmentCompat() { private fun createPathPreference(preferenceModel: Map<String, String>): Preference { val preference = Preference(requireContext()) preference.onPreferenceClickListener = Preference.OnPreferenceClickListener { - (parentFragment as SettingsFragment).goToPluginPathPreference(pluginDetails!!, preferenceModel["key"]!!) + (parentFragment as SettingsFragment).goToExtensionPathPreference(extensionDetails!!, preferenceModel["key"]!!) false } setPreferenceAttributes(preference, preferenceModel) @@ -326,14 +326,14 @@ class PluginSettingsFragment : PreferenceFragmentCompat() { } companion object { - val TAG = PluginSettingsFragment::class.simpleName!! - fun newInstance(pluginDetails: PluginDetails): PluginSettingsFragment { - val psf = PluginSettingsFragment() + val TAG = ExtensionSettingsFragment::class.simpleName!! + fun newInstance(extensionDetails: ExtensionDetails): ExtensionSettingsFragment { + val psf = ExtensionSettingsFragment() psf.arguments = Bundle().apply { - putString("name", pluginDetails.name) - putString("rootPath", pluginDetails.rootPath) - putBoolean("enabled", pluginDetails.isEnabled) - psf.accountId = pluginDetails.accountId + putString("name", extensionDetails.name) + putString("rootPath", extensionDetails.rootPath) + putBoolean("enabled", extensionDetails.isEnabled) + psf.accountId = extensionDetails.accountId } return psf } diff --git a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PathListAdapter.kt b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/PathListAdapter.kt similarity index 95% rename from jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PathListAdapter.kt rename to jami-android/app/src/main/java/cx/ring/settings/extensionssettings/PathListAdapter.kt index 9ad33f6528565714916e9225fd26c3a4b2f596d3..159021b8861397a00f185745f1b39a5005318cef 100644 --- a/jami-android/app/src/main/java/cx/ring/settings/pluginssettings/PathListAdapter.kt +++ b/jami-android/app/src/main/java/cx/ring/settings/extensionssettings/PathListAdapter.kt @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <https://www.gnu.org/licenses/>. */ -package cx.ring.settings.pluginssettings +package cx.ring.settings.extensionssettings import android.graphics.drawable.Drawable import android.view.LayoutInflater @@ -45,7 +45,7 @@ class PathListAdapter internal constructor( return mList.size } - fun updatePluginsList(listPaths: List<String>) { + fun updateExtensionsList(listPaths: List<String>) { mList = listPaths notifyDataSetChanged() } @@ -57,7 +57,7 @@ class PathListAdapter internal constructor( // update the viewHolder view fun update(s: String) { - // Set the plugin icon + // Set the extension icon val file = File(s) if (file.exists()) { if (AndroidFileUtils.isImage(s)) { diff --git a/jami-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.kt b/jami-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.kt index 35872ea9b59c0006ef2ab6c9dc89155b7312cbb2..ec644b1f22176fb2e273d2b4f7975f8c7136b030 100644 --- a/jami-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/tv/call/TVCallFragment.kt @@ -286,7 +286,7 @@ class TVCallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView isMicrophoneMuted: Boolean, displayFlip: Boolean, canDial: Boolean, - showPluginBtn: Boolean, + showExtensionBtn: Boolean, onGoingCall: Boolean, hasActiveVideo: Boolean, hasActiveScreenShare: Boolean) { @@ -431,7 +431,7 @@ class TVCallFragment : BaseSupportFragment<CallPresenter, CallView>(), CallView startActivity(Intent(Intent.ACTION_VIEW, ConversationPath.toUri(accountId, contact.uri), requireContext(), ContactDetailsActivity::class.java)) } - override fun displayPluginsButton(): Boolean { + override fun displayExtensionsButton(): Boolean { return false } diff --git a/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.kt b/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.kt index 078f6c2703dc7bf10663ba7917f2593ad6e84bf3..cd146a9b2b7bbe650b59112712e322cd541b2142 100644 --- a/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.kt +++ b/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationAdapter.kt @@ -858,7 +858,7 @@ class TvConversationAdapter( ContactEvent.Event.ADDED -> R.string.hist_contact_added ContactEvent.Event.INVITED -> R.string.hist_contact_invited ContactEvent.Event.REMOVED -> R.string.hist_contact_left - ContactEvent.Event.BANNED -> R.string.hist_contact_banned + ContactEvent.Event.BANNED -> R.string.hist_contact_blocked ContactEvent.Event.INCOMING_REQUEST -> R.string.hist_invitation_received else -> R.string.hist_contact_added } diff --git a/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.kt b/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.kt index 2b9be164e3588e2e9370628e575be4f910e42940..bf36aaa53faa02651dc9b62304f2107911212c65 100644 --- a/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.kt +++ b/jami-android/app/src/main/java/cx/ring/tv/conversation/TvConversationFragment.kt @@ -289,7 +289,7 @@ class TvConversationFragment : BaseSupportFragment<ConversationPresenter, Conver startActivity(intent) } } catch (e: Exception) { - Log.e(TAG, "Error starting activity", e) + Log.e(TAG, "An error occurred starting the activity.", e) } } } @@ -597,7 +597,7 @@ class TvConversationFragment : BaseSupportFragment<ConversationPresenter, Conver override fun startShareLocation(accountId: String, conversationId: String) {} override fun showMap(accountId: String, contactId: String, open: Boolean) {} override fun hideMap() {} - override fun showPluginListHandlers(accountId: String, contactId: String) {} + override fun showExtensionListHandlers(accountId: String, contactId: String) {} override fun hideErrorPanel() {} override fun displayNetworkErrorPanel() {} override fun displayAccountOfflineErrorPanel() {} @@ -649,7 +649,7 @@ class TvConversationFragment : BaseSupportFragment<ConversationPresenter, Conver override fun switchToBannedView() { binding?.apply { conversationActionGroup.isVisible = false - conversationActionMessage.text = getString(R.string.conversation_contact_banned, "") + conversationActionMessage.text = getString(R.string.conversation_contact_blocked, "") conversationActionMessage.isVisible = true } } diff --git a/jami-android/app/src/main/java/cx/ring/viewholders/PluginSettingViewHolder.kt b/jami-android/app/src/main/java/cx/ring/viewholders/ExtensionSettingViewHolder.kt similarity index 53% rename from jami-android/app/src/main/java/cx/ring/viewholders/PluginSettingViewHolder.kt rename to jami-android/app/src/main/java/cx/ring/viewholders/ExtensionSettingViewHolder.kt index d42a8a4267694f307a65c5c7d7661b704bdae2b0..8cb8877e6b2584f77a9723f5316641c9b2bee4be 100644 --- a/jami-android/app/src/main/java/cx/ring/viewholders/PluginSettingViewHolder.kt +++ b/jami-android/app/src/main/java/cx/ring/viewholders/ExtensionSettingViewHolder.kt @@ -22,43 +22,43 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.google.android.material.materialswitch.MaterialSwitch import cx.ring.R -import cx.ring.settings.pluginssettings.PluginDetails -import cx.ring.settings.pluginssettings.PluginsListAdapter.PluginListItemListener +import cx.ring.settings.extensionssettings.ExtensionDetails +import cx.ring.settings.extensionssettings.ExtensionsListAdapter.ExtensionListItemListener -class PluginSettingViewHolder(itemView: View, listener: PluginListItemListener) : RecyclerView.ViewHolder(itemView) { - private val pluginIcon: ImageView = itemView.findViewById(R.id.plugin_item_icon) - private val pluginNameTextView: TextView = itemView.findViewById(R.id.plugin_item_name) - private val pluginItemEnableCheckbox: MaterialSwitch = itemView.findViewById(R.id.plugin_item_enable_checkbox) - private var details: PluginDetails? = null +class ExtensionSettingViewHolder(itemView: View, listener: ExtensionListItemListener) : RecyclerView.ViewHolder(itemView) { + private val extensionIcon: ImageView = itemView.findViewById(R.id.extension_item_icon) + private val extensionNameTextView: TextView = itemView.findViewById(R.id.extension_item_name) + private val extensionItemEnableCheckbox: MaterialSwitch = itemView.findViewById(R.id.extension_item_enable_checkbox) + private var details: ExtensionDetails? = null - fun setDetails(details: PluginDetails) { + fun setDetails(details: ExtensionDetails) { this.details = details update(details) } // update the viewHolder view - fun update(details: PluginDetails) { - pluginNameTextView.text = details.name + fun update(details: ExtensionDetails) { + extensionNameTextView.text = details.name if (details.accountId!!.isEmpty()) - pluginItemEnableCheckbox.isChecked = details.isEnabled + extensionItemEnableCheckbox.isChecked = details.isEnabled else - pluginItemEnableCheckbox.visibility = View.GONE + extensionItemEnableCheckbox.visibility = View.GONE - // Set the plugin icon + // Set the extension icon val icon = details.icon if (icon != null) { - pluginIcon.setImageDrawable(icon) + extensionIcon.setImageDrawable(icon) } } init { itemView.setOnClickListener { - details?.let { details -> listener.onPluginItemClicked(details) } + details?.let { details -> listener.onExtensionItemClicked(details) } } - pluginItemEnableCheckbox.setOnClickListener { + extensionItemEnableCheckbox.setOnClickListener { details?.let { details -> details.isEnabled = !details.isEnabled - listener.onPluginEnabled(details) + listener.onExtensionEnabled(details) } } } diff --git a/jami-android/app/src/main/java/cx/ring/viewholders/PluginViewHolder.kt b/jami-android/app/src/main/java/cx/ring/viewholders/ExtensionViewHolder.kt similarity index 53% rename from jami-android/app/src/main/java/cx/ring/viewholders/PluginViewHolder.kt rename to jami-android/app/src/main/java/cx/ring/viewholders/ExtensionViewHolder.kt index ec007df2394531c3bf9eb501a7a806bdfb444c9c..2708af4209ce112dabbef030e52abb7085cd5b4b 100644 --- a/jami-android/app/src/main/java/cx/ring/viewholders/PluginViewHolder.kt +++ b/jami-android/app/src/main/java/cx/ring/viewholders/ExtensionViewHolder.kt @@ -22,39 +22,39 @@ import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.google.android.material.materialswitch.MaterialSwitch import cx.ring.R -import cx.ring.settings.pluginssettings.PluginDetails -import cx.ring.adapters.PluginsAdapter.PluginListItemListener +import cx.ring.settings.extensionssettings.ExtensionDetails +import cx.ring.adapters.ExtensionsAdapter.ExtensionListItemListener -class PluginViewHolder(itemView: View, listener: PluginListItemListener) : RecyclerView.ViewHolder(itemView) { - private val pluginIcon: ImageView = itemView.findViewById(R.id.plugin_item_icon) - private val pluginNameTextView: TextView = itemView.findViewById(R.id.plugin_item_name) - private val pluginItemEnableCheckbox: MaterialSwitch = itemView.findViewById(R.id.plugin_item_enable_checkbox) - private var details: PluginDetails? = null +class ExtensionViewHolder(itemView: View, listener: ExtensionListItemListener) : RecyclerView.ViewHolder(itemView) { + private val extensionIcon: ImageView = itemView.findViewById(R.id.extension_item_icon) + private val extensionNameTextView: TextView = itemView.findViewById(R.id.extension_item_name) + private val extensionItemEnableCheckbox: MaterialSwitch = itemView.findViewById(R.id.extension_item_enable_checkbox) + private var details: ExtensionDetails? = null - fun setDetails(details: PluginDetails) { + fun setDetails(details: ExtensionDetails) { this.details = details update(details) } // update the viewHolder view - fun update(details: PluginDetails) { - pluginNameTextView.text = details.name - pluginItemEnableCheckbox.isChecked = details.isRunning - // Set the plugin icon + fun update(details: ExtensionDetails) { + extensionNameTextView.text = details.name + extensionItemEnableCheckbox.isChecked = details.isRunning + // Set the extension icon val icon = details.icon if (icon != null) { - pluginIcon.setImageDrawable(icon) + extensionIcon.setImageDrawable(icon) } } init { itemView.setOnClickListener { - details?.let { details -> listener.onPluginItemClicked(details) } + details?.let { details -> listener.onExtensionItemClicked(details) } } - pluginItemEnableCheckbox.setOnClickListener { + extensionItemEnableCheckbox.setOnClickListener { details?.let { details -> - listener.onPluginEnabled(details) + listener.onExtensionEnabled(details) } } } diff --git a/jami-android/app/src/main/res/drawable/ic_plugin.xml b/jami-android/app/src/main/res/drawable/ic_extension.xml similarity index 100% rename from jami-android/app/src/main/res/drawable/ic_plugin.xml rename to jami-android/app/src/main/res/drawable/ic_extension.xml diff --git a/jami-android/app/src/main/res/layout/activity_contact_details.xml b/jami-android/app/src/main/res/layout/activity_contact_details.xml index 61cb0f874e88c5257170ced0c8adc056b893b6ee..33fa051f250352aa9a95497d4669ca0a41a11922 100644 --- a/jami-android/app/src/main/res/layout/activity_contact_details.xml +++ b/jami-android/app/src/main/res/layout/activity_contact_details.xml @@ -85,17 +85,17 @@ <com.google.android.material.tabs.TabItem android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="@string/tab_about"/> + android:text="@string/tab_members"/> <com.google.android.material.tabs.TabItem android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="@string/tab_members"/> + android:text="@string/tab_files"/> <com.google.android.material.tabs.TabItem android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="@string/tab_documetn"/> + android:text="@string/tab_settings"/> </com.google.android.material.tabs.TabLayout> diff --git a/jami-android/app/src/main/res/layout/frag_call.xml b/jami-android/app/src/main/res/layout/frag_call.xml index 3a1e3a5f32efd20db31a7e385c8d74e2d77d9723..f1de8a8224c750a57c87424582c61cc1e226518d 100644 --- a/jami-android/app/src/main/res/layout/frag_call.xml +++ b/jami-android/app/src/main/res/layout/frag_call.xml @@ -37,7 +37,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. android:layout_height="match_parent"> <androidx.cardview.widget.CardView - android:id="@+id/plugin_preview_container" + android:id="@+id/extension_preview_container" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" @@ -52,13 +52,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. tools:visibility="visible"> <cx.ring.views.AutoFitSurfaceView - android:id="@+id/plugin_preview_surface" + android:id="@+id/extension_preview_surface" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="visible" /> <ImageView - android:id="@+id/plugin_preview_handle" + android:id="@+id/extension_preview_handle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right|center_vertical" @@ -703,9 +703,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. android:textSize="11sp" /> </LinearLayout> - <!-- Plugins list button --> + <!-- Extensions list button --> <LinearLayout - android:id="@+id/plugins_btn_container" + android:id="@+id/extensions_btn_container" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_rowWeight="1" @@ -714,7 +714,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. android:padding="5dp"> <cx.ring.views.CheckableImageButton - android:id="@+id/call_plugins_btn" + android:id="@+id/call_extensions_btn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" @@ -724,7 +724,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. app:tint="@color/white" /> <TextView - android:id="@+id/textView_call_plugins_btn" + android:id="@+id/textView_call_extensions_btn" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" @@ -732,7 +732,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. android:ellipsize="end" android:scrollHorizontally="false" android:singleLine="true" - android:text="@string/bottomSheet_plugins_btn" + android:text="@string/bottomSheet_extensions_btn" android:textAlignment="center" android:textColor="@color/white" android:textSize="11sp" /> @@ -757,7 +757,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. <!-- Recycler view for participants in call --> <androidx.recyclerview.widget.RecyclerView - android:id="@+id/pluginslist_container" + android:id="@+id/extensions_list_container" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" @@ -767,7 +767,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/call_parameters_grid" tools:itemCount="2" - tools:listitem="@layout/frag_plugins_list_item" + tools:listitem="@layout/frag_extensions_list_item" tools:visibility="visible" /> diff --git a/jami-android/app/src/main/res/layout/frag_conversation.xml b/jami-android/app/src/main/res/layout/frag_conversation.xml index 62f305b6c5651f6305dd7b6f90666530d21272ee..063788836d1026b738dd15b1b30b72a3182b545a 100644 --- a/jami-android/app/src/main/res/layout/frag_conversation.xml +++ b/jami-android/app/src/main/res/layout/frag_conversation.xml @@ -208,7 +208,7 @@ tools:background="@color/light_green_400" /> <RelativeLayout - android:id="@+id/pluginListHandlers" + android:id="@+id/extensionListHandlers" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="false" diff --git a/jami-android/app/src/main/res/layout/frag_plugin_handlers_list.xml b/jami-android/app/src/main/res/layout/frag_extension_handlers_list.xml similarity index 77% rename from jami-android/app/src/main/res/layout/frag_plugin_handlers_list.xml rename to jami-android/app/src/main/res/layout/frag_extension_handlers_list.xml index 869b83fb916c0c90a971a91239857eda6b603bf3..116a795031d33a77b00dc1d908e12be59d3c043c 100644 --- a/jami-android/app/src/main/res/layout/frag_plugin_handlers_list.xml +++ b/jami-android/app/src/main/res/layout/frag_extension_handlers_list.xml @@ -5,23 +5,23 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:animateLayoutChanges="true" - tools:context=".fragments.PluginHandlersListFragment"> + tools:context=".fragments.ExtensionHandlersListFragment"> <com.google.android.material.appbar.MaterialToolbar - android:id="@+id/chat_plugins_toolbar" + android:id="@+id/chat_extensions_toolbar" style="@style/Widget.Material3.Toolbar.Surface" android:layout_width="match_parent" android:layout_height="wrap_content" android:elevation="4dp" app:navigationIcon="@drawable/baseline_close_24" - app:title="@string/chat_plugins"/> + app:title="@string/chat_extensions"/> <androidx.recyclerview.widget.RecyclerView android:id="@+id/handler_list" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_below="@+id/chat_plugins_toolbar" + android:layout_below="@+id/chat_extensions_toolbar" android:orientation="vertical" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" - tools:listitem="@layout/frag_plugins_list_item" /> + tools:listitem="@layout/frag_extensions_list_item" /> </RelativeLayout> \ No newline at end of file diff --git a/jami-android/app/src/main/res/layout/frag_plugin_settings.xml b/jami-android/app/src/main/res/layout/frag_extension_settings.xml similarity index 77% rename from jami-android/app/src/main/res/layout/frag_plugin_settings.xml rename to jami-android/app/src/main/res/layout/frag_extension_settings.xml index 9d4f2bebdc3b7c5f9284a37127256d0040a0e5ad..33210a93a50920548e72db6a876a69ec04ac9d32 100644 --- a/jami-android/app/src/main/res/layout/frag_plugin_settings.xml +++ b/jami-android/app/src/main/res/layout/frag_extension_settings.xml @@ -6,7 +6,7 @@ android:layout_height="wrap_content"> <ImageView - android:id="@+id/plugin_setting_icon" + android:id="@+id/extension_setting_icon" android:layout_marginTop="32dp" android:layout_width="80dp" android:layout_height="80dp" @@ -14,35 +14,35 @@ app:srcCompat="@drawable/baseline_group_24" /> <TextView - android:id="@+id/plugin_setting_title" + android:id="@+id/extension_setting_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" - android:layout_below="@+id/plugin_setting_icon" + android:layout_below="@+id/extension_setting_icon" android:singleLine="true" - android:text="@string/video_plugins" + android:text="@string/video_extensions" android:textSize="20sp" android:layout_centerHorizontal="true" android:textAppearance="?android:attr/textAppearanceLarge" /> <View - android:id="@+id/plugin_setting_divider" - android:layout_below="@+id/plugin_setting_title" + android:id="@+id/extension_setting_divider" + android:layout_below="@+id/extension_setting_title" android:layout_marginTop="16dp" android:layout_width="match_parent" android:layout_height="1dp" android:background="@android:color/darker_gray"/> <LinearLayout - android:id="@+id/plugin_setting_buttons" + android:id="@+id/extension_setting_buttons" android:layout_width="match_parent" android:layout_height="48dp" - android:layout_below="@+id/plugin_setting_divider" + android:layout_below="@+id/extension_setting_divider" android:layout_marginTop="16dp" android:weightSum="2"> <RelativeLayout - android:id="@+id/plugin_setting_reset" + android:id="@+id/extension_setting_reset" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" @@ -50,14 +50,14 @@ android:focusable="true"> <ImageView - android:id="@+id/plugin_setting_reset_image" + android:id="@+id/extension_setting_reset_image" android:layout_width="32dp" android:layout_height="32dp" android:src="@drawable/round_settings_backup_restore_24" android:layout_centerHorizontal="true"/> <TextView - android:layout_below="@+id/plugin_setting_reset_image" + android:layout_below="@+id/extension_setting_reset_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/reset" @@ -65,7 +65,7 @@ </RelativeLayout> <RelativeLayout - android:id="@+id/plugin_setting_install" + android:id="@+id/extension_setting_install" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" @@ -73,14 +73,14 @@ android:focusable="true"> <ImageView - android:id="@+id/plugin_setting_install_image" + android:id="@+id/extension_setting_install_image" android:layout_width="32dp" android:layout_height="32dp" android:src="@drawable/baseline_delete_24" android:layout_centerHorizontal="true"/> <TextView - android:layout_below="@+id/plugin_setting_install_image" + android:layout_below="@+id/extension_setting_install_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/uninstall" @@ -92,14 +92,14 @@ <View android:id="@+id/divisor" - android:layout_below="@+id/plugin_setting_buttons" + android:layout_below="@+id/extension_setting_buttons" android:layout_marginTop="16dp" android:layout_width="match_parent" android:layout_height="1dp" android:background="@android:color/darker_gray"/> <com.google.android.material.button.MaterialButton - android:id="@+id/plugin_account_setting_redirect" + android:id="@+id/extension_account_setting_redirect" style="@style/ButtonColored" android:layout_width="wrap_content" android:layout_height="wrap_content" @@ -109,6 +109,6 @@ android:clickable="true" android:drawableTint="@color/colorOnPrimary" android:focusable="true" - android:text="@string/open_account_plugin_settings" /> + android:text="@string/open_account_extension_settings" /> </android.widget.RelativeLayout> \ No newline at end of file diff --git a/jami-android/app/src/main/res/layout/frag_plugins_list_item.xml b/jami-android/app/src/main/res/layout/frag_extensions_list_item.xml similarity index 94% rename from jami-android/app/src/main/res/layout/frag_plugins_list_item.xml rename to jami-android/app/src/main/res/layout/frag_extensions_list_item.xml index 8faeee5810e16223b39fe1fe0a4180331c157c61..77923ca70f466b459767802e18bc262c40e4e677 100644 --- a/jami-android/app/src/main/res/layout/frag_plugins_list_item.xml +++ b/jami-android/app/src/main/res/layout/frag_extensions_list_item.xml @@ -28,7 +28,7 @@ along with this program; if not, write to the Free Software android:padding="10dp"> <ImageView - android:id="@+id/plugin_item_icon" + android:id="@+id/extension_item_icon" android:layout_width="56dp" android:layout_height="56dp" android:layout_weight="0" @@ -41,7 +41,7 @@ along with this program; if not, write to the Free Software tools:src="@tools:sample/avatars"/> <TextView - android:id="@+id/plugin_item_name" + android:id="@+id/extension_item_name" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="@dimen/padding_large" @@ -56,7 +56,7 @@ along with this program; if not, write to the Free Software tools:text="@tools:sample/full_names" /> <com.google.android.material.materialswitch.MaterialSwitch - android:id="@+id/plugin_item_enable_checkbox" + android:id="@+id/extension_item_enable_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:backgroundTint="@color/colorPrimary" diff --git a/jami-android/app/src/main/res/layout/frag_plugins_list_settings.xml b/jami-android/app/src/main/res/layout/frag_extensions_list_settings.xml similarity index 84% rename from jami-android/app/src/main/res/layout/frag_plugins_list_settings.xml rename to jami-android/app/src/main/res/layout/frag_extensions_list_settings.xml index fa0d3efc86286d0bb7b00de92557157d59c5c248..57a9f2d34e2901c06bbc76ea62e12cf4b39965ad 100644 --- a/jami-android/app/src/main/res/layout/frag_plugins_list_settings.xml +++ b/jami-android/app/src/main/res/layout/frag_extensions_list_settings.xml @@ -14,20 +14,20 @@ android:layout_alignParentBottom="true" > <androidx.recyclerview.widget.RecyclerView - android:id="@+id/plugins_list" + android:id="@+id/extensions_list" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" - tools:listitem="@layout/frag_plugins_list_item"/> + tools:listitem="@layout/frag_extensions_list_item"/> <com.google.android.material.floatingactionbutton.FloatingActionButton - android:id="@+id/plugins_list_settings_fab" + android:id="@+id/extensions_list_settings_fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="end|bottom" android:layout_margin="@dimen/fab_margin" - android:contentDescription="@string/fab_plugins_add" + android:contentDescription="@string/fab_extensions_add" android:src="@drawable/baseline_add_24" android:visibility="gone"/> diff --git a/jami-android/app/src/main/res/layout/frag_plugins_path_preference.xml b/jami-android/app/src/main/res/layout/frag_extensions_path_preference.xml similarity index 86% rename from jami-android/app/src/main/res/layout/frag_plugins_path_preference.xml rename to jami-android/app/src/main/res/layout/frag_extensions_path_preference.xml index b98027b7163d51cfd4901923225f1693942b5952..eecb2cdfe2a9cbf09d71a8f1406334b738def878 100644 --- a/jami-android/app/src/main/res/layout/frag_plugins_path_preference.xml +++ b/jami-android/app/src/main/res/layout/frag_extensions_path_preference.xml @@ -10,10 +10,10 @@ android:layout_width="match_parent" android:layout_height="match_parent"> <TextView - android:id="@+id/plugin_setting_subtitle" + android:id="@+id/extension_setting_subtitle" android:layout_width="fill_parent" android:layout_height="wrap_content" - tools:text="Plugin Name + Preference Name" + tools:text="Extension Name + Preference Name" android:layout_marginHorizontal="16dp" android:textSize="18sp"/> @@ -24,7 +24,7 @@ android:layout_above="@+id/current_path_item_name" android:orientation="vertical" android:gravity="center" - android:layout_below="@+id/plugin_setting_subtitle" + android:layout_below="@+id/extension_setting_subtitle" app:srcCompat="@drawable/baseline_insert_drive_file_24"> </ImageView> @@ -39,7 +39,7 @@ android:textSize="16sp" /> <androidx.recyclerview.widget.RecyclerView - android:layout_toEndOf="@+id/plugins_path_preference_fab" + android:layout_toEndOf="@+id/extensions_path_preference_fab" android:layout_alignParentBottom="true" android:id="@+id/path_preferences" android:layout_width="fill_parent" @@ -49,7 +49,7 @@ tools:listitem="@layout/frag_path_list_item"/> <com.google.android.material.floatingactionbutton.FloatingActionButton - android:id="@+id/plugins_path_preference_fab" + android:id="@+id/extensions_path_preference_fab" android:layout_width="55dp" android:layout_height="55dp" android:gravity="center" @@ -58,7 +58,7 @@ android:layout_alignBaseline="@+id/path_preferences" android:src="@drawable/baseline_add_24" android:layout_margin="16dp" - android:contentDescription="@string/fab_plugins_add" /> + android:contentDescription="@string/fab_extensions_add" /> </RelativeLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout> \ No newline at end of file diff --git a/jami-android/app/src/main/res/layout/frag_settings.xml b/jami-android/app/src/main/res/layout/frag_settings.xml index 9ad861df5348966514669f4e21410580fe73cdb7..293617745f888721abae5791f165635ea1464656 100644 --- a/jami-android/app/src/main/res/layout/frag_settings.xml +++ b/jami-android/app/src/main/res/layout/frag_settings.xml @@ -164,51 +164,51 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. </RelativeLayout> <RelativeLayout - android:id="@+id/settings_plugins_layout" + android:id="@+id/settings_extensions_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="@dimen/padding_large"> <ImageView - android:id="@+id/plugins_image" + android:id="@+id/extensions_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_centerVertical="true" - android:contentDescription="@string/pref_plugins_summary" - app:srcCompat="@drawable/ic_plugin" + android:contentDescription="@string/pref_extensions_summary" + app:srcCompat="@drawable/ic_extension" android:layout_marginEnd="32dp"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" - android:layout_toStartOf="@+id/settings_plugins_switch" - android:layout_toEndOf="@+id/plugins_image" + android:layout_toStartOf="@+id/settings_extensions_switch" + android:layout_toEndOf="@+id/extensions_image" android:orientation="vertical"> <TextView - android:id="@+id/plugins_title" + android:id="@+id/extensions_title" style="@style/ListPrimary" android:layout_width="match_parent" android:layout_height="wrap_content" android:maxLines="3" android:singleLine="false" - android:text="@string/pref_plugins_title" - android:layout_toEndOf="@id/plugins_image" + android:text="@string/pref_extensions_title" + android:layout_toEndOf="@id/extensions_image" android:layout_marginEnd="16dp" /> <TextView style="@style/ListSecondary" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="@string/pref_plugins_summary" - android:layout_toEndOf="@id/plugins_image" + android:text="@string/pref_extensions_summary" + android:layout_toEndOf="@id/extensions_image" android:layout_marginEnd="16dp" - android:layout_below="@id/plugins_title"/> + android:layout_below="@id/extensions_title"/> </LinearLayout> <com.google.android.material.materialswitch.MaterialSwitch - android:id="@+id/settings_plugins_switch" + android:id="@+id/settings_extensions_switch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" diff --git a/jami-android/app/src/main/res/layout/item_conv_msg_me_tv.xml b/jami-android/app/src/main/res/layout/item_conv_msg_me_tv.xml index e28af1f105c121530bc163a06af1a5fe614618e1..4e6df54891e29bf8cfe8abba9c67bfcfe7553c64 100644 --- a/jami-android/app/src/main/res/layout/item_conv_msg_me_tv.xml +++ b/jami-android/app/src/main/res/layout/item_conv_msg_me_tv.xml @@ -65,7 +65,7 @@ along with this program; if not, write to the Free Software android:textIsSelectable="true" android:textSize="16sp" android:theme="@style/OutgoingTextMesssage" - tools:text="yo this is the test of a long long text can not be_found_message" /> + tools:text="yo this is the test of a long long text which cannot be_found_message" /> </RelativeLayout> diff --git a/jami-android/app/src/main/res/layout/item_picker.xml b/jami-android/app/src/main/res/layout/item_picker.xml index 14d2af42c71cfdd496f75a669786906ca73548f9..67701e499c073256d1112b6ec06ed84da062bfb7 100644 --- a/jami-android/app/src/main/res/layout/item_picker.xml +++ b/jami-android/app/src/main/res/layout/item_picker.xml @@ -4,5 +4,5 @@ android:id="@+id/item_image_view" android:layout_width="64dp" android:layout_height="64dp" - tools:src="@drawable/ic_plugin" + tools:src="@drawable/ic_extension" android:layout_margin="24dp" /> diff --git a/jami-android/app/src/main/res/menu/ac_call.xml b/jami-android/app/src/main/res/menu/ac_call.xml index 09cebb7f7c5a4e0f01f939cbfd7e8291b0e15bc0..13559cc370e405a36bf420187583785850de75fe 100644 --- a/jami-android/app/src/main/res/menu/ac_call.xml +++ b/jami-android/app/src/main/res/menu/ac_call.xml @@ -10,10 +10,10 @@ android:orderInCategory="2"/> <item - android:id="@+id/menuitem_video_plugins" + android:id="@+id/menuitem_video_extensions" app:showAsAction="ifRoom" - android:icon="@drawable/ic_plugin" - android:title="@string/video_plugins" + android:icon="@drawable/ic_extension" + android:title="@string/video_extensions" android:orderInCategory="3"/> </menu> \ No newline at end of file diff --git a/jami-android/app/src/main/res/menu/conversation_share_actions.xml b/jami-android/app/src/main/res/menu/conversation_share_actions.xml index 0edbf89dbee7cb800180d13f65d78240f0f6ca26..26402f8e3f29cea5fb87a87294ed18e26c2e0493 100644 --- a/jami-android/app/src/main/res/menu/conversation_share_actions.xml +++ b/jami-android/app/src/main/res/menu/conversation_share_actions.xml @@ -38,9 +38,9 @@ tools:ignore="AlwaysShowAction" /> <item - android:id="@+id/chat_plugins" - android:icon="@drawable/ic_plugin" - android:title="@string/chat_plugins" + android:id="@+id/chat_extensions" + android:icon="@drawable/ic_extension" + android:title="@string/chat_extensions" app:showAsAction="always" tools:ignore="AlwaysShowAction" /> </menu> diff --git a/jami-android/app/src/main/res/values/strings.xml b/jami-android/app/src/main/res/values/strings.xml index 8b94c3ec51cfd1ea504797afef4e7fc7e0a8df39..7857e8a0739b839d49df7a9ef87e4efd9af10c57 100644 --- a/jami-android/app/src/main/res/values/strings.xml +++ b/jami-android/app/src/main/res/values/strings.xml @@ -26,7 +26,7 @@ along with this program; if not, write to the Free Software <string name="ring_contribute_website" translatable="false">https://jami.net/contribute</string> <string name="savoirfairelinux_website" translatable="false">https://savoirfairelinux.com</string> - <string name="copyright" translatable="false">2004–2024 Savoir-faire Linux Inc.</string> + <string name="copyright" translatable="false">2004–2024 Savoir-faire Linux Inc.</string> <string name="feedback_section">Feedback</string> <string name="report"><u>Send us an email</u></string> <string name="section_license">License</string> @@ -35,10 +35,9 @@ along with this program; if not, write to the Free Software <string name="contribute_section">Contribute</string> <string name="version_section">Version</string> <string name="no_email_app_installed">No email app found, install one to send us a report</string> - <string name="no_browser_app_installed">No web browser app found, install one to view this page</string> + <string name="no_browser_app_installed">No web browser app found, install one to visit this page</string> <string name="email_chooser_title">Send mail using…</string> - <string name="website_chooser_title">View website using…</string> - <string name="license">This software is provided \"as is\", without warranty of any kind. For details, see <u>GNU General Public License version 3 or later</u></string> + <string name="license">This software is provided “as is”, without warranty of any kind. For details, see <u>GNU General Public License version 3 or later</u></string> <string name="description">Jami is free software for universal communication which respects the freedoms and privacy of its users.</string> <string name="credits">Credits</string> <string name="pip_title">Jami Conference</string> @@ -160,7 +159,7 @@ along with this program; if not, write to the Free Software <string name="menu_item_settings">Settings</string> <string name="menu_item_advanced_settings">Advanced Settings</string> <string name="menu_item_account_settings">Account Settings</string> - <string name="menu_item_plugin_list">Plugins Settings</string> + <string name="menu_item_extension_list">Extensions Settings</string> <string name="menu_item_share">Share my account</string> <string name="menu_item_about">About Jami</string> @@ -180,7 +179,7 @@ along with this program; if not, write to the Free Software </plurals> <!-- ContactList Fragment --> - <string name="searchbar_hint">Search name or conversation…</string> + <string name="searchbar_hint">Search name or conversation…</string> <string name="choose_number">Choose a number</string> <!-- FileExplorerDFragement --> @@ -238,17 +237,17 @@ along with this program; if not, write to the Free Software <string name="hist_in_call">Incoming call of %1$s</string> <string name="hist_out_call">Outgoing call of %1$s</string> <string name="call_duration">Lasted %s</string> - <string name="start_error_title">Can\'t start Jami !</string> + <string name="start_error_title">Cannot start Jami!</string> <string name="start_error_mic_required">Jami requires the microphone permission to work.</string> - <string name="action_call_accept">Take call</string> - <string name="action_call_accept_audio">Answer in audio</string> - <string name="action_call_accept_video">Answer in video</string> - <string name="action_call_hold_accept">Hold and take call audio</string> - <string name="action_call_hold_accept_video">Hold and take call video</string> - <string name="action_call_end_accept">End and take call</string> + <string name="action_call_accept">Accept call</string> + <string name="action_call_accept_audio">Accept incoming call with audio only</string> + <string name="action_call_accept_video">Accept incoming call with video</string> + <string name="action_call_hold_accept">Accept incoming call with audio only and hold current call</string> + <string name="action_call_hold_accept_video">Accept incoming call with video and hold current call</string> + <string name="action_call_end_accept">Accept incoming call and end current call</string> <string name="action_call_decline">Decline</string> <string name="action_call_mic_mute">Mute microphone</string> - <string name="action_load_plugin">Load Plugin</string> + <string name="action_load_extension">Load extension</string> <string name="ab_action_speakerphone">Enable speaker</string> <string name="ab_action_contact_add">Add to contacts</string> <string name="ab_action_contact_add_question">Add to contacts?</string> @@ -292,15 +291,15 @@ along with this program; if not, write to the Free Software <string name="ringtone_error_size_too_big">This file is too big. The maximum size is %1$dkB.</string> <string name="ringtone_custom_prompt">Set a custom ringtone</string> <string name="ringtone_custom_label">Custom</string> - <string name="ringtone_jami_tones">Jami Tones</string> + <string name="ringtone_jami_tones">Jami ringtones</string> <string name="ringtone_default_name" translatable="false">1 AfroNigeria.opus</string> <string name="ca_root_file" translatable="false">cacert.pem</string> <!-- Read contacts permission --> - <string name="permission_dialog_read_contacts_message">Jami needs the "Read contacts" permission to enable this feature. Please grant it.</string> + <string name="permission_dialog_read_contacts_message">Jami needs the “Read contacts” permission to enable this feature. Please grant it.</string> <!-- Write call log permission --> - <string name="permission_dialog_write_call_log_message">Jami needs the "Write call log" permission to enable this feature. Please grant it.</string> + <string name="permission_dialog_write_call_log_message">Jami needs the “Write call log” permission to enable this feature. Please grant it.</string> <!-- QRCode Scan --> <string name="scan_qr_account_message">Scan the QR Code of the account you want to add.</string> @@ -319,8 +318,8 @@ along with this program; if not, write to the Free Software <string name="conversation_details">Conversation details</string> <string name="contact_details">Contact details</string> <string name="conversation_action_delete_this">Delete this conversation</string> - <string name="conversation_action_delete_this_title">Delete this conversation ?</string> - <string name="conversation_action_delete_this_message">This action can not be undone.</string> + <string name="conversation_action_delete_this_title">Delete this conversation?</string> + <string name="conversation_action_delete_this_message">This action cannot be undone.</string> <string name="conversation_action_history_clear">Clear history</string> <string name="conversation_action_history_clear_title">Clear the conversation history?</string> <string name="conversation_action_history_clear_message">This will definitely clear the conversation history.</string> @@ -361,8 +360,8 @@ along with this program; if not, write to the Free Software <string name="conversation_contact_invited">%1$s was invited</string> <string name="conversation_contact_added">%1$s joined</string> <string name="conversation_contact_left">%1$s left</string> - <string name="conversation_contact_banned">%1$s was banned</string> - <string name="conversation_contact_unbanned">%1$s was unbanned</string> + <string name="conversation_contact_blocked">%1$s was blocked</string> + <string name="conversation_contact_unblocked">%1$s was unblocked</string> <string name="conversation_search_hint">Search conversation</string> <string name="audio_recorder_error">Audio recorder app was not found.</string> @@ -393,7 +392,7 @@ along with this program; if not, write to the Free Software <string name="help_password_choose">Choose a strong password you will remember to protect your Jami account.</string> <string name="help_password_enter">Enter your main Jami account password.</string> <string name="help_server_enter">Enter URL of management server.</string> - <string name="help_pin_enter">Enter the PIN from another configured Jami account. Use the \"export Jami account\" feature to obtain a PIN.</string> + <string name="help_pin_enter">Enter the PIN from another configured Jami account. Use the “Export Jami account” feature to obtain a PIN.</string> <string name="pin_copied">PIN code copied to clipboard.</string> <string name="wizard_next">Next</string> <string name="wizard_back">Back</string> @@ -401,8 +400,8 @@ along with this program; if not, write to the Free Software <string name="hist_contact_invited">Contact invited</string> <string name="hist_contact_added">Contact added</string> <string name="hist_contact_left">Contact left</string> - <string name="hist_contact_banned">Contact banned</string> - <string name="hist_contact_unbanned">Contact unbanned</string> + <string name="hist_contact_blocked">Contact blocked</string> + <string name="hist_contact_unblocked">Contact unblocked</string> <string name="hist_invitation_received">Invitation received</string> <!-- Account Summary --> @@ -459,7 +458,7 @@ along with this program; if not, write to the Free Software <string name="gallery_error_title">No Gallery app found</string> <string name="gallery_error_message">No application found on device to open Gallery</string> - <string name="generic_error">An unknown error occurred</string> + <string name="generic_error">An unknown error occurred.</string> <!--File Transfer--> <string name="invalid_file">Invalid file</string> @@ -480,7 +479,7 @@ along with this program; if not, write to the Free Software <string name="file_saved_in">File saved in %s</string> <string name="file_saved_successfully">File saved successfully</string> <string name="file_download">Download</string> - <string name="no_space_left_on_device">No space left on device</string> + <string name="no_space_left_on_device">No storage space available on the device</string> <string name="title_media_viewer">Media viewer</string> <string name="menu_file_open">Open file</string> <string name="menu_file_download">Download file</string> @@ -525,8 +524,8 @@ along with this program; if not, write to the Free Software <string name="audio_permission_rationale_message">Jami requires the microphone permission to use speech-to-text and record audio features. It will be asked in the next step.</string> <string name="camera_permission_rationale_message">Jami requires the camera permission to record video and place video call. It will be asked in the next step.</string> <string name="unable_to_start_recorder">Unable to start recording audio.</string> - <string name="error_sharing_file">Error sharing file.</string> - <string name="error_opening_file">Error opening file.</string> + <string name="error_sharing_file">An error occurred while sharing the file.</string> + <string name="error_opening_file">An error occurred while opening the file.</string> <!-- Wizard --> <string name="wizard_status_recommended">Recommended</string> @@ -545,31 +544,31 @@ along with this program; if not, write to the Free Software <string name="wizard_profile_button">Save Profile</string> <string name="wizard_profile_skip">Skip and do this later</string> <string name="fab_path_choose">Choose another file</string> - <string name="chat_plugins">Chat Plugins</string> + <string name="chat_extensions">Chat extensions</string> <!-- Bottom sheet --> <string name="bottomSheet_share_btn">Share</string> <string name="bottomSheet_dialpad_btn">Dialpad</string> - <string name="bottomSheet_plugins_btn">Plugins</string> + <string name="bottomSheet_extensions_btn">Extensions</string> <string name="bottomSheet_add_participants_btn">Add</string> <string name="bottomSheet_change_camera_btn">Change</string> <string name="bottomSheet_camera_onoff_switch_btn">Camera</string> - <string name="bottomSheet_hangup_btn">End Call</string> + <string name="bottomSheet_hangup_btn">End call</string> <string name="bottomSheet_mute_microphone_btn">Micro</string> <string name="bottomSheet_sound_output_btn">Sounds</string> <string name="bottomSheet_raiseHand_btn">Raise hand</string> - <string name="open_account_plugin_settings">Open Account Plugin Settings</string> - <string name="open_general_plugin_settings">Open General Plugin Settings</string> + <string name="open_account_extension_settings">Open Account Extension Settings</string> + <string name="open_general_extension_settings">Open General Extension Settings</string> <string name="uninstall">Uninstall</string> <string name="reset">Reset</string> <!-- Swarm Detail --> <string name="rename_btn">Confirm</string> - <string name="rename_error">can\'t be empty</string> - <string name="swarm_description">Add a description</string> - <string name="tab_about">About</string> + <string name="rename_error">cannot be empty.</string> + <string name="swarm_description">Add description</string> <string name="tab_members">Members</string> - <string name="tab_documetn">Documents</string> + <string name="tab_files">Files</string> + <string name="tab_settings">Settings</string> <string name="not_admin_toast">Only admins can edit the information of this group</string> <string name="dialogtitle_title">Edit Swarm title</string> <string name="dialogtitle_description">Edit Swarm description</string> @@ -606,11 +605,11 @@ along with this program; if not, write to the Free Software <string name="donation_setting_description">Enable the donation reminder</string> <string name="donation_url" translatable="false">https://crowdfunding.lfx.linuxfoundation.org/projects/jami-a-gnu-package</string> - <!-- Plugin --> + <!-- Extension --> <string name="unable_to_load">Unable to load %1$s</string> - <string name="load_sucess">%1$s: enabled</string> - <string name="unload_sucess">%1$s: disabled</string> - <string name="install_sucess">Extension %1$s has been successfully installed.</string> + <string name="load_success">%1$s: enabled</string> + <string name="unload_success">%1$s: disabled</string> + <string name="install_success">Extension %1$s has been successfully installed.</string> <string name="install_error">An error occurred while importing the extension.</string> </resources> diff --git a/jami-android/app/src/main/res/values/strings_account.xml b/jami-android/app/src/main/res/values/strings_account.xml index 167717be4f30b163dfa69ccaa8df1c48e71c8346..9ff10c8a316de23ae9cb93056829e212a3461146 100644 --- a/jami-android/app/src/main/res/values/strings_account.xml +++ b/jami-android/app/src/main/res/values/strings_account.xml @@ -45,31 +45,31 @@ along with this program; if not, write to the Free Software <string name="dialog_wait_update">Updating account</string> <string name="dialog_wait_update_details">Please wait while your new account is updated…</string> - <string name="dialog_warn_ip2ip_account_title">Create empty SIP account ?</string> + <string name="dialog_warn_ip2ip_account_title">Create empty SIP account?</string> <string name="dialog_warn_ip2ip_account_message">You are about to create a SIP account with no valid hostname. - You will only be able to make and receive direct ip calls. + You will only be able to make and receive direct IP calls. You can edit your account later</string> <string name="account_type_ip2ip">IP account</string> <string name="help_ring">A Jami account allows you to reach people securely in peer to peer through a fully distributed network.</string> - <string name="help_sip_title">Add your SIP account</string> + <string name="help_sip_title">Add SIP account</string> <string name="help_sip">Configure an existing SIP account.</string> - <string name="create_sip_account">Add SIP account</string> + <string name="create_sip_account">Configure SIP account</string> <!-- Strings related to account deletion --> - <string name="account_delete_dialog_title">Delete account ?</string> - <string name="account_delete_dialog_message">This action can not be undone.</string> + <string name="account_delete_dialog_title">Delete account?</string> + <string name="account_delete_dialog_message">This action cannot be undone.</string> <!-- AccountManagementFragment --> <string name="empty_account_list">No account registered</string> <string name="normal_accounts_titles">Accounts</string> - <string name="normal_devices_titles">Linked Devices</string> + <string name="normal_devices_titles">Linked devices</string> <string name="account_device_revoke">Revoke device</string> <string name="account_device_revocation_success_title">Success</string> <string name="account_device_revocation_success">Device is now revoked!</string> - <string name="account_device_revocation_error_title">Can\'t revoke device</string> - <string name="account_device_revocation_wrong_password">Wrong password.</string> + <string name="account_device_revocation_error_title">Revoke device error</string> + <string name="account_device_revocation_wrong_password">Incorrect password.</string> <string name="account_device_revocation_unknown_device">Unknown device.</string> <string name="account_device_revocation_error_unknown">Unknown error.</string> <string name="account_password_change">Change Password</string> @@ -96,8 +96,8 @@ along with this program; if not, write to the Free Software <string name="account_upnp_label">Enable UPnP</string> <string name="account_proxy_field">Proxy</string> - <!-- Plugin Details --> - <string name="account_preference_plugin_tab">Plugins</string> + <!-- Extension Details --> + <string name="account_preferences_extension_tab">Extensions</string> <!-- Audio Details --> <string name="account_audio_label">Audio</string> @@ -194,38 +194,38 @@ along with this program; if not, write to the Free Software <string name="export_account_wait_message">Exporting account information</string> <string name="account_export_file">Backup account</string> <string name="account_export_file_summary">Backup your account on your device to restore it later.</string> - <string name="account_export_end_decryption_message">Couldn\'t unlock your account using the provided password.</string> + <string name="account_export_end_decryption_message">Incorrect password. Please try again with the correct password.</string> <string name="account_export_end_network_title">Network error</string> - <string name="account_export_end_network_message">Couldn\'t export account on the network. Check your connectivity.</string> + <string name="account_export_end_network_message">A network error occurred while exporting the account. Check your connectivity.</string> <string name="account_export_end_error_title">Error</string> - <string name="account_export_end_error_message">Couldn\'t export account. An unknown error occurred.</string> + <string name="account_export_end_error_message">An unknown error occurred while exporting the account.</string> <string name="account_enter_password">Enter password</string> - <string name="account_share_body">Contact me using \'%1$s\' on the Jami distributed communication platform: %2$s</string> - <string name="account_share_body_with_username">Contact me using \'%1$s\' or my public username \'%2$s\' on the Jami distributed communication platform: %3$s</string> - <string name="account_contact_me">Contact me on Jami !</string> + <string name="account_share_body">Contact me using “%1$s” on the Jami distributed communication platform: %2$s</string> + <string name="account_share_body_with_username">Contact me using “%1$s” or my public username “%2$s” on the Jami distributed communication platform: %3$s</string> + <string name="account_contact_me">Contact me on Jami!</string> <string name="update_account">Update account</string> <string name="account_migration">Your Jami account can be updated.\nPlease enter your password.</string> <string name="ring_account">Jami account</string> <string name="sip_account">SIP account</string> <string name="ring_account_identity">Identity</string> <string name="account_migration_title_dialog">Account migration</string> - <string name="account_migration_message_dialog">Your accounts need to be updated. Do you want to go the Account management screen to perform this operation ?</string> + <string name="account_migration_message_dialog">Your accounts need to be updated. Do you want to go the Account management screen to perform this operation?</string> <string name="account_update_needed">Update needed</string> - <string name="account_cannot_be_found_title">Can\'t find account</string> - <string name="account_cannot_be_found_message">Account couldn\'t be found on the Jami network.\nMake sure it was exported on Jami from an existing device, and that provided credentials are correct.</string> + <string name="account_cannot_be_found_title">Account error</string> + <string name="account_cannot_be_found_message">Unable to find account on the Jami network. Make sure it was exported on Jami from an existing device, and that provided credentials are correct.</string> <string name="account_sip_cannot_be_registered_message">You can continue with the account creation process or edit your information here. Edition is still possible later in the account settings.</string> - <string name="account_no_network_title">Can\'t connect to the network</string> - <string name="account_no_network_message">Could not add account because Jami couldn\'t connect to the distributed network. Check your device connectivity.</string> + <string name="account_no_network_title">Network error</string> + <string name="account_no_network_message">A connectivity error occurred while adding Jami account to the distributed network. Check your device connectivity.</string> <string name="account_device_added_title">Account device added</string> <string name="account_device_added_message">You have successfully setup your Jami account on this device.</string> <string name="account_device_updated_title">Account device updated</string> <string name="account_device_updated_message">You have successfully updated your Jami account.</string> - <string name="account_cannot_be_updated_message">Account device couldn\'t be update. Please check your password.</string> - <string name="account_sip_success_title">Sip account registered</string> - <string name="account_sip_success_message">You have successfully registered your Sip account.</string> + <string name="account_cannot_be_updated_message">An error occurred while updating account. Please check your password.</string> + <string name="account_sip_success_title">SIP account registered</string> + <string name="account_sip_success_message">You have successfully registered your SIP account.</string> <string name="account_sip_register_anyway">Register anyway</string> - <!-- TV --> + <!-- TV --> <string name="account_tv_settings_header">Account settings</string> <string name="account_tv_advance_settings_header">Advanced settings</string> <string name="account_tv_add_contact">Add contact</string> @@ -244,11 +244,11 @@ along with this program; if not, write to the Free Software <string name="account_link_export_button">Link a new device</string> <string name="account_link_show_button">Show %d more linked device</string> <string name="account_link_hide_button">Hide linked device</string> - <string name="account_link_export_info">To use this account on other devices, you must first expose it on Jami. This will generate a PIN code that you must enter on the new device to set up the account. The PIN is valid for 10 minutes.</string> + <string name="account_link_export_info">To use this account on other devices, you must first expose it on Jami. This will generate a PIN code that you must enter on the new device to set up the account. The PIN will expire in 10 minutes.</string> <string name="account_start_export_button">Generate PIN</string> <string name="account_end_export_button">close</string> - <string name="account_end_export_infos">Your PIN is:\n\n%%\n\nTo complete the process, you need to open Jami on the new device. Create a new account with \"Link this device to an account\". Your PIN is valid for 10 minutes.</string> - <string name="account_link_export_info_light">To use this account on other devices, you must first expose it on Jami. This will generate a PIN code that you must enter on the new device to set up the account. The PIN is valid for 10 minutes.</string> + <string name="account_end_export_infos">Your PIN is:\n\n%%\n\nTo complete the process, you need to open Jami on the new device. Create a new account with “Link this device to an account”. The PIN will expire in 10 minutes.</string> + <string name="account_link_export_info_light">To use this account on other devices, you must first expose it on Jami. This will generate a PIN code that you must enter on the new device to set up the account. The PIN will expire in 10 minutes.</string> <string name="account_export_title">Link account to other devices</string> <string name="account_connect_server_button">Connect to management server</string> <string name="account_connect_button">Connect</string> @@ -282,23 +282,23 @@ along with this program; if not, write to the Free Software <string name="account_creation_profile">Create your profile</string> <string name="account_creation_ring">Create your Jami account</string> <string name="account_link_title">Link this device</string> - <string name="account_sip_cannot_be_registered">Can\'t register account</string> + <string name="account_sip_cannot_be_registered">An error occurred while registering SIP account.</string> <!-- Edit profile--> - <string name="account_edit_profile">Edit my account</string> + <string name="account_edit_profile">Edit profile</string> <!-- Devices --> <string name="account_revoke_device_hint">Enter password to confirm</string> <string name="enter_password">Enter password</string> <string name="revoke_device_title">Revoke device</string> - <string name="revoke_device_message">Are you sure you want to revoke %1$s ?</string> + <string name="revoke_device_message">Are you sure you want to revoke %1$s?</string> <string name="revoke_device_wait_title">Please wait…</string> <string name="revoke_device_wait_message">Revoking device</string> <string name="rename_device_title">Rename this device</string> <string name="rename_device_message">Choose a new name to identify this device in your Jami account</string> <string name="rename_device_button">Rename device</string> <string name="account_rename_device_hint">Choose new device name</string> - <string name="account_device_name_empty">Device name can\'t be empty</string> + <string name="account_device_name_empty">Device name cannot be empty.</string> <string name="account_device_this_indicator">This device</string> <string name="account_disabled_indicator">disabled</string> @@ -312,12 +312,12 @@ along with this program; if not, write to the Free Software <string name="account_link_password">This account is password-encrypted, enter the password to generate the PIN code.</string> <string name="account_link_generate_button">Generate</string> <string name="account_link_time_valid">The PIN code will be invalid: %1$s.</string> - <string name="account_link_device_info">Choose \"Link a new device\" from the other Jami app to show the QR code or PIN</string> + <string name="account_link_device_info">Choose “Link a new device” from the other Jami app to show the QR code or PIN</string> <string name="account_generate_export_device">On the other device</string> - <string name="account_generate_export_info">Install and launch Jami, select \"Import from an other device\" and scan the QR code.</string> + <string name="account_generate_export_info">Install and launch Jami, select “Import from an other device” and scan the QR code.</string> <string name="content_description_qr_generated">Your Qr Code</string> - <string name="account_generate_export_invalid">The PIN is no longer valid.\n Enter the password and generate another one to link the new device.</string> - <string name="account_generate_export_invalid_two">The PIN is no longer valid.\n Generate another one to link the new device.</string> + <string name="account_generate_export_invalid">The PIN is no longer valid.\nEnter the password and generate another one to link the new device.</string> + <string name="account_generate_export_invalid_two">The PIN is no longer valid.\nGenerate another one to link the new device.</string> <string name="help_pin_info">Fill if the account is password-encrypted</string> <string name="connect_device_scanqr">Scan QR</string> <string name="connect_device_enterPIN">Or enter PIN</string> diff --git a/jami-android/app/src/main/res/values/strings_content_description.xml b/jami-android/app/src/main/res/values/strings_content_description.xml index b57c41171f04d6e0c14091f99534032ccf0c461e..5c6e8c1e63706fc6a1dbb65d308251dc3e145751 100644 --- a/jami-android/app/src/main/res/values/strings_content_description.xml +++ b/jami-android/app/src/main/res/values/strings_content_description.xml @@ -1,11 +1,11 @@ <resources> <!-- Strings for xml content description of images --> - <string name="contact_quick_call_description">Quick Call</string> - <string name="contact_picture_description">Contact Picture</string> + <string name="contact_quick_call_description">Quick call</string> + <string name="contact_picture_description">Contact picture</string> <string name="dial_numeric_pad">Numeric dialpad</string> <string name="contact_unblock">Unblock</string> - <string name="video_plugins">Video Plugins</string> + <string name="video_extensions">Video extensions</string> <string name="file_download_button">Download</string> <string name="control_play">Play</string> <string name="control_replay">Replay</string> diff --git a/jami-android/app/src/main/res/values/strings_preferences.xml b/jami-android/app/src/main/res/values/strings_preferences.xml index f0ff2bddadfd2a3add1e51aa588b90ef44da9a53..2ac91fc5a9a44f01498571f59bb403d7e6745fa9 100644 --- a/jami-android/app/src/main/res/values/strings_preferences.xml +++ b/jami-android/app/src/main/res/values/strings_preferences.xml @@ -41,7 +41,7 @@ <string name="pref_startOnBoot_summary">Run Jami in the background when the system starts.</string> <string name="pref_clearHistory_title">Clear history</string> - <string name="pref_clearHistory_summary">Clear all the conversations history. This action can\'t be undone.</string> + <string name="pref_clearHistory_summary">Clear the history of all conversations. This action cannot be undone.</string> <string name="pref_notification_title">Notification visibility</string> <string name="pref_notification_summary">Set application notifications visibility on lock screen.</string> @@ -77,24 +77,24 @@ <string name="notification_private">Private \n(show notifications but hide their content on lock screen)\n</string> <string name="notification_secret">Secret \n(do not show notifications on lock screen)</string> - <!-- Plugin --> - <string name="pref_plugins_title">Plugins</string> - <string name="pref_plugins_summary">Enable plugins and set their parameters</string> - <string name="fab_plugins_add">Add a new plugin</string> - <string name="plugin_uninstall_title">Uninstall Plugin ?</string> - <string name="plugin_reset_preferences">Reset plugin preferences</string> - <string name="plugin_reset_preferences_summary">Your plugin settings will be defaulted</string> - <string name="plugin_reset_preferences_ask">Do you want to reset the general plugin settings ?</string> - <string name="plugin_reset_account_preferences_ask">Do you want to reset the account plugin settings ?</string> - <string name="plugin_successfully_installed">Plugin <b>%1$s</b> successfully installed</string> - <string name="plugin_install_failure">Failed to install plugin: <b>%1$s</b></string> - <string name="plugin_recent_version_exception">You have a more recent version of: <b>%1$s</b></string> - <string name="plugin_same_version_exception">You have the same version of <b>%1$s</b> installed</string> - <string name="plugin_invalid_signature"><b>%1$s</b> has an invalid signature</string> - <string name="plugin_invalid_authority">Can\'t verify authority for: <b>%1$s</b></string> - <string name="plugin_invalid_format">Invalid plugin format: <b>%1$s</b></string> - <string name="plugin_force_install">force \n install</string> - <string name="plugin_path_image_add">Add a new image</string> + <!-- Extension --> + <string name="pref_extensions_title">Extensions</string> + <string name="pref_extensions_summary">Enable extensions and set their parameters</string> + <string name="fab_extensions_add">Add new extension</string> + <string name="extension_uninstall_title">Uninstall extension?</string> + <string name="extension_reset_preferences">Reset extension preferences</string> + <string name="extension_reset_preferences_summary">Extension restored to the default settings</string> + <string name="extension_reset_preferences_ask">Do you want to reset the general extension settings?</string> + <string name="extension_reset_account_preferences_ask">Do you want to reset the account extension settings?</string> + <string name="extension_successfully_installed">Extension <b>%1$s</b> successfully installed</string> + <string name="extension_install_failure">An error occurred while installing the following extension: <b>%1$s</b></string> + <string name="extension_recent_version_exception">A more recent version of <b>%1$s</b> is installed.</string> + <string name="extension_same_version_exception">The same version of <b>%1$s</b> is installed.</string> + <string name="extension_invalid_signature"><b>%1$s</b> has an invalid signature</string> + <string name="extension_invalid_authority">Cannot verify authority for: <b>%1$s</b></string> + <string name="extension_invalid_format">Invalid extension format: <b>%1$s</b></string> + <string name="extension_force_install">force \n install</string> + <string name="extension_path_image_add">Add new image</string> <string name="default_emoji_1" translatable="false">👍</string> <string name="default_emoji_2" translatable="false">❤️</string> diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallPresenter.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallPresenter.kt index 323d3c0e4ba4dd11e4944dd4b0eb0bfe4075eb8d..81aa3c2a7c500606c8d1d274520f35a0879b83b4 100644 --- a/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallPresenter.kt +++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallPresenter.kt @@ -54,7 +54,7 @@ class CallPresenter @Inject constructor( private var incomingIsFullIntent = true private var callInitialized = false private var currentSurfaceId: String? = null - private var currentPluginSurfaceId: String? = null + private var currentExtensionSurfaceId: String? = null private var timeUpdateTask: Disposable? = null fun isSpeakerphoneOn(): Boolean = mHardwareService.isSpeakerphoneOn() var isMicrophoneMuted: Boolean = false @@ -203,13 +203,13 @@ class CallPresenter @Inject constructor( fun prepareBottomSheetButtonsStatus() { val conference = mConference ?: return val canDial = mOnGoingCall - val displayPluginsButton = view?.displayPluginsButton() == true - val showPluginBtn = displayPluginsButton && mOnGoingCall + val displayExtensionsButton = view?.displayExtensionsButton() == true + val showExtensionBtn = displayExtensionsButton && mOnGoingCall val hasActiveCameraVideo = conference.hasActiveNonScreenShareVideo() val hasActiveScreenShare = conference.hasActiveScreenSharing() val hasMultipleCamera = mHardwareService.cameraCount() > 1 && mOnGoingCall && hasActiveCameraVideo val isConference = conference.isConference - view?.updateBottomSheetButtonStatus(isConference, isSpeakerphoneOn(), conference.isAudioMuted, hasMultipleCamera, canDial, showPluginBtn, mOnGoingCall, hasActiveCameraVideo, hasActiveScreenShare) + view?.updateBottomSheetButtonStatus(isConference, isSpeakerphoneOn(), conference.isAudioMuted, hasMultipleCamera, canDial, showExtensionBtn, mOnGoingCall, hasActiveCameraVideo, hasActiveScreenShare) } fun chatClick() { @@ -321,18 +321,18 @@ class CallPresenter @Inject constructor( } } - fun pluginSurfaceCreated(holder: Any) { + fun extensionSurfaceCreated(holder: Any) { val conference = mConference ?: return var newId : String if (conference.hasActiveVideo()) { val mediaList = conference.getMediaList() for (m in mediaList) if (m.mediaType == Media.MediaType.MEDIA_TYPE_VIDEO) { newId = m.source!! - if (newId != currentPluginSurfaceId) { - currentPluginSurfaceId?.let { id -> + if (newId != currentExtensionSurfaceId) { + currentExtensionSurfaceId?.let { id -> mHardwareService.removeVideoSurface(id) } - currentPluginSurfaceId = newId + currentExtensionSurfaceId = newId } mHardwareService.addVideoSurface(newId, holder) //view?.displayContactBubble(false) @@ -340,12 +340,12 @@ class CallPresenter @Inject constructor( } } - private fun pluginSurfaceUpdateId(newId: String) { - if (newId != currentPluginSurfaceId) { - currentPluginSurfaceId?.let { oldId -> + private fun extensionSurfaceUpdateId(newId: String) { + if (newId != currentExtensionSurfaceId) { + currentExtensionSurfaceId?.let { oldId -> mHardwareService.updateVideoSurfaceId(oldId, newId) } - currentPluginSurfaceId = newId + currentExtensionSurfaceId = newId } } @@ -361,10 +361,10 @@ class CallPresenter @Inject constructor( } } - fun pluginSurfaceDestroyed() { - currentPluginSurfaceId?.let { id -> + fun extensionSurfaceDestroyed() { + currentExtensionSurfaceId?.let { id -> mHardwareService.removeVideoSurface(id) - currentPluginSurfaceId = null + currentExtensionSurfaceId = null } } @@ -410,7 +410,7 @@ class CallPresenter @Inject constructor( mHardwareService.setPreviewSettings() mHardwareService.updatePreviewVideoSurface(call) videoSurfaceUpdateId(call.id) - pluginSurfaceUpdateId(call.pluginId) + extensionSurfaceUpdateId(call.extensionId) view.displayLocalVideo(hasActiveCameraVideo && mDeviceRuntimeService.hasVideoPermission()) if (permissionChanged) { val camId = mHardwareService.changeCamera(true) @@ -666,7 +666,7 @@ class CallPresenter @Inject constructor( return mConference?.maximizedParticipant == info.contact.contact } - fun startPlugin(mediaHandlerId: String) { + fun startExtension(mediaHandlerId: String) { mHardwareService.startMediaHandler(mediaHandlerId) val conference = mConference ?: return val media = conference.getMediaList() @@ -676,7 +676,7 @@ class CallPresenter @Inject constructor( mHardwareService.switchInput(conference.accountId, conference.id, source) } - fun stopPlugin() { + fun stopExtension() { mHardwareService.stopMediaHandler() val conference = mConference ?: return val media = conference.getMediaList() ?: return diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallView.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallView.kt index 2de8c16c38149680caa36cdb598c36c2b9dbe928..9ba03693a14439cd1ed07ee17409b2ee64d3e602 100644 --- a/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallView.kt +++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/call/CallView.kt @@ -30,7 +30,7 @@ interface CallView { fun updateAudioState(state: AudioState) fun updateTime(duration: Long) fun updateCallStatus(callState: CallStatus) - fun updateBottomSheetButtonStatus(isConference: Boolean, isSpeakerOn: Boolean, isMicrophoneMuted: Boolean, hasMultipleCamera: Boolean, canDial: Boolean, showPluginBtn: Boolean, onGoingCall: Boolean, hasActiveCameraVideo: Boolean, hasActiveScreenShare: Boolean) + fun updateBottomSheetButtonStatus(isConference: Boolean, isSpeakerOn: Boolean, isMicrophoneMuted: Boolean, hasMultipleCamera: Boolean, canDial: Boolean, showExtensionBtn: Boolean, onGoingCall: Boolean, hasActiveCameraVideo: Boolean, hasActiveScreenShare: Boolean) fun resetBottomSheetState() fun initNormalStateDisplay() fun initIncomingCallDisplay(hasVideo: Boolean) @@ -46,7 +46,7 @@ interface CallView { fun prepareCall(acceptIncomingCall: Boolean) fun handleCallWakelock(isAudioOnly: Boolean) fun goToContact(accountId: String, contact: Contact) - fun displayPluginsButton(): Boolean + fun displayExtensionsButton(): Boolean fun updateConfInfo(info: List<ParticipantInfo>) fun updateParticipantRecording(contacts: List<ContactViewModel>) fun getMediaProjection(resultCode: Int, data: Any): Any diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationPresenter.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationPresenter.kt index bd42ce69e81562f8e95bb06d29651fd9f6936da1..0af7f7c2a22b834c66352b9ce82b157507ee07e1 100644 --- a/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationPresenter.kt +++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationPresenter.kt @@ -437,8 +437,8 @@ class ConversationPresenter @Inject constructor( .subscribe { conversation -> view?.startShareLocation(conversation.accountId, conversation.uri.uri) }) } - fun showPluginListHandlers() { - view?.showPluginListHandlers(mConversation!!.accountId, mConversationUri!!.uri) + fun showExtensionListHandlers() { + view?.showExtensionListHandlers(mConversation!!.accountId, mConversationUri!!.uri) } val path: Pair<String, Uri> diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationView.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationView.kt index 5ffcd42611b6ae4fb25cabf45de804b2d589c52c..7b50cdb7cb9c256db9d12013b7fd37a751774168 100644 --- a/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationView.kt +++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/conversation/ConversationView.kt @@ -58,7 +58,7 @@ interface ConversationView { fun startShareLocation(accountId: String, conversationId: String) fun showMap(accountId: String, contactId: String, open: Boolean) fun hideMap() - fun showPluginListHandlers(accountId: String, contactId: String) + fun showExtensionListHandlers(accountId: String, contactId: String) fun hideErrorPanel() fun displayNetworkErrorPanel() fun displayAccountOfflineErrorPanel() diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/model/Conference.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/model/Conference.kt index ea513181dc43f5c5722d7bd737ef6f162ad66496..9ffc0c163617bbe02fbe4ac9b45e7e3c72253685 100644 --- a/jami-android/libjamiclient/src/main/kotlin/net/jami/model/Conference.kt +++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/model/Conference.kt @@ -88,7 +88,7 @@ class Conference(val accountId: String, val id: String) { mParticipants[0] } else null - val pluginId: String + val extensionId: String get() = "local" val state: CallStatus? diff --git a/jami-android/libjamiclient/src/main/kotlin/net/jami/services/CallService.kt b/jami-android/libjamiclient/src/main/kotlin/net/jami/services/CallService.kt index 19f7d03624f93c5ca7a67a191f5e0613db79830c..6231c6dcb8dc0c31e1b2b0125e22f721afe9ea9f 100644 --- a/jami-android/libjamiclient/src/main/kotlin/net/jami/services/CallService.kt +++ b/jami-android/libjamiclient/src/main/kotlin/net/jami/services/CallService.kt @@ -326,18 +326,18 @@ abstract class CallService( } } - fun setAudioPlugin(audioPlugin: String) { + fun setAudioExtension(audioExtension: String) { mExecutor.execute { - Log.i(TAG, "setAudioPlugin() running…") - JamiService.setAudioPlugin(audioPlugin) + Log.i(TAG, "setAudioExtension() running…") + JamiService.setAudioPlugin(audioExtension) } } - val currentAudioOutputPlugin: String? + val currentAudioOutputExtension: String? get() { try { return mExecutor.submit<String> { - Log.i(TAG, "getCurrentAudioOutputPlugin() running…") + Log.i(TAG, "getCurrentAudioOutputExtension() running…") JamiService.getCurrentAudioOutputPlugin() }.get() } catch (e: Exception) {