From 33fbcc8ba36229a0f6298ee07bbae90e752e33ba Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 28 May 2019 15:58:30 +0200 Subject: [PATCH] RoomPreview when the room is not world readable --- vector/src/main/AndroidManifest.xml | 1 + .../core/platform/VectorBaseActivity.kt | 17 ++-- .../core/platform/VectorBaseFragment.kt | 15 ++++ .../features/home/HomeActivity.kt | 4 +- .../home/room/detail/RoomDetailActivity.kt | 6 +- .../home/room/detail/RoomDetailFragment.kt | 9 +- .../features/invite/VectorInviteView.kt | 1 - .../features/rageshake/BugReportActivity.kt | 3 +- .../reactions/EmojiReactionPickerActivity.kt | 4 +- .../roomdirectory/PublicRoomsFragment.kt | 3 +- .../roompreview/RoomPreviewActivity.kt | 87 +++++++++++++++++++ .../RoomPreviewNoPreviewFragment.kt | 61 +++++++++++++ .../settings/VectorSettingsActivity.kt | 3 +- .../main/res/layout/activity_bug_report.xml | 2 +- .../layout/activity_emoji_reaction_picker.xml | 2 +- .../res/layout/activity_vector_settings.xml | 2 +- .../fragment_room_preview_no_preview.xml | 83 ++++++++++++++++++ vector/src/main/res/values/strings_riotX.xml | 2 + 18 files changed, 270 insertions(+), 35 deletions(-) create mode 100644 vector/src/main/java/im/vector/riotredesign/features/roomdirectory/roompreview/RoomPreviewActivity.kt create mode 100644 vector/src/main/java/im/vector/riotredesign/features/roomdirectory/roompreview/RoomPreviewNoPreviewFragment.kt create mode 100644 vector/src/main/res/layout/fragment_room_preview_no_preview.xml diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml index 5d8d3dc752..1c3e843b47 100644 --- a/vector/src/main/AndroidManifest.xml +++ b/vector/src/main/AndroidManifest.xml @@ -44,6 +44,7 @@ android:label="@string/title_activity_emoji_reaction_picker" /> + { // ROOM PREVIEW - vectorBaseActivity.notImplemented("Opening room preview") + requireActivity().startActivity(RoomPreviewActivity.getIntent(requireActivity(), publicRoom)) } else -> { Snackbar.make(publicRoomsCoordinator, getString(R.string.please_wait), Snackbar.LENGTH_SHORT) diff --git a/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/roompreview/RoomPreviewActivity.kt b/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/roompreview/RoomPreviewActivity.kt new file mode 100644 index 0000000000..5b48918395 --- /dev/null +++ b/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/roompreview/RoomPreviewActivity.kt @@ -0,0 +1,87 @@ +/* + * Copyright 2019 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.riotredesign.features.roomdirectory.roompreview + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.os.Parcelable +import androidx.appcompat.widget.Toolbar +import im.vector.matrix.android.api.session.room.model.roomdirectory.PublicRoom +import im.vector.riotredesign.R +import im.vector.riotredesign.core.extensions.addFragment +import im.vector.riotredesign.core.platform.ToolbarConfigurable +import im.vector.riotredesign.core.platform.VectorBaseActivity +import im.vector.riotredesign.features.roomdirectory.RoomDirectoryModule +import kotlinx.android.parcel.Parcelize +import org.koin.android.scope.ext.android.bindScope +import org.koin.android.scope.ext.android.getOrCreateScope + +@Parcelize +data class RoomPreviewData( + val roomId: String, + val roomName: String?, + val topic: String?, + val worldReadable: Boolean, + val avatarUrl: String? +) : Parcelable + + +class RoomPreviewActivity : VectorBaseActivity(), ToolbarConfigurable { + + companion object { + private const val ARG = "ARG" + + fun getIntent(context: Context, publicRoom: PublicRoom): Intent { + return Intent(context, RoomPreviewActivity::class.java).apply { + putExtra(ARG, RoomPreviewData( + roomId = publicRoom.roomId, + roomName = publicRoom.name, + topic = publicRoom.topic, + worldReadable = publicRoom.worldReadable, + avatarUrl = publicRoom.avatarUrl + )) + } + } + } + + override fun getLayoutRes() = R.layout.activity_simple + + override fun configure(toolbar: Toolbar) { + configureToolbar(toolbar) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + bindScope(getOrCreateScope(RoomDirectoryModule.ROOM_DIRECTORY_SCOPE)) + } + + override fun initUiAndData() { + if (isFirstCreation()) { + val args = intent.getParcelableExtra(ARG) + + if (args.worldReadable) { + // TODO Room preview + notImplemented("Room preview of world readable room") + } else { + addFragment(RoomPreviewNoPreviewFragment.newInstance(args), R.id.simpleFragmentContainer) + } + } + } + +} \ No newline at end of file diff --git a/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/roompreview/RoomPreviewNoPreviewFragment.kt b/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/roompreview/RoomPreviewNoPreviewFragment.kt new file mode 100644 index 0000000000..5b6b902f92 --- /dev/null +++ b/vector/src/main/java/im/vector/riotredesign/features/roomdirectory/roompreview/RoomPreviewNoPreviewFragment.kt @@ -0,0 +1,61 @@ +/* + * Copyright 2019 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.riotredesign.features.roomdirectory.roompreview + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import com.airbnb.mvrx.args +import im.vector.riotredesign.R +import im.vector.riotredesign.core.extensions.setTextOrHide +import im.vector.riotredesign.core.platform.VectorBaseFragment +import im.vector.riotredesign.features.home.AvatarRenderer +import im.vector.riotredesign.features.roomdirectory.RoomDirectoryModule +import kotlinx.android.synthetic.main.fragment_room_preview_no_preview.* +import org.koin.android.scope.ext.android.bindScope +import org.koin.android.scope.ext.android.getOrCreateScope + +class RoomPreviewNoPreviewFragment : VectorBaseFragment() { + + companion object { + fun newInstance(arg: RoomPreviewData): Fragment { + return RoomPreviewNoPreviewFragment().apply { setArguments(arg) } + } + } + + private val roomPreviewData: RoomPreviewData by args() + + override fun onActivityCreated(savedInstanceState: Bundle?) { + super.onActivityCreated(savedInstanceState) + bindScope(getOrCreateScope(RoomDirectoryModule.ROOM_DIRECTORY_SCOPE)) + setupToolbar(roomPreviewNoPreviewToolbar) + } + + override fun getLayoutResId() = R.layout.fragment_room_preview_no_preview + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + AvatarRenderer.render(roomPreviewData.avatarUrl, roomPreviewData.roomId, roomPreviewData.roomName, roomPreviewNoPreviewAvatar) + roomPreviewNoPreviewName.text = roomPreviewData.roomName + roomPreviewNoPreviewTopic.setTextOrHide(roomPreviewData.topic) + + roomPreviewNoPreviewJoin.setOnClickListener { + vectorBaseActivity.notImplemented("Join from preview") + } + } +} \ No newline at end of file diff --git a/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsActivity.kt b/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsActivity.kt index a657e1102e..6208c75e4b 100755 --- a/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsActivity.kt +++ b/vector/src/main/java/im/vector/riotredesign/features/settings/VectorSettingsActivity.kt @@ -24,6 +24,7 @@ import androidx.preference.PreferenceFragmentCompat import im.vector.matrix.android.api.session.Session import im.vector.riotredesign.R import im.vector.riotredesign.core.platform.VectorBaseActivity +import kotlinx.android.synthetic.main.activity_vector_settings.* import org.koin.android.ext.android.inject /** @@ -45,7 +46,7 @@ class VectorSettingsActivity : VectorBaseActivity(), private val session by inject() override fun initUiAndData() { - configureToolbar() + configureToolbar(settingsToolbar) if (isFirstCreation()) { vectorSettingsPreferencesFragment = VectorSettingsPreferencesFragment.newInstance(session.sessionParams.credentials.userId) diff --git a/vector/src/main/res/layout/activity_bug_report.xml b/vector/src/main/res/layout/activity_bug_report.xml index 82916ee69a..4d87ced748 100644 --- a/vector/src/main/res/layout/activity_bug_report.xml +++ b/vector/src/main/res/layout/activity_bug_report.xml @@ -6,7 +6,7 @@ android:orientation="vertical"> diff --git a/vector/src/main/res/layout/activity_emoji_reaction_picker.xml b/vector/src/main/res/layout/activity_emoji_reaction_picker.xml index 8e1edab351..4744931b69 100644 --- a/vector/src/main/res/layout/activity_emoji_reaction_picker.xml +++ b/vector/src/main/res/layout/activity_emoji_reaction_picker.xml @@ -19,7 +19,7 @@ android:layout_height="wrap_content"> diff --git a/vector/src/main/res/layout/fragment_room_preview_no_preview.xml b/vector/src/main/res/layout/fragment_room_preview_no_preview.xml new file mode 100644 index 0000000000..30a378ed9a --- /dev/null +++ b/vector/src/main/res/layout/fragment_room_preview_no_preview.xml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + +