Added user guide link in Help section, factorized code for URL opening, added missing ScrollView to help & debug layouts

This commit is contained in:
Sylvain Berfini 2025-06-06 11:44:17 +02:00
parent f2d8eea298
commit 0f72255b4b
9 changed files with 670 additions and 597 deletions

View file

@ -203,47 +203,36 @@ class LandingFragment : GenericFragment() {
model.privacyPolicyClickedEvent.observe(viewLifecycleOwner) {
it.consume {
val url = getString(R.string.website_privacy_policy_url)
try {
val browserIntent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(browserIntent)
} catch (ise: IllegalStateException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], IllegalStateException: $ise"
)
} catch (anfe: ActivityNotFoundException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], ActivityNotFoundException: $anfe"
)
} catch (e: Exception) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url]: $e"
)
}
openUrlInBrowser(url)
}
}
model.generalTermsClickedEvent.observe(viewLifecycleOwner) {
it.consume {
val url = getString(R.string.website_terms_and_conditions_url)
try {
val browserIntent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(browserIntent)
} catch (ise: IllegalStateException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], IllegalStateException: $ise"
)
} catch (anfe: ActivityNotFoundException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], ActivityNotFoundException: $anfe"
)
} catch (e: Exception) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url]: $e"
)
}
openUrlInBrowser(url)
}
}
dialog.show()
}
private fun openUrlInBrowser(url: String) {
try {
val browserIntent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(browserIntent)
} catch (ise: IllegalStateException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], IllegalStateException: $ise"
)
} catch (anfe: ActivityNotFoundException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], ActivityNotFoundException: $anfe"
)
} catch (e: Exception) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url]: $e"
)
}
}
}

View file

@ -796,6 +796,14 @@ open class ConversationFragment : SlidingPaneChildFragment() {
try {
val browserIntent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(browserIntent)
} catch (ise: IllegalStateException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], IllegalStateException: $ise"
)
} catch (anfe: ActivityNotFoundException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], ActivityNotFoundException: $anfe"
)
} catch (e: Exception) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url]: $e"

View file

@ -157,6 +157,10 @@ class DrawerMenuFragment : GenericMainFragment() {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$link], ActivityNotFoundException: $anfe"
)
} catch (e: Exception) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$link]: $e"
)
}
}
}

View file

@ -76,64 +76,24 @@ class HelpFragment : GenericMainFragment() {
}
}
binding.setUserGuideClickListener {
val url = getString(R.string.website_user_guide_url)
openUrlInBrowser(url)
}
binding.setPrivacyPolicyClickListener {
val url = getString(R.string.website_privacy_policy_url)
try {
val browserIntent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(browserIntent)
} catch (ise: IllegalStateException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], IllegalStateException: $ise"
)
} catch (anfe: ActivityNotFoundException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], ActivityNotFoundException: $anfe"
)
} catch (e: Exception) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url]: $e"
)
}
openUrlInBrowser(url)
}
binding.setLicensesClickListener {
val url = getString(R.string.website_open_source_licences_usage_url)
try {
val browserIntent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(browserIntent)
} catch (ise: IllegalStateException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], IllegalStateException: $ise"
)
} catch (anfe: ActivityNotFoundException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], ActivityNotFoundException: $anfe"
)
} catch (e: Exception) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url]: $e"
)
}
openUrlInBrowser(url)
}
binding.setTranslateClickListener {
val url = getString(R.string.website_translate_weblate_url)
try {
val browserIntent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(browserIntent)
} catch (ise: IllegalStateException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], IllegalStateException: $ise"
)
} catch (anfe: ActivityNotFoundException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], ActivityNotFoundException: $anfe"
)
} catch (e: Exception) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url]: $e"
)
}
openUrlInBrowser(url)
}
viewModel.newVersionAvailableEvent.observe(viewLifecycleOwner) {
@ -181,26 +141,30 @@ class HelpFragment : GenericMainFragment() {
model.confirmEvent.observe(viewLifecycleOwner) {
it.consume {
try {
val browserIntent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(browserIntent)
} catch (ise: IllegalStateException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], IllegalStateException: $ise"
)
} catch (anfe: ActivityNotFoundException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], ActivityNotFoundException: $anfe"
)
} catch (e: Exception) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url]: $e"
)
}
openUrlInBrowser(url)
dialog.dismiss()
}
}
dialog.show()
}
private fun openUrlInBrowser(url: String) {
try {
val browserIntent = Intent(Intent.ACTION_VIEW, url.toUri())
startActivity(browserIntent)
} catch (ise: IllegalStateException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], IllegalStateException: $ise"
)
} catch (anfe: ActivityNotFoundException) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url], ActivityNotFoundException: $anfe"
)
} catch (e: Exception) {
Log.e(
"$TAG Can't start ACTION_VIEW intent for URL [$url]: $e"
)
}
}
}

