mirror of https://git.sr.ht/~oppen/ariane
fix audio player, remove copy address menu item (share has same functionality), make .txt files selectable
This commit is contained in:
parent
a6256f9e77
commit
ea2368d12a
|
@ -1,5 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
|
<component name="GradleMigrationSettings" migrationVersion="1" />
|
||||||
<component name="GradleSettings">
|
<component name="GradleSettings">
|
||||||
<option name="linkedExternalProjectsSettings">
|
<option name="linkedExternalProjectsSettings">
|
||||||
<GradleProjectSettings>
|
<GradleProjectSettings>
|
||||||
|
|
|
@ -7,6 +7,7 @@ import kotlinx.coroutines.launch
|
||||||
import oppen.tva.io.TvaState
|
import oppen.tva.io.TvaState
|
||||||
import java.io.*
|
import java.io.*
|
||||||
import java.net.ConnectException
|
import java.net.ConnectException
|
||||||
|
import java.net.SocketException
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
import java.security.SecureRandom
|
import java.security.SecureRandom
|
||||||
import javax.net.ssl.SSLContext
|
import javax.net.ssl.SSLContext
|
||||||
|
@ -159,12 +160,10 @@ class GeminiDatasource(val context: Context): Datasource {
|
||||||
|
|
||||||
// IN <<<<<<<<<<<<<<<<<<<<<<<<<<<
|
// IN <<<<<<<<<<<<<<<<<<<<<<<<<<<
|
||||||
|
|
||||||
var headerLine = ""
|
val inputStream = socket.inputStream
|
||||||
InputStreamReader(socket.inputStream).use{ streamReader ->
|
val headerInputReader = InputStreamReader(inputStream)
|
||||||
BufferedReader(streamReader).use{ bufferedReader ->
|
val bufferedReader = BufferedReader(headerInputReader)
|
||||||
headerLine = bufferedReader.readLine()
|
val headerLine = bufferedReader.readLine()
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
println("Tva: header: $headerLine")
|
println("Tva: header: $headerLine")
|
||||||
|
|
||||||
|
@ -174,25 +173,23 @@ class GeminiDatasource(val context: Context): Datasource {
|
||||||
header.code == GeminiResponse.INPUT -> onUpdate(TvaState.ResponseInput(uri, header))
|
header.code == GeminiResponse.INPUT -> onUpdate(TvaState.ResponseInput(uri, header))
|
||||||
header.code == GeminiResponse.REDIRECT -> request(URI.create(header.meta), onUpdate)
|
header.code == GeminiResponse.REDIRECT -> request(URI.create(header.meta), onUpdate)
|
||||||
header.code != GeminiResponse.SUCCESS -> onUpdate(TvaState.ResponseError(header))
|
header.code != GeminiResponse.SUCCESS -> onUpdate(TvaState.ResponseError(header))
|
||||||
header.meta.startsWith("text/gemini") -> getGemtext(socket, uri, header, onUpdate)
|
header.meta.startsWith("text/gemini") -> getGemtext(bufferedReader, uri, header, onUpdate)
|
||||||
header.meta.startsWith("text/") -> getString(socket, uri, header, onUpdate)
|
header.meta.startsWith("text/") -> getString(socket, uri, header, onUpdate)
|
||||||
header.meta.startsWith("image/") -> getBinary(socket, uri, header, onUpdate)
|
header.meta.startsWith("image/") -> getBinary(socket, uri, header, onUpdate)
|
||||||
header.meta.startsWith("audio/") -> getBinary(socket, uri, header, onUpdate)
|
header.meta.startsWith("audio/") -> getBinary(socket, uri, header, onUpdate)
|
||||||
else -> onUpdate(TvaState.ResponseError(header))
|
else -> onUpdate(TvaState.ResponseError(header))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bufferedReader.close()
|
||||||
|
headerInputReader.close()
|
||||||
|
socket.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getGemtext(socket: SSLSocket?, uri: URI, header: GeminiResponse.Header, onUpdate: (state: TvaState) -> Unit){
|
private fun getGemtext(reader: BufferedReader, uri: URI, header: GeminiResponse.Header, onUpdate: (state: TvaState) -> Unit){
|
||||||
|
|
||||||
val lines = mutableListOf<String>()
|
val lines = mutableListOf<String>()
|
||||||
|
|
||||||
socket?.inputStream?.reader().use { inputStreamReader ->
|
lines.addAll(reader.readLines())
|
||||||
BufferedReader(inputStreamReader).use { reader ->
|
|
||||||
lines.addAll(reader.readLines())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
socket?.close()
|
|
||||||
|
|
||||||
val processed = GemtextHelper.findCodeBlocks(lines)
|
val processed = GemtextHelper.findCodeBlocks(lines)
|
||||||
RuntimeCache.put(uri, header, processed)
|
RuntimeCache.put(uri, header, processed)
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package oppen.tva.ui
|
package oppen.tva.ui
|
||||||
|
|
||||||
import android.content.ClipData
|
|
||||||
import android.content.ClipboardManager
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.media.MediaPlayer
|
import android.media.MediaPlayer
|
||||||
|
@ -159,19 +157,6 @@ class TvaActivity : AppCompatActivity() {
|
||||||
showAlert("Home capsule updated")
|
showAlert("Home capsule updated")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
R.id.overflow_menu_copy -> {
|
|
||||||
val clipboard = getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
|
|
||||||
val clip = ClipData.newPlainText(getString(R.string.gemini_address), binding.addressEdit.text.toString())
|
|
||||||
clipboard.setPrimaryClip(clip)
|
|
||||||
Snackbar.make(binding.root, getString(R.string.address_copied_to_clipboard), Snackbar.LENGTH_SHORT).setAction(R.string.share) {
|
|
||||||
Intent().apply {
|
|
||||||
action = Intent.ACTION_SEND
|
|
||||||
putExtra(Intent.EXTRA_TEXT, binding.addressEdit.text.toString())
|
|
||||||
type = "text/plain"
|
|
||||||
startActivity(Intent.createChooser(this, null))
|
|
||||||
}
|
|
||||||
}.show()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ object AudioPlayer {
|
||||||
|
|
||||||
binding.audioTitle.text = "$trackName - $artist"
|
binding.audioTitle.text = "$trackName - $artist"
|
||||||
|
|
||||||
|
mediaPlayer.reset()
|
||||||
mediaPlayer.setDataSource(context, state.cacheUri)
|
mediaPlayer.setDataSource(context, state.cacheUri)
|
||||||
mediaPlayer.prepare()
|
mediaPlayer.prepare()
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,9 @@
|
||||||
<androidx.appcompat.widget.AppCompatTextView
|
<androidx.appcompat.widget.AppCompatTextView
|
||||||
android:id="@+id/text_content"
|
android:id="@+id/text_content"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content" />
|
android:layout_height="wrap_content"
|
||||||
|
android:textSize="@dimen/default_text_size"
|
||||||
|
android:textIsSelectable="true"/>
|
||||||
|
|
||||||
|
|
||||||
</androidx.core.widget.NestedScrollView>
|
</androidx.core.widget.NestedScrollView>
|
||||||
|
|
|
@ -7,9 +7,6 @@
|
||||||
<item
|
<item
|
||||||
android:id="@+id/overflow_menu_share"
|
android:id="@+id/overflow_menu_share"
|
||||||
android:title="@string/share" />
|
android:title="@string/share" />
|
||||||
<item
|
|
||||||
android:id="@+id/overflow_menu_copy"
|
|
||||||
android:title="@string/copy_address" />
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/overflow_menu_reload"
|
android:id="@+id/overflow_menu_reload"
|
||||||
android:title="@string/reload"/>
|
android:title="@string/reload"/>
|
||||||
|
|
Loading…
Reference in New Issue