Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improvement: Redesign & restructure chat textfield #320

Merged
merged 25 commits into from
Jan 27, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
2c27ef9
Fix spacings affected by metisModifier
FelberMartin Jan 18, 2025
4947ff5
Fix spacings in lecture overview
FelberMartin Jan 18, 2025
28b9886
changed send button design and design for UnfocusedPreviewReplyTextField
julian-wls Jan 20, 2025
70ea28c
applied padding changes to thread
julian-wls Jan 20, 2025
d3452a6
redesigned textfield and made it scrollable
julian-wls Jan 22, 2025
755da3d
changed formatting options behavior
julian-wls Jan 22, 2025
db76c2e
added formatting icons
julian-wls Jan 22, 2025
fcef4d6
restructured elements
julian-wls Jan 22, 2025
b40f441
added strikethrough option
julian-wls Jan 22, 2025
5b82b91
added more icons
julian-wls Jan 22, 2025
25e98fe
added file upload button to preview textfield
julian-wls Jan 22, 2025
570bdf6
minor changes
julian-wls Jan 22, 2025
5916563
adjustments
julian-wls Jan 22, 2025
6522639
minor changes
julian-wls Jan 23, 2025
f7c9642
resolved merge conflicts
julian-wls Jan 23, 2025
63a3fda
added requestedAutocompleteType
julian-wls Jan 23, 2025
f78387b
resolved merge conflicts
julian-wls Jan 23, 2025
38bd50c
changed tagging
julian-wls Jan 23, 2025
5da58d7
added icons to autocomplete popup
julian-wls Jan 23, 2025
6bb287a
fixed ui tests
julian-wls Jan 23, 2025
b0afc01
implemented feedback
julian-wls Jan 24, 2025
2d5b112
changed color of plus icon in UnfocusedPreviewReplyTextField
julian-wls Jan 24, 2025
a0107cf
changed paddings
julian-wls Jan 25, 2025
ce00cb4
added box around text field
julian-wls Jan 25, 2025
c064ee0
adjustments
julian-wls Jan 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import de.tum.informatics.www1.artemis.native_app.core.model.exercise.ModelingEx
import de.tum.informatics.www1.artemis.native_app.core.model.exercise.ProgrammingExercise
import de.tum.informatics.www1.artemis.native_app.core.model.exercise.QuizExercise
import de.tum.informatics.www1.artemis.native_app.core.model.exercise.TextExercise
import de.tum.informatics.www1.artemis.native_app.core.model.exercise.UnknownExercise
import de.tum.informatics.www1.artemis.native_app.core.ui.R

@Composable
Expand All @@ -27,3 +28,15 @@ fun getExerciseTypeIconPainter(exercise: Exercise?): Painter {
else -> rememberVectorPainter(image = Icons.Default.QuestionMark)
}
}

fun getExerciseTypeIconId(exercise: Exercise?): Int? {
return when (exercise) {
is TextExercise -> R.drawable.font
is ModelingExercise -> R.drawable.diagram_project
is FileUploadExercise -> R.drawable.file_arrow_up
is ProgrammingExercise -> R.drawable.keyboard
is QuizExercise -> R.drawable.check_double
is UnknownExercise -> null
null -> null
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import de.tum.informatics.www1.artemis.native_app.android.appModule
import de.tum.informatics.www1.artemis.native_app.core.common.CurrentActivityListener
import de.tum.informatics.www1.artemis.native_app.core.common.test.UnitTest
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.StandalonePostId
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.SavedPostStatus
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.UserIdentifier
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.content.dto.SavedPostStatus
import de.tum.informatics.www1.artemis.native_app.feature.quiz.QuizType
import org.junit.Test
import org.junit.experimental.categories.Category
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ import androidx.compose.ui.unit.dp
import de.tum.informatics.www1.artemis.native_app.core.data.DataState
import de.tum.informatics.www1.artemis.native_app.core.data.isSuccess
import de.tum.informatics.www1.artemis.native_app.core.ui.BuildConfig
import de.tum.informatics.www1.artemis.native_app.core.ui.Spacings
import de.tum.informatics.www1.artemis.native_app.core.ui.compose.NavigationBackButton
import de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.R
import de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.ui.reply.LocalReplyAutoCompleteHintProvider
Expand Down Expand Up @@ -94,8 +93,7 @@ internal fun ConversationThreadScreen(
.fillMaxWidth()
.weight(1f)
.padding(top = padding.calculateTopPadding())
.consumeWindowInsets(WindowInsets.systemBars.only(WindowInsetsSides.Top))
.padding(horizontal = Spacings.ScreenHorizontalSpacing),
.consumeWindowInsets(WindowInsets.systemBars.only(WindowInsetsSides.Top)),
viewModel = viewModel
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import de.tum.informatics.www1.artemis.native_app.core.model.exercise.Programmin
import de.tum.informatics.www1.artemis.native_app.core.model.exercise.QuizExercise
import de.tum.informatics.www1.artemis.native_app.core.model.exercise.TextExercise
import de.tum.informatics.www1.artemis.native_app.core.model.exercise.UnknownExercise
import de.tum.informatics.www1.artemis.native_app.core.ui.exercise.getExerciseTypeIconId
import de.tum.informatics.www1.artemis.native_app.core.ui.serverUrlStateFlow
import de.tum.informatics.www1.artemis.native_app.core.websocket.WebsocketProvider
import de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.R
Expand All @@ -49,6 +50,7 @@ import de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.ui.
import de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.ui.post.post_actions.PostActionFlags
import de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.ui.reply.AutoCompleteCategory
import de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.ui.reply.AutoCompleteHint
import de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.ui.reply.AutoCompleteIcon
import de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.ui.reply.InitialReplyTextProvider
import de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.ui.reply.ReplyAutoCompleteHintProvider
import de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.ui.thread.ConversationThreadUseCase
Expand Down Expand Up @@ -76,6 +78,7 @@ import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.service.n
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.service.network.getConversation
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.service.network.subscribeToConversationUpdates
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.ui.MetisViewModel
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.ui.getChannelIconImageVector
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers
Expand Down Expand Up @@ -659,7 +662,8 @@ internal open class ConversationViewModel(
AutoCompleteHint(
hint = exerciseTitle,
replacementText = "[$exerciseTag]${exercise.title}(/courses/${metisContext.courseId}/exercises/${exercise.id})[/$exerciseTag]",
id = "Exercise:${exercise.id ?: return@mapNotNull null}"
id = "Exercise:${exercise.id ?: return@mapNotNull null}",
icon = AutoCompleteIcon.DrawableFromId(getExerciseTypeIconId(exercise))
)
}

Expand Down Expand Up @@ -698,7 +702,8 @@ internal open class ConversationViewModel(
AutoCompleteHint(
hint = channel.name,
replacementText = "[channel]${channel.name}(${channel.id})[/channel]",
id = "Channel:${channel.id}"
id = "Channel:${channel.id}",
icon = AutoCompleteIcon.DrawableFromImageVector(getChannelIconImageVector(channel))
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.net.Uri
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
Expand Down Expand Up @@ -217,8 +218,7 @@ fun MetisChatList(
if (isReplyEnabled) {
ReplyTextField(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = Spacings.ReplyTextFieldHorizontalSpacing),
.fillMaxWidth(),
replyMode = replyMode,
updateFailureState = updateFailureStateDelegate,
conversationName = conversationName,
Expand All @@ -235,8 +235,8 @@ private fun ChatList(
state: LazyListState,
posts: PostsDataState.Loaded,
postActionFlags: PostActionFlags,
clientId: Long,
isMarkedAsDeleteList: SnapshotStateList<IBasePost>,
clientId: Long,
onClickViewPost: (StandalonePostId) -> Unit,
onRequestEdit: (IStandalonePost) -> Unit,
onRequestDelete: (IStandalonePost) -> Unit,
Expand All @@ -249,6 +249,7 @@ private fun ChatList(
LazyColumn(
modifier = modifier,
state = state,
contentPadding = PaddingValues(bottom = 4.dp),
reverseLayout = true
) {
items(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
package de.tum.informatics.www1.artemis.native_app.feature.metis.conversation.ui.reply

data class AutoCompleteHint(val hint: String, val replacementText: String, val id: String)
import androidx.compose.ui.graphics.vector.ImageVector
import de.tum.informatics.www1.artemis.native_app.feature.metis.shared.ui.profile_picture.ProfilePictureData

data class AutoCompleteHint(
val hint: String,
val replacementText: String,
val id: String,
val icon: AutoCompleteIcon? = null
)

sealed class AutoCompleteIcon {
data class ProfilePicture(val pictureData: ProfilePictureData) : AutoCompleteIcon()
data class DrawableFromId(val id: Int?) : AutoCompleteIcon()
data class DrawableFromImageVector(val imageVector: ImageVector) : AutoCompleteIcon()
}

Loading
Loading