View file

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="256"
android:viewportHeight="256">
<path
android:pathData="M232,48L160,48a40,40 0,0 0,-32 16A40,40 0,0 0,96 48L24,48a8,8 0,0 0,-8 8L16,200a8,8 0,0 0,8 8L96,208a24,24 0,0 1,24 24,8 8,0 0,0 16,0 24,24 0,0 1,24 -24h72a8,8 0,0 0,8 -8L240,56A8,8 0,0 0,232 48ZM96,192L32,192L32,64L96,64a24,24 0,0 1,24 24L120,200A39.81,39.81 0,0 0,96 192ZM224,192L160,192a39.81,39.81 0,0 0,-24 8L136,88a24,24 0,0 1,24 -24h64ZM160,88h40a8,8 0,0 1,0 16L160,104a8,8 0,0 1,0 -16ZM208,128a8,8 0,0 1,-8 8L160,136a8,8 0,0 1,0 -16h40A8,8 0,0 1,208 128ZM208,160a8,8 0,0 1,-8 8L160,168a8,8 0,0 1,0 -16h40A8,8 0,0 1,208 160Z"
android:fillColor="#4e6074"/>
</vector>

View file

@ -54,263 +54,271 @@
app:layout_constraintStart_toEndOf="@id/back"
app:layout_constraintTop_toTopOf="parent"/>
<View
android:id="@+id/background"
<ScrollView
android:layout_width="0dp"
android:layout_height="0dp"
android:fillViewport="true"
android:background="?attr/color_main2_000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/back" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/tertiary_button_label_style"
android:id="@+id/clean_logs"
android:onClick="@{() -> viewModel.cleanLogs()}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tertiary_button_background"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:gravity="center"
android:text="@string/help_troubleshooting_clean_logs"
android:maxLines="1"
android:ellipsize="end"
bind:ignore="MissingConstraints"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/tertiary_button_label_style"
android:id="@+id/send_logs"
android:onClick="@{() -> viewModel.shareLogs()}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tertiary_button_background"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:gravity="center"
android:text="@string/help_troubleshooting_share_logs"
android:maxLines="1"
android:ellipsize="end"
android:visibility="@{viewModel.uploadLogsAvailable ? View.VISIBLE : View.GONE}"
bind:ignore="MissingConstraints" />
<androidx.constraintlayout.helper.widget.Flow
android:id="@+id/logs_flow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="20dp"
app:flow_wrapMode="chain"
app:flow_horizontalGap="16dp"
app:flow_verticalGap="10dp"
app:flow_horizontalStyle="spread_inside"
app:constraint_referenced_ids="clean_logs, send_logs"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/title" />
<ImageView
android:id="@+id/app_version_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/google_play"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/app_version_title"
app:layout_constraintTop_toTopOf="@id/app_version_title"
app:layout_constraintBottom_toBottomOf="@id/app_version_title" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:id="@+id/app_version_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="24dp"
android:text="@string/help_troubleshooting_app_version_title"
app:layout_constraintTop_toBottomOf="@id/logs_flow"
app:layout_constraintStart_toEndOf="@id/app_version_icon"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/app_version_subtitle"
android:onClick="@{appVersionClickListener}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="@{viewModel.appVersion, default=`6.0.0 (master)`}"
android:textSize="14sp"
android:textColor="?attr/color_main2_600"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintHorizontal_bias="0"
app:layout_constrainedWidth="true"
app:layout_constraintTop_toBottomOf="@id/app_version_title"
app:layout_constraintStart_toEndOf="@id/app_version_icon"
app:layout_constraintEnd_toStartOf="@id/app_version_copy_icon" />
<ImageView
android:id="@+id/app_version_copy_icon"
android:onClick="@{appVersionClickListener}"
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:layout_marginStart="5dp"
android:layout_marginEnd="16dp"
android:src="@drawable/copy"
android:contentDescription="@string/content_description_copy_text_to_clipboard"
app:tint="?attr/color_main2_600"
app:layout_constraintTop_toTopOf="@id/app_version_subtitle"
app:layout_constraintBottom_toBottomOf="@id/app_version_subtitle"
app:layout_constraintStart_toEndOf="@id/app_version_subtitle"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:id="@+id/sdk_version_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/resource_package"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/sdk_version_title"
app:layout_constraintTop_toTopOf="@id/sdk_version_title"
app:layout_constraintBottom_toBottomOf="@id/sdk_version_title" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:id="@+id/sdk_version_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="20dp"
android:text="@string/help_troubleshooting_sdk_version_title"
app:layout_constraintTop_toBottomOf="@id/app_version_subtitle"
app:layout_constraintStart_toEndOf="@id/sdk_version_icon"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/sdk_version_subtitle"
android:onClick="@{sdkVersionClickListener}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="@{viewModel.sdkVersion, default=`5.4.0 (master)`}"
android:textSize="14sp"
android:textColor="?attr/color_main2_600"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintHorizontal_bias="0"
app:layout_constrainedWidth="true"
app:layout_constraintTop_toBottomOf="@id/sdk_version_title"
app:layout_constraintStart_toEndOf="@id/sdk_version_icon"
app:layout_constraintEnd_toStartOf="@id/sdk_version_copy_icon" />
<ImageView
android:id="@+id/sdk_version_copy_icon"
android:onClick="@{sdkVersionClickListener}"
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:layout_marginStart="5dp"
android:layout_marginEnd="16dp"
android:src="@drawable/copy"
android:contentDescription="@string/content_description_copy_text_to_clipboard"
app:tint="?attr/color_main2_600"
app:layout_constraintTop_toTopOf="@id/sdk_version_subtitle"
app:layout_constraintBottom_toBottomOf="@id/sdk_version_subtitle"
app:layout_constraintStart_toEndOf="@id/sdk_version_subtitle"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:id="@+id/firebase_project_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/firebase"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/firebase_project_title"
app:layout_constraintTop_toTopOf="@id/firebase_project_title"
app:layout_constraintBottom_toBottomOf="@id/firebase_project_title" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:id="@+id/firebase_project_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="20dp"
android:text="@string/help_troubleshooting_firebase_project_title"
app:layout_constraintTop_toBottomOf="@id/sdk_version_subtitle"
app:layout_constraintStart_toEndOf="@id/firebase_project_icon"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/firebase_project_subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:text="@{viewModel.firebaseProjectId, default=`linphone-android-8a563`}"
android:textSize="14sp"
android:textColor="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/firebase_project_title"
app:layout_constraintStart_toEndOf="@id/firebase_project_icon"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/tertiary_button_label_style"
android:onClick="@{() -> viewModel.showConfigFile()}"
android:id="@+id/show_config_file"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="32dp"
android:background="@drawable/tertiary_button_background"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:gravity="center"
android:text="@string/help_troubleshooting_show_config_file"
android:maxLines="1"
android:ellipsize="end"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/firebase_project_subtitle"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/settings_title_style"
android:id="@+id/clear_friends_db"
android:onClick="@{() -> viewModel.clearNativeFriendsDatabase()}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="@dimen/screen_bottom_margin"
android:text="@string/help_troubleshooting_clear_native_friends_in_database"
android:maxLines="1"
android:ellipsize="end"
android:drawableEnd="@drawable/trash_simple"
android:drawableTint="?attr/color_main2_600"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/show_config_file"/>
app:layout_constraintTop_toBottomOf="@id/back"
app:layout_constraintBottom_toBottomOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatTextView
style="@style/tertiary_button_label_style"
android:id="@+id/clean_logs"
android:onClick="@{() -> viewModel.cleanLogs()}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tertiary_button_background"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:gravity="center"
android:text="@string/help_troubleshooting_clean_logs"
android:maxLines="1"
android:ellipsize="end"
bind:ignore="MissingConstraints"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/tertiary_button_label_style"
android:id="@+id/send_logs"
android:onClick="@{() -> viewModel.shareLogs()}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tertiary_button_background"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:gravity="center"
android:text="@string/help_troubleshooting_share_logs"
android:maxLines="1"
android:ellipsize="end"
android:visibility="@{viewModel.uploadLogsAvailable ? View.VISIBLE : View.GONE}"
bind:ignore="MissingConstraints" />
<androidx.constraintlayout.helper.widget.Flow
android:id="@+id/logs_flow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="20dp"
app:flow_wrapMode="chain"
app:flow_horizontalGap="16dp"
app:flow_verticalGap="10dp"
app:flow_horizontalStyle="spread_inside"
app:constraint_referenced_ids="clean_logs, send_logs"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/app_version_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/google_play"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/app_version_title"
app:layout_constraintTop_toTopOf="@id/app_version_title"
app:layout_constraintBottom_toBottomOf="@id/app_version_title" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:id="@+id/app_version_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="24dp"
android:text="@string/help_troubleshooting_app_version_title"
app:layout_constraintTop_toBottomOf="@id/logs_flow"
app:layout_constraintStart_toEndOf="@id/app_version_icon"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/app_version_subtitle"
android:onClick="@{appVersionClickListener}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="@{viewModel.appVersion, default=`6.0.0 (master)`}"
android:textSize="14sp"
android:textColor="?attr/color_main2_600"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintHorizontal_bias="0"
app:layout_constrainedWidth="true"
app:layout_constraintTop_toBottomOf="@id/app_version_title"
app:layout_constraintStart_toEndOf="@id/app_version_icon"
app:layout_constraintEnd_toStartOf="@id/app_version_copy_icon" />
<ImageView
android:id="@+id/app_version_copy_icon"
android:onClick="@{appVersionClickListener}"
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:layout_marginStart="5dp"
android:layout_marginEnd="16dp"
android:src="@drawable/copy"
android:contentDescription="@string/content_description_copy_text_to_clipboard"
app:tint="?attr/color_main2_600"
app:layout_constraintTop_toTopOf="@id/app_version_subtitle"
app:layout_constraintBottom_toBottomOf="@id/app_version_subtitle"
app:layout_constraintStart_toEndOf="@id/app_version_subtitle"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:id="@+id/sdk_version_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/resource_package"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/sdk_version_title"
app:layout_constraintTop_toTopOf="@id/sdk_version_title"
app:layout_constraintBottom_toBottomOf="@id/sdk_version_title" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:id="@+id/sdk_version_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="20dp"
android:text="@string/help_troubleshooting_sdk_version_title"
app:layout_constraintTop_toBottomOf="@id/app_version_subtitle"
app:layout_constraintStart_toEndOf="@id/sdk_version_icon"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/sdk_version_subtitle"
android:onClick="@{sdkVersionClickListener}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="@{viewModel.sdkVersion, default=`5.4.0 (master)`}"
android:textSize="14sp"
android:textColor="?attr/color_main2_600"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintHorizontal_bias="0"
app:layout_constrainedWidth="true"
app:layout_constraintTop_toBottomOf="@id/sdk_version_title"
app:layout_constraintStart_toEndOf="@id/sdk_version_icon"
app:layout_constraintEnd_toStartOf="@id/sdk_version_copy_icon" />
<ImageView
android:id="@+id/sdk_version_copy_icon"
android:onClick="@{sdkVersionClickListener}"
android:layout_width="@dimen/icon_size"
android:layout_height="@dimen/icon_size"
android:layout_marginStart="5dp"
android:layout_marginEnd="16dp"
android:src="@drawable/copy"
android:contentDescription="@string/content_description_copy_text_to_clipboard"
app:tint="?attr/color_main2_600"
app:layout_constraintTop_toTopOf="@id/sdk_version_subtitle"
app:layout_constraintBottom_toBottomOf="@id/sdk_version_subtitle"
app:layout_constraintStart_toEndOf="@id/sdk_version_subtitle"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:id="@+id/firebase_project_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/firebase"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/firebase_project_title"
app:layout_constraintTop_toTopOf="@id/firebase_project_title"
app:layout_constraintBottom_toBottomOf="@id/firebase_project_title" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:id="@+id/firebase_project_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="20dp"
android:text="@string/help_troubleshooting_firebase_project_title"
app:layout_constraintTop_toBottomOf="@id/sdk_version_subtitle"
app:layout_constraintStart_toEndOf="@id/firebase_project_icon"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/firebase_project_subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:text="@{viewModel.firebaseProjectId, default=`linphone-android-8a563`}"
android:textSize="14sp"
android:textColor="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/firebase_project_title"
app:layout_constraintStart_toEndOf="@id/firebase_project_icon"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/tertiary_button_label_style"
android:onClick="@{() -> viewModel.showConfigFile()}"
android:id="@+id/show_config_file"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="32dp"
android:background="@drawable/tertiary_button_background"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:gravity="center"
android:text="@string/help_troubleshooting_show_config_file"
android:maxLines="1"
android:ellipsize="end"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/firebase_project_subtitle"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/settings_title_style"
android:id="@+id/clear_friends_db"
android:onClick="@{() -> viewModel.clearNativeFriendsDatabase()}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="@dimen/screen_bottom_margin"
android:text="@string/help_troubleshooting_clear_native_friends_in_database"
android:maxLines="1"
android:ellipsize="end"
android:drawableEnd="@drawable/trash_simple"
android:drawableTint="?attr/color_main2_600"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/show_config_file"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
@ -318,6 +326,6 @@
layout="@layout/operation_in_progress"
bind:visibility="@{viewModel.logsUploadInProgress}" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

