Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 30cb9dd3 authored by Aayush Gupta's avatar Aayush Gupta
Browse files

Merge branch 'backlog_2867-all-privacyDescUpdate' into 'epic_176-all-refactorAndGplay'

App Lounge: Adapt Dialog Fragment to parse Html

See merge request ecorp/apps/apps!15
parents 6fdf09fa 88648ec6
Loading
Loading
Loading
Loading
+32 −1
Original line number Diff line number Diff line
@@ -20,6 +20,12 @@ package foundation.e.apps.application

import android.app.Dialog
import android.os.Bundle
import android.text.Html
import android.text.SpannableString
import android.text.TextPaint
import android.text.method.LinkMovementMethod
import android.text.style.URLSpan
import android.widget.TextView
import androidx.fragment.app.DialogFragment
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import dagger.hilt.android.AndroidEntryPoint
@@ -36,10 +42,35 @@ class ApplicationDialogFragment(
        return MaterialAlertDialogBuilder(requireContext())
            .setIcon(drawable)
            .setTitle(title)
            .setMessage(message)
            .setMessage(Html.fromHtml(message, Html.FROM_HTML_MODE_COMPACT))
            .setPositiveButton(getString(R.string.ok)) { _, _ ->
                this.dismiss()
            }
            .create()
    }

    override fun onResume() {
        super.onResume()
        dialog?.findViewById<TextView>(android.R.id.message)?.apply {
            movementMethod = LinkMovementMethod.getInstance()
            isClickable = true
            removeUnderlineFromLinks()
        }
    }

    private fun TextView.removeUnderlineFromLinks() {
        val spannable = SpannableString(text)
        for (urlSpan in spannable.getSpans(0, spannable.length, URLSpan::class.java)) {
            spannable.setSpan(
                object : URLSpan(urlSpan.url) {
                    override fun updateDrawState(textPaint: TextPaint) {
                        super.updateDrawState(textPaint)
                        textPaint.isUnderlineText = false
                    }
                },
                spannable.getSpanStart(urlSpan), spannable.getSpanEnd(urlSpan), 0
            )
        }
        text = spannable
    }
}
+15 −2
Original line number Diff line number Diff line
@@ -62,6 +62,14 @@ class ApplicationFragment : Fragment(R.layout.fragment_application) {
    private val applicationViewModel: ApplicationViewModel by viewModels()
    private val mainActivityViewModel: MainActivityViewModel by activityViewModels()

    companion object {
        private const val PRIVACY_CALCULATION_SOURCE_CODE_URL =
            "https://doc.e.foundation/privacy_score"
        private const val EXODUS_URL = "https://exodus-privacy.eu.org"
        private const val PRIVACY_GUIDELINE_URL =
            "https://doc.e.foundation/apps.html#what-information-is-provided-for-each-app-within-the-e-application-installer"
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        _binding = FragmentApplicationBinding.bind(view)
@@ -251,8 +259,13 @@ class ApplicationFragment : Fragment(R.layout.fragment_application) {
                appPrivacyScoreLayout.setOnClickListener {
                    ApplicationDialogFragment(
                        R.drawable.ic_lock,
                        getString(R.string.privacy),
                        getString(R.string.privacy_description)
                        getString(R.string.privacy_score),
                        getString(
                            R.string.privacy_description,
                            PRIVACY_CALCULATION_SOURCE_CODE_URL,
                            EXODUS_URL,
                            PRIVACY_GUIDELINE_URL
                        )
                    ).show(childFragmentManager, TAG)
                }
            }
+9 −2
Original line number Diff line number Diff line
@@ -23,6 +23,13 @@
    android:viewportHeight="24"
    android:tint="?android:attr/colorControlNormal">
  <path
      android:fillColor="@android:color/white"
      android:pathData="M18,8h-1L17,6c0,-2.76 -2.24,-5 -5,-5S7,3.24 7,6v2L6,8c-1.1,0 -2,0.9 -2,2v10c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L20,10c0,-1.1 -0.9,-2 -2,-2zM9,6c0,-1.66 1.34,-3 3,-3s3,1.34 3,3v2L9,8L9,6zM18,20L6,20L6,10h12v10zM12,17c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2z"/>
      android:pathData="M5.5286,11.5714C5.3754,11.5714 5.25,11.6958 5.25,11.85V19.6714C5.25,19.8246 5.3744,19.95 5.5286,19.95H18.2786C18.3717,19.95 18.4448,19.9144 18.4914,19.8685C18.5355,19.825 18.5603,19.7692 18.5577,19.6992C18.5573,19.6899 18.5571,19.6807 18.5571,19.6714V11.85C18.5571,11.6968 18.4328,11.5714 18.2786,11.5714H5.5286ZM3.75,11.85C3.75,10.8471 4.5674,10.0714 5.5286,10.0714H18.2786C19.2815,10.0714 20.0571,10.8888 20.0571,11.85V19.6593C20.0866,20.6913 19.2399,21.45 18.2786,21.45H5.5286C4.5257,21.45 3.75,20.6326 3.75,19.6714V11.85Z"
      android:fillColor="#000000"
      android:fillAlpha="0.87"
      android:fillType="evenOdd"/>
  <path
      android:pathData="M11.9147,3.75C9.7789,3.75 8.0361,5.4928 8.0361,7.6286V10.8214C8.0361,11.2356 7.7003,11.5714 7.2861,11.5714C6.8719,11.5714 6.5361,11.2356 6.5361,10.8214V7.6286C6.5361,4.6644 8.9505,2.25 11.9147,2.25C14.8789,2.25 17.2933,4.6644 17.2933,7.6286V10.8214C17.2933,11.2356 16.9575,11.5714 16.5433,11.5714C16.1291,11.5714 15.7933,11.2356 15.7933,10.8214V7.6286C15.7933,5.4928 14.0505,3.75 11.9147,3.75Z"
      android:fillColor="#000000"
      android:fillAlpha="0.87"
      android:fillType="evenOdd"/>
</vector>
+2 −1
Original line number Diff line number Diff line
@@ -84,7 +84,8 @@
    <string name="rating_description">Score out of 5. Computed using users\' ratings of the app.</string>
    <string name="rating_out_of" translatable="false"><xliff:g id="rating">%1$s</xliff:g>/5</string>
    <string name="privacy">Privacy</string>
    <string name="privacy_description">Score out of 10. Computed using Exodus Privacy analyses, based on permissions and trackers used in the app.</string>
    <string name="privacy_score">Privacy Score</string>
    <string name="privacy_description">The Privacy Score is automatically computed from permissions and trackers that are detected in applications. It gives an idea indication about how much an application is likely to be micro-targeting its users.&lt;br /&gt;&lt;br /&gt;Its computing algorithm\'s source code can be &lt;a  href="<xliff:g id="algorithm">%1$s</xliff:g>"&gt;found here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Trackers detection is performed using &lt;a href="<xliff:g id="exodus">%2$s</xliff:g>"&gt;Exodus Privacy tools&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Score out of 10.&lt;br /&gt;&lt;br /&gt;Learn more about how the Privacy Score is computed, its limitations and how you can protect yourself from micro-targeting &lt;a href="<xliff:g id="e_doc">%3$s</xliff:g>&gt;on this page&lt;/a&gt;.</string>
    <string name="privacy_rating_out_of" translatable="false"><xliff:g id="rating">%1$s</xliff:g>/10</string>
    <string name="privacy_analyses">Privacy analyses</string>
    <string name="permissions">Permissions</string>