0
0
mirror of https://github.com/markusfisch/BinaryEye.git synced 2024-09-20 12:02:17 +02:00

Add visual support for links after scanning

This commit is contained in:
Damir Rakhimulin 2021-10-07 21:23:07 +03:00 committed by GitHub
parent dd046a5d52
commit 9fb2eb2d2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 57 additions and 6 deletions

View File

@ -6,6 +6,7 @@ import android.support.design.widget.FloatingActionButton
import android.support.v4.app.Fragment
import android.text.Editable
import android.text.TextWatcher
import android.text.method.LinkMovementMethod
import android.view.*
import android.widget.EditText
import android.widget.TableLayout
@ -24,6 +25,7 @@ import de.markusfisch.android.binaryeye.database.Scan
import de.markusfisch.android.binaryeye.io.askForFileName
import de.markusfisch.android.binaryeye.io.toSaveResult
import de.markusfisch.android.binaryeye.io.writeExternalFile
import de.markusfisch.android.binaryeye.link_utils.getLinks
import de.markusfisch.android.binaryeye.view.setPaddingFromWindowInsets
import de.markusfisch.android.binaryeye.widget.toast
import kotlinx.coroutines.CoroutineScope
@ -32,11 +34,13 @@ import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
class DecodeFragment : Fragment() {
private lateinit var contentView: EditText
private lateinit var formatView: TextView
private lateinit var dataView: TableLayout
private lateinit var metaView: TableLayout
private lateinit var hexView: TextView
private lateinit var linksView: TextView
private lateinit var format: String
private lateinit var fab: FloatingActionButton
@ -84,6 +88,7 @@ class DecodeFragment : Fragment() {
format = scan.format
contentView = view.findViewById(R.id.content)
linksView = view.findViewById(R.id.links)
fab = view.findViewById(R.id.open)
if (!isBinary) {
@ -115,6 +120,10 @@ class DecodeFragment : Fragment() {
if (prefs.openImmediately) {
executeAction(content.toByteArray())
}
linksView.text = getLinks(inputContent).joinToString("\n")
linksView.movementMethod = LinkMovementMethod.getInstance()
} else {
contentView.setText(R.string.binary_data)
contentView.isEnabled = false

View File

@ -0,0 +1,29 @@
package de.markusfisch.android.binaryeye.link_utils
import java.util.regex.Pattern
private val urlPattern: Pattern = Pattern.compile(
"(?:^|[\\W])((ht|f)tp(s?):\\/\\/|www\\.)" +
"(([\\w\\-]+\\.){1,}?([\\w\\-.~]+\\/?)*" +
"[\\p{Alnum}.,%_=?&#\\-+()\\[\\]\\*$~@!:/{};']*)",
Pattern.CASE_INSENSITIVE or Pattern.MULTILINE or Pattern.DOTALL
)
fun getLinks(text: String): List<String> {
val matcher = urlPattern.matcher(text)
val urls = mutableListOf<String>()
while (matcher.find()) {
val matchStart = matcher.start(1)
val matchEnd = matcher.end()
var url = text.substring(matchStart, matchEnd)
if (!url.startsWith("http://") && !url.startsWith("https://"))
url = "https://$url"
urls.add(url)
}
return urls
}

View File

@ -51,10 +51,10 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/data"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"/>
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp" />
<TextView
android:id="@+id/hex"
android:layout_width="match_parent"
@ -65,9 +65,22 @@
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:layout_marginBottom="16dp"
android:typeface="monospace"
android:textSize="12sp"
tools:text="54 65 73 74 20 51 52 20 Test QR\n43 6F 64 65 Code"/>
android:typeface="monospace"
tools:text="54 65 73 74 20 51 52 20 Test QR\n43 6F 64 65 Code" />
<TextView
android:id="@+id/links"
android:autoLink="web"
android:lineHeight="24sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/hex"
android:layout_marginHorizontal="16dp"
android:textSize="12sp"
android:typeface="monospace"
tools:text="@tools:sample/lorem/random" />
</RelativeLayout>
</de.markusfisch.android.binaryeye.widget.ConfinedScrollView>
<android.support.design.widget.CoordinatorLayout
@ -75,9 +88,9 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.FloatingActionButton
style="@style/FAB"
android:id="@+id/open"
style="@style/FAB"
android:contentDescription="@string/open_url"
android:src="@drawable/ic_action_open"/>
android:src="@drawable/ic_action_open" />
</android.support.design.widget.CoordinatorLayout>
</FrameLayout>