From e1a9539c4d6822175e26198e6a5efcb4a2ffe6ce Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 13 Oct 2025 15:48:54 +0200 Subject: [PATCH 1/4] show only online settings when online Signed-off-by: sowjanyakch --- .../talk/diagnose/DiagnoseActivity.kt | 8 ++- .../diagnose/DiagnoseContentComposable.kt | 6 +- .../talk/settings/SettingsActivity.kt | 60 ++++++++++++------- 3 files changed, 48 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/diagnose/DiagnoseActivity.kt b/app/src/main/java/com/nextcloud/talk/diagnose/DiagnoseActivity.kt index 67a21c0e2b8..6ed02a69ecb 100644 --- a/app/src/main/java/com/nextcloud/talk/diagnose/DiagnoseActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/diagnose/DiagnoseActivity.kt @@ -42,6 +42,7 @@ import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager import com.nextcloud.talk.components.ColoredStatusBar import com.nextcloud.talk.components.StandardAppBar +import com.nextcloud.talk.data.network.NetworkMonitor import com.nextcloud.talk.users.UserManager import com.nextcloud.talk.utils.BrandingUtils import com.nextcloud.talk.utils.ClosedInterfaceImpl @@ -70,6 +71,9 @@ class DiagnoseActivity : BaseActivity() { @Inject lateinit var userManager: UserManager + @Inject + lateinit var networkMonitor: NetworkMonitor + @Inject lateinit var platformPermissionUtil: PlatformPermissionUtil @@ -112,6 +116,7 @@ class DiagnoseActivity : BaseActivity() { MaterialTheme( colorScheme = colorScheme ) { + val isOnline = networkMonitor.isOnline.collectAsState().value ColoredStatusBar() Scaffold( modifier = Modifier @@ -144,7 +149,8 @@ class DiagnoseActivity : BaseActivity() { viewState = viewState, onTestPushClick = { diagnoseViewModel.fetchTestPushResult() }, onDismissDialog = { diagnoseViewModel.dismissDialog() }, - isGooglePlayServicesAvailable = isGooglePlayServicesAvailable + isGooglePlayServicesAvailable = isGooglePlayServicesAvailable, + isOnline = isOnline ) } } diff --git a/app/src/main/java/com/nextcloud/talk/diagnose/DiagnoseContentComposable.kt b/app/src/main/java/com/nextcloud/talk/diagnose/DiagnoseContentComposable.kt index 1db7c121185..226e69dacb1 100644 --- a/app/src/main/java/com/nextcloud/talk/diagnose/DiagnoseContentComposable.kt +++ b/app/src/main/java/com/nextcloud/talk/diagnose/DiagnoseContentComposable.kt @@ -59,7 +59,8 @@ fun DiagnoseContentComposable( viewState: NotificationUiState, onTestPushClick: () -> Unit, onDismissDialog: () -> Unit, - isGooglePlayServicesAvailable: Boolean + isGooglePlayServicesAvailable: Boolean, + isOnline:Boolean ) { val context = LocalContext.current Column( @@ -101,7 +102,7 @@ fun DiagnoseContentComposable( } } } - if (isGooglePlayServicesAvailable) { + if (isGooglePlayServicesAvailable && isOnline) { ShowTestPushButton(onTestPushClick) } ShowNotificationData(isLoading, showDialog, context, viewState, onDismissDialog) @@ -259,6 +260,7 @@ fun DiagnoseContentPreview() { NotificationUiState.Success("Test notification successful"), {}, {}, + true, true ) } diff --git a/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt b/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt index c30df1ddd64..4411a0af42e 100644 --- a/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt @@ -32,6 +32,8 @@ import android.view.View import android.view.WindowManager import android.widget.Toast import androidx.appcompat.app.AlertDialog +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.mutableStateOf import androidx.core.content.ContextCompat import androidx.core.content.res.ResourcesCompat import androidx.core.graphics.drawable.toDrawable @@ -56,6 +58,7 @@ import com.nextcloud.talk.application.NextcloudTalkApplication import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.setAppTheme import com.nextcloud.talk.conversationlist.ConversationsListActivity import com.nextcloud.talk.conversationlist.ConversationsListActivity.Companion.NOTIFICATION_WARNING_DATE_NOT_SET +import com.nextcloud.talk.data.network.NetworkMonitor import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.databinding.ActivitySettingsBinding import com.nextcloud.talk.diagnose.DiagnoseActivity @@ -113,6 +116,9 @@ class SettingsActivity : @Inject lateinit var ncApi: NcApi + @Inject + lateinit var networkMonitor: NetworkMonitor + @Inject lateinit var ncApiCoroutines: NcApiCoroutines @@ -136,11 +142,15 @@ class SettingsActivity : private var profileQueryDisposable: Disposable? = null private var dbQueryDisposable: Disposable? = null private var openedByNotificationWarning: Boolean = false + private var isOnline: MutableState = mutableStateOf(false) @SuppressLint("StringFormatInvalid") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this) + networkMonitor.isOnlineLiveData.observe(this){ online -> + isOnline.value = online + } binding = ActivitySettingsBinding.inflate(layoutInflater) setupActionBar() @@ -151,9 +161,9 @@ class SettingsActivity : getCurrentUser() handleIntent(intent) - - setupLicenceSetting() - + networkMonitor.isOnlineLiveData.observe(this){ isOnline -> + setupLicenceSetting(isOnline) + } binding.settingsScreenLockSummary.text = String.format( Locale.getDefault(), resources!!.getString(R.string.nc_settings_screen_lock_desc), @@ -161,11 +171,14 @@ class SettingsActivity : ) setupDiagnose() - setupPrivacyUrl() - setupSourceCodeUrl() + + setupPrivacyUrl(isOnline.value) + setupSourceCodeUrl(isOnline.value) + + binding.settingsVersionSummary.text = String.format("v" + BuildConfig.VERSION_NAME) - setupPhoneBookIntegration() + setupPhoneBookIntegration(isOnline.value) setupClientCertView() } @@ -180,7 +193,7 @@ class SettingsActivity : supportActionBar?.show() dispose(null) - loadCapabilitiesAndUpdateSettings() + loadCapabilitiesAndUpdateSettings(isOnline.value) binding.settingsVersion.setOnClickListener { sendLogs() @@ -192,7 +205,7 @@ class SettingsActivity : binding.settingsClientCertTitle.setText(R.string.nc_client_cert_setup) } - setupCheckables() + setupCheckables(isOnline.value) setupScreenLockSetting() setupNotificationSettings() setupProxyTypeSettings() @@ -241,7 +254,7 @@ class SettingsActivity : } } - private fun loadCapabilitiesAndUpdateSettings() { + private fun loadCapabilitiesAndUpdateSettings(isOnline:Boolean) { val capabilitiesWork = OneTimeWorkRequest.Builder(CapabilitiesWorker::class.java).build() WorkManager.getInstance(context).enqueue(capabilitiesWork) @@ -249,7 +262,7 @@ class SettingsActivity : .observe(this) { workInfo -> if (workInfo?.state == WorkInfo.State.SUCCEEDED) { getCurrentUser() - setupCheckables() + setupCheckables(isOnline) } } } @@ -271,11 +284,11 @@ class SettingsActivity : credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token) } - private fun setupPhoneBookIntegration() { + private fun setupPhoneBookIntegration(isOnline:Boolean) { if (CapabilitiesUtil.hasSpreedFeatureCapability( currentUser?.capabilities?.spreedCapability!!, SpreedFeatures.PHONEBOOK_SEARCH - ) + ) && isOnline ) { binding.settingsPhoneBookIntegration.visibility = View.VISIBLE } else { @@ -498,8 +511,8 @@ class SettingsActivity : } } - private fun setupSourceCodeUrl() { - if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_source_code_url))) { + private fun setupSourceCodeUrl(isOnline:Boolean) { + if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_source_code_url)) && isOnline) { binding.settingsSourceCode.setOnClickListener { startActivity( Intent( @@ -520,8 +533,8 @@ class SettingsActivity : } } - private fun setupPrivacyUrl() { - if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_privacy_url))) { + private fun setupPrivacyUrl(isOnline:Boolean) { + if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_privacy_url)) && isOnline) { binding.settingsPrivacy.setOnClickListener { startActivity( Intent( @@ -535,8 +548,8 @@ class SettingsActivity : } } - private fun setupLicenceSetting() { - if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_gpl3_url))) { + private fun setupLicenceSetting(isOnline:Boolean) { + if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_gpl3_url)) && isOnline) { binding.settingsLicence.setOnClickListener { startActivity( Intent( @@ -928,7 +941,7 @@ class SettingsActivity : } } - private fun setupCheckables() { + private fun setupCheckables(isOnline:Boolean) { binding.settingsShowNotificationWarningSwitch.isChecked = appPreferences.showRegularNotificationWarning @@ -945,13 +958,14 @@ class SettingsActivity : binding.settingsShowNotificationWarning.visibility = View.GONE } - if (CapabilitiesUtil.isReadStatusAvailable(currentUser?.capabilities?.spreedCapability)) { + if (CapabilitiesUtil.isReadStatusAvailable(currentUser?.capabilities?.spreedCapability) + && isOnline) { binding.settingsReadPrivacySwitch.isChecked = !CapabilitiesUtil.isReadStatusPrivate(currentUser!!) } else { binding.settingsReadPrivacy.visibility = View.GONE } - setupTypingStatusSetting() + setupTypingStatusSetting(isOnline) setupProxyUseSetting() binding.settingsScreenLockSwitch.isChecked = appPreferences.isScreenLocked @@ -1015,12 +1029,12 @@ class SettingsActivity : } } - private fun setupTypingStatusSetting() { + private fun setupTypingStatusSetting(isOnline:Boolean) { if (currentUser!!.externalSignalingServer?.externalSignalingServer?.isNotEmpty() == true) { binding.settingsTypingStatusOnlyWithHpb.visibility = View.GONE Log.i(TAG, "Typing Status Available: ${CapabilitiesUtil.isTypingStatusAvailable(currentUser!!)}") - if (CapabilitiesUtil.isTypingStatusAvailable(currentUser!!)) { + if (CapabilitiesUtil.isTypingStatusAvailable(currentUser!!) && isOnline) { binding.settingsTypingStatusSwitch.isChecked = !CapabilitiesUtil.isTypingStatusPrivate(currentUser!!) } else { binding.settingsTypingStatus.visibility = View.GONE From bb1e8f2b65247bf91f76af74081e9ec22a89f0b7 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Mon, 13 Oct 2025 17:33:25 +0200 Subject: [PATCH 2/4] make UI reactive Signed-off-by: sowjanyakch --- .../diagnose/DiagnoseContentComposable.kt | 2 +- .../talk/settings/SettingsActivity.kt | 45 ++++++++++++------- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/diagnose/DiagnoseContentComposable.kt b/app/src/main/java/com/nextcloud/talk/diagnose/DiagnoseContentComposable.kt index 226e69dacb1..29c1be2127b 100644 --- a/app/src/main/java/com/nextcloud/talk/diagnose/DiagnoseContentComposable.kt +++ b/app/src/main/java/com/nextcloud/talk/diagnose/DiagnoseContentComposable.kt @@ -60,7 +60,7 @@ fun DiagnoseContentComposable( onTestPushClick: () -> Unit, onDismissDialog: () -> Unit, isGooglePlayServicesAvailable: Boolean, - isOnline:Boolean + isOnline: Boolean ) { val context = LocalContext.current Column( diff --git a/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt b/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt index 4411a0af42e..bae5e5c9e38 100644 --- a/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt @@ -148,8 +148,9 @@ class SettingsActivity : override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) NextcloudTalkApplication.sharedApplication!!.componentApplication.inject(this) - networkMonitor.isOnlineLiveData.observe(this){ online -> + networkMonitor.isOnlineLiveData.observe(this) { online -> isOnline.value = online + handleNetworkChange(isOnline.value) } binding = ActivitySettingsBinding.inflate(layoutInflater) @@ -161,9 +162,9 @@ class SettingsActivity : getCurrentUser() handleIntent(intent) - networkMonitor.isOnlineLiveData.observe(this){ isOnline -> - setupLicenceSetting(isOnline) - } + + setupLicenceSetting(isOnline.value) + binding.settingsScreenLockSummary.text = String.format( Locale.getDefault(), resources!!.getString(R.string.nc_settings_screen_lock_desc), @@ -175,7 +176,6 @@ class SettingsActivity : setupPrivacyUrl(isOnline.value) setupSourceCodeUrl(isOnline.value) - binding.settingsVersionSummary.text = String.format("v" + BuildConfig.VERSION_NAME) setupPhoneBookIntegration(isOnline.value) @@ -183,6 +183,14 @@ class SettingsActivity : setupClientCertView() } + private fun handleNetworkChange(isOnline: Boolean) { + setupLicenceSetting(isOnline) + setupPrivacyUrl(isOnline) + setupSourceCodeUrl(isOnline) + setupPhoneBookIntegration(isOnline) + setupCheckables(isOnline) + } + private fun handleIntent(intent: Intent) { val extras: Bundle? = intent.extras openedByNotificationWarning = extras?.getBoolean(KEY_SCROLL_TO_NOTIFICATION_CATEGORY) ?: false @@ -254,7 +262,7 @@ class SettingsActivity : } } - private fun loadCapabilitiesAndUpdateSettings(isOnline:Boolean) { + private fun loadCapabilitiesAndUpdateSettings(isOnline: Boolean) { val capabilitiesWork = OneTimeWorkRequest.Builder(CapabilitiesWorker::class.java).build() WorkManager.getInstance(context).enqueue(capabilitiesWork) @@ -284,11 +292,12 @@ class SettingsActivity : credentials = ApiUtils.getCredentials(currentUser!!.username, currentUser!!.token) } - private fun setupPhoneBookIntegration(isOnline:Boolean) { + private fun setupPhoneBookIntegration(isOnline: Boolean) { if (CapabilitiesUtil.hasSpreedFeatureCapability( currentUser?.capabilities?.spreedCapability!!, SpreedFeatures.PHONEBOOK_SEARCH - ) && isOnline + ) && + isOnline ) { binding.settingsPhoneBookIntegration.visibility = View.VISIBLE } else { @@ -511,8 +520,9 @@ class SettingsActivity : } } - private fun setupSourceCodeUrl(isOnline:Boolean) { + private fun setupSourceCodeUrl(isOnline: Boolean) { if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_source_code_url)) && isOnline) { + binding.settingsSourceCode.visibility = View.VISIBLE binding.settingsSourceCode.setOnClickListener { startActivity( Intent( @@ -533,8 +543,9 @@ class SettingsActivity : } } - private fun setupPrivacyUrl(isOnline:Boolean) { + private fun setupPrivacyUrl(isOnline: Boolean) { if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_privacy_url)) && isOnline) { + binding.settingsPrivacy.visibility = View.VISIBLE binding.settingsPrivacy.setOnClickListener { startActivity( Intent( @@ -548,8 +559,9 @@ class SettingsActivity : } } - private fun setupLicenceSetting(isOnline:Boolean) { + private fun setupLicenceSetting(isOnline: Boolean) { if (!TextUtils.isEmpty(resources!!.getString(R.string.nc_gpl3_url)) && isOnline) { + binding.settingsLicence.visibility = View.VISIBLE binding.settingsLicence.setOnClickListener { startActivity( Intent( @@ -941,7 +953,7 @@ class SettingsActivity : } } - private fun setupCheckables(isOnline:Boolean) { + private fun setupCheckables(isOnline: Boolean) { binding.settingsShowNotificationWarningSwitch.isChecked = appPreferences.showRegularNotificationWarning @@ -958,8 +970,10 @@ class SettingsActivity : binding.settingsShowNotificationWarning.visibility = View.GONE } - if (CapabilitiesUtil.isReadStatusAvailable(currentUser?.capabilities?.spreedCapability) - && isOnline) { + if (CapabilitiesUtil.isReadStatusAvailable(currentUser?.capabilities?.spreedCapability) && + isOnline + ) { + binding.settingsReadPrivacy.visibility = View.VISIBLE binding.settingsReadPrivacySwitch.isChecked = !CapabilitiesUtil.isReadStatusPrivate(currentUser!!) } else { binding.settingsReadPrivacy.visibility = View.GONE @@ -1029,12 +1043,13 @@ class SettingsActivity : } } - private fun setupTypingStatusSetting(isOnline:Boolean) { + private fun setupTypingStatusSetting(isOnline: Boolean) { if (currentUser!!.externalSignalingServer?.externalSignalingServer?.isNotEmpty() == true) { binding.settingsTypingStatusOnlyWithHpb.visibility = View.GONE Log.i(TAG, "Typing Status Available: ${CapabilitiesUtil.isTypingStatusAvailable(currentUser!!)}") if (CapabilitiesUtil.isTypingStatusAvailable(currentUser!!) && isOnline) { + binding.settingsTypingStatus.visibility = View.VISIBLE binding.settingsTypingStatusSwitch.isChecked = !CapabilitiesUtil.isTypingStatusPrivate(currentUser!!) } else { binding.settingsTypingStatus.visibility = View.GONE From b8ffe501a6adb1343a23e92ed13f23350534c9a7 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Thu, 16 Oct 2025 21:44:12 +0200 Subject: [PATCH 3/4] don't show client certi when offline Signed-off-by: sowjanyakch --- .../com/nextcloud/talk/settings/SettingsActivity.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt b/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt index bae5e5c9e38..eabd846db1b 100644 --- a/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt @@ -181,6 +181,8 @@ class SettingsActivity : setupPhoneBookIntegration(isOnline.value) setupClientCertView() + showSetupClientCertView(isOnline.value) + } private fun handleNetworkChange(isOnline: Boolean) { @@ -189,6 +191,7 @@ class SettingsActivity : setupSourceCodeUrl(isOnline) setupPhoneBookIntegration(isOnline) setupCheckables(isOnline) + showSetupClientCertView(isOnline) } private fun handleIntent(intent: Intent) { @@ -575,6 +578,14 @@ class SettingsActivity : } } + private fun showSetupClientCertView(isOnline:Boolean){ + if(isOnline){ + binding.settingsClientCert.visibility = View.VISIBLE + }else{ + binding.settingsClientCert.visibility = View.GONE + } + } + private fun setupClientCertView() { var host: String? = null var port = -1 From 477208e7aab5d1d6b164638a7b3eb26d4ae300e9 Mon Sep 17 00:00:00 2001 From: sowjanyakch Date: Fri, 17 Oct 2025 23:39:06 +0200 Subject: [PATCH 4/4] hide proxy settings Signed-off-by: sowjanyakch --- .../java/com/nextcloud/talk/settings/SettingsActivity.kt | 9 +++++---- app/src/main/res/layout/activity_settings.xml | 7 +++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt b/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt index eabd846db1b..04bb7e03e5d 100644 --- a/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/settings/SettingsActivity.kt @@ -182,7 +182,6 @@ class SettingsActivity : setupClientCertView() showSetupClientCertView(isOnline.value) - } private fun handleNetworkChange(isOnline: Boolean) { @@ -578,11 +577,13 @@ class SettingsActivity : } } - private fun showSetupClientCertView(isOnline:Boolean){ - if(isOnline){ + private fun showSetupClientCertView(isOnline: Boolean) { + if (isOnline) { binding.settingsClientCert.visibility = View.VISIBLE - }else{ + binding.settingsProxyGroup.visibility = View.VISIBLE + } else { binding.settingsClientCert.visibility = View.GONE + binding.settingsProxyGroup.visibility = View.GONE } } diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index d3bbd1bf694..84a4a6b2990 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -682,6 +682,12 @@ + + +