View file

@ -8,6 +8,9 @@
<variable
name="backClickListener"
type="View.OnClickListener" />
<variable
name="userGuideClickListener"
type="View.OnClickListener" />
<variable
name="licensesClickListener"
type="View.OnClickListener" />
@ -25,15 +28,14 @@
type="org.linphone.ui.main.help.viewmodel.HelpViewModel" />
</data>
<ScrollView
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:background="?attr/color_background_contrast_in_dark_mode">
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="match_parent"
android:background="?attr/color_background_contrast_in_dark_mode">
<ImageView
android:id="@+id/back"
@ -61,273 +63,353 @@
app:layout_constraintStart_toEndOf="@id/back"
app:layout_constraintTop_toTopOf="parent"/>
<View
android:id="@+id/background"
<ScrollView
android:layout_width="0dp"
android:layout_height="0dp"
android:fillViewport="true"
android:background="?attr/color_main2_000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/back" />
app:layout_constraintTop_toBottomOf="@id/back"
app:layout_constraintBottom_toBottomOf="parent">
<androidx.appcompat.widget.AppCompatTextView
style="@style/section_header_style"
android:id="@+id/about_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="20dp"
android:text="@string/help_about_title"
app:layout_constraintTop_toBottomOf="@id/title"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:onClick="@{privacyPolicyClickListener}"
android:id="@+id/privacy_policy_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/detective"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/privacy_policy_title"
app:layout_constraintTop_toTopOf="@id/privacy_policy_title"
app:layout_constraintBottom_toBottomOf="@id/privacy_policy_title"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/section_header_style"
android:id="@+id/about_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="20dp"
android:text="@string/help_about_title"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:onClick="@{privacyPolicyClickListener}"
android:id="@+id/privacy_policy_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="24dp"
android:text="@string/help_about_privacy_policy_title"
android:drawableEnd="@drawable/arrow_square_out"
android:drawablePadding="5dp"
app:drawableTint="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/about_title"
app:layout_constraintStart_toEndOf="@id/privacy_policy_icon"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:onClick="@{userGuideClickListener}"
android:id="@+id/user_guide_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/book_open_text"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/user_guide_title"
app:layout_constraintTop_toTopOf="@id/user_guide_title"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:onClick="@{privacyPolicyClickListener}"
android:id="@+id/privacy_policy_subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:text="@string/help_about_privacy_policy_subtitle"
android:textSize="14sp"
android:textColor="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/privacy_policy_title"
app:layout_constraintStart_toEndOf="@id/privacy_policy_icon"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:onClick="@{userGuideClickListener}"
android:id="@+id/user_guide_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="24dp"
android:text="@string/help_about_user_guide_title"
android:drawableEnd="@drawable/arrow_square_out"
android:drawablePadding="5dp"
app:drawableTint="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/about_title"
app:layout_constraintStart_toEndOf="@id/user_guide_icon"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:id="@+id/version_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:src="@drawable/info"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintTop_toTopOf="@id/version"
app:layout_constraintStart_toStartOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:onClick="@{userGuideClickListener}"
android:id="@+id/user_guide_subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:text="@string/help_about_user_guide_subtitle"
android:textSize="14sp"
android:textColor="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/user_guide_title"
app:layout_constraintStart_toEndOf="@id/user_guide_icon"
app:layout_constraintEnd_toEndOf="parent" />
<LinearLayout
android:id="@+id/version"
android:onClick="@{() -> viewModel.versionClicked()}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:ignore="MissingConstraints">
<ImageView
android:onClick="@{privacyPolicyClickListener}"
android:id="@+id/privacy_policy_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/detective"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/privacy_policy_title"
app:layout_constraintTop_toTopOf="@id/privacy_policy_title"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:id="@+id/version_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/help_about_version_title"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:onClick="@{privacyPolicyClickListener}"
android:id="@+id/privacy_policy_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="24dp"
android:text="@string/help_about_privacy_policy_title"
android:drawableEnd="@drawable/arrow_square_out"
android:drawablePadding="5dp"
app:drawableTint="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/user_guide_subtitle"
app:layout_constraintStart_toEndOf="@id/privacy_policy_icon"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/version_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.version, default=`6.0.0`}"
android:textSize="14sp"
android:textColor="?attr/color_main2_600" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:onClick="@{privacyPolicyClickListener}"
android:id="@+id/privacy_policy_subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:text="@string/help_about_privacy_policy_subtitle"
android:textSize="14sp"
android:textColor="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/privacy_policy_title"
app:layout_constraintStart_toEndOf="@id/privacy_policy_icon"
app:layout_constraintEnd_toEndOf="parent" />
</LinearLayout>
<ImageView
android:id="@+id/version_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:src="@drawable/info"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintTop_toTopOf="@id/version"
app:layout_constraintStart_toStartOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/tertiary_button_label_style"
android:id="@+id/check_for_update"
android:onClick="@{() -> viewModel.checkForUpdate()}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tertiary_button_background"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:gravity="center"
android:text="@string/help_about_check_for_update"
android:maxLines="1"
android:ellipsize="end"
android:visibility="@{viewModel.checkUpdateAvailable ? View.VISIBLE : View.GONE}"
tools:ignore="MissingConstraints" />
<LinearLayout
android:id="@+id/version"
android:onClick="@{() -> viewModel.versionClicked()}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:ignore="MissingConstraints">
<androidx.constraintlayout.helper.widget.Flow
android:id="@+id/version_flow"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="24dp"
app:flow_wrapMode="chain"
app:flow_horizontalGap="16dp"
app:flow_verticalGap="10dp"
app:flow_horizontalStyle="spread_inside"
app:flow_horizontalBias="0"
app:constraint_referenced_ids="version, check_for_update"
app:layout_constraintStart_toEndOf="@id/version_icon"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/privacy_policy_subtitle" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:id="@+id/version_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/help_about_version_title"/>
<ImageView
android:onClick="@{licensesClickListener}"
android:id="@+id/open_source_licenses_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/check_square_offset"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/open_source_licenses_title"
app:layout_constraintTop_toTopOf="@id/open_source_licenses_title"
app:layout_constraintBottom_toBottomOf="@id/open_source_licenses_title" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:id="@+id/version_subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{viewModel.version, default=`6.0.0`}"
android:textSize="14sp"
android:textColor="?attr/color_main2_600" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:onClick="@{licensesClickListener}"
android:id="@+id/open_source_licenses_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="24dp"
android:text="@string/help_about_open_source_licenses_title"
android:drawableEnd="@drawable/arrow_square_out"
android:drawablePadding="5dp"
app:drawableTint="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/version_flow"
app:layout_constraintStart_toEndOf="@id/open_source_licenses_icon"
app:layout_constraintEnd_toEndOf="parent"/>
</LinearLayout>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:onClick="@{licensesClickListener}"
android:id="@+id/open_source_licenses_subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:text="@string/help_about_open_source_licenses_subtitle"
android:textSize="14sp"
android:textColor="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/open_source_licenses_title"
app:layout_constraintStart_toEndOf="@id/open_source_licenses_icon"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/tertiary_button_label_style"
android:id="@+id/check_for_update"
android:onClick="@{() -> viewModel.checkForUpdate()}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/tertiary_button_background"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:paddingTop="6dp"
android:paddingBottom="6dp"
android:gravity="center"
android:text="@string/help_about_check_for_update"
android:maxLines="1"
android:ellipsize="end"
android:visibility="@{viewModel.checkUpdateAvailable ? View.VISIBLE : View.GONE}"
tools:ignore="MissingConstraints" />
<ImageView
android:onClick="@{translateClickListener}"
android:id="@+id/translate_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/globe_hemisphere_west"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/translate_title"
app:layout_constraintTop_toTopOf="@id/translate_title"
app:layout_constraintBottom_toBottomOf="@id/translate_title" />
<androidx.constraintlayout.helper.widget.Flow
android:id="@+id/version_flow"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="24dp"
app:flow_wrapMode="chain"
app:flow_horizontalGap="16dp"
app:flow_verticalGap="10dp"
app:flow_horizontalStyle="spread_inside"
app:flow_horizontalBias="0"
app:constraint_referenced_ids="version, check_for_update"
app:layout_constraintStart_toEndOf="@id/version_icon"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/privacy_policy_subtitle" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:onClick="@{translateClickListener}"
android:id="@+id/translate_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="24dp"
android:text="@string/help_about_contribute_translations_title"
android:drawableEnd="@drawable/arrow_square_out"
android:drawablePadding="5dp"
app:drawableTint="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/open_source_licenses_subtitle"
app:layout_constraintStart_toEndOf="@id/translate_icon"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:onClick="@{licensesClickListener}"
android:id="@+id/open_source_licenses_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/check_square_offset"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/open_source_licenses_title"
app:layout_constraintTop_toTopOf="@id/open_source_licenses_title" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/section_header_style"
android:id="@+id/advanced_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="32dp"
android:text="@string/help_about_advanced_title"
app:layout_constraintTop_toBottomOf="@id/translate_icon"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:onClick="@{licensesClickListener}"
android:id="@+id/open_source_licenses_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="24dp"
android:text="@string/help_about_open_source_licenses_title"
android:drawableEnd="@drawable/arrow_square_out"
android:drawablePadding="5dp"
app:drawableTint="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/version_flow"
app:layout_constraintStart_toEndOf="@id/open_source_licenses_icon"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:id="@+id/debug_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/wrench"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/debug_title"
app:layout_constraintTop_toTopOf="@id/debug_title"
app:layout_constraintBottom_toBottomOf="@id/debug_title" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:onClick="@{licensesClickListener}"
android:id="@+id/open_source_licenses_subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:text="@string/help_about_open_source_licenses_subtitle"
android:textSize="14sp"
android:textColor="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/open_source_licenses_title"
app:layout_constraintStart_toEndOf="@id/open_source_licenses_icon"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:onClick="@{debugClickListener}"
android:id="@+id/debug_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="@dimen/screen_bottom_margin"
android:layout_marginTop="24dp"
android:text="@string/help_troubleshooting_title"
android:drawableEnd="@drawable/caret_right"
android:drawablePadding="8dp"
app:drawableTint="?attr/color_main2_500"
app:layout_constraintVertical_bias="0"
app:layout_constraintTop_toBottomOf="@id/advanced_title"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/debug_icon"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:onClick="@{translateClickListener}"
android:id="@+id/translate_icon"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/globe_hemisphere_west"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/translate_title"
app:layout_constraintTop_toTopOf="@id/translate_title" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:onClick="@{translateClickListener}"
android:id="@+id/translate_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="24dp"
android:text="@string/help_about_contribute_translations_title"
android:drawableEnd="@drawable/arrow_square_out"
android:drawablePadding="5dp"
app:drawableTint="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/open_source_licenses_subtitle"
app:layout_constraintStart_toEndOf="@id/translate_icon"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:onClick="@{translateClickListener}"
android:id="@+id/translate_subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:text="@string/help_about_contribute_translations_subtitle"
android:textSize="14sp"
android:textColor="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/translate_title"
app:layout_constraintStart_toEndOf="@id/translate_icon"
app:layout_constraintEnd_toEndOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/section_header_style"
android:id="@+id/advanced_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginTop="32dp"
android:text="@string/help_about_advanced_title"
app:layout_constraintTop_toBottomOf="@id/translate_subtitle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
<ImageView
android:id="@+id/debug_icon"
android:onClick="@{debugClickListener}"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:src="@drawable/wrench"
android:contentDescription="@null"
app:tint="?attr/color_main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/debug_title"
app:layout_constraintTop_toTopOf="@id/debug_title" />
<androidx.appcompat.widget.AppCompatTextView
style="@style/header_style"
android:onClick="@{debugClickListener}"
android:id="@+id/debug_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="@dimen/screen_bottom_margin"
android:layout_marginTop="24dp"
android:text="@string/help_troubleshooting_title"
android:drawableEnd="@drawable/caret_right"
android:drawablePadding="8dp"
app:drawableTint="?attr/color_main2_500"
app:layout_constraintVertical_bias="0"
app:layout_constraintTop_toBottomOf="@id/advanced_title"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/debug_icon"
app:layout_constraintEnd_toEndOf="parent"/>
<androidx.appcompat.widget.AppCompatTextView
style="@style/default_text_style"
android:onClick="@{debugClickListener}"
android:id="@+id/debug_subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:text="@string/help_troubleshooting_subtitle"
android:textSize="14sp"
android:textColor="?attr/color_main2_600"
app:layout_constraintTop_toBottomOf="@id/debug_title"
app:layout_constraintStart_toEndOf="@id/debug_icon"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</layout>

