expanding the discovery polices on recieving a custom payload

- also meant updating the general link to discovery in order to manually pass the default arguments
This commit is contained in:
Adam Brown 2021-10-07 13:50:43 +01:00
parent 728f34f53c
commit 7b5972e3cf
7 changed files with 63 additions and 21 deletions

View File

@ -21,6 +21,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.airbnb.mvrx.args
import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.fragmentViewModel
import com.airbnb.mvrx.withState import com.airbnb.mvrx.withState
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
@ -36,6 +37,7 @@ import im.vector.app.core.utils.openUrlInChromeCustomTab
import im.vector.app.core.utils.showIdentityServerConsentDialog import im.vector.app.core.utils.showIdentityServerConsentDialog
import im.vector.app.databinding.FragmentGenericRecyclerBinding import im.vector.app.databinding.FragmentGenericRecyclerBinding
import im.vector.app.features.discovery.change.SetIdentityServerFragment import im.vector.app.features.discovery.change.SetIdentityServerFragment
import im.vector.app.features.navigation.SettingsActivityPayload
import im.vector.app.features.settings.VectorSettingsActivity import im.vector.app.features.settings.VectorSettingsActivity
import org.matrix.android.sdk.api.session.identity.SharedState import org.matrix.android.sdk.api.session.identity.SharedState
import org.matrix.android.sdk.api.session.identity.ThreePid import org.matrix.android.sdk.api.session.identity.ThreePid
@ -53,6 +55,7 @@ class DiscoverySettingsFragment @Inject constructor(
} }
private val viewModel by fragmentViewModel(DiscoverySettingsViewModel::class) private val viewModel by fragmentViewModel(DiscoverySettingsViewModel::class)
private val discoveryArgs: SettingsActivityPayload.DiscoverySettings by args()
lateinit var sharedViewModel: DiscoverySharedViewModel lateinit var sharedViewModel: DiscoverySharedViewModel
@ -78,6 +81,9 @@ class DiscoverySettingsFragment @Inject constructor(
} }
}.exhaustive }.exhaustive
} }
if (discoveryArgs.expandIdentityPolicies) {
viewModel.handle(DiscoverySettingsAction.ExpandPolicyUrls)
}
} }
override fun onDestroyView() { override fun onDestroyView() {

View File

@ -19,7 +19,6 @@ package im.vector.app.features.navigation
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Parcelable
import android.view.View import android.view.View
import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.ActivityResultLauncher
import androidx.core.util.Pair import androidx.core.util.Pair
@ -32,7 +31,6 @@ import im.vector.app.features.roomdirectory.RoomDirectoryData
import im.vector.app.features.roomdirectory.roompreview.RoomPreviewData import im.vector.app.features.roomdirectory.roompreview.RoomPreviewData
import im.vector.app.features.settings.VectorSettingsActivity import im.vector.app.features.settings.VectorSettingsActivity
import im.vector.app.features.share.SharedData import im.vector.app.features.share.SharedData
import kotlinx.parcelize.Parcelize
import org.matrix.android.sdk.api.session.permalinks.PermalinkData import org.matrix.android.sdk.api.session.permalinks.PermalinkData
import org.matrix.android.sdk.api.session.room.model.roomdirectory.PublicRoom import org.matrix.android.sdk.api.session.room.model.roomdirectory.PublicRoom
import org.matrix.android.sdk.api.session.terms.TermsService import org.matrix.android.sdk.api.session.terms.TermsService
@ -143,14 +141,3 @@ interface Navigator {
fun openCallTransfer(context: Context, callId: String) fun openCallTransfer(context: Context, callId: String)
} }
sealed interface SettingsActivityPayload : Parcelable {
@Parcelize object Root : SettingsActivityPayload
@Parcelize object AdvancedSettings : SettingsActivityPayload
@Parcelize object SecurityPrivacy : SettingsActivityPayload
@Parcelize object SecurityPrivacyManageSessions : SettingsActivityPayload
@Parcelize object General : SettingsActivityPayload
@Parcelize object Notifications : SettingsActivityPayload
@Parcelize object DiscoverySettings : SettingsActivityPayload
}

View File

@ -0,0 +1,33 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.app.features.navigation
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
sealed interface SettingsActivityPayload : Parcelable {
@Parcelize object Root : SettingsActivityPayload
@Parcelize object AdvancedSettings : SettingsActivityPayload
@Parcelize object SecurityPrivacy : SettingsActivityPayload
@Parcelize object SecurityPrivacyManageSessions : SettingsActivityPayload
@Parcelize object General : SettingsActivityPayload
@Parcelize object Notifications : SettingsActivityPayload
@Parcelize
data class DiscoverySettings(val expandIdentityPolicies: Boolean = false) : SettingsActivityPayload
}

View File

@ -44,6 +44,7 @@ class VectorPreferences @Inject constructor(private val context: Context) {
const val SETTINGS_IDENTITY_SERVER_PREFERENCE_KEY = "SETTINGS_IDENTITY_SERVER_PREFERENCE_KEY" const val SETTINGS_IDENTITY_SERVER_PREFERENCE_KEY = "SETTINGS_IDENTITY_SERVER_PREFERENCE_KEY"
const val SETTINGS_APP_TERM_CONDITIONS_PREFERENCE_KEY = "SETTINGS_APP_TERM_CONDITIONS_PREFERENCE_KEY" const val SETTINGS_APP_TERM_CONDITIONS_PREFERENCE_KEY = "SETTINGS_APP_TERM_CONDITIONS_PREFERENCE_KEY"
const val SETTINGS_PRIVACY_POLICY_PREFERENCE_KEY = "SETTINGS_PRIVACY_POLICY_PREFERENCE_KEY" const val SETTINGS_PRIVACY_POLICY_PREFERENCE_KEY = "SETTINGS_PRIVACY_POLICY_PREFERENCE_KEY"
const val SETTINGS_DISCOVERY_PREFERENCE_KEY = "SETTINGS_DISCOVERY_PREFERENCE_KEY"
const val SETTINGS_NOTIFICATION_ADVANCED_PREFERENCE_KEY = "SETTINGS_NOTIFICATION_ADVANCED_PREFERENCE_KEY" const val SETTINGS_NOTIFICATION_ADVANCED_PREFERENCE_KEY = "SETTINGS_NOTIFICATION_ADVANCED_PREFERENCE_KEY"
const val SETTINGS_THIRD_PARTY_NOTICES_PREFERENCE_KEY = "SETTINGS_THIRD_PARTY_NOTICES_PREFERENCE_KEY" const val SETTINGS_THIRD_PARTY_NOTICES_PREFERENCE_KEY = "SETTINGS_THIRD_PARTY_NOTICES_PREFERENCE_KEY"

View File

@ -18,7 +18,9 @@ package im.vector.app.features.settings
import android.app.Activity import android.app.Activity
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.os.Bundle
import android.os.Parcelable import android.os.Parcelable
import android.util.Log
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import androidx.preference.Preference import androidx.preference.Preference
@ -71,7 +73,7 @@ class VectorSettingsActivity : VectorBaseActivity<ActivityVectorSettingsBinding>
if (isFirstCreation()) { if (isFirstCreation()) {
// display the fragment // display the fragment
when (readPayload<SettingsActivityPayload>(SettingsActivityPayload.Root)) { when (val payload = readPayload<SettingsActivityPayload>(SettingsActivityPayload.Root)) {
SettingsActivityPayload.General -> SettingsActivityPayload.General ->
replaceFragment(R.id.vector_settings_page, VectorSettingsGeneralFragment::class.java, null, FRAGMENT_TAG) replaceFragment(R.id.vector_settings_page, VectorSettingsGeneralFragment::class.java, null, FRAGMENT_TAG)
SettingsActivityPayload.AdvancedSettings -> SettingsActivityPayload.AdvancedSettings ->
@ -87,8 +89,9 @@ class VectorSettingsActivity : VectorBaseActivity<ActivityVectorSettingsBinding>
requestHighlightPreferenceKeyOnResume(VectorPreferences.SETTINGS_ENABLE_THIS_DEVICE_PREFERENCE_KEY) requestHighlightPreferenceKeyOnResume(VectorPreferences.SETTINGS_ENABLE_THIS_DEVICE_PREFERENCE_KEY)
replaceFragment(R.id.vector_settings_page, VectorSettingsNotificationPreferenceFragment::class.java, null, FRAGMENT_TAG) replaceFragment(R.id.vector_settings_page, VectorSettingsNotificationPreferenceFragment::class.java, null, FRAGMENT_TAG)
} }
SettingsActivityPayload.DiscoverySettings -> { is SettingsActivityPayload.DiscoverySettings -> {
replaceFragment(R.id.vector_settings_page, DiscoverySettingsFragment::class.java, null, FRAGMENT_TAG) Log.e("!!!", "SettingsActivityPayload.DiscoverySettings : $payload")
replaceFragment(R.id.vector_settings_page, DiscoverySettingsFragment::class.java, payload, FRAGMENT_TAG)
} }
else -> else ->
replaceFragment(R.id.vector_settings_page, VectorSettingsRootFragment::class.java, null, FRAGMENT_TAG) replaceFragment(R.id.vector_settings_page, VectorSettingsRootFragment::class.java, null, FRAGMENT_TAG)
@ -154,10 +157,10 @@ class VectorSettingsActivity : VectorBaseActivity<ActivityVectorSettingsBinding>
} }
} }
fun <T : Fragment> navigateTo(fragmentClass: Class<T>) { fun <T : Fragment> navigateTo(fragmentClass: Class<T>, arguments: Bundle? = null) {
supportFragmentManager.beginTransaction() supportFragmentManager.beginTransaction()
.setCustomAnimations(R.anim.right_in, R.anim.fade_out, R.anim.fade_in, R.anim.right_out) .setCustomAnimations(R.anim.right_in, R.anim.fade_out, R.anim.fade_in, R.anim.right_out)
.replace(R.id.vector_settings_page, fragmentClass, null) .replace(R.id.vector_settings_page, fragmentClass, arguments)
.addToBackStack(null) .addToBackStack(null)
.commit() .commit()
} }
@ -170,7 +173,7 @@ class VectorSettingsActivity : VectorBaseActivity<ActivityVectorSettingsBinding>
EXTRA_DIRECT_ACCESS_SECURITY_PRIVACY_MANAGE_SESSIONS -> SettingsActivityPayload.SecurityPrivacyManageSessions EXTRA_DIRECT_ACCESS_SECURITY_PRIVACY_MANAGE_SESSIONS -> SettingsActivityPayload.SecurityPrivacyManageSessions
EXTRA_DIRECT_ACCESS_GENERAL -> SettingsActivityPayload.General EXTRA_DIRECT_ACCESS_GENERAL -> SettingsActivityPayload.General
EXTRA_DIRECT_ACCESS_NOTIFICATIONS -> SettingsActivityPayload.Notifications EXTRA_DIRECT_ACCESS_NOTIFICATIONS -> SettingsActivityPayload.Notifications
EXTRA_DIRECT_ACCESS_DISCOVERY_SETTINGS -> SettingsActivityPayload.DiscoverySettings EXTRA_DIRECT_ACCESS_DISCOVERY_SETTINGS -> SettingsActivityPayload.DiscoverySettings()
else -> { else -> {
Timber.w("Unknown directAccess: $directAccess defaulting to Root") Timber.w("Unknown directAccess: $directAccess defaulting to Root")
SettingsActivityPayload.Root SettingsActivityPayload.Root

View File

@ -38,6 +38,7 @@ import im.vector.app.R
import im.vector.app.core.dialogs.GalleryOrCameraDialogHelper import im.vector.app.core.dialogs.GalleryOrCameraDialogHelper
import im.vector.app.core.extensions.hideKeyboard import im.vector.app.core.extensions.hideKeyboard
import im.vector.app.core.extensions.hidePassword import im.vector.app.core.extensions.hidePassword
import im.vector.app.core.extensions.toMvRxBundle
import im.vector.app.core.intent.getFilenameFromUri import im.vector.app.core.intent.getFilenameFromUri
import im.vector.app.core.platform.SimpleTextWatcher import im.vector.app.core.platform.SimpleTextWatcher
import im.vector.app.core.preference.UserAvatarPreference import im.vector.app.core.preference.UserAvatarPreference
@ -50,6 +51,8 @@ import im.vector.app.core.utils.toast
import im.vector.app.databinding.DialogChangePasswordBinding import im.vector.app.databinding.DialogChangePasswordBinding
import im.vector.app.features.MainActivity import im.vector.app.features.MainActivity
import im.vector.app.features.MainActivityArgs import im.vector.app.features.MainActivityArgs
import im.vector.app.features.discovery.DiscoverySettingsFragment
import im.vector.app.features.navigation.SettingsActivityPayload
import im.vector.app.features.workers.signout.SignOutUiWorker import im.vector.app.features.workers.signout.SignOutUiWorker
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -173,6 +176,15 @@ class VectorSettingsGeneralFragment @Inject constructor(
mPasswordPreference.isVisible = false mPasswordPreference.isVisible = false
} }
val discoveryPreference = findPreference<VectorPreference>(VectorPreferences.SETTINGS_DISCOVERY_PREFERENCE_KEY)!!
discoveryPreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {
(requireActivity() as VectorSettingsActivity).navigateTo(
DiscoverySettingsFragment::class.java,
SettingsActivityPayload.DiscoverySettings().toMvRxBundle()
)
true
}
// Advanced settings // Advanced settings
// user account // user account

View File

@ -28,10 +28,10 @@
app:fragment="im.vector.app.features.settings.threepids.ThreePidsSettingsFragment" /> app:fragment="im.vector.app.features.settings.threepids.ThreePidsSettingsFragment" />
<im.vector.app.core.preference.VectorPreference <im.vector.app.core.preference.VectorPreference
android:key="SETTINGS_DISCOVERY_PREFERENCE_KEY"
android:persistent="false" android:persistent="false"
android:summary="@string/settings_discovery_manage" android:summary="@string/settings_discovery_manage"
android:title="@string/settings_discovery_category" android:title="@string/settings_discovery_category" />
app:fragment="im.vector.app.features.discovery.DiscoverySettingsFragment" />
</im.vector.app.core.preference.VectorPreferenceCategory> </im.vector.app.core.preference.VectorPreferenceCategory>