From a4eddf6fa37f538a6e53512915dbf07134a28a88 Mon Sep 17 00:00:00 2001 From: vishesh Date: Tue, 31 Jan 2023 23:53:48 +0530 Subject: [PATCH 1/5] bug: fixed bug #534 of multiple clicks on the interests screen --- build.gradle.kts | 2 ++ .../feature/interests/TabContent.kt | 25 ++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 6f6d375d7..fe4cad4d5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -26,6 +26,8 @@ buildscript { } plugins { + java + application alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kotlin.serialization) apply false diff --git a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt index 0cff8c82c..bad2c1220 100644 --- a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt +++ b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt @@ -25,9 +25,12 @@ import androidx.compose.foundation.layout.windowInsetsBottomHeight import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.input.pointer.PointerEventPass +import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.testTag import androidx.compose.ui.unit.dp import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic +import kotlinx.coroutines.coroutineScope @Composable fun TopicsTabContent( @@ -39,7 +42,8 @@ fun TopicsTabContent( LazyColumn( modifier = modifier .padding(horizontal = 16.dp) - .testTag("interests:topics"), + .testTag("interests:topics") + .disableSplitMotionEvents(), contentPadding = PaddingValues(top = 8.dp) ) { topics.forEach { followableTopic -> @@ -61,3 +65,22 @@ fun TopicsTabContent( } } } + +fun Modifier.disableSplitMotionEvents() = + pointerInput(Unit) { + coroutineScope { + var currentId: Long = -1L + awaitPointerEventScope { + while (true) { + awaitPointerEvent(PointerEventPass.Initial).changes.forEach { pointerInfo -> + when { + pointerInfo.pressed && currentId == -1L -> currentId = pointerInfo.id.value + pointerInfo.pressed.not() && currentId == pointerInfo.id.value -> currentId = -1 + pointerInfo.id.value != currentId && currentId != -1L -> pointerInfo.consume() + else -> Unit + } + } + } + } + } + } From 487a288191f583cf50aeb8c0a50606b7f1cf97d5 Mon Sep 17 00:00:00 2001 From: vishesh211 Date: Sun, 30 Apr 2023 00:06:57 +0530 Subject: [PATCH 2/5] fix: removed disableSplitMotionEvents --- .../feature/interests/TabContent.kt | 22 +------------------ 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt index bad2c1220..5fe24dcf4 100644 --- a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt +++ b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt @@ -42,8 +42,7 @@ fun TopicsTabContent( LazyColumn( modifier = modifier .padding(horizontal = 16.dp) - .testTag("interests:topics") - .disableSplitMotionEvents(), + .testTag("interests:topics"), contentPadding = PaddingValues(top = 8.dp) ) { topics.forEach { followableTopic -> @@ -65,22 +64,3 @@ fun TopicsTabContent( } } } - -fun Modifier.disableSplitMotionEvents() = - pointerInput(Unit) { - coroutineScope { - var currentId: Long = -1L - awaitPointerEventScope { - while (true) { - awaitPointerEvent(PointerEventPass.Initial).changes.forEach { pointerInfo -> - when { - pointerInfo.pressed && currentId == -1L -> currentId = pointerInfo.id.value - pointerInfo.pressed.not() && currentId == pointerInfo.id.value -> currentId = -1 - pointerInfo.id.value != currentId && currentId != -1L -> pointerInfo.consume() - else -> Unit - } - } - } - } - } - } From 079f92ea32871595f1186fab3f5de81cec327d94 Mon Sep 17 00:00:00 2001 From: vishesh211 Date: Sun, 30 Apr 2023 00:07:52 +0530 Subject: [PATCH 3/5] feat: added launchSingleTop in navigate --- .../nowinandroid/feature/topic/navigation/TopicNavigation.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt b/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt index 1cc43bbd1..abba3a116 100644 --- a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt +++ b/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt @@ -37,7 +37,9 @@ internal class TopicArgs(val topicId: String) { fun NavController.navigateToTopic(topicId: String) { val encodedId = Uri.encode(topicId) - this.navigate("topic_route/$encodedId") + this.navigate("topic_route/$encodedId") { + launchSingleTop = true + } } fun NavGraphBuilder.topicScreen( From 794d84cf6778d1084a1da3f022c658fe1456b3ed Mon Sep 17 00:00:00 2001 From: vishesh211 Date: Thu, 4 May 2023 22:52:18 +0530 Subject: [PATCH 4/5] done required cleanup --- build.gradle.kts | 1 - .../apps/nowinandroid/feature/interests/TabContent.kt | 9 +++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index fe4cad4d5..7384aa1a2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -26,7 +26,6 @@ buildscript { } plugins { - java application alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.jvm) apply false diff --git a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt index 5fe24dcf4..dcca35795 100644 --- a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt +++ b/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt @@ -25,25 +25,22 @@ import androidx.compose.foundation.layout.windowInsetsBottomHeight import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.input.pointer.PointerEventPass -import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.testTag import androidx.compose.ui.unit.dp import com.google.samples.apps.nowinandroid.core.domain.model.FollowableTopic -import kotlinx.coroutines.coroutineScope @Composable fun TopicsTabContent( topics: List, onTopicClick: (String) -> Unit, onFollowButtonClick: (String, Boolean) -> Unit, - modifier: Modifier = Modifier + modifier: Modifier = Modifier, ) { LazyColumn( modifier = modifier .padding(horizontal = 16.dp) .testTag("interests:topics"), - contentPadding = PaddingValues(top = 8.dp) + contentPadding = PaddingValues(top = 8.dp), ) { topics.forEach { followableTopic -> val topicId = followableTopic.topic.id @@ -54,7 +51,7 @@ fun TopicsTabContent( description = followableTopic.topic.shortDescription, topicImageUrl = followableTopic.topic.imageUrl, onClick = { onTopicClick(topicId) }, - onFollowButtonClick = { onFollowButtonClick(topicId, it) } + onFollowButtonClick = { onFollowButtonClick(topicId, it) }, ) } } From 827248615b2a121903ea7857583ddc24bd3fbedb Mon Sep 17 00:00:00 2001 From: vishesh211 Date: Fri, 12 May 2023 09:20:37 +0530 Subject: [PATCH 5/5] remove application from build.gradle.kts --- build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7384aa1a2..6f6d375d7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -26,7 +26,6 @@ buildscript { } plugins { - application alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kotlin.serialization) apply false