forked from penguin86/luna-tracker
		
	WIP implementing multiple children (working, with some issues)
This commit is contained in:
		@@ -24,6 +24,7 @@ import it.danieleverducci.lunatracker.entities.Logbook
 | 
				
			|||||||
import it.danieleverducci.lunatracker.entities.LunaEvent
 | 
					import it.danieleverducci.lunatracker.entities.LunaEvent
 | 
				
			||||||
import it.danieleverducci.lunatracker.repository.FileLogbookRepository
 | 
					import it.danieleverducci.lunatracker.repository.FileLogbookRepository
 | 
				
			||||||
import it.danieleverducci.lunatracker.repository.LocalSettingsRepository
 | 
					import it.danieleverducci.lunatracker.repository.LocalSettingsRepository
 | 
				
			||||||
 | 
					import it.danieleverducci.lunatracker.repository.LogbookListObtainedListener
 | 
				
			||||||
import it.danieleverducci.lunatracker.repository.LogbookLoadedListener
 | 
					import it.danieleverducci.lunatracker.repository.LogbookLoadedListener
 | 
				
			||||||
import it.danieleverducci.lunatracker.repository.LogbookRepository
 | 
					import it.danieleverducci.lunatracker.repository.LogbookRepository
 | 
				
			||||||
import it.danieleverducci.lunatracker.repository.LogbookSavedListener
 | 
					import it.danieleverducci.lunatracker.repository.LogbookSavedListener
 | 
				
			||||||
