You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
5.8 KiB
Kotlin
153 lines
5.8 KiB
Kotlin
package com.cyb3rko.techniklogger
|
|
|
|
import android.content.SharedPreferences
|
|
import android.os.Bundle
|
|
import android.view.Menu
|
|
import android.view.MenuItem
|
|
import android.view.View
|
|
import android.widget.Toast
|
|
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
|
|
|
import com.afollestad.materialdialogs.MaterialDialog
|
|
import com.afollestad.materialdialogs.input.getInputField
|
|
import com.afollestad.materialdialogs.input.input
|
|
import com.cyb3rko.techniklogger.recycler.ProjectEntryViewHolder
|
|
import com.cyb3rko.techniklogger.recycler.ProjectViewState
|
|
import com.google.firebase.database.*
|
|
|
|
import java.lang.IndexOutOfBoundsException
|
|
|
|
import kotlinx.android.synthetic.main.activity_main.*
|
|
|
|
import me.ibrahimyilmaz.kiel.adapter.RecyclerViewAdapter.Companion.adapterOf
|
|
|
|
class MainActivity : AppCompatActivity() {
|
|
|
|
private val data: MutableList<ProjectViewState.ProjectEntry> = mutableListOf()
|
|
private lateinit var databaseReference: DatabaseReference
|
|
private lateinit var sharedPref: SharedPreferences
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
setContentView(R.layout.activity_main)
|
|
|
|
sharedPref = getSharedPreferences("Safe", 0)
|
|
databaseReference = FirebaseDatabase.getInstance().reference
|
|
|
|
if (sharedPref.getString("name", "") == "") {
|
|
showNameDialog()
|
|
}
|
|
|
|
val adapter = adapterOf<ProjectViewState> {
|
|
register(
|
|
layoutResource = R.layout.item_recycler_projects,
|
|
viewHolder = ::ProjectEntryViewHolder,
|
|
onBindBindViewHolder = { vh, _, text ->
|
|
vh.textView.text = text.text
|
|
vh.locationView.text = text.location
|
|
vh.dateView.text = text.date
|
|
vh.itemView.setOnClickListener {
|
|
ProjectActivityBuilder(applicationContext)
|
|
.setKey(text.childKey)
|
|
.start()
|
|
}
|
|
}
|
|
)
|
|
}
|
|
|
|
val listener = object: ChildEventListener {
|
|
override fun onChildAdded(snapshot: DataSnapshot, previousChildName: String?) {
|
|
data.add(data.size, ProjectViewState.ProjectEntry(
|
|
snapshot.key!!,
|
|
snapshot.child("name").value.toString(),
|
|
snapshot.child("location").value.toString(),
|
|
snapshot.child("date").value.toString())
|
|
)
|
|
hideProgess()
|
|
recycler_view.scheduleLayoutAnimation()
|
|
adapter.notifyDataSetChanged()
|
|
}
|
|
|
|
override fun onChildChanged(snapshot: DataSnapshot, previousChildName: String?) {
|
|
}
|
|
|
|
override fun onChildRemoved(snapshot: DataSnapshot) {
|
|
data.remove(ProjectViewState.ProjectEntry(
|
|
snapshot.key!!,
|
|
snapshot.child("name").value.toString(),
|
|
snapshot.child("location").value.toString(),
|
|
snapshot.child("date").value.toString())
|
|
)
|
|
recycler_view.scheduleLayoutAnimation()
|
|
adapter.notifyDataSetChanged()
|
|
}
|
|
|
|
override fun onChildMoved(snapshot: DataSnapshot, previousChildName: String?) {
|
|
}
|
|
|
|
override fun onCancelled(error: DatabaseError) {
|
|
Toast.makeText(applicationContext, "Abruf fehlgeschlagen", Toast.LENGTH_SHORT).show()
|
|
}
|
|
}
|
|
|
|
adapter.submitList(data as List<ProjectViewState>?)
|
|
val linearLayoutManager = LinearLayoutManager(applicationContext)
|
|
linearLayoutManager.reverseLayout = true
|
|
linearLayoutManager.stackFromEnd = true
|
|
recycler_view.layoutManager = linearLayoutManager
|
|
recycler_view.adapter = adapter
|
|
|
|
databaseReference.addChildEventListener(listener)
|
|
}
|
|
|
|
private fun showNameDialog() {
|
|
val currentName = getSharedPreferences("Safe", 0).getString("name", "")
|
|
|
|
MaterialDialog(this)
|
|
.cancelable(false)
|
|
.title(0, "Bitte gebe deinen Namen ein")
|
|
.show {
|
|
input(hint = "Dein Name", prefill = currentName, waitForPositiveButton = false) { dialog, inputName ->
|
|
try {
|
|
if (!inputName[0].isUpperCase()) {
|
|
dialog.getInputField().error = "Der Anfangsbuchstabe sollte groß sein"
|
|
}
|
|
} catch (ignored: IndexOutOfBoundsException) {
|
|
}
|
|
|
|
positiveButton {
|
|
sharedPref.edit().putString("name", inputName.toString()).apply()
|
|
}
|
|
}
|
|
positiveButton(0, "Speichern")
|
|
}
|
|
}
|
|
|
|
private fun hideProgess() {
|
|
progress_bar.visibility = View.GONE
|
|
}
|
|
|
|
override fun onCreateOptionsMenu(menu: Menu): Boolean {
|
|
// Inflate the menu; this adds items to the action bar if it is present.
|
|
menuInflater.inflate(R.menu.menu_main, menu)
|
|
return true
|
|
}
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
// Handle action bar item clicks here. The action bar will
|
|
// automatically handle clicks on the Home/Up button, so long
|
|
// as you specify a parent activity in AndroidManifest.xml.
|
|
when (item.itemId) {
|
|
R.id.action_rename -> showNameDialog()
|
|
// R.id.action_icons -> setContentView(AboutIcons(applicationContext, R.drawable::class.java).setTitle("Benutzte Icons").get())
|
|
// R.id.action_libraries -> LibsBuilder().start(this)
|
|
// R.id.action_privacy_policy ->
|
|
// R.id.action_terms_of_use ->
|
|
}
|
|
|
|
return super.onOptionsItemSelected(item)
|
|
}
|
|
}
|