avoid NPE when serverVersion is not known

NPE without this fix:

Exception java.lang.RuntimeException:
  at android.app.ActivityThread.performResumeActivity (ActivityThread.java:4975)
  at android.app.ActivityThread.handleResumeActivity (ActivityThread.java:5008)
  at android.app.servertransaction.ResumeActivityItem.execute (ResumeActivityItem.java:54)
  at android.app.servertransaction.ActivityTransactionItem.execute (ActivityTransactionItem.java:45)
  at android.app.servertransaction.TransactionExecutor.executeLifecycleState (TransactionExecutor.java:176)
  at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:97)
  at android.app.ActivityThread$H.handleMessage (ActivityThread.java:2386)
  at android.os.Handler.dispatchMessage (Handler.java:106)
  at android.os.Looper.loopOnce (Looper.java:210)
  at android.os.Looper.loop (Looper.java:299)
  at android.app.ActivityThread.main (ActivityThread.java:8252)
  at java.lang.reflect.Method.invoke
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:559)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:954)
Caused by java.lang.NullPointerException:
  at com.nextcloud.talk.conversationlist.ConversationsListActivity.onResume (ConversationsListActivity.kt:287)
  at android.app.Instrumentation.callActivityOnResume (Instrumentation.java:1565)
  at android.app.Activity.performResume (Activity.java:8668)
  at android.app.ActivityThread.performResumeActivity (ActivityThread.java:4965)

 The root cause may be that the CapabilitiesWorker is not finished so the serverVersion was not added to the user.

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2024-04-04 16:04:02 +02:00 committed by backportbot[bot]
parent 7856aa0472
commit d1f1d7ae83
4 changed files with 16 additions and 6 deletions

View file

@ -336,7 +336,7 @@ class ServerSelectionActivity : BaseActivity() {
if (hasTalk) { if (hasTalk) {
runOnUiThread { runOnUiThread {
if (CapabilitiesUtil.isServerEOL(capabilitiesOverall.ocs?.data?.serverVersion?.major!!)) { if (CapabilitiesUtil.isServerEOL(capabilitiesOverall.ocs?.data?.serverVersion?.major)) {
if (resources != null) { if (resources != null) {
runOnUiThread { runOnUiThread {
setErrorText(resources!!.getString(R.string.nc_settings_server_eol)) setErrorText(resources!!.getString(R.string.nc_settings_server_eol))

View file

@ -284,7 +284,7 @@ class ConversationsListActivity :
} }
currentUser = userManager.currentUser.blockingGet() currentUser = userManager.currentUser.blockingGet()
if (currentUser != null) { if (currentUser != null) {
if (isServerEOL(currentUser!!.serverVersion!!.major)) { if (isServerEOL(currentUser!!.serverVersion?.major)) {
showServerEOLDialog() showServerEOLDialog()
return return
} }

View file

@ -852,7 +852,7 @@ class SettingsActivity : BaseActivity(), SetPhoneNumberDialogFragment.SetPhoneNu
private fun setupServerAgeWarning() { private fun setupServerAgeWarning() {
when { when {
CapabilitiesUtil.isServerEOL(currentUser!!.serverVersion!!.major) -> { CapabilitiesUtil.isServerEOL(currentUser!!.serverVersion?.major) -> {
binding.serverAgeWarningText.setTextColor(ContextCompat.getColor((context), R.color.nc_darkRed)) binding.serverAgeWarningText.setTextColor(ContextCompat.getColor((context), R.color.nc_darkRed))
binding.serverAgeWarningText.setText(R.string.nc_settings_server_eol) binding.serverAgeWarningText.setText(R.string.nc_settings_server_eol)
binding.serverAgeWarningIcon.setColorFilter( binding.serverAgeWarningIcon.setColorFilter(
@ -861,7 +861,7 @@ class SettingsActivity : BaseActivity(), SetPhoneNumberDialogFragment.SetPhoneNu
) )
} }
CapabilitiesUtil.isServerAlmostEOL(currentUser!!.serverVersion!!.major) -> { CapabilitiesUtil.isServerAlmostEOL(currentUser!!.serverVersion?.major) -> {
binding.serverAgeWarningText.setTextColor( binding.serverAgeWarningText.setTextColor(
ContextCompat.getColor((context), R.color.nc_darkYellow) ContextCompat.getColor((context), R.color.nc_darkYellow)
) )

View file

@ -23,6 +23,7 @@
*/ */
package com.nextcloud.talk.utils package com.nextcloud.talk.utils
import android.util.Log
import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.models.json.capabilities.SpreedCapability import com.nextcloud.talk.models.json.capabilities.SpreedCapability
@ -74,11 +75,19 @@ enum class SpreedFeatures(val value: String) {
object CapabilitiesUtil { object CapabilitiesUtil {
//region Version checks //region Version checks
fun isServerEOL(serverVersion: Int): Boolean { fun isServerEOL(serverVersion: Int?): Boolean {
if (serverVersion == null) {
Log.w(TAG, "serverVersion is unknown. It is assumed that it is up to date")
return false
}
return (serverVersion < SERVER_VERSION_MIN_SUPPORTED) return (serverVersion < SERVER_VERSION_MIN_SUPPORTED)
} }
fun isServerAlmostEOL(serverVersion: Int): Boolean { fun isServerAlmostEOL(serverVersion: Int?): Boolean {
if (serverVersion == null) {
Log.w(TAG, "serverVersion is unknown. It is assumed that it is up to date")
return false
}
return (serverVersion < SERVER_VERSION_SUPPORT_WARNING) return (serverVersion < SERVER_VERSION_SUPPORT_WARNING)
} }
@ -286,6 +295,7 @@ object CapabilitiesUtil {
// endregion // endregion
private val TAG = CapabilitiesUtil::class.java.simpleName
const val DEFAULT_CHAT_SIZE = 1000 const val DEFAULT_CHAT_SIZE = 1000
const val RECORDING_CONSENT_NOT_REQUIRED = 0 const val RECORDING_CONSENT_NOT_REQUIRED = 0
const val RECORDING_CONSENT_REQUIRED = 1 const val RECORDING_CONSENT_REQUIRED = 1