conventionschedule-android/app/src/main/java/com/adlerosn/brasilfurfest/schedule/ScheduleActivity.kt

137 lines
5.3 KiB
Kotlin

package com.adlerosn.brasilfurfest.schedule
import android.app.AlertDialog
import android.content.DialogInterface
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import com.google.android.material.snackbar.Snackbar
import androidx.fragment.app.FragmentPagerAdapter
import androidx.appcompat.app.AppCompatActivity
import android.view.Menu
import android.view.MenuItem
import com.adlerosn.brasilfurfest.R
import com.adlerosn.brasilfurfest.developer.DeveloperActivity
import com.adlerosn.brasilfurfest.helper.*
import com.adlerosn.brasilfurfest.schedule.abstractDataTypes.managed.AttendeeConFavorite
import com.adlerosn.brasilfurfest.schedule.adapters.DaysPagerAdapter
import com.adlerosn.brasilfurfest.schedule.managers.ScheduleManager
import com.adlerosn.brasilfurfest.schedule.managers.ScheduleManagerGetter
import com.google.gson.GsonBuilder
import com.google.zxing.integration.android.IntentIntegrator
import kotlinx.android.synthetic.main.activity_schedule.*
import org.jetbrains.anko.longToast
class ScheduleActivity : AppCompatActivity() {
private lateinit var scheduleManager: ScheduleManager
private lateinit var pagerAdapter: FragmentPagerAdapter
override fun onCreate(savedInstanceState: Bundle?) {
ActivitiesForFragments[this.javaClass.simpleName] = this
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_schedule)
setSupportActionBar(toolbar)
resourcesAliased = this.resources
scheduleManager = ScheduleManagerGetter[this]
scheduleManager.onAttendeeIntentionsChanged()
toolbar.title = scheduleManager.convention.name
toolbar.subtitle = scheduleManager.convention.theme.solved
pagerAdapter = DaysPagerAdapter(supportFragmentManager, scheduleManager)
container.adapter = pagerAdapter
tabs.fullSetup(container)
container.offscreenPageLimit = pagerAdapter.count
fab.setOnClickListener {
Intent(this, FavoritesActivity::class.java).apply {
startActivity(this)
}
}
fab.isLongClickable = true
fab.setOnLongClickListener {
Snackbar.make(it, R.string.schedule_events_favorites, Snackbar.LENGTH_LONG).apply {
setActionTextColor(this@ScheduleActivity.getColorCompat(R.color.colorBase20))
view.setBackgroundColor(this@ScheduleActivity.getColorCompat(R.color.colorBase03))
show()
}
true
}
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.menu_schedule, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_clear_planning -> {
val dialog = AlertDialog.Builder(this).create()
dialog.setTitle(R.string.schedule_clear_planning_question.getString())
dialog.setMessage(R.string.this_cannot_be_undone.getString())
dialog.setButton(AlertDialog.BUTTON_NEUTRAL, R.string.dialog_cancel.getString()) { _: DialogInterface, _: Int ->
dialog.dismiss()
}
dialog.setButton(AlertDialog.BUTTON_NEGATIVE, R.string.dialog_confirm.getString()) { _: DialogInterface, _: Int ->
dialog.dismiss()
scheduleManager.clearIntentions()
scheduleManager.onAttendeeIntentionsChanged()
}
dialog.show()
true
}
R.id.action_developer -> {
Intent(this, DeveloperActivity::class.java).apply {
startActivity(this)
}
true
}
R.id.action_search_filter -> {
Intent(this, SearchFilterActivity::class.java).apply {
startActivity(this)
}
true
}
R.id.action_scan_qr_code -> {
IntentIntegrator(this).apply {
setDesiredBarcodeFormats(IntentIntegrator.QR_CODE)
setOrientationLocked(true)
setBarcodeImageEnabled(false)
setBeepEnabled(false)
initiateScan()
}
true
}
else -> super.onOptionsItemSelected(item)
}
}
override fun onBackPressed() {
if (tabs.selectedTabPosition == 0)
super.onBackPressed()
else
container.setCurrentItem(0, true)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
val result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data)
result?.contents?.also { url ->
val uri = Uri.parse(url)
if (uri.path == "/app/roomparty"){
try {
GsonBuilder().create().fromJson(Uri.decode(uri.encodedFragment!!), AttendeeConFavorite::class.java)
}catch (e: Throwable){
longToast(getString(R.string.error_broken_invite))
return
}
startActivity(Intent(Intent.ACTION_SEND, uri, this, RoomPartyPreviewerActivity::class.java).apply {
putExtra("notQr", false)
})
}
}
}
}