Skip to content

Commit 0164c0f

Browse files
committed
parse chrome selections
1 parent d66092d commit 0164c0f

File tree

1 file changed

+45
-7
lines changed

1 file changed

+45
-7
lines changed

app/src/main/java/com/espial/espialshare/AddActivity.kt

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ package com.espial.espialshare
33
import android.content.Intent
44
import android.os.Bundle
55
import android.util.Log
6+
import android.util.Patterns
67
import androidx.appcompat.app.AppCompatActivity
78
import android.view.View
89
import android.webkit.*
910
import androidx.preference.PreferenceManager
11+
import java.net.URLEncoder
1012

1113
class AddActivity : AppCompatActivity() {
1214
private lateinit var webView: WebView
@@ -54,19 +56,55 @@ class AddActivity : AppCompatActivity() {
5456
}
5557

5658
private fun handleIntents() {
57-
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
58-
val espialServerUrl = sharedPreferences.getString("espial_server_url", "")
59-
6059
when (intent?.action) {
6160
Intent.ACTION_SEND -> {
6261
if ("text/plain" == intent.type) {
63-
val intentUrl = intent.getStringExtra(Intent.EXTRA_TEXT)
64-
val intentSubject = intent.getStringExtra(Intent.EXTRA_SUBJECT) ?: ""
65-
val loadUrl = "$espialServerUrl/add?_hasData&url=$intentUrl&title=${intentSubject}"
66-
webView.loadUrl(loadUrl)
62+
val espialUrl = toEspialUrl(intent)
63+
webView.loadUrl(espialUrl)
6764
}
6865
}
6966
}
7067
}
7168

69+
private fun toEspialUrl(intent: Intent): String {
70+
val extraText = intent.getStringExtra(Intent.EXTRA_TEXT) ?: ""
71+
val extraSubject = intent.getStringExtra(Intent.EXTRA_SUBJECT) ?: ""
72+
73+
val fromChromeSelection = tryParseChromeSelection(extraText)
74+
val addParams = if(fromChromeSelection != null) {
75+
AddParams(
76+
URLEncoder.encode(fromChromeSelection.first, "utf-8"),
77+
"",
78+
URLEncoder.encode(fromChromeSelection.second, "utf-8")
79+
)
80+
} else {
81+
AddParams(
82+
URLEncoder.encode(extraText, "utf-8"),
83+
URLEncoder.encode(extraSubject, "utf-8"),
84+
""
85+
)
86+
}
87+
return toEspialUrl(addParams)
88+
}
89+
90+
private fun toEspialUrl(addParams: AddParams): String {
91+
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
92+
val espialServerUrl = sharedPreferences.getString("espial_server_url", "") ?: ""
93+
94+
return "$espialServerUrl/add?_hasData&url=${addParams.Url}&title=${addParams.Title}&description=${addParams.Description}"
95+
}
96+
97+
private fun tryParseChromeSelection(srcText: String): Pair<String, String>? {
98+
val res = srcText.split('\n')
99+
if(res.count() > 1) {
100+
val potentialUrl = res.last().trim().takeWhile { it != '#' }
101+
if(Patterns.WEB_URL.matcher(potentialUrl).matches()) {
102+
val description = res.dropLast(1).joinToString("\n").removeSurrounding("\"")
103+
return Pair(potentialUrl, description)
104+
}
105+
}
106+
return null
107+
}
108+
109+
class AddParams (val Url: String, val Title: String, val Description: String)
72110
}

0 commit comments

Comments
 (0)