@@ -3,10 +3,12 @@ package com.espial.espialshare
33import android.content.Intent
44import android.os.Bundle
55import android.util.Log
6+ import android.util.Patterns
67import androidx.appcompat.app.AppCompatActivity
78import android.view.View
89import android.webkit.*
910import androidx.preference.PreferenceManager
11+ import java.net.URLEncoder
1012
1113class 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