Browse Source

Make the link to the policy active.

other/julioromano/inlineasync2
Benoit Marty 1 year ago
parent
commit
b36fd098d3
  1. 22
      features/analytics/api/src/main/kotlin/io/element/android/features/analytics/api/Config.kt
  2. 1
      features/analytics/impl/build.gradle.kts
  3. 12
      features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInNode.kt
  4. 25
      features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInView.kt

22
features/analytics/api/src/main/kotlin/io/element/android/features/analytics/api/Config.kt

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
/*
* Copyright (c) 2023 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 io.element.android.features.analytics.api
object Config {
const val POLICY_LINK = "https://element.io/cookie-policy"
}

1
features/analytics/impl/build.gradle.kts

@ -41,6 +41,7 @@ dependencies { @@ -41,6 +41,7 @@ dependencies {
api(projects.features.analytics.api)
api(projects.services.analytics.api)
implementation(libs.androidx.datastore.preferences)
implementation(libs.androidx.browser)
ksp(libs.showkase.processor)
testImplementation(libs.test.junit)

12
features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInNode.kt

@ -16,14 +16,19 @@ @@ -16,14 +16,19 @@
package io.element.android.features.analytics.impl
import android.app.Activity
import androidx.compose.material.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import com.bumble.appyx.core.modality.BuildContext
import com.bumble.appyx.core.node.Node
import com.bumble.appyx.core.plugin.Plugin
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
import io.element.android.anvilannotations.ContributesNode
import io.element.android.features.analytics.api.Config
import io.element.android.libraries.androidutils.browser.openUrlInChromeCustomTab
import io.element.android.libraries.di.AppScope
@ContributesNode(AppScope::class)
@ -33,12 +38,19 @@ class AnalyticsOptInNode @AssistedInject constructor( @@ -33,12 +38,19 @@ class AnalyticsOptInNode @AssistedInject constructor(
private val presenter: AnalyticsOptInPresenter,
) : Node(buildContext, plugins = plugins) {
private fun onClickTerms(activity: Activity, darkTheme: Boolean) {
activity.openUrlInChromeCustomTab(null, darkTheme, Config.POLICY_LINK)
}
@Composable
override fun View(modifier: Modifier) {
val activity = LocalContext.current as Activity
val isDark = MaterialTheme.colors.isLight.not()
val state = presenter.present()
AnalyticsOptInView(
state = state,
modifier = modifier,
onClickTerms = { onClickTerms(activity, isDark) },
)
}
}

25
features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInView.kt

@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
package io.element.android.features.analytics.impl
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@ -34,8 +35,10 @@ import androidx.compose.material.icons.filled.Poll @@ -34,8 +35,10 @@ import androidx.compose.material.icons.filled.Poll
import androidx.compose.material.icons.rounded.Check
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.BiasAlignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
@ -63,6 +66,7 @@ import io.element.android.libraries.ui.strings.R as StringR @@ -63,6 +66,7 @@ import io.element.android.libraries.ui.strings.R as StringR
@Composable
fun AnalyticsOptInView(
state: AnalyticsOptInState,
onClickTerms: () -> Unit,
modifier: Modifier = Modifier,
) {
LogCompositions(tag = "Analytics", msg = "Root")
@ -72,16 +76,19 @@ fun AnalyticsOptInView( @@ -72,16 +76,19 @@ fun AnalyticsOptInView(
.fillMaxSize()
.systemBarsPadding()
.imePadding(),
header = { AnalyticsOptInHeader(state) },
header = { AnalyticsOptInHeader(state, onClickTerms) },
content = { AnalyticsOptInContent() },
footer = { AnalyticsOptInFooter(eventSink) })
}
@Composable
fun AnalyticsOptInHeader(state: AnalyticsOptInState) {
Column {
fun AnalyticsOptInHeader(
state: AnalyticsOptInState,
onClickTerms: () -> Unit,
) {
Column(horizontalAlignment = Alignment.CenterHorizontally) {
IconTitleSubtitleMolecule(
modifier = Modifier.padding(top = 60.dp),
modifier = Modifier.padding(top = 60.dp, bottom = 12.dp),
title = stringResource(id = R.string.screen_analytics_prompt_title, state.applicationName),
subTitle = stringResource(id = R.string.screen_analytics_prompt_help_us_improve),
iconImageVector = Icons.Filled.Poll
@ -95,8 +102,9 @@ fun AnalyticsOptInHeader(state: AnalyticsOptInState) { @@ -95,8 +102,9 @@ fun AnalyticsOptInHeader(state: AnalyticsOptInState) {
bold = true,
),
modifier = Modifier
.fillMaxWidth()
.padding(top = 20.dp),
.clip(shape = RoundedCornerShape(8.dp))
.clickable { onClickTerms() }
.padding(8.dp),
style = ElementTextStyles.Regular.subheadline,
textAlign = TextAlign.Center,
color = MaterialTheme.colorScheme.secondary,
@ -204,5 +212,8 @@ fun AnalyticsOptInViewDarkPreview(@PreviewParameter(AnalyticsOptInStateProvider: @@ -204,5 +212,8 @@ fun AnalyticsOptInViewDarkPreview(@PreviewParameter(AnalyticsOptInStateProvider:
@Composable
private fun ContentToPreview(state: AnalyticsOptInState) {
AnalyticsOptInView(state = state)
AnalyticsOptInView(
state = state,
onClickTerms = {},
)
}

Loading…
Cancel
Save