Compare commits
No commits in common. "32fbeac0796b87627b313708887aed94b16ee1ae" and "fe5da015cb6524d7386bb33498f72e867102ab23" have entirely different histories.
32fbeac079
...
fe5da015cb
@ -24,7 +24,6 @@ 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
|
||||||
@ -157,7 +156,7 @@ class MainActivity : AppCompatActivity() {
|
|||||||
adapter.notifyDataSetChanged()
|
adapter.notifyDataSetChanged()
|
||||||
|
|
||||||
// Reload data
|
// Reload data
|
||||||
loadLogbookList()
|
loadLogbook()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
@ -305,89 +304,17 @@ class MainActivity : AppCompatActivity() {
|
|||||||
alertDialog.show()
|
alertDialog.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun showAddLogbookDialog() {
|
fun loadLogbook() {
|
||||||
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, name, object: LogbookLoadedListener{
|
logbookRepo?.loadLogbook(this, "", object: LogbookLoadedListener{
|
||||||
override fun onLogbookLoaded(lb: Logbook) {
|
override fun onLogbookLoaded(lb: Logbook) {
|
||||||
runOnUiThread({
|
runOnUiThread({
|
||||||
setLoading(false)
|
setLoading(false)
|
||||||
|
@ -9,7 +9,6 @@ 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
|
||||||
@ -73,7 +72,7 @@ open class SettingsActivity : AppCompatActivity() {
|
|||||||
textViewWebDAVPass.text.toString()
|
textViewWebDAVPass.text.toString()
|
||||||
)
|
)
|
||||||
progressIndicator.visibility = View.VISIBLE
|
progressIndicator.visibility = View.VISIBLE
|
||||||
webDAVLogbookRepo.createLogbook(this, LogbookRepository.DEFAULT_LOGBOOK_NAME, object: WebDAVLogbookRepository.LogbookCreatedListener{
|
webDAVLogbookRepo.createLogbook(this, "", object: WebDAVLogbookRepository.LogbookCreatedListener{
|
||||||
override fun onLogbookCreated() {
|
override fun onLogbookCreated() {
|
||||||
runOnUiThread({
|
runOnUiThread({
|
||||||
progressIndicator.visibility = View.INVISIBLE
|
progressIndicator.visibility = View.INVISIBLE
|
||||||
|
@ -31,7 +31,7 @@ class FileLogbookRepository: LogbookRepository {
|
|||||||
|
|
||||||
fun loadLogbook(context: Context, name: String): Logbook {
|
fun loadLogbook(context: Context, name: String): Logbook {
|
||||||
val logbook = Logbook(name)
|
val logbook = Logbook(name)
|
||||||
val fileName = getFileName(name)
|
val fileName = "$FILE_NAME_START{${if (name.isNotEmpty()) "_" else ""}{$name}$FILE_NAME_END"
|
||||||
val file = File(context.getFilesDir(), fileName)
|
val file = File(context.getFilesDir(), fileName)
|
||||||
val json = FileInputStream(file).bufferedReader().use { it.readText() }
|
val json = FileInputStream(file).bufferedReader().use { it.readText() }
|
||||||
val ja = JSONArray(json)
|
val ja = JSONArray(json)
|
||||||
@ -57,7 +57,8 @@ class FileLogbookRepository: LogbookRepository {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun saveLogbook(context: Context, logbook: Logbook) {
|
fun saveLogbook(context: Context, logbook: Logbook) {
|
||||||
val fileName = getFileName(logbook.name)
|
val name = logbook.name
|
||||||
|
val fileName = "$FILE_NAME_START${if (name.isNotEmpty()) "_" else ""}${name}$FILE_NAME_END"
|
||||||
val file = File(context.getFilesDir(), fileName)
|
val file = File(context.getFilesDir(), fileName)
|
||||||
val ja = JSONArray()
|
val ja = JSONArray()
|
||||||
for (l in logbook.logs) {
|
for (l in logbook.logs) {
|
||||||
@ -69,7 +70,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,18 +82,14 @@ class FileLogbookRepository: LogbookRepository {
|
|||||||
})
|
})
|
||||||
|
|
||||||
if (logbooksFileNames == null || logbooksFileNames.isEmpty())
|
if (logbooksFileNames == null || logbooksFileNames.isEmpty())
|
||||||
listener.onLogbookListObtained(arrayListOf())
|
return 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, "")
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
listener.onLogbookListObtained(logbooksNames)
|
return logbooksNames
|
||||||
}
|
|
||||||
|
|
||||||
private fun getFileName(name: String): String {
|
|
||||||
return "$FILE_NAME_START${if (name.isNotEmpty()) "_" else ""}${name}$FILE_NAME_END"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -7,12 +7,9 @@ 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)
|
fun listLogbooks(context: Context, listener: LogbookListObtainedListener): ArrayList<String>
|
||||||
}
|
}
|
||||||
|
|
||||||
interface LogbookLoadedListener {
|
interface LogbookLoadedListener {
|
||||||
@ -32,7 +29,7 @@ interface LogbookSavedListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
interface LogbookListObtainedListener {
|
interface LogbookListObtainedListener {
|
||||||
fun onLogbookListObtained(logbooksNames: ArrayList<String>)
|
fun onLogbookListObtained()
|
||||||
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,22 +101,16 @@ 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> {
|
||||||
Thread(Runnable {
|
val logbooksNames = arrayListOf<String>()
|
||||||
val logbooksNames = arrayListOf<String>()
|
for (dr: DavResource in sardine.list(webDavURL)){
|
||||||
for (dr: DavResource in sardine.list(webDavURL)){
|
logbooksNames.add(
|
||||||
if(!dr.name.startsWith(FILE_NAME_START))
|
dr.name.replace(FileLogbookRepository.Companion.FILE_NAME_START, "")
|
||||||
continue
|
.replace("${FileLogbookRepository.Companion.FILE_NAME_START}_", "")
|
||||||
if(!dr.name.endsWith(FILE_NAME_END))
|
.replace(FileLogbookRepository.Companion.FILE_NAME_END, "")
|
||||||
continue
|
)
|
||||||
logbooksNames.add(
|
}
|
||||||
dr.name.replace("${FILE_NAME_START}_", "")
|
return logbooksNames
|
||||||
.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) {
|
||||||
|
@ -18,22 +18,6 @@
|
|||||||
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"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
<?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>
|
|
@ -1,13 +0,0 @@
|
|||||||
<?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,10 +80,4 @@
|
|||||||
|
|
||||||
<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,10 +103,4 @@
|
|||||||
|
|
||||||
<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>
|
Loading…
x
Reference in New Issue
Block a user