rename main package, add bookmark dialog complete

This commit is contained in:
Öppen 2020-09-10 22:05:11 +01:00
parent 1a3fc1083a
commit 38e3442cfd
41 changed files with 188 additions and 144 deletions

View File

@ -1,4 +1,4 @@
package oppen.tva
package oppen.gem
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="oppen.tva">
package="oppen.gem">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:name=".Gem"
android:name="oppen.gem.Gem"
android:allowBackup="true"
android:icon="@drawable/vector_app_icon"
android:label="@string/app_name"
@ -14,7 +14,7 @@
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:networkSecurityConfig="@xml/network_security_config">
<activity android:name=".ui.GemActivity">
<activity android:name="oppen.gem.ui.GemActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />

View File

@ -1,4 +1,4 @@
package oppen.tva
package oppen.gem
import android.app.Application

View File

@ -1,7 +1,7 @@
package oppen.tva.io
package oppen.gem.io
import android.net.Uri
import oppen.tva.io.gemini.GeminiResponse
import oppen.gem.io.gemini.GeminiResponse
import java.net.URI
sealed class GemState {

View File

@ -1,4 +1,4 @@
package oppen.tva.io.bookmarks
package oppen.gem.io.bookmarks
import java.net.URI

View File

@ -1,4 +1,4 @@
package oppen.tva.io.bookmarks
package oppen.gem.io.bookmarks
import androidx.room.ColumnInfo
import androidx.room.Entity

View File

@ -1,4 +1,4 @@
package oppen.tva.io.bookmarks
package oppen.gem.io.bookmarks
import androidx.room.Database
import androidx.room.RoomDatabase

View File

@ -1,4 +1,4 @@
package oppen.tva.io.bookmarks
package oppen.gem.io.bookmarks
import androidx.room.*

View File

@ -1,4 +1,4 @@
package oppen.tva.io.bookmarks
package oppen.gem.io.bookmarks
import android.content.Context

View File

@ -1,4 +1,4 @@
package oppen.tva.io.bookmarks
package oppen.gem.io.bookmarks
import android.content.Context
import androidx.room.Room

View File

@ -1,7 +1,7 @@
package oppen.tva.io.gemini
package oppen.gem.io.gemini
import android.content.Context
import oppen.tva.io.GemState
import oppen.gem.io.GemState
import java.net.URI
interface Datasource {

View File

@ -1,4 +1,4 @@
package oppen.tva.io.gemini
package oppen.gem.io.gemini
import java.security.cert.X509Certificate
import javax.net.ssl.TrustManager

View File

@ -1,10 +1,10 @@
package oppen.tva.io.gemini
package oppen.gem.io.gemini
import android.content.Context
import androidx.core.net.toUri
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import oppen.tva.io.GemState
import oppen.gem.io.GemState
import java.io.*
import java.net.ConnectException
import java.net.URI
@ -107,7 +107,7 @@ class GeminiDatasource(val context: Context): Datasource {
val factory: SSLSocketFactory = sslContext.socketFactory
var socket: SSLSocket? = null
var socket: SSLSocket?
try {
socket = factory.createSocket(uri.host, port) as SSLSocket
socket.enabledProtocols = arrayOf("TLSv1.2")

View File

@ -1,4 +1,4 @@
package oppen.tva.io.gemini
package oppen.gem.io.gemini
object GeminiResponse {
@ -11,8 +11,8 @@ object GeminiResponse {
const val UNKNOWN = -1
fun parseHeader(header: String): Header {
var cleanHeader = header.replace("\\s+".toRegex(), " ")
var meta = ""
val cleanHeader = header.replace("\\s+".toRegex(), " ")
val meta: String
when {
header.startsWith("2") -> {
val segments = cleanHeader.trim().split(" ")

View File

@ -1,4 +1,4 @@
package oppen.tva.io.gemini
package oppen.gem.io.gemini
import java.lang.StringBuilder

View File

@ -1,4 +1,4 @@
package oppen.tva.io.gemini
package oppen.gem.io.gemini
import androidx.collection.LruCache
import java.net.URI

View File

@ -1,4 +1,4 @@
package oppen.tva.io.history.uris
package oppen.gem.io.history.uris
import android.content.Context

View File

@ -1,4 +1,4 @@
package oppen.tva.io.history.uris
package oppen.gem.io.history.uris
import android.content.Context

View File

@ -1,4 +1,4 @@
package oppen.tva.ui
package oppen.gem.ui
import android.content.Context
import android.content.Intent
@ -9,30 +9,29 @@ import android.view.inputmethod.EditorInfo
import androidx.activity.viewModels
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDialog
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.snackbar.Snackbar
import oppen.gem.R
import oppen.gem.Gem
import oppen.gem.databinding.ActivityGemBinding
import oppen.gem.io.GemState
import oppen.gem.io.bookmarks.BookmarksDatasource
import oppen.gem.io.gemini.Datasource
import oppen.gem.io.gemini.GeminiResponse
import oppen.gem.io.gemini.RuntimeCache
import oppen.gem.io.history.uris.HistoryInterface
import oppen.gem.ui.audio_player.AudioPlayer
import oppen.gem.ui.bookmarks.BookmarkDialog
import oppen.gem.ui.content_image.ImageDialog
import oppen.gem.ui.content_text.TextDialog
import oppen.gem.ui.modals_menus.about.AboutDialog
import oppen.gem.ui.modals_menus.history.HistoryDialog
import oppen.gem.ui.modals_menus.input.InputDialog
import oppen.gem.ui.modals_menus.overflow.OverflowPopup
import oppen.gem.ui.modals_menus.set_home.SetHomeDialog
import oppen.gem.ui.modals_menus.LinkPopup
import oppen.hideKeyboard
import oppen.tva.R
import oppen.tva.Gem
import oppen.tva.databinding.ActivityGemBinding
import oppen.tva.io.GemState
import oppen.tva.io.bookmarks.BookmarksDatasource
import oppen.tva.io.gemini.Datasource
import oppen.tva.io.gemini.GeminiResponse
import oppen.tva.io.gemini.RuntimeCache
import oppen.tva.io.history.uris.HistoryInterface
import oppen.tva.ui.audio_player.AudioPlayer
import oppen.tva.ui.bookmarks.BookmarkDialog
import oppen.tva.ui.content_image.ImageDialog
import oppen.tva.ui.content_text.TextDialog
import oppen.tva.ui.modals_menus.about.AboutDialog
import oppen.tva.ui.modals_menus.history.HistoryDialog
import oppen.tva.ui.modals_menus.input.InputDialog
import oppen.tva.ui.modals_menus.overflow.OverflowPopup
import oppen.tva.ui.modals_menus.set_home.SetHomeDialog
import oppen.tva.ui.modals_menus.LinkPopup
import oppen.visibleRetainingSpace
import java.io.File
import java.io.FileInputStream
@ -48,6 +47,8 @@ class GemActivity : AppCompatActivity() {
private val mediaPlayer = MediaPlayer()
private lateinit var bookmarkDatasource: BookmarksDatasource
private val model by viewModels<GemViewModel>()
private lateinit var binding: ActivityGemBinding
private lateinit var history: HistoryInterface
@ -77,6 +78,10 @@ class GemActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
bookmarkDatasource = BookmarksDatasource.getDefault(applicationContext)
binding = DataBindingUtil.setContentView(this, R.layout.activity_gem)
binding.viewmodel = model
binding.lifecycleOwner = this
@ -140,7 +145,14 @@ class GemActivity : AppCompatActivity() {
inSearch = true
}
R.id.overflow_menu_bookmark -> {
BookmarkDialog(this, "test", "test").show()
val name = adapter.inferTitle()
BookmarkDialog(this, bookmarkDatasource, binding.addressEdit.text.toString(), name ?: ""){
bookmarkDatasource.get { bookmarks ->
bookmarks.forEach {bookmark ->
println("Bookmark: ${bookmark.label}: ${bookmark.uri}")
}
}
}.show()
}
R.id.overflow_menu_bookmarks -> {
//todo

View File

@ -1,10 +1,10 @@
package oppen.tva.ui
package oppen.gem.ui
import androidx.lifecycle.ViewModel
import oppen.tva.Gem
import oppen.tva.io.gemini.Datasource
import oppen.tva.io.GemState
import oppen.tva.io.bookmarks.BookmarksDatasource
import oppen.gem.Gem
import oppen.gem.io.gemini.Datasource
import oppen.gem.io.GemState
import oppen.gem.io.bookmarks.BookmarksDatasource
import java.net.URI
class GemViewModel: ViewModel() {

View File

@ -1,4 +1,4 @@
package oppen.tva.ui
package oppen.gem.ui
import android.annotation.SuppressLint
import android.view.LayoutInflater
@ -8,7 +8,7 @@ import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.gemtext_code_block.view.*
import kotlinx.android.synthetic.main.gemtext_link.view.*
import kotlinx.android.synthetic.main.gemtext_text.view.gemtext_text_textview
import oppen.tva.R
import oppen.gem.R
import java.net.URI
class GemtextAdapter(val onLink: (link: URI, longTap: Boolean, view: View?) -> Unit): RecyclerView.Adapter<GemtextAdapter.ViewHolder>() {
@ -126,4 +126,12 @@ class GemtextAdapter(val onLink: (link: URI, longTap: Boolean, view: View?) -> U
val linkParts = linkLine.substring(2).trim().split("\\s+".toRegex(), 2)
return URI.create(linkParts.first())
}
fun inferTitle(): String? {
lines.forEach { line ->
if(line.startsWith("#")) return line.replace("#", "").trim()
}
return null
}
}

View File

@ -1,4 +1,4 @@
package oppen.tva.ui.audio_player
package oppen.gem.ui.audio_player
import android.content.Context
import android.media.MediaMetadataRetriever
@ -6,9 +6,9 @@ import android.media.MediaPlayer
import android.view.MenuInflater
import androidx.appcompat.widget.PopupMenu
import androidx.core.view.MenuCompat
import oppen.tva.R
import oppen.tva.databinding.ActivityGemBinding
import oppen.tva.io.GemState
import oppen.gem.R
import oppen.gem.databinding.ActivityGemBinding
import oppen.gem.io.GemState
import oppen.visible
object AudioPlayer {
@ -32,7 +32,7 @@ object AudioPlayer {
binding.audioPlayButton.setImageResource(R.drawable.vector_pause)
mediaPlayer.setOnCompletionListener { player ->
mediaPlayer.setOnCompletionListener { _ ->
binding.audioPlayButton.setImageResource(R.drawable.vector_play)
}
@ -46,7 +46,7 @@ object AudioPlayer {
}
}
mediaPlayer.setOnInfoListener { _, what, extra ->
mediaPlayer.setOnInfoListener { _, what, _ ->
when(what){
MediaPlayer.MEDIA_INFO_UNKNOWN -> println("MEDIA_INFO_UNKNOWN")
MediaPlayer.MEDIA_INFO_VIDEO_TRACK_LAGGING-> println("MEDIA_INFO_VIDEO_TRACK_LAGGING")

View File

@ -0,0 +1,45 @@
package oppen.gem.ui.bookmarks
import android.content.Context
import android.view.View
import androidx.appcompat.app.AppCompatDialog
import kotlinx.android.synthetic.main.fragment_bookmark_dialog.view.*
import oppen.gem.R
import oppen.gem.io.bookmarks.Bookmark
import oppen.gem.io.bookmarks.BookmarksDatasource
import java.net.URI
class BookmarkDialog(context: Context, val bookmarkDatasource: BookmarksDatasource, val uri: String, val name: String, onDismiss: () -> Unit): AppCompatDialog(context, R.style.FSDialog) {
init {
val view = View.inflate(context, R.layout.fragment_bookmark_dialog, null)
setContentView(view)
view.bookmark_toolbar.setNavigationIcon(R.drawable.vector_close)
view.bookmark_toolbar.setNavigationOnClickListener {
onDismiss()
dismiss()
}
view.bookmark_name.setText(name)
view.bookmark_uri.setText(uri)
view.bookmark_toolbar.inflateMenu(R.menu.add_bookmark)
view.bookmark_toolbar.setOnMenuItemClickListener {menuItem ->
if(menuItem.itemId == R.id.menu_action_save_bookmark){
bookmarkDatasource.add(Bookmark(
label = view.bookmark_name.text.toString(),
uri = URI.create(view.bookmark_uri.text.toString())
)){
onDismiss()
dismiss()
}
}
true
}
}
}

View File

@ -1,4 +1,4 @@
package oppen.tva.ui.content_image
package oppen.gem.ui.content_image
import android.content.Context
import android.graphics.Bitmap
@ -8,8 +8,8 @@ import android.view.View
import androidx.appcompat.app.AppCompatDialog
import androidx.appcompat.widget.PopupMenu
import kotlinx.android.synthetic.main.dialog_content_image.view.*
import oppen.tva.R
import oppen.tva.io.GemState
import oppen.gem.R
import oppen.gem.io.GemState
import java.io.FileOutputStream
object ImageDialog {

View File

@ -1,4 +1,4 @@
package oppen.tva.ui.content_image;
package oppen.gem.ui.content_image;

View File

@ -1,11 +1,11 @@
package oppen.tva.ui.content_text
package oppen.gem.ui.content_text
import android.content.Context
import android.view.View
import androidx.appcompat.app.AppCompatDialog
import kotlinx.android.synthetic.main.dialog_content_text.view.*
import oppen.tva.R
import oppen.tva.io.GemState
import oppen.gem.R
import oppen.gem.io.GemState
object TextDialog {

View File

@ -1,9 +1,9 @@
package oppen.tva.ui.modals_menus
package oppen.gem.ui.modals_menus
import android.view.MenuInflater
import android.view.View
import androidx.appcompat.widget.PopupMenu
import oppen.tva.R
import oppen.gem.R
object LinkPopup {

View File

@ -1,4 +1,4 @@
package oppen.tva.ui.modals_menus.about
package oppen.gem.ui.modals_menus.about
import android.content.Context
import android.content.Intent
@ -6,8 +6,8 @@ import android.net.Uri
import android.view.View
import androidx.appcompat.app.AppCompatDialog
import kotlinx.android.synthetic.main.dialog_about.view.*
import oppen.tva.BuildConfig
import oppen.tva.R
import oppen.gem.BuildConfig
import oppen.gem.R
object AboutDialog {

View File

@ -1,4 +1,4 @@
package oppen.tva.ui.modals_menus.history
package oppen.gem.ui.modals_menus.history
import android.view.LayoutInflater
import android.view.View
@ -6,7 +6,7 @@ import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.row_history.view.*
import oppen.delay
import oppen.tva.R
import oppen.gem.R
class HistoryAdapter(val history: List<String>, val onClick:(address: String) -> Unit): RecyclerView.Adapter<HistoryAdapter.ViewHolder>() {

View File

@ -1,4 +1,4 @@
package oppen.tva.ui.modals_menus.history
package oppen.gem.ui.modals_menus.history
import android.content.Context
import android.view.MenuInflater
@ -10,9 +10,9 @@ import androidx.core.view.MenuCompat
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.dialog_about.view.close_tab_dialog
import kotlinx.android.synthetic.main.dialog_history.view.*
import oppen.tva.R
import oppen.tva.io.gemini.RuntimeCache
import oppen.tva.io.history.uris.HistoryInterface
import oppen.gem.R
import oppen.gem.io.gemini.RuntimeCache
import oppen.gem.io.history.uris.HistoryInterface
object HistoryDialog {
fun show(context: Context, onHistoryItem: (address: String) -> Unit){

View File

@ -1,11 +1,11 @@
package oppen.tva.ui.modals_menus.input
package oppen.gem.ui.modals_menus.input
import android.content.Context
import android.view.View
import androidx.appcompat.app.AppCompatDialog
import kotlinx.android.synthetic.main.dialog_input_query.view.*
import oppen.tva.R
import oppen.tva.io.GemState
import oppen.gem.R
import oppen.gem.io.GemState
import java.net.URLEncoder
object InputDialog {

View File

@ -1,4 +1,4 @@
package oppen.tva.ui.modals_menus.overflow
package oppen.gem.ui.modals_menus.overflow
import android.content.Context
import android.graphics.Color
@ -12,7 +12,7 @@ import android.view.MenuItem
import android.view.View
import androidx.appcompat.widget.PopupMenu
import androidx.core.view.MenuCompat
import oppen.tva.R
import oppen.gem.R
object OverflowPopup {
@ -27,7 +27,7 @@ object OverflowPopup {
true
}
MenuCompat.setGroupDividerEnabled(popup.menu, true)
insertMenuItemIcons(view.context, popup)
//insertMenuItemIcons(view.context, popup)
popup.show()
}
}
@ -53,7 +53,6 @@ object OverflowPopup {
*/
private fun insertMenuItemIcon(context: Context, menuItem: MenuItem) {
var icon: Drawable = menuItem.icon
if (icon == null) icon = ColorDrawable(Color.TRANSPARENT)
val iconSize = context.resources.getDimensionPixelSize(R.dimen.menu_item_icon_size)
icon.setBounds(0, 0, iconSize, iconSize)
icon.setTint(Color.WHITE)

View File

@ -1,10 +1,10 @@
package oppen.tva.ui.modals_menus.set_home
package oppen.gem.ui.modals_menus.set_home
import android.content.Context
import android.view.View
import androidx.appcompat.app.AppCompatDialog
import kotlinx.android.synthetic.main.dialog_set_home.view.*
import oppen.tva.R
import oppen.gem.R
object SetHomeDialog {

View File

@ -1,30 +0,0 @@
package oppen.tva.ui.bookmarks
import android.app.Dialog
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.appcompat.app.AppCompatDialog
import androidx.fragment.app.DialogFragment
import kotlinx.android.synthetic.main.fragment_bookmark_dialog.view.*
import oppen.tva.R
class BookmarkDialog(context: Context, val uri: String, val name: String): AppCompatDialog(context, R.style.FSDialog) {
init {
setContentView(R.layout.fragment_bookmark_dialog)
//getWindow()?.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
}

View File

@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
</vector>

View File

@ -1,25 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24.5dp"
android:viewportWidth="48"
android:viewportHeight="49"
android:tint="@color/stroke">
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:pathData="M47.723,19.3306L24.481,0.1701C24.3393,0.0567 24.1692,0 24.0086,0C23.8385,0 23.6685,0.0567 23.5362,0.1701L11.5845,10.0054V0.7464C11.5845,0.3307 11.2444,0 10.8381,0C10.4318,0 10.0917,0.3401 10.0917,0.7464V11.2431L0.2753,19.3306C-0.046,19.5951 -0.0932,20.0675 0.1713,20.3887C0.4359,20.71 0.9083,20.7572 1.2295,20.4927L4.2056,18.0456V45.0007C4.2056,46.6541 5.5472,48.0052 7.2101,48.0052H40.8071C42.4605,48.0052 43.8115,46.6635 43.8115,45.0007V18.0362L46.7877,20.4832C46.9294,20.5966 47.0994,20.6533 47.2601,20.6533C47.4774,20.6533 47.6947,20.5588 47.8364,20.3793C48.0915,20.0675 48.0442,19.5951 47.723,19.3306ZM35.2422,46.4935H25.2652V34.0977H35.2422V46.4935ZM42.2999,45.0007C42.2999,45.8321 41.6291,46.5029 40.7976,46.5029H36.7445V33.3419C36.7445,32.9262 36.4043,32.5955 35.9981,32.5955H24.5188C24.1031,32.5955 23.7724,32.9356 23.7724,33.3419V46.4935H7.2006C6.3692,46.4935 5.6984,45.8227 5.6984,44.9913V16.7985L23.9991,1.7195L42.2999,16.7985V45.0007Z"
android:fillColor="#000000"/>
<path
android:pathData="M10.8381,34.6646C10.4224,34.6646 10.0917,35.0047 10.0917,35.411V36.6581C10.0917,37.0738 10.4319,37.4045 10.8381,37.4045C11.2444,37.4045 11.5845,37.0644 11.5845,36.6581V35.411C11.5845,34.9953 11.2538,34.6646 10.8381,34.6646Z"
android:fillColor="#000000"/>
<path
android:pathData="M10.8381,38.8029C10.4224,38.8029 10.0917,39.143 10.0917,39.5492V40.7964C10.0917,41.2121 10.4319,41.5428 10.8381,41.5428C11.2444,41.5428 11.5845,41.2026 11.5845,40.7964V39.5492C11.5845,39.143 11.2538,38.8029 10.8381,38.8029Z"
android:fillColor="#000000"/>
<path
android:pathData="M17.2249,34.6646C16.8092,34.6646 16.4785,35.0047 16.4785,35.411V36.6581C16.4785,37.0738 16.8187,37.4045 17.2249,37.4045C17.6312,37.4045 17.9713,37.0644 17.9713,36.6581V35.411C17.9808,34.9953 17.6406,34.6646 17.2249,34.6646Z"
android:fillColor="#000000"/>
<path
android:pathData="M17.2249,38.8029C16.8092,38.8029 16.4785,39.143 16.4785,39.5492V40.7964C16.4785,41.2121 16.8187,41.5428 17.2249,41.5428C17.6312,41.5428 17.9713,41.2026 17.9713,40.7964V39.5492C17.9808,39.143 17.6406,38.8029 17.2249,38.8029Z"
android:fillColor="#000000"/>
<path
android:pathData="M17.2722,16.3072C17.2722,20.0203 20.2861,23.0342 23.9991,23.0342C27.7122,23.0342 30.7261,20.0203 30.7261,16.3072C30.7261,12.5942 27.7122,9.5803 23.9991,9.5803C20.2861,9.5803 17.2722,12.5942 17.2722,16.3072ZM29.2239,16.3072C29.2239,19.1889 26.8808,21.5319 23.9991,21.5319C21.1175,21.5319 18.7744,19.1889 18.7744,16.3072C18.7744,13.4256 21.1175,11.0825 23.9991,11.0825C26.8808,11.0825 29.2239,13.4256 29.2239,16.3072Z"
android:fillColor="#000000"/>
android:fillColor="@android:color/white"
android:pathData="M10,19v-5h4v5c0,0.55 0.45,1 1,1h3c0.55,0 1,-0.45 1,-1v-7h1.7c0.46,0 0.68,-0.57 0.33,-0.87L12.67,3.6c-0.38,-0.34 -0.96,-0.34 -1.34,0l-8.36,7.53c-0.34,0.3 -0.13,0.87 0.33,0.87H5v7c0,0.55 0.45,1 1,1h3c0.55,0 1,-0.45 1,-1z"/>
</vector>

View File

@ -1,7 +1,7 @@
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable name="viewmodel" type="oppen.tva.ui.GemViewModel" />
<variable name="viewmodel" type="oppen.gem.ui.GemViewModel" />
</data>
<androidx.coordinatorlayout.widget.CoordinatorLayout

View File

@ -4,7 +4,7 @@
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools">
<oppen.tva.ui.content_image.TouchImageView
<oppen.gem.ui.content_image.TouchImageView
android:id="@+id/image_view"
android:scaleType="centerInside"
android:layout_width="match_parent"

View File

@ -7,7 +7,8 @@
<androidx.appcompat.widget.Toolbar
android:id="@+id/bookmark_toolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:layout_marginTop="@dimen/default_margin"
android:layout_height="@dimen/bar_height"
app:title="Add Bookmark"/>
<androidx.appcompat.widget.LinearLayoutCompat
@ -23,8 +24,11 @@
android:text="@string/name" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/bookmark_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:lines="1"
android:maxLines="1"/>
<androidx.appcompat.widget.AppCompatTextView
@ -33,8 +37,11 @@
android:text="@string/gemini_uri" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/bookmark_uri"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textUri"
android:lines="1"
android:maxLines="1"/>
</androidx.appcompat.widget.LinearLayoutCompat>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/menu_action_save_bookmark"
android:title="Save Bookmark"
android:icon="@drawable/vector_confirm"
app:showAsAction="always"/>
</menu>

View File

@ -1,6 +1,6 @@
package oppen.tva.io
package oppen.gem.io
import oppen.tva.io.gemini.GemtextHelper
import oppen.gem.io.gemini.GemtextHelper
import org.junit.Test
import org.junit.Assert.*