@@ -156,7 +157,7 @@ class MainActivity : AppCompatActivity() {
 | 
				
			|||||||
        adapter.notifyDataSetChanged()
 | 
					        adapter.notifyDataSetChanged()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Reload data
 | 
					        // Reload data
 | 
				
			||||||
        loadLogbook()
 | 
					        loadLogbookList()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    override fun onStop() {
 | 
					    override fun onStop() {
 | 
				
			||||||
@@ -304,17 +305,89 @@ class MainActivity : AppCompatActivity() {
 | 
				
			|||||||
        alertDialog.show()
 | 
					        alertDialog.show()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    fun loadLogbook() {
 | 
					    fun showAddLogbookDialog() {
 | 
				
			||||||
 | 
					        val d = AlertDialog.Builder(this)
 | 
				
			||||||
 | 
					        d.setTitle(R.string.dialog_add_logbook_title)
 | 
				
			||||||
 | 
					        val dialogView = layoutInflater.inflate(R.layout.dialog_add_logbook, null)
 | 
				
			||||||
 | 
					        val logbookNameEditText = dialogView.findViewById<EditText>(R.id.dialog_add_logbook_logbookname)
 | 
				
			||||||
 | 
					        d.setView(dialogView)
 | 
				
			||||||
 | 
					        d.setPositiveButton(android.R.string.ok) { dialogInterface, i -> addLogbook(logbookNameEditText.text.toString()) }
 | 
				
			||||||
 | 
					        d.setNegativeButton(android.R.string.cancel) { dialogInterface, i -> dialogInterface.dismiss() }
 | 
				
			||||||
 | 
					        val alertDialog = d.create()
 | 
				
			||||||
 | 
					        alertDialog.show()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fun loadLogbookList() {
 | 
				
			||||||
 | 
					        setLoading(true)
 | 
				
			||||||
 | 
					        logbookRepo?.listLogbooks(this, object: LogbookListObtainedListener {
 | 
				
			||||||
 | 
					            override fun onLogbookListObtained(logbooksNames: ArrayList<String>) {
 | 
				
			||||||
 | 
					                runOnUiThread({
 | 
				
			||||||
 | 
					                    // Show logbooks buttons
 | 
				
			||||||
 | 
					                    val logbooksButtonsContainer =
 | 
				
			||||||
 | 
					                        findViewById<ViewGroup>(R.id.logbooks_buttons_container)
 | 
				
			||||||
 | 
					                    logbooksButtonsContainer.removeAllViews()
 | 
				
			||||||
 | 
					                    for (lbn in logbooksNames) {
 | 
				
			||||||
 | 
					                        val lbnButton = layoutInflater.inflate(
 | 
				
			||||||
 | 
					                            R.layout.logbook_button,
 | 
				
			||||||
 | 
					                            logbooksButtonsContainer,
 | 
				
			||||||
 | 
					                            false
 | 
				
			||||||
 | 
					                        ) as TextView
 | 
				
			||||||
 | 
					                        lbnButton.setText(
 | 
				
			||||||
 | 
					                            if (lbn.isEmpty()) getString(R.string.default_logbook_name) else lbn
 | 
				
			||||||
 | 
					                        )
 | 
				
			||||||
 | 
					                        lbnButton.setOnClickListener({
 | 
				
			||||||
 | 
					                            loadLogbook(lbn)
 | 
				
			||||||
 | 
					                        })
 | 
				
			||||||
 | 
					                        logbooksButtonsContainer.addView(lbnButton)
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                    // Show "Add logbook" button
 | 
				
			||||||
 | 
					                    val addLogbookButton = layoutInflater.inflate(
 | 
				
			||||||
 | 
					                        R.layout.logbook_button,
 | 
				
			||||||
 | 
					                        logbooksButtonsContainer,
 | 
				
			||||||
 | 
					                        false
 | 
				
			||||||
 | 
					                    ) as TextView
 | 
				
			||||||
 | 
					                    addLogbookButton.setText("+")
 | 
				
			||||||
 | 
					                    addLogbookButton.setOnClickListener({showAddLogbookDialog()})
 | 
				
			||||||
 | 
					                    logbooksButtonsContainer.addView(addLogbookButton)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    // Load logbook
 | 
				
			||||||
 | 
					                    loadLogbook()
 | 
				
			||||||
 | 
					                })
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            override fun onIOError(error: IOException) {
 | 
				
			||||||
 | 
					                TODO("Not yet implemented")
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            override fun onWebDAVError(error: SardineException) {
 | 
				
			||||||
 | 
					                TODO("Not yet implemented")
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            override fun onError(error: Exception) {
 | 
				
			||||||
 | 
					                TODO("Not yet implemented")
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        })
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fun addLogbook(logbookName: String) {
 | 
				
			||||||
 | 
					        this.logbook = Logbook(logbookName)
 | 
				
			||||||
 | 
					        saveLogbook()
 | 
				
			||||||
 | 
					        loadLogbookList()
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    fun loadLogbook(name: String = LogbookRepository.DEFAULT_LOGBOOK_NAME) {
 | 
				
			||||||
        if (savingEvent)
 | 
					        if (savingEvent)
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // TODO: Highlight logbook button
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Reset time counter
 | 
					        // Reset time counter
 | 
				
			||||||
        handler.removeCallbacks(updateListRunnable)
 | 
					        handler.removeCallbacks(updateListRunnable)
 | 
				
			||||||
        handler.postDelayed(updateListRunnable, UPDATE_EVERY_SECS*1000)
 | 
					        handler.postDelayed(updateListRunnable, UPDATE_EVERY_SECS*1000)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Load data
 | 
					        // Load data
 | 
				
			||||||
        setLoading(true)
 | 
					        setLoading(true)
 | 
				
			||||||
        logbookRepo?.loadLogbook(this, "", object: LogbookLoadedListener{
 | 
					        logbookRepo?.loadLogbook(this, name, object: LogbookLoadedListener{
 | 
				
			||||||
            override fun onLogbookLoaded(lb: Logbook) {
 | 
					            override fun onLogbookLoaded(lb: Logbook) {
 | 
				
			||||||
                runOnUiThread({
 | 
					                runOnUiThread({
 | 
				
			||||||
                    setLoading(false)
 | 
					                    setLoading(false)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,6 +9,7 @@ import androidx.appcompat.app.AppCompatActivity
 | 
				
			|||||||
import com.google.android.material.progressindicator.LinearProgressIndicator
 | 
					import com.google.android.material.progressindicator.LinearProgressIndicator
 | 
				
			||||||
import com.thegrizzlylabs.sardineandroid.impl.SardineException
 | 
					import com.thegrizzlylabs.sardineandroid.impl.SardineException
 | 
				
			||||||
import it.danieleverducci.lunatracker.repository.LocalSettingsRepository
 | 
					import it.danieleverducci.lunatracker.repository.LocalSettingsRepository
 | 
				
			||||||
 | 
					import it.danieleverducci.lunatracker.repository.LogbookRepository
 | 
				
			||||||
import it.danieleverducci.lunatracker.repository.WebDAVLogbookRepository
 | 
					import it.danieleverducci.lunatracker.repository.WebDAVLogbookRepository
 | 
				
			||||||
import okio.IOException
 | 
					import okio.IOException
 | 
				
			||||||
import org.json.JSONException
 | 
					import org.json.JSONException
 | 
				
			||||||
@@ -72,7 +73,7 @@ open class SettingsActivity : AppCompatActivity() {
 | 
				
			|||||||
            textViewWebDAVPass.text.toString()
 | 
					            textViewWebDAVPass.text.toString()
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        progressIndicator.visibility = View.VISIBLE
 | 
					        progressIndicator.visibility = View.VISIBLE
 | 
				
			||||||
        webDAVLogbookRepo.createLogbook(this, "", object: WebDAVLogbookRepository.LogbookCreatedListener{
 | 
					        webDAVLogbookRepo.createLogbook(this, LogbookRepository.DEFAULT_LOGBOOK_NAME, object: WebDAVLogbookRepository.LogbookCreatedListener{
 | 
				
			||||||
            override fun onLogbookCreated() {
 | 
					            override fun onLogbookCreated() {
 | 
				
			||||||
                runOnUiThread({
 | 
					                runOnUiThread({
 | 
				
			||||||
                    progressIndicator.visibility = View.INVISIBLE
 | 
					                    progressIndicator.visibility = View.INVISIBLE
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -69,7 +69,7 @@ class FileLogbookRepository: LogbookRepository {
 | 
				
			|||||||
    override fun listLogbooks(
 | 
					    override fun listLogbooks(
 | 
				
			||||||
        context: Context,
 | 
					        context: Context,
 | 
				
			||||||
        listener: LogbookListObtainedListener
 | 
					        listener: LogbookListObtainedListener
 | 
				
			||||||
    ): ArrayList<String> {
 | 
					    ) {
 | 
				
			||||||
        val logbooksFileNames = context.getFilesDir().list(object: FilenameFilter {
 | 
					        val logbooksFileNames = context.getFilesDir().list(object: FilenameFilter {
 | 
				
			||||||
            override fun accept(dir: File?, name: String?): Boolean {
 | 
					            override fun accept(dir: File?, name: String?): Boolean {
 | 
				
			||||||
                if (name == null)
 | 
					                if (name == null)
 | 
				
			||||||
@@ -81,15 +81,15 @@ class FileLogbookRepository: LogbookRepository {
 | 
				
			|||||||
        })
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (logbooksFileNames == null || logbooksFileNames.isEmpty())
 | 
					        if (logbooksFileNames == null || logbooksFileNames.isEmpty())
 | 
				
			||||||
            return arrayListOf()
 | 
					            listener.onLogbookListObtained(arrayListOf())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        val logbooksNames = arrayListOf<String>()
 | 
					        val logbooksNames = arrayListOf<String>()
 | 
				
			||||||
        logbooksFileNames.forEach { it ->
 | 
					        logbooksFileNames.forEach { it ->
 | 
				
			||||||
            logbooksNames.add(
 | 
					            logbooksNames.add(
 | 
				
			||||||
                it.replace(FILE_NAME_START, "").replace("${FILE_NAME_START}_", "").replace(FILE_NAME_END, "")
 | 
					                it.replace("${FILE_NAME_START}_", "").replace(FILE_NAME_START, "").replace(FILE_NAME_END, "")
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return logbooksNames
 | 
					        listener.onLogbookListObtained(logbooksNames)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private fun getFileName(name: String): String {
 | 
					    private fun getFileName(name: String): String {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,9 +7,12 @@ import okio.IOException
 | 
				
			|||||||
import org.json.JSONException
 | 
					import org.json.JSONException
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface LogbookRepository {
 | 
					interface LogbookRepository {
 | 
				
			||||||
 | 
					    companion object {
 | 
				
			||||||
 | 
					        val DEFAULT_LOGBOOK_NAME = ""   // For compatibility with older app versions
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    fun loadLogbook(context: Context, name: String = "", listener: LogbookLoadedListener)
 | 
					    fun loadLogbook(context: Context, name: String = "", listener: LogbookLoadedListener)
 | 
				
			||||||
    fun saveLogbook(context: Context,logbook: Logbook, listener: LogbookSavedListener)
 | 
					    fun saveLogbook(context: Context,logbook: Logbook, listener: LogbookSavedListener)
 | 
				
			||||||
    fun listLogbooks(context: Context, listener: LogbookListObtainedListener): ArrayList<String>
 | 
					    fun listLogbooks(context: Context, listener: LogbookListObtainedListener)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface LogbookLoadedListener {
 | 
					interface LogbookLoadedListener {
 | 
				
			||||||
@@ -29,7 +32,7 @@ interface LogbookSavedListener {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
interface LogbookListObtainedListener {
 | 
					interface LogbookListObtainedListener {
 | 
				
			||||||
    fun onLogbookListObtained()
 | 
					    fun onLogbookListObtained(logbooksNames: ArrayList<String>)
 | 
				
			||||||
    fun onIOError(error: IOException)
 | 
					    fun onIOError(error: IOException)
 | 
				
			||||||
    fun onWebDAVError(error: SardineException)
 | 
					    fun onWebDAVError(error: SardineException)
 | 
				
			||||||
    fun onError(error: Exception)
 | 
					    fun onError(error: Exception)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -101,16 +101,22 @@ class WebDAVLogbookRepository(val webDavURL: String, val username: String, val p
 | 
				
			|||||||
    override fun listLogbooks(
 | 
					    override fun listLogbooks(
 | 
				
			||||||
        context: Context,
 | 
					        context: Context,
 | 
				
			||||||
        listener: LogbookListObtainedListener
 | 
					        listener: LogbookListObtainedListener
 | 
				
			||||||
    ): ArrayList<String> {
 | 
					    ) {
 | 
				
			||||||
        val logbooksNames = arrayListOf<String>()
 | 
					        Thread(Runnable {
 | 
				
			||||||
        for (dr: DavResource in sardine.list(webDavURL)){
 | 
					            val logbooksNames = arrayListOf<String>()
 | 
				
			||||||
            logbooksNames.add(
 | 
					            for (dr: DavResource in sardine.list(webDavURL)){
 | 
				
			||||||
                dr.name.replace(FileLogbookRepository.Companion.FILE_NAME_START, "")
 | 
					                if(!dr.name.startsWith(FILE_NAME_START))
 | 
				
			||||||
                    .replace("${FileLogbookRepository.Companion.FILE_NAME_START}_", "")
 | 
					                    continue
 | 
				
			||||||
                    .replace(FileLogbookRepository.Companion.FILE_NAME_END, "")
 | 
					                if(!dr.name.endsWith(FILE_NAME_END))
 | 
				
			||||||
            )
 | 
					                    continue
 | 
				
			||||||
        }
 | 
					                logbooksNames.add(
 | 
				
			||||||
        return logbooksNames
 | 
					                    dr.name.replace("${FILE_NAME_START}_", "")
 | 
				
			||||||
 | 
					                        .replace(FILE_NAME_START, "")
 | 
				
			||||||
 | 
					                        .replace(FILE_NAME_END, "")
 | 
				
			||||||
 | 
					                )
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            listener.onLogbookListObtained(logbooksNames)
 | 
				
			||||||
 | 
					        }).start()
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private fun saveLogbook(context: Context, logbook: Logbook) {
 | 
					    private fun saveLogbook(context: Context, logbook: Logbook) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,6 +17,22 @@
 | 
				
			|||||||
            android:text="@string/title"
 | 
					            android:text="@string/title"
 | 
				
			||||||
            android:textSize="30dp"
 | 
					            android:textSize="30dp"
 | 
				
			||||||
            android:gravity="center_horizontal"/>
 | 
					            android:gravity="center_horizontal"/>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        <HorizontalScrollView
 | 
				
			||||||
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
 | 
					            android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					            android:layout_marginTop="10dp"
 | 
				
			||||||
 | 
					            android:layout_marginBottom="10dp">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <LinearLayout
 | 
				
			||||||
 | 
					                android:id="@+id/logbooks_buttons_container"
 | 
				
			||||||
 | 
					                android:layout_width="wrap_content"
 | 
				
			||||||
 | 
					                android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					                android:orientation="horizontal">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            </LinearLayout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        </HorizontalScrollView>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <TextView
 | 
					        <TextView
 | 
				
			||||||
            android:layout_width="match_parent"
 | 
					            android:layout_width="match_parent"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										24
									
								
								app/src/main/res/layout/dialog_add_logbook.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								app/src/main/res/layout/dialog_add_logbook.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
 | 
					    android:orientation="vertical"
 | 
				
			||||||
 | 
					    android:layout_width="match_parent"
 | 
				
			||||||
 | 
					    android:layout_height="match_parent"
 | 
				
			||||||
 | 
					    android:padding="20dp">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <TextView
 | 
				
			||||||
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
 | 
					        android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					        android:text="@string/dialog_add_logbook_message"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <EditText
 | 
				
			||||||
 | 
					        android:id="@+id/dialog_add_logbook_logbookname"
 | 
				
			||||||
 | 
					        android:layout_width="match_parent"
 | 
				
			||||||
 | 
					        android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					        android:layout_marginTop="10dp"
 | 
				
			||||||
 | 
					        android:lines="1"
 | 
				
			||||||
 | 
					        android:inputType="text"
 | 
				
			||||||
 | 
					        android:hint="@string/dialog_add_logbook_logbookname"
 | 
				
			||||||
 | 
					        android:background="@drawable/textview_background"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</LinearLayout>
 | 
				
			||||||
							
								
								
									
										13
									
								
								app/src/main/res/layout/logbook_button.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								app/src/main/res/layout/logbook_button.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="utf-8"?>
 | 
				
			||||||
 | 
					<TextView xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
 | 
					    android:layout_width="wrap_content"
 | 
				
			||||||
 | 
					    android:layout_height="wrap_content"
 | 
				
			||||||
 | 
					    android:layout_marginLeft="5dp"
 | 
				
			||||||
 | 
					    android:layout_marginRight="5dp"
 | 
				
			||||||
 | 
					    android:paddingTop="10dp"
 | 
				
			||||||
 | 
					    android:paddingBottom="10dp"
 | 
				
			||||||
 | 
					    android:paddingLeft="20dp"
 | 
				
			||||||
 | 
					    android:paddingRight="20dp"
 | 
				
			||||||
 | 
					    android:background="@drawable/button_background"
 | 
				
			||||||
 | 
					    android:textStyle="bold"
 | 
				
			||||||
 | 
					    android:textColor="@color/accent"/>
 | 
				
			||||||
@@ -80,4 +80,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    <string name="dialog_event_detail_title">Dettaglio evento</string>
 | 
					    <string name="dialog_event_detail_title">Dettaglio evento</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string name="dialog_add_logbook_title">Aggiungi diario</string>
 | 
				
			||||||
 | 
					    <string name="dialog_add_logbook_logbookname">Nome del diario</string>
 | 
				
			||||||
 | 
					    <string name="dialog_add_logbook_message">Scrivi un nome per identificare questo diario. Comparirà in cima allo schermo, e se usi WebDAV sarà incluso anche nel nome del file di salvataggio.</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string name="default_logbook_name">Senza nome</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</resources>
 | 
					</resources>
 | 
				
			||||||
@@ -103,4 +103,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    <string name="dialog_event_detail_title">Event detail</string>
 | 
					    <string name="dialog_event_detail_title">Event detail</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string name="dialog_add_logbook_title">Add logbook</string>
 | 
				
			||||||
 | 
					    <string name="dialog_add_logbook_logbookname">Logbook name</string>
 | 
				
			||||||
 | 
					    <string name="dialog_add_logbook_message">Write a name to identify this logbook. This name will appear on top of the screen and, if you use WebDAV, will be in the save file name as well.</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <string name="default_logbook_name">Unnamed</string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
</resources>
 | 
					</resources>
 | 
				
			||||||
		Reference in New Issue
	
	Block a user