mirror of
https://github.com/Aviortheking/Neo-Store.git
synced 2025-04-23 19:32:16 +00:00
Update: Multilevel Fragments with Screen- and BaseFragment
This commit is contained in:
parent
e95ef29e42
commit
232fdf0269
10
src/main/kotlin/com/looker/droidify/screen/BaseFragment.kt
Normal file
10
src/main/kotlin/com/looker/droidify/screen/BaseFragment.kt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package com.looker.droidify.screen
|
||||||
|
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
|
||||||
|
open class BaseFragment : Fragment() {
|
||||||
|
val screenActivity: ScreenActivity
|
||||||
|
get() = requireActivity() as ScreenActivity
|
||||||
|
|
||||||
|
open fun onBackPressed(): Boolean = false
|
||||||
|
}
|
@ -10,14 +10,12 @@ import android.text.Editable
|
|||||||
import android.text.Selection
|
import android.text.Selection
|
||||||
import android.text.TextWatcher
|
import android.text.TextWatcher
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.widget.Toolbar
|
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.looker.droidify.R
|
import com.looker.droidify.R
|
||||||
@ -85,29 +83,14 @@ class EditRepositoryFragment() : ScreenFragment() {
|
|||||||
|
|
||||||
private var takenAddresses = emptySet<String>()
|
private var takenAddresses = emptySet<String>()
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
return inflater.inflate(R.layout.fragment, container, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
syncConnection.bind(requireContext())
|
syncConnection.bind(requireContext())
|
||||||
|
|
||||||
val toolbar = view.findViewById<Toolbar>(R.id.toolbar)!!
|
|
||||||
screenActivity.onToolbarCreated(toolbar)
|
screenActivity.onToolbarCreated(toolbar)
|
||||||
if (repositoryId != null) {
|
toolbar.setTitle(if (repositoryId != null) R.string.edit_repository else R.string.add_repository)
|
||||||
toolbar.setTitle(R.string.edit_repository)
|
|
||||||
} else {
|
|
||||||
toolbar.setTitle(R.string.add_repository)
|
|
||||||
}
|
|
||||||
|
|
||||||
toolbar.menu.apply {
|
saveMenuItem = toolbar.menu.add(R.string.save)
|
||||||
saveMenuItem = add(R.string.save)
|
|
||||||
.setIcon(Utils.getToolbarIcon(toolbar.context, R.drawable.ic_save))
|
.setIcon(Utils.getToolbarIcon(toolbar.context, R.drawable.ic_save))
|
||||||
.setEnabled(false)
|
.setEnabled(false)
|
||||||
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS)
|
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS)
|
||||||
@ -115,7 +98,6 @@ class EditRepositoryFragment() : ScreenFragment() {
|
|||||||
onSaveRepositoryClick(true)
|
onSaveRepositoryClick(true)
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
val content = view.findViewById<FrameLayout>(R.id.fragment_content)!!
|
val content = view.findViewById<FrameLayout>(R.id.fragment_content)!!
|
||||||
errorColorFilter = PorterDuffColorFilter(
|
errorColorFilter = PorterDuffColorFilter(
|
||||||
|
@ -81,7 +81,6 @@ class ProductFragment() : ScreenFragment(), ProductAdapter.Callbacks {
|
|||||||
private var installed: Installed? = null
|
private var installed: Installed? = null
|
||||||
private var downloading = false
|
private var downloading = false
|
||||||
|
|
||||||
private var toolbar: Toolbar? = null
|
|
||||||
private var recyclerView: RecyclerView? = null
|
private var recyclerView: RecyclerView? = null
|
||||||
|
|
||||||
private var productDisposable: Disposable? = null
|
private var productDisposable: Disposable? = null
|
||||||
@ -94,21 +93,10 @@ class ProductFragment() : ScreenFragment(), ProductAdapter.Callbacks {
|
|||||||
downloadDisposable = null
|
downloadDisposable = null
|
||||||
})
|
})
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
return inflater.inflate(R.layout.fragment, container, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
val toolbar = view.findViewById<Toolbar>(R.id.toolbar)!!
|
|
||||||
screenActivity.onToolbarCreated(toolbar)
|
screenActivity.onToolbarCreated(toolbar)
|
||||||
this.toolbar = toolbar
|
|
||||||
|
|
||||||
toolbar.menu.apply {
|
toolbar.menu.apply {
|
||||||
for (action in Action.values()) {
|
for (action in Action.values()) {
|
||||||
add(0, action.id, 0, action.adapterAction.titleResId)
|
add(0, action.id, 0, action.adapterAction.titleResId)
|
||||||
@ -253,8 +241,6 @@ class ProductFragment() : ScreenFragment(), ProductAdapter.Callbacks {
|
|||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
super.onDestroyView()
|
super.onDestroyView()
|
||||||
|
|
||||||
toolbar = null
|
|
||||||
recyclerView = null
|
recyclerView = null
|
||||||
|
|
||||||
productDisposable?.dispose()
|
productDisposable?.dispose()
|
||||||
|
@ -19,7 +19,7 @@ import io.reactivex.rxjava3.core.Observable
|
|||||||
import io.reactivex.rxjava3.disposables.Disposable
|
import io.reactivex.rxjava3.disposables.Disposable
|
||||||
import io.reactivex.rxjava3.schedulers.Schedulers
|
import io.reactivex.rxjava3.schedulers.Schedulers
|
||||||
|
|
||||||
class ProductsFragment() : ScreenFragment(), CursorOwner.Callback {
|
class ProductsFragment() : BaseFragment(), CursorOwner.Callback {
|
||||||
companion object {
|
companion object {
|
||||||
private const val EXTRA_SOURCE = "source"
|
private const val EXTRA_SOURCE = "source"
|
||||||
|
|
||||||
|
@ -7,7 +7,6 @@ import android.view.MenuItem
|
|||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import androidx.appcompat.widget.Toolbar
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.looker.droidify.R
|
import com.looker.droidify.R
|
||||||
@ -26,7 +25,7 @@ class RepositoriesFragment : ScreenFragment(), CursorOwner.Callback {
|
|||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View {
|
): View {
|
||||||
return inflater.inflate(R.layout.fragment, container, false).apply {
|
val view = inflater.inflate(R.layout.fragment, container, false).apply {
|
||||||
val content = findViewById<FrameLayout>(R.id.fragment_content)!!
|
val content = findViewById<FrameLayout>(R.id.fragment_content)!!
|
||||||
content.addView(RecyclerView(content.context).apply {
|
content.addView(RecyclerView(content.context).apply {
|
||||||
id = android.R.id.list
|
id = android.R.id.list
|
||||||
@ -41,6 +40,8 @@ class RepositoriesFragment : ScreenFragment(), CursorOwner.Callback {
|
|||||||
recyclerView = this
|
recyclerView = this
|
||||||
}, FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)
|
}, FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)
|
||||||
}
|
}
|
||||||
|
this.toolbar = view.findViewById(R.id.toolbar)
|
||||||
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
@ -49,13 +50,12 @@ class RepositoriesFragment : ScreenFragment(), CursorOwner.Callback {
|
|||||||
syncConnection.bind(requireContext())
|
syncConnection.bind(requireContext())
|
||||||
screenActivity.cursorOwner.attach(this, CursorOwner.Request.Repositories)
|
screenActivity.cursorOwner.attach(this, CursorOwner.Request.Repositories)
|
||||||
|
|
||||||
val toolbar = view.findViewById<Toolbar>(R.id.toolbar)!!
|
toolbar.apply {
|
||||||
screenActivity.onToolbarCreated(toolbar)
|
screenActivity.onToolbarCreated(this)
|
||||||
toolbar.setTitle(R.string.repositories)
|
setTitle(R.string.repositories)
|
||||||
|
|
||||||
toolbar.menu.apply {
|
menu.add(R.string.add_repository)
|
||||||
add(R.string.add_repository)
|
.setIcon(Utils.getToolbarIcon(this.context, R.drawable.ic_add))
|
||||||
.setIcon(Utils.getToolbarIcon(toolbar.context, R.drawable.ic_add))
|
|
||||||
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS)
|
.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS)
|
||||||
.setOnMenuItemClickListener {
|
.setOnMenuItemClickListener {
|
||||||
view.post { screenActivity.navigateAddRepository() }
|
view.post { screenActivity.navigateAddRepository() }
|
||||||
|
@ -5,15 +5,13 @@ import android.text.SpannableStringBuilder
|
|||||||
import android.text.format.DateUtils
|
import android.text.format.DateUtils
|
||||||
import android.text.style.ForegroundColorSpan
|
import android.text.style.ForegroundColorSpan
|
||||||
import android.text.style.TypefaceSpan
|
import android.text.style.TypefaceSpan
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.ScrollView
|
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.appcompat.widget.Toolbar
|
import androidx.core.widget.NestedScrollView
|
||||||
import com.looker.droidify.R
|
import com.looker.droidify.R
|
||||||
import com.looker.droidify.database.Database
|
import com.looker.droidify.database.Database
|
||||||
import com.looker.droidify.service.Connection
|
import com.looker.droidify.service.Connection
|
||||||
@ -46,24 +44,15 @@ class RepositoryFragment() : ScreenFragment() {
|
|||||||
private val syncConnection = Connection(SyncService::class.java)
|
private val syncConnection = Connection(SyncService::class.java)
|
||||||
private var repositoryDisposable: Disposable? = null
|
private var repositoryDisposable: Disposable? = null
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
return inflater.inflate(R.layout.fragment, container, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
syncConnection.bind(requireContext())
|
syncConnection.bind(requireContext())
|
||||||
|
|
||||||
repositoryDisposable = Observable.just(Unit)
|
repositoryDisposable = Observable.just(Unit)
|
||||||
.concatWith(Database.observable(Database.Subject.Repository(repositoryId)))
|
.concatWith(Database.observable(Database.Subject.Repository(repositoryId)))
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe { updateRepositoryView() }
|
.subscribe { updateRepositoryView() }
|
||||||
|
|
||||||
val toolbar = view.findViewById<Toolbar>(R.id.toolbar)!!
|
|
||||||
screenActivity.onToolbarCreated(toolbar)
|
screenActivity.onToolbarCreated(toolbar)
|
||||||
toolbar.setTitle(R.string.repository)
|
toolbar.setTitle(R.string.repository)
|
||||||
|
|
||||||
|
@ -1,10 +1,22 @@
|
|||||||
package com.looker.droidify.screen
|
package com.looker.droidify.screen
|
||||||
|
|
||||||
import androidx.fragment.app.Fragment
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.appcompat.widget.Toolbar
|
||||||
|
import com.looker.droidify.R
|
||||||
|
|
||||||
open class ScreenFragment : Fragment() {
|
open class ScreenFragment : BaseFragment() {
|
||||||
val screenActivity: ScreenActivity
|
lateinit var toolbar: Toolbar
|
||||||
get() = requireActivity() as ScreenActivity
|
|
||||||
|
|
||||||
open fun onBackPressed(): Boolean = false
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater,
|
||||||
|
container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
val view = inflater.inflate(R.layout.fragment, container, false)
|
||||||
|
this.toolbar = view.findViewById(R.id.toolbar)
|
||||||
|
return view
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,14 +6,13 @@ import android.content.Intent
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.text.InputFilter
|
import android.text.InputFilter
|
||||||
import android.text.InputType
|
import android.text.InputType
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import android.widget.*
|
import android.widget.*
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.widget.Toolbar
|
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
|
import androidx.core.widget.NestedScrollView
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
@ -29,14 +28,6 @@ class SettingsFragment : ScreenFragment() {
|
|||||||
private val preferences = mutableMapOf<Preferences.Key<*>, Preference<*>>()
|
private val preferences = mutableMapOf<Preferences.Key<*>, Preference<*>>()
|
||||||
private var disposable: Disposable? = null
|
private var disposable: Disposable? = null
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
return inflater.inflate(R.layout.fragment, container, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
@ -13,7 +13,6 @@ import android.view.animation.AccelerateInterpolator
|
|||||||
import android.view.animation.DecelerateInterpolator
|
import android.view.animation.DecelerateInterpolator
|
||||||
import android.widget.*
|
import android.widget.*
|
||||||
import androidx.appcompat.widget.SearchView
|
import androidx.appcompat.widget.SearchView
|
||||||
import androidx.appcompat.widget.Toolbar
|
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
@ -103,20 +102,10 @@ class TabsFragment : ScreenFragment() {
|
|||||||
get() = if (host == null) emptySequence() else
|
get() = if (host == null) emptySequence() else
|
||||||
childFragmentManager.fragments.asSequence().mapNotNull { it as? ProductsFragment }
|
childFragmentManager.fragments.asSequence().mapNotNull { it as? ProductsFragment }
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View {
|
|
||||||
return inflater.inflate(R.layout.fragment, container, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
syncConnection.bind(requireContext())
|
syncConnection.bind(requireContext())
|
||||||
|
|
||||||
val toolbar = view.findViewById<Toolbar>(R.id.toolbar)!!
|
|
||||||
screenActivity.onToolbarCreated(toolbar)
|
screenActivity.onToolbarCreated(toolbar)
|
||||||
toolbar.setTitle(R.string.application_name)
|
toolbar.setTitle(R.string.application_name)
|
||||||
// Move focus from SearchView to Toolbar
|
// Move focus from SearchView to Toolbar
|
||||||
|
Loading…
x
Reference in New Issue
Block a user