mirror of
https://github.com/Matte23/circolapp.git
synced 2025-12-06 07:29:10 +00:00
Implement viewBindings
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id("com.android.application")
|
id("com.android.application")
|
||||||
id("kotlin-android")
|
id("kotlin-android")
|
||||||
id("kotlin-android-extensions")
|
|
||||||
id("kotlin-kapt")
|
id("kotlin-kapt")
|
||||||
id("com.google.gms.google-services")
|
id("com.google.gms.google-services")
|
||||||
id("com.mikepenz.aboutlibraries.plugin")
|
id("com.mikepenz.aboutlibraries.plugin")
|
||||||
@@ -38,8 +37,8 @@ android {
|
|||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = "1.8"
|
jvmTarget = "1.8"
|
||||||
}
|
}
|
||||||
androidExtensions {
|
buildFeatures {
|
||||||
isExperimental = true
|
viewBinding = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,8 +38,8 @@ import androidx.preference.PreferenceManager
|
|||||||
import com.google.android.material.bottomnavigation.BottomNavigationView
|
import com.google.android.material.bottomnavigation.BottomNavigationView
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import com.mikepenz.aboutlibraries.LibsBuilder
|
import com.mikepenz.aboutlibraries.LibsBuilder
|
||||||
import kotlinx.android.synthetic.main.activity_main.*
|
|
||||||
import net.underdesk.circolapp.adapters.CircularLetterAdapter
|
import net.underdesk.circolapp.adapters.CircularLetterAdapter
|
||||||
|
import net.underdesk.circolapp.databinding.ActivityMainBinding
|
||||||
import net.underdesk.circolapp.utils.DownloadableFile
|
import net.underdesk.circolapp.utils.DownloadableFile
|
||||||
import net.underdesk.circolapp.works.PollWork
|
import net.underdesk.circolapp.works.PollWork
|
||||||
|
|
||||||
@@ -49,6 +49,8 @@ class MainActivity : AppCompatActivity(), CircularLetterAdapter.AdapterCallback
|
|||||||
internal const val PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 10
|
internal const val PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 10
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private lateinit var binding: ActivityMainBinding
|
||||||
|
|
||||||
var searchCallback: SearchCallback? = null
|
var searchCallback: SearchCallback? = null
|
||||||
var refreshCallback: RefreshCallback? = null
|
var refreshCallback: RefreshCallback? = null
|
||||||
override var fileToDownload: DownloadableFile? = null
|
override var fileToDownload: DownloadableFile? = null
|
||||||
@@ -56,8 +58,9 @@ class MainActivity : AppCompatActivity(), CircularLetterAdapter.AdapterCallback
|
|||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
loadDarkTheme()
|
loadDarkTheme()
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_main)
|
binding = ActivityMainBinding.inflate(layoutInflater)
|
||||||
setSupportActionBar(main_toolbar)
|
setContentView(binding.root)
|
||||||
|
setSupportActionBar(binding.mainToolbar)
|
||||||
val navView: BottomNavigationView = findViewById(R.id.nav_view)
|
val navView: BottomNavigationView = findViewById(R.id.nav_view)
|
||||||
|
|
||||||
val navController = findNavController(R.id.nav_host_fragment)
|
val navController = findNavController(R.id.nav_host_fragment)
|
||||||
@@ -134,7 +137,7 @@ class MainActivity : AppCompatActivity(), CircularLetterAdapter.AdapterCallback
|
|||||||
downloadFile()
|
downloadFile()
|
||||||
} else {
|
} else {
|
||||||
Snackbar.make(
|
Snackbar.make(
|
||||||
container,
|
binding.container,
|
||||||
resources.getString(R.string.snackbar_write_permission_not_granted),
|
resources.getString(R.string.snackbar_write_permission_not_granted),
|
||||||
Snackbar.LENGTH_LONG
|
Snackbar.LENGTH_LONG
|
||||||
).show()
|
).show()
|
||||||
@@ -161,7 +164,7 @@ class MainActivity : AppCompatActivity(), CircularLetterAdapter.AdapterCallback
|
|||||||
(getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager).enqueue(request)
|
(getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager).enqueue(request)
|
||||||
|
|
||||||
Snackbar.make(
|
Snackbar.make(
|
||||||
container,
|
binding.container,
|
||||||
resources.getString(R.string.snackbar_circular_downloaded),
|
resources.getString(R.string.snackbar_circular_downloaded),
|
||||||
Snackbar.LENGTH_LONG
|
Snackbar.LENGTH_LONG
|
||||||
).show()
|
).show()
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import android.text.InputType
|
|||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.appcompat.app.AppCompatDelegate
|
import androidx.appcompat.app.AppCompatDelegate
|
||||||
import androidx.preference.*
|
import androidx.preference.*
|
||||||
import kotlinx.android.synthetic.main.settings_activity.*
|
import net.underdesk.circolapp.databinding.SettingsActivityBinding
|
||||||
import net.underdesk.circolapp.push.FirebaseTopicUtils
|
import net.underdesk.circolapp.push.FirebaseTopicUtils
|
||||||
import net.underdesk.circolapp.server.AndroidServerApi
|
import net.underdesk.circolapp.server.AndroidServerApi
|
||||||
import net.underdesk.circolapp.shared.server.ServerAPI
|
import net.underdesk.circolapp.shared.server.ServerAPI
|
||||||
@@ -32,10 +32,14 @@ import net.underdesk.circolapp.works.PollWork
|
|||||||
|
|
||||||
class SettingsActivity : AppCompatActivity() {
|
class SettingsActivity : AppCompatActivity() {
|
||||||
|
|
||||||
|
private lateinit var binding: SettingsActivityBinding
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.settings_activity)
|
setContentView(R.layout.settings_activity)
|
||||||
setSupportActionBar(settings_toolbar)
|
binding = SettingsActivityBinding.inflate(layoutInflater)
|
||||||
|
setContentView(binding.root)
|
||||||
|
setSupportActionBar(binding.settingsToolbar)
|
||||||
supportFragmentManager
|
supportFragmentManager
|
||||||
.beginTransaction()
|
.beginTransaction()
|
||||||
.replace(R.id.settings, SettingsFragment())
|
.replace(R.id.settings, SettingsFragment())
|
||||||
|
|||||||
@@ -20,13 +20,11 @@ package net.underdesk.circolapp.adapters
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.ImageButton
|
import android.widget.ImageButton
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import kotlinx.android.synthetic.main.item_attachment.view.*
|
import net.underdesk.circolapp.databinding.ItemAttachmentBinding
|
||||||
import net.underdesk.circolapp.R
|
|
||||||
import net.underdesk.circolapp.utils.DownloadableFile
|
import net.underdesk.circolapp.utils.DownloadableFile
|
||||||
import net.underdesk.circolapp.utils.FileUtils
|
import net.underdesk.circolapp.utils.FileUtils
|
||||||
|
|
||||||
@@ -38,18 +36,17 @@ class AttachmentAdapter(
|
|||||||
RecyclerView.Adapter<AttachmentAdapter.AttachmentViewHolder>() {
|
RecyclerView.Adapter<AttachmentAdapter.AttachmentViewHolder>() {
|
||||||
private lateinit var context: Context
|
private lateinit var context: Context
|
||||||
|
|
||||||
inner class AttachmentViewHolder(view: View) : RecyclerView.ViewHolder(view) {
|
inner class AttachmentViewHolder(binding: ItemAttachmentBinding) : RecyclerView.ViewHolder(binding.root) {
|
||||||
var title: TextView = view.attachment_title_textview
|
var title: TextView = binding.attachmentTitleTextview
|
||||||
var viewButton: ImageButton = view.attachment_view_button
|
var viewButton: ImageButton = binding.attachmentViewButton
|
||||||
var downloadButton: ImageButton = view.attachment_download_button
|
var downloadButton: ImageButton = binding.attachmentDownloadButton
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AttachmentViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AttachmentViewHolder {
|
||||||
val itemView = LayoutInflater.from(parent.context)
|
val binding = ItemAttachmentBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||||
.inflate(R.layout.item_attachment, parent, false)
|
|
||||||
context = parent.context
|
context = parent.context
|
||||||
|
|
||||||
return AttachmentViewHolder(itemView)
|
return AttachmentViewHolder(binding)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: AttachmentViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: AttachmentViewHolder, position: Int) {
|
||||||
|
|||||||
@@ -31,12 +31,12 @@ import androidx.core.content.ContextCompat.getDrawable
|
|||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import kotlinx.android.synthetic.main.item_circular.view.*
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import net.underdesk.circolapp.AlarmBroadcastReceiver
|
import net.underdesk.circolapp.AlarmBroadcastReceiver
|
||||||
import net.underdesk.circolapp.R
|
import net.underdesk.circolapp.R
|
||||||
import net.underdesk.circolapp.data.AndroidDatabase
|
import net.underdesk.circolapp.data.AndroidDatabase
|
||||||
|
import net.underdesk.circolapp.databinding.ItemCircularBinding
|
||||||
import net.underdesk.circolapp.fragments.NewReminderFragment
|
import net.underdesk.circolapp.fragments.NewReminderFragment
|
||||||
import net.underdesk.circolapp.shared.data.Circular
|
import net.underdesk.circolapp.shared.data.Circular
|
||||||
import net.underdesk.circolapp.utils.DownloadableFile
|
import net.underdesk.circolapp.utils.DownloadableFile
|
||||||
@@ -55,17 +55,17 @@ class CircularLetterAdapter(
|
|||||||
setHasStableIds(true)
|
setHasStableIds(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class CircularLetterViewHolder(view: View) : RecyclerView.ViewHolder(view) {
|
inner class CircularLetterViewHolder(binding: ItemCircularBinding) : RecyclerView.ViewHolder(binding.root) {
|
||||||
var card: CardView = view.circular_card
|
var card: CardView = binding.circularCard
|
||||||
var title: TextView = view.circular_title_textview
|
var title: TextView = binding.circularTitleTextview
|
||||||
var number: TextView = view.circular_number_textview
|
var number: TextView = binding.circularNumberTextview
|
||||||
var date: TextView = view.circular_date_textview
|
var date: TextView = binding.circularDateTextview
|
||||||
var collapseButton: ImageButton = view.circular_collapse_button
|
var collapseButton: ImageButton = binding.circularCollapseButton
|
||||||
var viewButton: ImageButton = view.circular_view_button
|
var viewButton: ImageButton = binding.circularViewButton
|
||||||
var downloadButton: ImageButton = view.circular_download_button
|
var downloadButton: ImageButton = binding.circularDownloadButton
|
||||||
var favouriteButton: ImageButton = view.circular_favourite_button
|
var favouriteButton: ImageButton = binding.circularFavouriteButton
|
||||||
var reminderButton: ImageButton = view.circular_reminder_button
|
var reminderButton: ImageButton = binding.circularReminderButton
|
||||||
var attachmentsList: RecyclerView = view.circulars_attachments_list
|
var attachmentsList: RecyclerView = binding.circularsAttachmentsList
|
||||||
|
|
||||||
init {
|
init {
|
||||||
attachmentsList.layoutManager = LinearLayoutManager(context)
|
attachmentsList.layoutManager = LinearLayoutManager(context)
|
||||||
@@ -73,11 +73,10 @@ class CircularLetterAdapter(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CircularLetterViewHolder {
|
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CircularLetterViewHolder {
|
||||||
val itemView = LayoutInflater.from(parent.context)
|
val binding = ItemCircularBinding.inflate(LayoutInflater.from(parent.context), parent, false)
|
||||||
.inflate(R.layout.item_circular, parent, false)
|
|
||||||
context = parent.context
|
context = parent.context
|
||||||
|
|
||||||
return CircularLetterViewHolder(itemView)
|
return CircularLetterViewHolder(binding)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: CircularLetterViewHolder, position: Int) {
|
override fun onBindViewHolder(holder: CircularLetterViewHolder, position: Int) {
|
||||||
|
|||||||
@@ -28,12 +28,11 @@ import androidx.fragment.app.viewModels
|
|||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import kotlinx.android.synthetic.main.fragment_circular_letters.*
|
|
||||||
import kotlinx.android.synthetic.main.fragment_circular_letters.view.*
|
|
||||||
import net.underdesk.circolapp.MainActivity
|
import net.underdesk.circolapp.MainActivity
|
||||||
import net.underdesk.circolapp.R
|
import net.underdesk.circolapp.R
|
||||||
import net.underdesk.circolapp.adapters.CircularLetterAdapter
|
import net.underdesk.circolapp.adapters.CircularLetterAdapter
|
||||||
import net.underdesk.circolapp.data.AndroidCircularRepository
|
import net.underdesk.circolapp.data.AndroidCircularRepository
|
||||||
|
import net.underdesk.circolapp.databinding.FragmentCircularLettersBinding
|
||||||
import net.underdesk.circolapp.viewmodels.CircularLetterViewModel
|
import net.underdesk.circolapp.viewmodels.CircularLetterViewModel
|
||||||
import net.underdesk.circolapp.viewmodels.CircularLetterViewModelFactory
|
import net.underdesk.circolapp.viewmodels.CircularLetterViewModelFactory
|
||||||
|
|
||||||
@@ -42,6 +41,10 @@ class CircularLetterFragment :
|
|||||||
MainActivity.SearchCallback,
|
MainActivity.SearchCallback,
|
||||||
MainActivity.RefreshCallback {
|
MainActivity.RefreshCallback {
|
||||||
|
|
||||||
|
private var _binding: FragmentCircularLettersBinding? = null
|
||||||
|
// This property is only valid between onCreateView and onDestroyView.
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
private val circularLetterViewModel: CircularLetterViewModel by viewModels {
|
private val circularLetterViewModel: CircularLetterViewModel by viewModels {
|
||||||
CircularLetterViewModelFactory(
|
CircularLetterViewModelFactory(
|
||||||
AndroidCircularRepository.getInstance(requireContext()),
|
AndroidCircularRepository.getInstance(requireContext()),
|
||||||
@@ -53,19 +56,19 @@ class CircularLetterFragment :
|
|||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View {
|
||||||
val root = inflater.inflate(R.layout.fragment_circular_letters, container, false)
|
_binding = FragmentCircularLettersBinding.inflate(inflater, container, false)
|
||||||
|
|
||||||
root.circulars_list.layoutManager = LinearLayoutManager(context)
|
binding.circularsList.layoutManager = LinearLayoutManager(context)
|
||||||
|
|
||||||
circularLetterViewModel.circulars.observe(
|
circularLetterViewModel.circulars.observe(
|
||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
{
|
{
|
||||||
if (root.circulars_list.adapter == null) {
|
if (binding.circularsList.adapter == null) {
|
||||||
root.circulars_list.adapter =
|
binding.circularsList.adapter =
|
||||||
CircularLetterAdapter(it, activity as MainActivity, lifecycleScope)
|
CircularLetterAdapter(it, activity as MainActivity, lifecycleScope)
|
||||||
} else {
|
} else {
|
||||||
(root.circulars_list.adapter as CircularLetterAdapter).changeDataSet(it)
|
(binding.circularsList.adapter as CircularLetterAdapter).changeDataSet(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -87,18 +90,23 @@ class CircularLetterFragment :
|
|||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
{
|
{
|
||||||
if (it) {
|
if (it) {
|
||||||
root.circulars_refresh.isRefreshing = false
|
binding.circularsRefresh.isRefreshing = false
|
||||||
|
|
||||||
circularLetterViewModel.showMessage.postValue(false)
|
circularLetterViewModel.showMessage.postValue(false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
root.circulars_refresh.setOnRefreshListener { circularLetterViewModel.updateCirculars() }
|
binding.circularsRefresh.setOnRefreshListener { circularLetterViewModel.updateCirculars() }
|
||||||
|
|
||||||
(activity as MainActivity).searchCallback = this
|
(activity as MainActivity).searchCallback = this
|
||||||
(activity as MainActivity).refreshCallback = this
|
(activity as MainActivity).refreshCallback = this
|
||||||
return root
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
_binding = null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun search(query: String) {
|
override fun search(query: String) {
|
||||||
@@ -106,7 +114,7 @@ class CircularLetterFragment :
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun refresh() {
|
override fun refresh() {
|
||||||
circulars_refresh.isRefreshing = true
|
binding.circularsRefresh.isRefreshing = true
|
||||||
circularLetterViewModel.updateCirculars()
|
circularLetterViewModel.updateCirculars()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,16 +26,19 @@ import androidx.fragment.app.Fragment
|
|||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import kotlinx.android.synthetic.main.fragment_circular_letters.view.*
|
|
||||||
import net.underdesk.circolapp.MainActivity
|
import net.underdesk.circolapp.MainActivity
|
||||||
import net.underdesk.circolapp.R
|
|
||||||
import net.underdesk.circolapp.adapters.CircularLetterAdapter
|
import net.underdesk.circolapp.adapters.CircularLetterAdapter
|
||||||
import net.underdesk.circolapp.data.AndroidCircularRepository
|
import net.underdesk.circolapp.data.AndroidCircularRepository
|
||||||
|
import net.underdesk.circolapp.databinding.FragmentCircularLettersBinding
|
||||||
import net.underdesk.circolapp.viewmodels.FavouritesViewModel
|
import net.underdesk.circolapp.viewmodels.FavouritesViewModel
|
||||||
import net.underdesk.circolapp.viewmodels.FavouritesViewModelFactory
|
import net.underdesk.circolapp.viewmodels.FavouritesViewModelFactory
|
||||||
|
|
||||||
class FavouritesFragment : Fragment(), MainActivity.SearchCallback {
|
class FavouritesFragment : Fragment(), MainActivity.SearchCallback {
|
||||||
|
|
||||||
|
private var _binding: FragmentCircularLettersBinding? = null
|
||||||
|
// This property is only valid between onCreateView and onDestroyView.
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
private val favouritesViewModel: FavouritesViewModel by viewModels {
|
private val favouritesViewModel: FavouritesViewModel by viewModels {
|
||||||
FavouritesViewModelFactory(
|
FavouritesViewModelFactory(
|
||||||
AndroidCircularRepository.getInstance(requireContext()),
|
AndroidCircularRepository.getInstance(requireContext()),
|
||||||
@@ -47,27 +50,32 @@ class FavouritesFragment : Fragment(), MainActivity.SearchCallback {
|
|||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View {
|
||||||
val root = inflater.inflate(R.layout.fragment_circular_letters, container, false)
|
_binding = FragmentCircularLettersBinding.inflate(inflater, container, false)
|
||||||
|
|
||||||
root.circulars_list.layoutManager = LinearLayoutManager(context)
|
binding.circularsList.layoutManager = LinearLayoutManager(context)
|
||||||
root.circulars_refresh.isEnabled = false
|
binding.circularsRefresh.isEnabled = false
|
||||||
|
|
||||||
favouritesViewModel.circulars.observe(
|
favouritesViewModel.circulars.observe(
|
||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
{
|
{
|
||||||
if (root.circulars_list.adapter == null) {
|
if (binding.circularsList.adapter == null) {
|
||||||
root.circulars_list.adapter =
|
binding.circularsList.adapter =
|
||||||
CircularLetterAdapter(it, activity as MainActivity, lifecycleScope)
|
CircularLetterAdapter(it, activity as MainActivity, lifecycleScope)
|
||||||
} else {
|
} else {
|
||||||
(root.circulars_list.adapter as CircularLetterAdapter).changeDataSet(it)
|
(binding.circularsList.adapter as CircularLetterAdapter).changeDataSet(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
(activity as MainActivity).searchCallback = this
|
(activity as MainActivity).searchCallback = this
|
||||||
(activity as MainActivity).refreshCallback = null
|
(activity as MainActivity).refreshCallback = null
|
||||||
return root
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
_binding = null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun search(query: String) {
|
override fun search(query: String) {
|
||||||
|
|||||||
@@ -30,11 +30,11 @@ import android.view.ViewGroup
|
|||||||
import androidx.core.app.AlarmManagerCompat
|
import androidx.core.app.AlarmManagerCompat
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import kotlinx.android.synthetic.main.dialog_reminder.*
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import net.underdesk.circolapp.AlarmBroadcastReceiver
|
import net.underdesk.circolapp.AlarmBroadcastReceiver
|
||||||
import net.underdesk.circolapp.R
|
import net.underdesk.circolapp.R
|
||||||
import net.underdesk.circolapp.data.AndroidDatabase
|
import net.underdesk.circolapp.data.AndroidDatabase
|
||||||
|
import net.underdesk.circolapp.databinding.DialogReminderBinding
|
||||||
import net.underdesk.circolapp.shared.data.Circular
|
import net.underdesk.circolapp.shared.data.Circular
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -48,6 +48,10 @@ class NewReminderFragment : DialogFragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var _binding: DialogReminderBinding? = null
|
||||||
|
// This property is only valid between onCreateView and onDestroyView.
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
private var dateNotChosen = true
|
private var dateNotChosen = true
|
||||||
lateinit var circular: Circular
|
lateinit var circular: Circular
|
||||||
|
|
||||||
@@ -56,44 +60,50 @@ class NewReminderFragment : DialogFragment() {
|
|||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View {
|
): View {
|
||||||
return inflater.inflate(R.layout.dialog_reminder, container)
|
_binding = DialogReminderBinding.inflate(inflater, container, false)
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
_binding = null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
dialog_time_picker.setIs24HourView(true)
|
binding.dialogTimePicker.setIs24HourView(true)
|
||||||
|
|
||||||
dialog_ok_button.setOnClickListener { next() }
|
binding.dialogOkButton.setOnClickListener { next() }
|
||||||
dialog_back_button.setOnClickListener { back() }
|
binding.dialogBackButton.setOnClickListener { back() }
|
||||||
dialog_cancel_button.setOnClickListener { dismiss() }
|
binding.dialogCancelButton.setOnClickListener { dismiss() }
|
||||||
}
|
}
|
||||||
|
|
||||||
fun next() {
|
fun next() {
|
||||||
if (dateNotChosen) {
|
if (dateNotChosen) {
|
||||||
dialog_date_picker.visibility = View.GONE
|
binding.dialogDatePicker.visibility = View.GONE
|
||||||
dialog_time_picker.visibility = View.VISIBLE
|
binding.dialogTimePicker.visibility = View.VISIBLE
|
||||||
dialog_back_button.visibility = View.VISIBLE
|
binding.dialogBackButton.visibility = View.VISIBLE
|
||||||
dialog_ok_button.text = getString(R.string.dialog_ok)
|
binding.dialogOkButton.text = getString(R.string.dialog_ok)
|
||||||
dateNotChosen = false
|
dateNotChosen = false
|
||||||
} else {
|
} else {
|
||||||
val calendar = Calendar.getInstance()
|
val calendar = Calendar.getInstance()
|
||||||
val hour = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
val hour = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
dialog_time_picker.hour
|
binding.dialogTimePicker.hour
|
||||||
} else {
|
} else {
|
||||||
dialog_time_picker.currentHour
|
binding.dialogTimePicker.currentHour
|
||||||
}
|
}
|
||||||
|
|
||||||
val minute = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
val minute = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
dialog_time_picker.minute
|
binding.dialogTimePicker.minute
|
||||||
} else {
|
} else {
|
||||||
dialog_time_picker.currentMinute
|
binding.dialogTimePicker.currentMinute
|
||||||
}
|
}
|
||||||
|
|
||||||
calendar.set(
|
calendar.set(
|
||||||
dialog_date_picker.year,
|
binding.dialogDatePicker.year,
|
||||||
dialog_date_picker.month,
|
binding.dialogDatePicker.month,
|
||||||
dialog_date_picker.dayOfMonth,
|
binding.dialogDatePicker.dayOfMonth,
|
||||||
hour,
|
hour,
|
||||||
minute
|
minute
|
||||||
)
|
)
|
||||||
@@ -127,10 +137,10 @@ class NewReminderFragment : DialogFragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun back() {
|
private fun back() {
|
||||||
dialog_date_picker.visibility = View.VISIBLE
|
binding.dialogDatePicker.visibility = View.VISIBLE
|
||||||
dialog_time_picker.visibility = View.GONE
|
binding.dialogTimePicker.visibility = View.GONE
|
||||||
dialog_back_button.visibility = View.GONE
|
binding.dialogBackButton.visibility = View.GONE
|
||||||
dialog_ok_button.text = getString(R.string.dialog_next)
|
binding.dialogOkButton.text = getString(R.string.dialog_next)
|
||||||
dateNotChosen = true
|
dateNotChosen = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,16 +26,19 @@ import androidx.fragment.app.Fragment
|
|||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import kotlinx.android.synthetic.main.fragment_circular_letters.view.*
|
|
||||||
import net.underdesk.circolapp.MainActivity
|
import net.underdesk.circolapp.MainActivity
|
||||||
import net.underdesk.circolapp.R
|
|
||||||
import net.underdesk.circolapp.adapters.CircularLetterAdapter
|
import net.underdesk.circolapp.adapters.CircularLetterAdapter
|
||||||
import net.underdesk.circolapp.data.AndroidCircularRepository
|
import net.underdesk.circolapp.data.AndroidCircularRepository
|
||||||
|
import net.underdesk.circolapp.databinding.FragmentCircularLettersBinding
|
||||||
import net.underdesk.circolapp.viewmodels.RemindersViewModel
|
import net.underdesk.circolapp.viewmodels.RemindersViewModel
|
||||||
import net.underdesk.circolapp.viewmodels.RemindersViewModelFactory
|
import net.underdesk.circolapp.viewmodels.RemindersViewModelFactory
|
||||||
|
|
||||||
class RemindersFragment : Fragment(), MainActivity.SearchCallback {
|
class RemindersFragment : Fragment(), MainActivity.SearchCallback {
|
||||||
|
|
||||||
|
private var _binding: FragmentCircularLettersBinding? = null
|
||||||
|
// This property is only valid between onCreateView and onDestroyView.
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
private val remindersViewModel: RemindersViewModel by viewModels {
|
private val remindersViewModel: RemindersViewModel by viewModels {
|
||||||
RemindersViewModelFactory(
|
RemindersViewModelFactory(
|
||||||
AndroidCircularRepository.getInstance(requireContext()),
|
AndroidCircularRepository.getInstance(requireContext()),
|
||||||
@@ -47,27 +50,32 @@ class RemindersFragment : Fragment(), MainActivity.SearchCallback {
|
|||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View {
|
||||||
val root = inflater.inflate(R.layout.fragment_circular_letters, container, false)
|
_binding = FragmentCircularLettersBinding.inflate(inflater, container, false)
|
||||||
|
|
||||||
root.circulars_list.layoutManager = LinearLayoutManager(context)
|
binding.circularsList.layoutManager = LinearLayoutManager(context)
|
||||||
root.circulars_refresh.isEnabled = false
|
binding.circularsRefresh.isEnabled = false
|
||||||
|
|
||||||
remindersViewModel.circulars.observe(
|
remindersViewModel.circulars.observe(
|
||||||
viewLifecycleOwner,
|
viewLifecycleOwner,
|
||||||
{
|
{
|
||||||
if (root.circulars_list.adapter == null) {
|
if (binding.circularsList.adapter == null) {
|
||||||
root.circulars_list.adapter =
|
binding.circularsList.adapter =
|
||||||
CircularLetterAdapter(it, activity as MainActivity, lifecycleScope)
|
CircularLetterAdapter(it, activity as MainActivity, lifecycleScope)
|
||||||
} else {
|
} else {
|
||||||
(root.circulars_list.adapter as CircularLetterAdapter).changeDataSet(it)
|
(binding.circularsList.adapter as CircularLetterAdapter).changeDataSet(it)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
(activity as MainActivity).searchCallback = this
|
(activity as MainActivity).searchCallback = this
|
||||||
(activity as MainActivity).refreshCallback = null
|
(activity as MainActivity).refreshCallback = null
|
||||||
return root
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
_binding = null
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun search(query: String) {
|
override fun search(query: String) {
|
||||||
|
|||||||
@@ -8,37 +8,50 @@ import android.view.ViewGroup
|
|||||||
import androidx.core.text.HtmlCompat
|
import androidx.core.text.HtmlCompat
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import com.github.appintro.SlidePolicy
|
import com.github.appintro.SlidePolicy
|
||||||
import kotlinx.android.synthetic.main.fragment_legal.view.*
|
|
||||||
import net.underdesk.circolapp.R
|
import net.underdesk.circolapp.R
|
||||||
|
import net.underdesk.circolapp.databinding.FragmentLegalBinding
|
||||||
|
|
||||||
class LegalFragment : Fragment(), SlidePolicy {
|
class LegalFragment : Fragment(), SlidePolicy {
|
||||||
|
|
||||||
|
private var _binding: FragmentLegalBinding? = null
|
||||||
|
// This property is only valid between onCreateView and onDestroyView.
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? = inflater.inflate(R.layout.fragment_legal, container, false)
|
): View {
|
||||||
|
_binding = FragmentLegalBinding.inflate(inflater, container, false)
|
||||||
|
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDestroyView() {
|
||||||
|
super.onDestroyView()
|
||||||
|
_binding = null
|
||||||
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
view.legal_text.text = HtmlCompat.fromHtml(
|
binding.legalText.text = HtmlCompat.fromHtml(
|
||||||
getString(R.string.activity_intro_legal_text),
|
getString(R.string.activity_intro_legal_text),
|
||||||
HtmlCompat.FROM_HTML_MODE_COMPACT
|
HtmlCompat.FROM_HTML_MODE_COMPACT
|
||||||
)
|
)
|
||||||
view.legal_text.movementMethod = LinkMovementMethod.getInstance()
|
binding.legalText.movementMethod = LinkMovementMethod.getInstance()
|
||||||
|
|
||||||
view.legal_checkbox.setOnCheckedChangeListener { checkBox, checked ->
|
binding.legalCheckbox.setOnCheckedChangeListener { checkBox, checked ->
|
||||||
if (checked)
|
if (checked)
|
||||||
checkBox.error = null
|
checkBox.error = null
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override val isPolicyRespected: Boolean
|
override val isPolicyRespected: Boolean
|
||||||
get() = view?.legal_checkbox?.isChecked ?: false
|
get() = binding.legalCheckbox.isChecked
|
||||||
|
|
||||||
override fun onUserIllegallyRequestedNextPage() {
|
override fun onUserIllegallyRequestedNextPage() {
|
||||||
view?.legal_checkbox?.error =
|
binding.legalCheckbox.error =
|
||||||
getString(R.string.activity_intro_legal_error)
|
getString(R.string.activity_intro_legal_error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,12 +10,17 @@ import androidx.fragment.app.Fragment
|
|||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.github.appintro.SlidePolicy
|
import com.github.appintro.SlidePolicy
|
||||||
import com.tiper.MaterialSpinner
|
import com.tiper.MaterialSpinner
|
||||||
import kotlinx.android.synthetic.main.fragment_school_selection.view.*
|
|
||||||
import net.underdesk.circolapp.R
|
import net.underdesk.circolapp.R
|
||||||
|
import net.underdesk.circolapp.databinding.FragmentSchoolSelectionBinding
|
||||||
import net.underdesk.circolapp.server.AndroidServerApi
|
import net.underdesk.circolapp.server.AndroidServerApi
|
||||||
import net.underdesk.circolapp.shared.server.ServerAPI
|
import net.underdesk.circolapp.shared.server.ServerAPI
|
||||||
|
|
||||||
class SchoolSelectionFragment : Fragment(), SlidePolicy, MaterialSpinner.OnItemSelectedListener {
|
class SchoolSelectionFragment : Fragment(), SlidePolicy, MaterialSpinner.OnItemSelectedListener {
|
||||||
|
|
||||||
|
private var _binding: FragmentSchoolSelectionBinding? = null
|
||||||
|
// This property is only valid between onCreateView and onDestroyView.
|
||||||
|
private val binding get() = _binding!!
|
||||||
|
|
||||||
private lateinit var preferenceManager: SharedPreferences
|
private lateinit var preferenceManager: SharedPreferences
|
||||||
private var schoolSelected = false
|
private var schoolSelected = false
|
||||||
|
|
||||||
@@ -23,7 +28,11 @@ class SchoolSelectionFragment : Fragment(), SlidePolicy, MaterialSpinner.OnItemS
|
|||||||
inflater: LayoutInflater,
|
inflater: LayoutInflater,
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? = inflater.inflate(R.layout.fragment_school_selection, container, false)
|
): View {
|
||||||
|
_binding = FragmentSchoolSelectionBinding.inflate(inflater, container, false)
|
||||||
|
|
||||||
|
return binding.root
|
||||||
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -34,8 +43,8 @@ class SchoolSelectionFragment : Fragment(), SlidePolicy, MaterialSpinner.OnItemS
|
|||||||
val adapter =
|
val adapter =
|
||||||
ArrayAdapter(requireContext(), android.R.layout.simple_spinner_dropdown_item, items)
|
ArrayAdapter(requireContext(), android.R.layout.simple_spinner_dropdown_item, items)
|
||||||
|
|
||||||
view.school_selection_spinner.adapter = adapter
|
binding.schoolSelectionSpinner.adapter = adapter
|
||||||
view.school_selection_spinner.onItemSelectedListener = this
|
binding.schoolSelectionSpinner.onItemSelectedListener = this
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getSchoolListArray(): ArrayList<String> {
|
private fun getSchoolListArray(): ArrayList<String> {
|
||||||
@@ -68,7 +77,7 @@ class SchoolSelectionFragment : Fragment(), SlidePolicy, MaterialSpinner.OnItemS
|
|||||||
get() = schoolSelected
|
get() = schoolSelected
|
||||||
|
|
||||||
override fun onUserIllegallyRequestedNextPage() {
|
override fun onUserIllegallyRequestedNextPage() {
|
||||||
view?.school_selection_spinner?.error =
|
binding.schoolSelectionSpinner.error =
|
||||||
getString(R.string.activity_intro_school_selection_error)
|
getString(R.string.activity_intro_school_selection_error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ plugins {
|
|||||||
kotlin("native.cocoapods")
|
kotlin("native.cocoapods")
|
||||||
kotlin("plugin.serialization")
|
kotlin("plugin.serialization")
|
||||||
id("com.android.library")
|
id("com.android.library")
|
||||||
id("kotlin-android-extensions")
|
|
||||||
id("com.squareup.sqldelight")
|
id("com.squareup.sqldelight")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user