View file

@ -161,11 +161,14 @@
<!-- Help & troubleshooting related -->
<string name="help_title">Aide</string>
<string name="help_about_title">À propos de &appName;</string>
<string name="help_about_user_guide_title">Guide utilisateur &appName;</string>
<string name="help_about_user_guide_subtitle">Apprenez à maîtriser toutes les fonctionnalités de l\'application, pas à pas.</string>
<string name="help_about_privacy_policy_title">Politique de confidentialité</string>
<string name="help_about_privacy_policy_subtitle">Quelles informations &appName; collecte et utilise</string>
<string name="help_about_version_title">Version</string>
<string name="help_about_check_for_update">Vérifier les mises à jour</string>
<string name="help_about_contribute_translations_title">Aider à traduire &appName;</string>
<string name="help_about_contribute_translations_subtitle">Contribuez à rendre l\'application accessible au plus grand nombre.</string>
<string name="help_about_advanced_title">Avancé</string>
<string name="help_version_up_to_date_toast_message">Votre version est à jour</string>
<string name="help_error_checking_version_toast_message">Une erreur est survenue</string>
@ -173,6 +176,7 @@
<string name="help_dialog_update_available_message">Une nouvelle version %s est disponible. Voulez-vous mettre à jour ?</string>
<string name="help_quit_title">Quitter l\'application</string>
<string name="help_troubleshooting_title">Dépannage</string>
<string name="help_troubleshooting_subtitle">Transmettez vos journaux de diagnostic pour faciliter la résolution des bugs.</string>
<string name="help_troubleshooting_print_logs_in_logcat">Imprimer les journaux dans logcat</string>
<string name="help_troubleshooting_clean_logs">Nettoyer les journaux</string>
<string name="help_troubleshooting_share_logs">Partager les journaux</string>

