From de6b5af6ba53bb8efcb1115181ca0d7a8b1053f7 Mon Sep 17 00:00:00 2001 From: Valere Date: Mon, 19 Jul 2021 14:41:13 +0200 Subject: [PATCH 1/7] Promote restricted join rule to admins --- .../vector/app/features/home/HomeActivity.kt | 56 ++++++----- .../app/features/popup/PopupAlertManager.kt | 4 + .../features/settings/VectorPreferences.kt | 11 +++ .../spaces/RestrictedPromoBottomSheet.kt | 76 +++++++++++++++ .../main/res/drawable-nodpi/room_settings.png | Bin 0 -> 22855 bytes ...ottom_sheet_space_advertise_restricted.xml | 92 ++++++++++++++++++ vector/src/main/res/values/strings.xml | 8 ++ 7 files changed, 225 insertions(+), 22 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/features/spaces/RestrictedPromoBottomSheet.kt create mode 100644 vector/src/main/res/drawable-nodpi/room_settings.png create mode 100644 vector/src/main/res/layout/bottom_sheet_space_advertise_restricted.xml diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt index 9ae6d4c39f..d2dac03eff 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt @@ -24,15 +24,16 @@ import android.os.Bundle import android.os.Parcelable import android.view.Menu import android.view.MenuItem -import com.google.android.material.appbar.MaterialToolbar import androidx.core.view.GravityCompat import androidx.core.view.isVisible import androidx.drawerlayout.widget.DrawerLayout import com.airbnb.mvrx.MvRx import com.airbnb.mvrx.viewModel +import com.google.android.material.appbar.MaterialToolbar import com.google.android.material.dialog.MaterialAlertDialogBuilder import im.vector.app.AppStateHandler import im.vector.app.R +import im.vector.app.RoomGroupingMethod import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.di.ScreenComponent import im.vector.app.core.extensions.exhaustive @@ -58,6 +59,7 @@ import im.vector.app.features.rageshake.ReportType import im.vector.app.features.rageshake.VectorUncaughtExceptionHandler import im.vector.app.features.settings.VectorPreferences import im.vector.app.features.settings.VectorSettingsActivity +import im.vector.app.features.spaces.RestrictedPromoBottomSheet import im.vector.app.features.spaces.SpaceCreationActivity import im.vector.app.features.spaces.SpacePreviewActivity import im.vector.app.features.spaces.SpaceSettingsMenuBottomSheet @@ -172,19 +174,29 @@ class HomeActivity : replaceFragment(R.id.homeDetailFragmentContainer, HomeDetailFragment::class.java) replaceFragment(R.id.homeDrawerFragmentContainer, HomeDrawerFragment::class.java) } - -// appStateHandler.selectedRoomGroupingObservable.subscribe { -// if (supportFragmentManager.getFragment()) -// replaceFragment(R.id.homeDetailFragmentContainer, HomeDetailFragment::class.java, allowStateLoss = true) -// }.disposeOnDestroy() + if (!vectorPreferences.didPromoteNewRestrictedFeature()) { + appStateHandler.selectedRoomGroupingObservable.subscribe { + (it.orNull() as? RoomGroupingMethod.BySpace)?.spaceSummary?.let { currentSpaceSummary -> + if (!currentSpaceSummary.isPublic && currentSpaceSummary.otherMemberIds.isNotEmpty()) { + // It's a private space with some members show this once + if (!popupAlertManager.hasAlertsToShow()) { + if (!vectorPreferences.didPromoteNewRestrictedFeature()) { + vectorPreferences.setDidPromoteNewRestrictedFeature() + RestrictedPromoBottomSheet().show(supportFragmentManager, "FOO") + } + } + } + } + }.disposeOnDestroy() + } sharedActionViewModel .observe() .subscribe { sharedAction -> when (sharedAction) { - is HomeActivitySharedAction.OpenDrawer -> views.drawerLayout.openDrawer(GravityCompat.START) - is HomeActivitySharedAction.CloseDrawer -> views.drawerLayout.closeDrawer(GravityCompat.START) - is HomeActivitySharedAction.OpenGroup -> { + is HomeActivitySharedAction.OpenDrawer -> views.drawerLayout.openDrawer(GravityCompat.START) + is HomeActivitySharedAction.CloseDrawer -> views.drawerLayout.closeDrawer(GravityCompat.START) + is HomeActivitySharedAction.OpenGroup -> { views.drawerLayout.closeDrawer(GravityCompat.START) // Temporary @@ -198,10 +210,10 @@ class HomeActivity : // we might want to delay that to avoid having the drawer animation lagging // would be probably better to let the drawer do that? in the on closed callback? } - is HomeActivitySharedAction.OpenSpacePreview -> { + is HomeActivitySharedAction.OpenSpacePreview -> { startActivity(SpacePreviewActivity.newIntent(this, sharedAction.spaceId)) } - is HomeActivitySharedAction.AddSpace -> { + is HomeActivitySharedAction.AddSpace -> { createSpaceResultLauncher.launch(SpaceCreationActivity.newIntent(this)) } is HomeActivitySharedAction.ShowSpaceSettings -> { @@ -214,11 +226,11 @@ class HomeActivity : }) .show(supportFragmentManager, "SPACE_SETTINGS") } - is HomeActivitySharedAction.OpenSpaceInvite -> { + is HomeActivitySharedAction.OpenSpaceInvite -> { SpaceInviteBottomSheet.newInstance(sharedAction.spaceId) .show(supportFragmentManager, "SPACE_INVITE") } - HomeActivitySharedAction.SendSpaceFeedBack -> { + HomeActivitySharedAction.SendSpaceFeedBack -> { bugReporter.openBugReportScreen(this, ReportType.SPACE_BETA_FEEDBACK) } }.exhaustive @@ -234,9 +246,9 @@ class HomeActivity : homeActivityViewModel.observeViewEvents { when (it) { is HomeActivityViewEvents.AskPasswordToInitCrossSigning -> handleAskPasswordToInitCrossSigning(it) - is HomeActivityViewEvents.OnNewSession -> handleOnNewSession(it) - HomeActivityViewEvents.PromptToEnableSessionPush -> handlePromptToEnablePush() - is HomeActivityViewEvents.OnCrossSignedInvalidated -> handleCrossSigningInvalidated(it) + is HomeActivityViewEvents.OnNewSession -> handleOnNewSession(it) + HomeActivityViewEvents.PromptToEnableSessionPush -> handlePromptToEnablePush() + is HomeActivityViewEvents.OnCrossSignedInvalidated -> handleCrossSigningInvalidated(it) }.exhaustive } homeActivityViewModel.subscribe(this) { renderState(it) } @@ -289,7 +301,7 @@ class HomeActivity : private fun renderState(state: HomeActivityViewState) { when (val status = state.initialSyncProgressServiceStatus) { - is InitialSyncProgressService.Status.Idle -> { + is InitialSyncProgressService.Status.Idle -> { views.waitingView.root.isVisible = false } is InitialSyncProgressService.Status.Progressing -> { @@ -453,15 +465,15 @@ class HomeActivity : override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { - R.id.menu_home_suggestion -> { + R.id.menu_home_suggestion -> { bugReporter.openBugReportScreen(this, ReportType.SUGGESTION) return true } - R.id.menu_home_report_bug -> { + R.id.menu_home_report_bug -> { bugReporter.openBugReportScreen(this, ReportType.BUG_REPORT) return true } - R.id.menu_home_init_sync_legacy -> { + R.id.menu_home_init_sync_legacy -> { // Configure the SDK initialSyncStrategy = InitialSyncStrategy.Legacy // And clear cache @@ -475,11 +487,11 @@ class HomeActivity : MainActivity.restartApp(this, MainActivityArgs(clearCache = true)) return true } - R.id.menu_home_filter -> { + R.id.menu_home_filter -> { navigator.openRoomsFiltering(this) return true } - R.id.menu_home_setting -> { + R.id.menu_home_setting -> { navigator.openSettings(this) return true } diff --git a/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt b/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt index a982858ffd..9842709f9e 100644 --- a/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt +++ b/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt @@ -52,6 +52,10 @@ class PopupAlertManager @Inject constructor() { private val alertQueue = mutableListOf() + fun hasAlertsToShow() : Boolean { + return currentAlerter != null || alertQueue.isNotEmpty() + } + fun postVectorAlert(alert: VectorAlert) { synchronized(alertQueue) { alertQueue.add(alert) diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt index 77aa624e0e..259c3662fc 100755 --- a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt @@ -188,6 +188,7 @@ class VectorPreferences @Inject constructor(private val context: Context) { private const val SETTINGS_DISPLAY_ALL_EVENTS_KEY = "SETTINGS_DISPLAY_ALL_EVENTS_KEY" private const val DID_ASK_TO_ENABLE_SESSION_PUSH = "DID_ASK_TO_ENABLE_SESSION_PUSH" + private const val DID_PROMOTE_NEW_RESTRICTED_JOIN_RULE = "DID_PROMOTE_NEW_RESTRICTED_JOIN_RULE" private const val MEDIA_SAVING_3_DAYS = 0 private const val MEDIA_SAVING_1_WEEK = 1 @@ -345,6 +346,16 @@ class VectorPreferences @Inject constructor(private val context: Context) { } } + fun didPromoteNewRestrictedFeature(): Boolean { + return defaultPrefs.getBoolean(DID_PROMOTE_NEW_RESTRICTED_JOIN_RULE, false) + } + + fun setDidPromoteNewRestrictedFeature() { + defaultPrefs.edit { + putBoolean(DID_PROMOTE_NEW_RESTRICTED_JOIN_RULE, true) + } + } + /** * Tells if we have already asked the user to disable battery optimisations on android >= M devices. * diff --git a/vector/src/main/java/im/vector/app/features/spaces/RestrictedPromoBottomSheet.kt b/vector/src/main/java/im/vector/app/features/spaces/RestrictedPromoBottomSheet.kt new file mode 100644 index 0000000000..4412ca96fc --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/spaces/RestrictedPromoBottomSheet.kt @@ -0,0 +1,76 @@ +/* + * 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.spaces + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.core.view.isVisible +import im.vector.app.R +import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment +import im.vector.app.databinding.BottomSheetSpaceAdvertiseRestrictedBinding + +class RestrictedPromoBottomSheet : VectorBaseBottomSheetDialogFragment() { + + override fun getBinding(inflater: LayoutInflater, container: ViewGroup?) = + BottomSheetSpaceAdvertiseRestrictedBinding.inflate(inflater, container, false) + + override val showExpanded = true + + var learnMorelMode: Boolean = false + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + render() + views.skipButton.debouncedClicks { + dismiss() + } + + views.learnMore.debouncedClicks { + if (learnMorelMode) { + dismiss() + } else { + learnMorelMode = true + render() + } + } + } + + private fun render() { + if (learnMorelMode) { + views.title.text = getString(R.string.new_let_people_in_spaces_find_and_join) + views.topDescription.text = getString(R.string.to_help_space_members_find_and_join) + views.imageHint.isVisible = true + views.bottomDescription.isVisible = true + views.bottomDescription.text = getString(R.string.this_makes_it_easy_for_rooms_to_stay_private_to_a_space) + views.skipButton.isVisible = false + views.learnMore.isVisible = true + views.learnMore.text = getString(R.string.ok) + } else { + views.title.text = getString(R.string.help_space_members) + views.topDescription.text = getString(R.string.help_people_in_spaces_find_and_join) + views.imageHint.isVisible = false + views.bottomDescription.isVisible = false + views.skipButton.isVisible = true + views.learnMore.isVisible = true + views.skipButton.text = getString(R.string.skip) + views.learnMore.text = getString(R.string.learn_more) + views.learnMore.isVisible = true + } + } +} diff --git a/vector/src/main/res/drawable-nodpi/room_settings.png b/vector/src/main/res/drawable-nodpi/room_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..2e3fb404faacee18738521a40d55e767175d6859 GIT binary patch literal 22855 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 Nl9N)FtP+18_&=mgAie+q literal 0 HcmV?d00001 diff --git a/vector/src/main/res/layout/bottom_sheet_space_advertise_restricted.xml b/vector/src/main/res/layout/bottom_sheet_space_advertise_restricted.xml new file mode 100644 index 0000000000..c7526bb20f --- /dev/null +++ b/vector/src/main/res/layout/bottom_sheet_space_advertise_restricted.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + +