Skip to content

Commit

Permalink
Implement rating module
Browse files Browse the repository at this point in the history
  • Loading branch information
maxkeppeler committed Jan 30, 2024
1 parent 02195fa commit 6403570
Show file tree
Hide file tree
Showing 33 changed files with 1,566 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,26 @@

package com.mk.sheets.compose

import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.GridItemSpan
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.lazy.grid.itemsIndexed
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Circle
import androidx.compose.material.icons.filled.Info
import androidx.compose.material3.*
import androidx.compose.material3.ElevatedCard
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
Expand All @@ -36,7 +47,45 @@ import androidx.compose.ui.unit.dp
import com.maxkeppeker.sheets.core.models.base.UseCaseState
import com.mk.sheets.compose.models.Sample
import com.mk.sheets.compose.models.UseCaseType
import com.mk.sheets.compose.samples.*
import com.mk.sheets.compose.samples.CalendarSample1
import com.mk.sheets.compose.samples.CalendarSample2
import com.mk.sheets.compose.samples.CalendarSample3
import com.mk.sheets.compose.samples.ClockSample1
import com.mk.sheets.compose.samples.ClockSample2
import com.mk.sheets.compose.samples.ColorSample1
import com.mk.sheets.compose.samples.ColorSample2
import com.mk.sheets.compose.samples.ColorSample3
import com.mk.sheets.compose.samples.CoreSample1
import com.mk.sheets.compose.samples.DateTimeSample1
import com.mk.sheets.compose.samples.DateTimeSample2
import com.mk.sheets.compose.samples.DateTimeSample3
import com.mk.sheets.compose.samples.DurationSample1
import com.mk.sheets.compose.samples.DurationSample2
import com.mk.sheets.compose.samples.EmojiSample1
import com.mk.sheets.compose.samples.EmojiSample2
import com.mk.sheets.compose.samples.InfoSample1
import com.mk.sheets.compose.samples.InputSample1
import com.mk.sheets.compose.samples.InputSample2
import com.mk.sheets.compose.samples.InputSample3
import com.mk.sheets.compose.samples.InputSample4
import com.mk.sheets.compose.samples.ListSample1
import com.mk.sheets.compose.samples.ListSample2
import com.mk.sheets.compose.samples.ListSample3
import com.mk.sheets.compose.samples.ListSample4
import com.mk.sheets.compose.samples.OptionSample1
import com.mk.sheets.compose.samples.OptionSample2
import com.mk.sheets.compose.samples.OptionSample3
import com.mk.sheets.compose.samples.RatingSample1
import com.mk.sheets.compose.samples.RatingSample2
import com.mk.sheets.compose.samples.RatingSample3
import com.mk.sheets.compose.samples.RatingSample4
import com.mk.sheets.compose.samples.StateSample1
import com.mk.sheets.compose.samples.StateSample2
import com.mk.sheets.compose.samples.StateSample3
import com.mk.sheets.compose.samples.StateSample4
import com.mk.sheets.compose.samples.StateSample5
import com.mk.sheets.compose.samples.StateSample6
import com.mk.sheets.compose.samples.StateSample7

@Composable
fun ShowcaseDialogSamplesScreen() {
Expand Down Expand Up @@ -68,6 +117,11 @@ fun ShowcaseDialogSamples(
Sample.CORE_SAMPLE_1 -> CoreSample1(onReset)
Sample.INFO_SAMPLE_1 -> InfoSample1(onReset)

Sample.RATING_SAMPLE_1 -> RatingSample1(onReset)
Sample.RATING_SAMPLE_2 -> RatingSample2(onReset)
Sample.RATING_SAMPLE_3 -> RatingSample3(onReset)
Sample.RATING_SAMPLE_4 -> RatingSample4(onReset)

Sample.COLOR_SAMPLE_1 -> ColorSample1(onReset)
Sample.COLOR_SAMPLE_2 -> ColorSample2(onReset)
Sample.COLOR_SAMPLE_3 -> ColorSample3(onReset)
Expand Down
27 changes: 27 additions & 0 deletions app/src/main/java/com/mk/sheets/compose/models/Sample.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,33 @@ enum class Sample(
"Standard"
),

RATING_SAMPLE_1(
UseCaseType.RATING,
"1-5 Stars",
"Alignment Center"

),
RATING_SAMPLE_2(
UseCaseType.RATING,
"1-5 Stars",
"Alignment Start"
),

RATING_SAMPLE_3(
UseCaseType.RATING,
"1-6 Stars",
"Alignment Center",
"Optional Feedback"
),

RATING_SAMPLE_4(
UseCaseType.RATING,
"1-6 Stars",
"Alignment Center",
"Required Feedback",
"Outlined Feedback style"
),

COLOR_SAMPLE_1(
UseCaseType.COLOR,
"With template colors",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package com.mk.sheets.compose.models
enum class UseCaseType(val title: String) {
CORE("⚒️ Core Dialog"),
INFO("ℹ️ Info Dialog"),
RATING("✨ Rating Dialog"),
COLOR("\uD83C\uDFA8 Color Dialog"),
CALENDAR("\uD83D\uDCC5 Calendar Dialog"),
CLOCK("\uD83D\uDD67 Clock Dialog"),
Expand Down
57 changes: 57 additions & 0 deletions app/src/main/java/com/mk/sheets/compose/samples/RatingSample1.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* Copyright (C) 2022-2023. Maximilian Keppeler (https://www.maxkeppeler.com)
*
* 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.
*/
@file:OptIn(ExperimentalMaterial3Api::class)

package com.mk.sheets.compose.samples

import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.StarRate
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable
import com.maxkeppeker.sheets.core.models.base.Header
import com.maxkeppeker.sheets.core.models.base.IconSource
import com.maxkeppeker.sheets.core.models.base.rememberUseCaseState
import com.maxkeppeler.sheets.rating.RatingDialog
import com.maxkeppeler.sheets.rating.models.RatingBody
import com.maxkeppeler.sheets.rating.models.RatingConfig
import com.maxkeppeler.sheets.rating.models.RatingSelection
import com.maxkeppeler.sheets.rating.models.RatingViewStyle

@Composable
internal fun RatingSample1(closeSelection: () -> Unit) {

RatingDialog(
state = rememberUseCaseState(
visible = true,
onCloseRequest = { closeSelection() }),
header = Header.Default(
title = "Rate our app",
icon = IconSource(Icons.Outlined.StarRate)
),
body = RatingBody.Default(
bodyText = "Love our app? Share the love! Rate us on the Play Store and help us reach more awesome users like you."
),
config = RatingConfig(
ratingViewStyle = RatingViewStyle.CENTER,
ratingOptionsCount = 5
),
selection = RatingSelection(
onSelectRating = { rating, feedback ->
// Handle rating selection
},
)
)
}
56 changes: 56 additions & 0 deletions app/src/main/java/com/mk/sheets/compose/samples/RatingSample2.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
* Copyright (C) 2022-2023. Maximilian Keppeler (https://www.maxkeppeler.com)
*
* 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.
*/
@file:OptIn(ExperimentalMaterial3Api::class)

package com.mk.sheets.compose.samples

import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.StarRate
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable
import com.maxkeppeker.sheets.core.models.base.Header
import com.maxkeppeker.sheets.core.models.base.IconSource
import com.maxkeppeker.sheets.core.models.base.rememberUseCaseState
import com.maxkeppeler.sheets.rating.RatingDialog
import com.maxkeppeler.sheets.rating.models.RatingBody
import com.maxkeppeler.sheets.rating.models.RatingConfig
import com.maxkeppeler.sheets.rating.models.RatingSelection
import com.maxkeppeler.sheets.rating.models.RatingViewStyle

@Composable
internal fun RatingSample2(closeSelection: () -> Unit) {
RatingDialog(
state = rememberUseCaseState(
visible = true,
onCloseRequest = { closeSelection() }),
header = Header.Default(
title = "Help Us Improve",
icon = IconSource(Icons.Outlined.StarRate)
),
body = RatingBody.Default(
bodyText = "Give us a 5-star boost! We appreciate your feedback and it helps us keep improving your experience."
),
config = RatingConfig(
ratingViewStyle = RatingViewStyle.START,
ratingOptionsCount = 5
),
selection = RatingSelection(
onSelectRating = { rating, feedback ->
// Handle rating selection
},
)
)
}
58 changes: 58 additions & 0 deletions app/src/main/java/com/mk/sheets/compose/samples/RatingSample3.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
/*
* Copyright (C) 2022-2023. Maximilian Keppeler (https://www.maxkeppeler.com)
*
* 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.
*/
@file:OptIn(ExperimentalMaterial3Api::class)

package com.mk.sheets.compose.samples

import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.StarRate
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable
import com.maxkeppeker.sheets.core.models.base.Header
import com.maxkeppeker.sheets.core.models.base.IconSource
import com.maxkeppeker.sheets.core.models.base.rememberUseCaseState
import com.maxkeppeler.sheets.rating.RatingDialog
import com.maxkeppeler.sheets.rating.models.RatingBody
import com.maxkeppeler.sheets.rating.models.RatingConfig
import com.maxkeppeler.sheets.rating.models.RatingSelection
import com.maxkeppeler.sheets.rating.models.RatingViewStyle

@Composable
internal fun RatingSample3(closeSelection: () -> Unit) {
RatingDialog(
state = rememberUseCaseState(
visible = true,
onCloseRequest = { closeSelection() }),
header = Header.Default(
title = "Help Us Improve",
icon = IconSource(Icons.Outlined.StarRate)
),
body = RatingBody.Default(
bodyText = "Your rating makes a real difference! It helps us understand what you love about our app and where we can improve. Share your thoughts on the Play Store and help us shape the future!"
),
config = RatingConfig(
ratingViewStyle = RatingViewStyle.CENTER,
ratingOptionsCount = 6,
withFeedback = true,
feedbackOptional = true
),
selection = RatingSelection(
onSelectRating = { rating, feedback ->
// Handle rating selection
},
)
)
}
60 changes: 60 additions & 0 deletions app/src/main/java/com/mk/sheets/compose/samples/RatingSample4.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* Copyright (C) 2022-2023. Maximilian Keppeler (https://www.maxkeppeler.com)
*
* 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.
*/
@file:OptIn(ExperimentalMaterial3Api::class)

package com.mk.sheets.compose.samples

import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.StarRate
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable
import com.maxkeppeker.sheets.core.models.base.Header
import com.maxkeppeker.sheets.core.models.base.IconSource
import com.maxkeppeker.sheets.core.models.base.rememberUseCaseState
import com.maxkeppeler.sheets.rating.RatingDialog
import com.maxkeppeler.sheets.rating.models.FeedbackTextFieldType
import com.maxkeppeler.sheets.rating.models.RatingBody
import com.maxkeppeler.sheets.rating.models.RatingConfig
import com.maxkeppeler.sheets.rating.models.RatingSelection
import com.maxkeppeler.sheets.rating.models.RatingViewStyle

@Composable
internal fun RatingSample4(closeSelection: () -> Unit) {
RatingDialog(
state = rememberUseCaseState(
visible = true,
onCloseRequest = { closeSelection() }),
header = Header.Default(
title = "Help Us Improve",
icon = IconSource(Icons.Outlined.StarRate)
),
body = RatingBody.Default(
bodyText = "Love what you see? Show your support by rating us on the Play Store! Every rating counts and motivates us to keep delivering an amazing app for you."
),
config = RatingConfig(
ratingViewStyle = RatingViewStyle.CENTER,
ratingOptionsCount = 6,
withFeedback = true,
feedbackOptional = false,
feedbackTextFieldType = FeedbackTextFieldType.OUTLINED,
),
selection = RatingSelection(
onSelectRating = { rating, feedback ->
// Handle rating selection
},
)
)
}
1 change: 1 addition & 0 deletions buildSrc/src/main/java/Modules.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
enum class Modules(val moduleName: String) {

CORE("core"),
RATING("rating"),
INFO("info"),
STATE("state"),
COLOR("color"),
Expand Down
12 changes: 12 additions & 0 deletions core/src/main/java/com/maxkeppeker/sheets/core/utils/TestTags.kt
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,18 @@ object TestTags {
const val STATE_SUCCESS = "state_success"
const val STATE_VIEW_LABEL_TEXT = "state_view_label_text"

/*
* Test tags for RatingView
*/

const val RATING_STAR_INPUT = "rating_star_input"
const val RATING_FEEDBACK_TEXT_FIELD = "rating_feedback_text_field"
const val RATING_FEEDBACK_TEXT_FIELD_TYPE = "rating_feedback_text_field_type"
const val RATING_FEEDBACK_TEXT_FIELD_ERROR_TEXT = "rating_feedback_text_field_error_text"
const val RATING_BODY_DEFAULT = "rating_body_default"
const val RATING_BODY_DEFAULT_TEXT = "rating_body_default_text"


/*
* Test tags for InputView
*/
Expand Down
1 change: 1 addition & 0 deletions rating/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
Loading

0 comments on commit 6403570

Please sign in to comment.