Add license screen to settings page.
This commit is contained in:
parent
92888778c2
commit
61f50cfe60
8 changed files with 131 additions and 0 deletions
|
@ -4,6 +4,7 @@ plugins {
|
|||
id 'com.android.application'
|
||||
id 'kotlin-android'
|
||||
id 'com.google.protobuf'
|
||||
id 'com.google.android.gms.oss-licenses-plugin'
|
||||
id 'androidx.navigation.safeargs'
|
||||
id 'org.jlleitschuh.gradle.ktlint'
|
||||
id 'org.jetbrains.kotlin.android'
|
||||
|
@ -467,6 +468,7 @@ dependencies {
|
|||
implementation libs.androidx.legacy.preference
|
||||
implementation libs.androidx.gridlayout
|
||||
implementation libs.androidx.exifinterface
|
||||
implementation libs.androidx.compose.rxjava3
|
||||
implementation libs.androidx.constraintlayout
|
||||
implementation libs.androidx.multidex
|
||||
implementation libs.androidx.navigation.fragment.ktx
|
||||
|
|
|
@ -44,6 +44,13 @@ class HelpSettingsFragment : DSLSettingsFragment(R.string.preferences__help) {
|
|||
}
|
||||
)
|
||||
|
||||
clickPref(
|
||||
title = DSLSettingsText.from(R.string.HelpSettingsFragment__licenses),
|
||||
onClick = {
|
||||
Navigation.findNavController(requireView()).safeNavigate(R.id.action_helpSettingsFragment_to_licenseFragment)
|
||||
}
|
||||
)
|
||||
|
||||
externalLinkPref(
|
||||
title = DSLSettingsText.from(R.string.HelpSettingsFragment__terms_amp_privacy_policy),
|
||||
linkId = R.string.terms_and_privacy_policy_url
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* Copyright 2023 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
|
||||
package org.thoughtcrime.securesms.components.settings.app.help
|
||||
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.State
|
||||
import androidx.compose.runtime.rxjava3.subscribeAsState
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.core.Single
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||
import org.signal.core.ui.Scaffolds
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.compose.ComposeFragment
|
||||
|
||||
class LicenseFragment : ComposeFragment() {
|
||||
private val TAG = Log.tag(LicenseFragment::class.java)
|
||||
|
||||
@Composable
|
||||
override fun FragmentContent() {
|
||||
val textState: State<String> = Single.fromCallable {
|
||||
requireContext().resources.openRawResource(R.raw.third_party_licenses).bufferedReader().use { it.readText() }
|
||||
}
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribeAsState(initial = "")
|
||||
Scaffolds.Settings(
|
||||
title = stringResource(id = R.string.HelpSettingsFragment__licenses),
|
||||
onNavigationClick = findNavController()::popBackStack,
|
||||
navigationIconPainter = painterResource(id = R.drawable.ic_arrow_left_24),
|
||||
navigationContentDescription = stringResource(id = R.string.Material3SearchToolbar__close)
|
||||
) {
|
||||
LicenseScreen(licenseText = textState.value, modifier = Modifier.padding(it))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun LicenseScreen(licenseText: String, modifier: Modifier = Modifier) {
|
||||
Column(
|
||||
modifier = modifier
|
||||
.padding(horizontal = 24.dp)
|
||||
.verticalScroll(rememberScrollState())
|
||||
) {
|
||||
Text(
|
||||
text = licenseText,
|
||||
style = MaterialTheme.typography.bodyMedium,
|
||||
modifier = Modifier.padding(vertical = 16.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun LicenseFragmentPreview() {
|
||||
LicenseScreen("Lorem ipsum")
|
||||
}
|
|
@ -409,6 +409,13 @@
|
|||
app:exitAnim="@anim/fragment_open_exit"
|
||||
app:popEnterAnim="@anim/fragment_close_enter"
|
||||
app:popExitAnim="@anim/fragment_close_exit" />
|
||||
<action
|
||||
android:id="@+id/action_helpSettingsFragment_to_licenseFragment"
|
||||
app:destination="@id/licenseFragment"
|
||||
app:enterAnim="@anim/fragment_open_enter"
|
||||
app:exitAnim="@anim/fragment_open_exit"
|
||||
app:popEnterAnim="@anim/fragment_close_enter"
|
||||
app:popExitAnim="@anim/fragment_close_exit" />
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
|
@ -423,6 +430,11 @@
|
|||
app:nullable="false" />
|
||||
</fragment>
|
||||
|
||||
<fragment
|
||||
android:id="@+id/licenseFragment"
|
||||
android:name="org.thoughtcrime.securesms.components.settings.app.help.LicenseFragment"
|
||||
android:label="license_fragment" />
|
||||
|
||||
<activity
|
||||
android:id="@+id/submitDebugLogActivity"
|
||||
android:name="org.thoughtcrime.securesms.logsubmit.SubmitDebugLogActivity"
|
||||
|
|
|
@ -4325,6 +4325,8 @@
|
|||
<string name="HelpSettingsFragment__contact_us">Contact us</string>
|
||||
<string name="HelpSettingsFragment__version">Version</string>
|
||||
<string name="HelpSettingsFragment__debug_log">Debug log</string>
|
||||
<!-- Header for the screen that displays the licenses of the open-source software dependencies of the Signal app-->
|
||||
<string name="HelpSettingsFragment__licenses">Licenses</string>
|
||||
<string name="HelpSettingsFragment__terms_amp_privacy_policy">Terms & Privacy Policy</string>
|
||||
<string name="HelpFragment__copyright_signal_messenger">Copyright Signal Messenger</string>
|
||||
<string name="HelpFragment__licenced_under_the_agplv3">Licensed under the GNU AGPLv3</string>
|
||||
|
|
|
@ -21,6 +21,7 @@ buildscript {
|
|||
classpath 'com.android.tools.build:gradle:7.4.2'
|
||||
classpath 'androidx.navigation:navigation-safe-args-gradle-plugin:2.5.3'
|
||||
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.17'
|
||||
classpath 'com.google.android.gms:oss-licenses-plugin:0.10.6'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
classpath libs.ktlint
|
||||
classpath 'app.cash.exhaustive:exhaustive-gradle:0.1.1'
|
||||
|
|
|
@ -27,6 +27,7 @@ dependencyResolutionManagement {
|
|||
alias('androidx-compose-material3').to('androidx.compose.material3', 'material3').withoutVersion()
|
||||
alias('androidx-compose-ui-tooling-preview').to('androidx.compose.ui', 'ui-tooling-preview').withoutVersion()
|
||||
alias('androidx-compose-ui-tooling-core').to('androidx.compose.ui', 'ui-tooling').withoutVersion()
|
||||
alias('androidx-compose-rxjava3').to('androidx.compose.runtime:runtime-rxjava3:1.4.2')
|
||||
alias('ktlint-twitter-compose').to('com.twitter.compose.rules:ktlint:0.0.26')
|
||||
|
||||
// Accompanist
|
||||
|
|
|
@ -572,6 +572,22 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
|
|||
<sha256 value="e7ec58f6c62c49f04f1f75eeeb82356016e37e7093f7ed9882e678e1f251863f" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="androidx.compose.runtime" name="runtime" version="1.4.2">
|
||||
<artifact name="runtime-1.4.2.aar">
|
||||
<sha256 value="41ff5a9fbbcb8a7403345b5426e454d73278878d469b088893ecb917cc7fd84c" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="runtime-1.4.2.module">
|
||||
<sha256 value="328c920d5c707fa7ee885cf8c81e4a228d6f9db3dd0d93bf334eead762b6da7f" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="androidx.compose.runtime" name="runtime-rxjava3" version="1.4.2">
|
||||
<artifact name="runtime-rxjava3-1.4.2.aar">
|
||||
<sha256 value="685877e672f95cf7368ada6e3af07eee107529b6962bf2272b4b1c8d22da7200" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="runtime-rxjava3-1.4.2.module">
|
||||
<sha256 value="3882039985f75cdad43e6bda258e222ca943181729d5783c5958dfb5e87f8b24" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="androidx.compose.runtime" name="runtime-saveable" version="1.0.1">
|
||||
<artifact name="runtime-saveable-1.0.1.module">
|
||||
<sha256 value="c0d6f142542d8d74f65481ef6526d2be265f01f812a112948fcde87a458f4fb6" origin="Generated by Gradle"/>
|
||||
|
@ -593,6 +609,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
|
|||
<sha256 value="93c8a47a9333f2e274941228cf06cefe6c8be88f49a58b13a0416dcae1872507" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="androidx.compose.runtime" name="runtime-saveable" version="1.4.2">
|
||||
<artifact name="runtime-saveable-1.4.2.aar">
|
||||
<sha256 value="aedd018f6dd11a5c0883d730066611016ed30dfb13692630f529876a52e5ec54" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="runtime-saveable-1.4.2.module">
|
||||
<sha256 value="3677ee9c263f671944711b36e2455b4cde9e83c9266508cd2a45d9dc01a3abc6" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="androidx.compose.ui" name="ui" version="1.0.1">
|
||||
<artifact name="ui-1.0.1.module">
|
||||
<sha256 value="57031a6ac9b60e5b56792ebf5cde6e16812ff566ed9190cbd188b00b46c13779" origin="Generated by Gradle"/>
|
||||
|
@ -3103,6 +3127,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
|
|||
<sha256 value="96f6e6d9f5e5db840ee3da20449e16828ed4ba2c07783dde3397d13aaf814e19" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="com.google.android.gms" name="oss-licenses-plugin" version="0.10.6">
|
||||
<artifact name="oss-licenses-plugin-0.10.6.jar">
|
||||
<sha256 value="4da482ab65264b1e09b0d9c18c314398aed6639c84acf80f2df07b10da413675" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="com.google.android.gms" name="play-services-auth" version="20.3.0">
|
||||
<artifact name="play-services-auth-20.3.0.aar">
|
||||
<sha256 value="657f3bf85af4970f94bd6b87bdf2e67e7bfbdaacfd9635974826bcc634bda8a6" origin="Generated by Gradle"/>
|
||||
|
@ -3416,6 +3445,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
|
|||
<sha256 value="cf697452fbe7f6bdfdf65043797a16cd627b1dd4248be4b572fcb73f8c032cc0" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="com.google.protobuf" name="protobuf-java" version="3.19.1">
|
||||
<artifact name="protobuf-java-3.19.1.jar">
|
||||
<sha256 value="24f7d0d91797ed230a6d3da93cd80590a4c3aa9a27249f6025b5c6da078edde7" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
</component>
|
||||
<component group="com.google.protobuf" name="protobuf-java-util" version="3.17.2">
|
||||
<artifact name="protobuf-java-util-3.17.2.jar">
|
||||
<sha256 value="849925333aac23f46f9a154a52e441117017d5673e04e5636993bcc3cf1924d9" origin="Generated by Gradle"/>
|
||||
|
|
Loading…
Add table
Reference in a new issue