View file

@ -32,8 +32,9 @@
<string name="website_contact_url" translatable="false">https://linphone.org/contact</string>
<string name="website_download_url" translatable="false">https://linphone.org/linphone-softphone</string>
<string name="website_user_guide_url" translatable="false">https://linphone.org/en/docs/</string>
<string name="website_privacy_policy_url" translatable="false">https://linphone.org/en/privacy-policy</string>
<string name="website_terms_and_conditions_url" translatable="false">https://www.linphone.org/en/terms-of-use</string>
<string name="website_terms_and_conditions_url" translatable="false">https://linphone.org/en/terms-of-use</string>
<string name="web_platform_register_email_url" translatable="false">https://subscribe.linphone.org/register/email</string>
<string name="web_platform_forgotten_password_url" translatable="false">https://subscribe.linphone.org/</string>
<string name="website_translate_weblate_url" translatable="false">https://weblate.linphone.org/</string>
@ -201,11 +202,14 @@
<!-- Help & troubleshooting related -->
<string name="help_title">Help</string>
<string name="help_about_title">About &appName;</string>
<string name="help_about_user_guide_title">&appName; user guide</string>
<string name="help_about_user_guide_subtitle">Learn how to master all app features, step by step.</string>
<string name="help_about_privacy_policy_title">Privacy policy</string>
<string name="help_about_privacy_policy_subtitle">What information &appName; collects and uses</string>
<string name="help_about_version_title">Version</string>
<string name="help_about_check_for_update">Check update</string>
<string name="help_about_contribute_translations_title">Contribute on &appName; translation</string>
<string name="help_about_contribute_translations_subtitle">Help make the app accessible to as many people as possible.</string>
<string name="help_about_advanced_title">Advanced</string>
<string name="help_version_up_to_date_toast_message">Your version is up-to-date</string>
<string name="help_error_checking_version_toast_message">An error occurred while checking for update</string>
@ -213,6 +217,7 @@
<string name="help_dialog_update_available_message">A new version %s is available. Do you want to update?</string>
<string name="help_quit_title">Quit app</string>
<string name="help_troubleshooting_title">Troubleshooting</string>
<string name="help_troubleshooting_subtitle">Transmit your diagnostic logs to facilitate bug resolution.</string>
<string name="help_troubleshooting_print_logs_in_logcat">Print logs in logcat</string>
<string name="help_troubleshooting_clean_logs">Clean logs</string>
<string name="help_troubleshooting_share_logs">Share logs</string>