Compare commits
11 Commits
v122092671
...
bf1b680b4a
Author | SHA1 | Date | |
---|---|---|---|
|
bf1b680b4a | ||
|
d81fb79b4f | ||
|
144067d5b6 | ||
|
8106faa45c | ||
|
d9ef301e0f | ||
|
90b52232ab | ||
|
0f000ea359 | ||
|
fb8f81a4c8 | ||
|
a76b3dd2a9 | ||
|
91aed5a777 | ||
|
8823cc6c6c |
@@ -30,7 +30,7 @@ fun gitVersion(): String {
|
|||||||
println("Tag found on current commit")
|
println("Tag found on current commit")
|
||||||
execWithOutput("git -C ../ describe --contains HEAD")
|
execWithOutput("git -C ../ describe --contains HEAD")
|
||||||
}
|
}
|
||||||
return process.replace("'", "").substring(1).replace("\\.", "").trim()
|
return process.replace("^0", "").replace("'", "").substring(1).replace("\\.", "").trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun versionCodeFromGit(): Int {
|
fun versionCodeFromGit(): Int {
|
||||||
@@ -167,8 +167,6 @@ dependencies {
|
|||||||
implementation("com.mikepenz:materialdrawer:8.4.5")
|
implementation("com.mikepenz:materialdrawer:8.4.5")
|
||||||
|
|
||||||
// Themes
|
// Themes
|
||||||
implementation("com.52inc:scoops:1.0.0")
|
|
||||||
implementation("com.jaredrummler:colorpicker:1.1.0")
|
|
||||||
implementation("com.github.rubensousa:floatingtoolbar:1.5.1")
|
implementation("com.github.rubensousa:floatingtoolbar:1.5.1")
|
||||||
|
|
||||||
// Pager
|
// Pager
|
||||||
|
@@ -13,7 +13,6 @@ import bou.amine.apps.readerforselfossv2.android.utils.isBaseUrlInvalid
|
|||||||
import bou.amine.apps.readerforselfossv2.model.NetworkUnavailableException
|
import bou.amine.apps.readerforselfossv2.model.NetworkUnavailableException
|
||||||
import bou.amine.apps.readerforselfossv2.repository.Repository
|
import bou.amine.apps.readerforselfossv2.repository.Repository
|
||||||
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
|
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
|
||||||
import com.ftinc.scoop.Scoop
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -42,10 +41,6 @@ class AddSourceActivity : AppCompatActivity(), DIAware {
|
|||||||
|
|
||||||
setContentView(view)
|
setContentView(view)
|
||||||
|
|
||||||
val scoop = Scoop.getInstance()
|
|
||||||
scoop.bind(this, Toppings.PRIMARY.value, binding.toolbar)
|
|
||||||
scoop.bindStatusBar(this, Toppings.PRIMARY_DARK.value)
|
|
||||||
|
|
||||||
val drawable = binding.nameInput.background
|
val drawable = binding.nameInput.background
|
||||||
drawable.setTint(appColors.colorAccent)
|
drawable.setTint(appColors.colorAccent)
|
||||||
|
|
||||||
@@ -84,7 +79,7 @@ class AddSourceActivity : AppCompatActivity(), DIAware {
|
|||||||
super.onResume()
|
super.onResume()
|
||||||
|
|
||||||
val baseUrl = appSettingsService.getBaseUrl()
|
val baseUrl = appSettingsService.getBaseUrl()
|
||||||
if (baseUrl.isEmpty() || baseUrl.isBaseUrlInvalid(this@AddSourceActivity)) {
|
if (baseUrl.isEmpty() || baseUrl.isBaseUrlInvalid()) {
|
||||||
mustLoginToAddSource()
|
mustLoginToAddSource()
|
||||||
} else {
|
} else {
|
||||||
handleSpoutsSpinner(binding.spoutsSpinner, binding.progress, binding.formContainer)
|
handleSpoutsSpinner(binding.spoutsSpinner, binding.progress, binding.formContainer)
|
||||||
|
@@ -15,6 +15,9 @@ import androidx.activity.result.contract.ActivityResultContracts
|
|||||||
import androidx.appcompat.app.ActionBarDrawerToggle
|
import androidx.appcompat.app.ActionBarDrawerToggle
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.appcompat.app.AppCompatDelegate
|
||||||
|
import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_NO
|
||||||
|
import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_YES
|
||||||
import androidx.appcompat.widget.SearchView
|
import androidx.appcompat.widget.SearchView
|
||||||
import androidx.core.view.doOnNextLayout
|
import androidx.core.view.doOnNextLayout
|
||||||
import androidx.drawerlayout.widget.DrawerLayout
|
import androidx.drawerlayout.widget.DrawerLayout
|
||||||
@@ -43,7 +46,6 @@ import com.ashokvarma.bottomnavigation.BottomNavigationItem
|
|||||||
import com.ashokvarma.bottomnavigation.TextBadgeItem
|
import com.ashokvarma.bottomnavigation.TextBadgeItem
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.request.RequestOptions
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import com.ftinc.scoop.Scoop
|
|
||||||
import com.mikepenz.aboutlibraries.LibsBuilder
|
import com.mikepenz.aboutlibraries.LibsBuilder
|
||||||
import com.mikepenz.materialdrawer.holder.BadgeStyle
|
import com.mikepenz.materialdrawer.holder.BadgeStyle
|
||||||
import com.mikepenz.materialdrawer.holder.ColorHolder
|
import com.mikepenz.materialdrawer.holder.ColorHolder
|
||||||
@@ -95,6 +97,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
|||||||
|
|
||||||
private val settingsLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
private val settingsLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
|
||||||
appSettingsService.refreshUserSettings()
|
appSettingsService.refreshUserSettings()
|
||||||
|
AppCompatDelegate.setDefaultNightMode(if (appSettingsService.isDarkThemeEnabled()) MODE_NIGHT_YES else MODE_NIGHT_NO)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val di by closestDI()
|
override val di by closestDI()
|
||||||
@@ -126,8 +129,6 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
|||||||
|
|
||||||
setContentView(view)
|
setContentView(view)
|
||||||
|
|
||||||
handleThemeBinding()
|
|
||||||
|
|
||||||
setSupportActionBar(binding.toolBar)
|
setSupportActionBar(binding.toolBar)
|
||||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||||
supportActionBar?.setHomeButtonEnabled(true)
|
supportActionBar?.setHomeButtonEnabled(true)
|
||||||
@@ -142,11 +143,11 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
|||||||
|
|
||||||
handleSwipeRefreshLayout()
|
handleSwipeRefreshLayout()
|
||||||
|
|
||||||
getElementsAccordingToTab()
|
|
||||||
|
|
||||||
|
if (appSettingsService.isItemCachingEnabled()) {
|
||||||
CoroutineScope(Dispatchers.Main).launch {
|
CoroutineScope(Dispatchers.Main).launch {
|
||||||
repository.tryToCacheItemsAndGetNewOnes()
|
repository.tryToCacheItemsAndGetNewOnes()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -233,27 +234,24 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
|||||||
tabNewBadge = TextBadgeItem()
|
tabNewBadge = TextBadgeItem()
|
||||||
.setText("")
|
.setText("")
|
||||||
.setHideOnSelect(false).hide(false)
|
.setHideOnSelect(false).hide(false)
|
||||||
.setBackgroundColor(appColors.colorPrimary)
|
|
||||||
tabArchiveBadge = TextBadgeItem()
|
tabArchiveBadge = TextBadgeItem()
|
||||||
.setText("")
|
.setText("")
|
||||||
.setHideOnSelect(false).hide(false)
|
.setHideOnSelect(false).hide(false)
|
||||||
.setBackgroundColor(appColors.colorPrimary)
|
|
||||||
tabStarredBadge = TextBadgeItem()
|
tabStarredBadge = TextBadgeItem()
|
||||||
.setText("")
|
.setText("")
|
||||||
.setHideOnSelect(false).hide(false)
|
.setHideOnSelect(false).hide(false)
|
||||||
.setBackgroundColor(appColors.colorPrimary)
|
|
||||||
|
|
||||||
val tabNew =
|
val tabNew =
|
||||||
BottomNavigationItem(
|
BottomNavigationItem(
|
||||||
R.drawable.ic_tab_fiber_new_black_24dp,
|
R.drawable.ic_tab_fiber_new_black_24dp,
|
||||||
getString(R.string.tab_new)
|
getString(R.string.tab_new)
|
||||||
).setActiveColor(appColors.colorAccent)
|
)
|
||||||
.setBadgeItem(tabNewBadge)
|
.setBadgeItem(tabNewBadge)
|
||||||
val tabArchive =
|
val tabArchive =
|
||||||
BottomNavigationItem(
|
BottomNavigationItem(
|
||||||
R.drawable.ic_tab_archive_black_24dp,
|
R.drawable.ic_tab_archive_black_24dp,
|
||||||
getString(R.string.tab_read)
|
getString(R.string.tab_read)
|
||||||
).setActiveColor(appColors.colorAccentDark)
|
)
|
||||||
.setBadgeItem(tabArchiveBadge)
|
.setBadgeItem(tabArchiveBadge)
|
||||||
val tabStarred =
|
val tabStarred =
|
||||||
BottomNavigationItem(
|
BottomNavigationItem(
|
||||||
@@ -269,7 +267,6 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
|||||||
.setFirstSelectedPosition(0)
|
.setFirstSelectedPosition(0)
|
||||||
.initialise()
|
.initialise()
|
||||||
binding.bottomBar.setMode(BottomNavigationBar.MODE_SHIFTING)
|
binding.bottomBar.setMode(BottomNavigationBar.MODE_SHIFTING)
|
||||||
binding.bottomBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC)
|
|
||||||
|
|
||||||
if (fromTabShortcut) {
|
if (fromTabShortcut) {
|
||||||
binding.bottomBar.selectTab(elementsShown.position - 1)
|
binding.bottomBar.selectTab(elementsShown.position - 1)
|
||||||
@@ -283,8 +280,6 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
|||||||
|
|
||||||
handleDrawerItems()
|
handleDrawerItems()
|
||||||
|
|
||||||
handleThemeUpdate()
|
|
||||||
|
|
||||||
reloadLayoutManager()
|
reloadLayoutManager()
|
||||||
|
|
||||||
if (appSettingsService.isInfiniteLoadingEnabled()) {
|
if (appSettingsService.isInfiniteLoadingEnabled()) {
|
||||||
@@ -309,20 +304,6 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener, DIAwar
|
|||||||
customTabActivityHelper.unbindCustomTabsService(this)
|
customTabActivityHelper.unbindCustomTabsService(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun handleThemeBinding() {
|
|
||||||
val scoop = Scoop.getInstance()
|
|
||||||
scoop.bind(this, Toppings.PRIMARY.value, binding.toolBar)
|
|
||||||
scoop.bindStatusBar(this, Toppings.PRIMARY_DARK.value)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun handleThemeUpdate() {
|
|
||||||
|
|
||||||
val scoop = Scoop.getInstance()
|
|
||||||
scoop.update(Toppings.PRIMARY.value, appColors.colorPrimary)
|
|
||||||
|
|
||||||
scoop.update(Toppings.PRIMARY_DARK.value, appColors.colorPrimaryDark)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun initDrawer() {
|
private fun initDrawer() {
|
||||||
DrawerImageLoader.init(object : AbstractDrawerImageLoader() {
|
DrawerImageLoader.init(object : AbstractDrawerImageLoader() {
|
||||||
override fun set(imageView: ImageView, uri: Uri, placeholder: Drawable, tag: String?) {
|
override fun set(imageView: ImageView, uri: Uri, placeholder: Drawable, tag: String?) {
|
||||||
|
@@ -12,6 +12,7 @@ import android.view.inputmethod.EditorInfo
|
|||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.appcompat.app.AppCompatDelegate
|
||||||
import bou.amine.apps.readerforselfossv2.android.databinding.ActivityLoginBinding
|
import bou.amine.apps.readerforselfossv2.android.databinding.ActivityLoginBinding
|
||||||
import bou.amine.apps.readerforselfossv2.android.themes.AppColors
|
import bou.amine.apps.readerforselfossv2.android.themes.AppColors
|
||||||
import bou.amine.apps.readerforselfossv2.android.utils.isBaseUrlInvalid
|
import bou.amine.apps.readerforselfossv2.android.utils.isBaseUrlInvalid
|
||||||
@@ -41,6 +42,8 @@ class LoginActivity : AppCompatActivity(), DIAware {
|
|||||||
appColors = AppColors(this@LoginActivity)
|
appColors = AppColors(this@LoginActivity)
|
||||||
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
AppCompatDelegate.setDefaultNightMode(if (appSettingsService.isDarkThemeEnabled()) AppCompatDelegate.MODE_NIGHT_YES else AppCompatDelegate.MODE_NIGHT_NO)
|
||||||
|
|
||||||
binding = ActivityLoginBinding.inflate(layoutInflater)
|
binding = ActivityLoginBinding.inflate(layoutInflater)
|
||||||
val view = binding.root
|
val view = binding.root
|
||||||
|
|
||||||
@@ -122,7 +125,7 @@ class LoginActivity : AppCompatActivity(), DIAware {
|
|||||||
var cancel = false
|
var cancel = false
|
||||||
var focusView: View? = null
|
var focusView: View? = null
|
||||||
|
|
||||||
if (url.isBaseUrlInvalid(this@LoginActivity)) {
|
if (url.isBaseUrlInvalid()) {
|
||||||
binding.urlView.error = getString(R.string.login_url_problem)
|
binding.urlView.error = getString(R.string.login_url_problem)
|
||||||
focusView = binding.urlView
|
focusView = binding.urlView
|
||||||
cancel = true
|
cancel = true
|
||||||
|
@@ -21,7 +21,6 @@ import bou.amine.apps.readerforselfossv2.repository.Repository
|
|||||||
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
|
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.request.RequestOptions
|
import com.bumptech.glide.request.RequestOptions
|
||||||
import com.ftinc.scoop.Scoop
|
|
||||||
import com.github.ln_12.library.ConnectivityStatus
|
import com.github.ln_12.library.ConnectivityStatus
|
||||||
import com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader
|
import com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader
|
||||||
import com.mikepenz.materialdrawer.util.DrawerImageLoader
|
import com.mikepenz.materialdrawer.util.DrawerImageLoader
|
||||||
@@ -54,8 +53,6 @@ class MyApp : MultiDexApplication(), DIAware {
|
|||||||
|
|
||||||
initDrawerImageLoader()
|
initDrawerImageLoader()
|
||||||
|
|
||||||
initTheme()
|
|
||||||
|
|
||||||
tryToHandleBug()
|
tryToHandleBug()
|
||||||
|
|
||||||
handleNotificationChannels()
|
handleNotificationChannels()
|
||||||
@@ -117,14 +114,6 @@ class MyApp : MultiDexApplication(), DIAware {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initTheme() {
|
|
||||||
Scoop.waffleCone()
|
|
||||||
.addFlavor(getString(R.string.default_theme), R.style.NoBar, true)
|
|
||||||
.addFlavor(getString(R.string.default_dark_theme), R.style.NoBarDark, false)
|
|
||||||
.setSharedPreferences(PreferenceManager.getDefaultSharedPreferences(this))
|
|
||||||
.initialize()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun tryToHandleBug() {
|
private fun tryToHandleBug() {
|
||||||
val oldHandler = Thread.getDefaultUncaughtExceptionHandler()
|
val oldHandler = Thread.getDefaultUncaughtExceptionHandler()
|
||||||
|
|
||||||
|
@@ -17,7 +17,6 @@ import bou.amine.apps.readerforselfossv2.android.themes.Toppings
|
|||||||
import bou.amine.apps.readerforselfossv2.model.SelfossModel
|
import bou.amine.apps.readerforselfossv2.model.SelfossModel
|
||||||
import bou.amine.apps.readerforselfossv2.repository.Repository
|
import bou.amine.apps.readerforselfossv2.repository.Repository
|
||||||
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
|
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
|
||||||
import com.ftinc.scoop.Scoop
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -62,10 +61,6 @@ class ReaderActivity : AppCompatActivity(), DIAware {
|
|||||||
|
|
||||||
setContentView(view)
|
setContentView(view)
|
||||||
|
|
||||||
val scoop = Scoop.getInstance()
|
|
||||||
scoop.bind(this, Toppings.PRIMARY.value, binding.toolBar)
|
|
||||||
scoop.bindStatusBar(this, Toppings.PRIMARY_DARK.value)
|
|
||||||
|
|
||||||
setSupportActionBar(binding.toolBar)
|
setSupportActionBar(binding.toolBar)
|
||||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||||
supportActionBar?.setDisplayShowHomeEnabled(true)
|
supportActionBar?.setDisplayShowHomeEnabled(true)
|
||||||
|
@@ -12,7 +12,6 @@ import bou.amine.apps.readerforselfossv2.android.themes.AppColors
|
|||||||
import bou.amine.apps.readerforselfossv2.android.themes.Toppings
|
import bou.amine.apps.readerforselfossv2.android.themes.Toppings
|
||||||
import bou.amine.apps.readerforselfossv2.model.SelfossModel
|
import bou.amine.apps.readerforselfossv2.model.SelfossModel
|
||||||
import bou.amine.apps.readerforselfossv2.repository.Repository
|
import bou.amine.apps.readerforselfossv2.repository.Repository
|
||||||
import com.ftinc.scoop.Scoop
|
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
@@ -33,10 +32,6 @@ class SourcesActivity : AppCompatActivity(), DIAware {
|
|||||||
binding = ActivitySourcesBinding.inflate(layoutInflater)
|
binding = ActivitySourcesBinding.inflate(layoutInflater)
|
||||||
val view = binding.root
|
val view = binding.root
|
||||||
|
|
||||||
val scoop = Scoop.getInstance()
|
|
||||||
scoop.bind(this, Toppings.PRIMARY.value, binding.toolbar)
|
|
||||||
scoop.bindStatusBar(this, Toppings.PRIMARY_DARK.value)
|
|
||||||
|
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
|
|
||||||
setContentView(view)
|
setContentView(view)
|
||||||
|
@@ -30,7 +30,7 @@ abstract class ItemsAdapter<VH : RecyclerView.ViewHolder?> : RecyclerView.Adapte
|
|||||||
updateItems(this.items)
|
updateItems(this.items)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun unmarkSnackbar(i: SelfossModel.Item, position: Int) {
|
private fun unmarkSnackbar(position: Int) {
|
||||||
val s = Snackbar
|
val s = Snackbar
|
||||||
.make(
|
.make(
|
||||||
app.findViewById(R.id.coordLayout),
|
app.findViewById(R.id.coordLayout),
|
||||||
@@ -87,7 +87,7 @@ abstract class ItemsAdapter<VH : RecyclerView.ViewHolder?> : RecyclerView.Adapte
|
|||||||
notifyItemChanged(position)
|
notifyItemChanged(position)
|
||||||
}
|
}
|
||||||
if (showSnackbar) {
|
if (showSnackbar) {
|
||||||
unmarkSnackbar(i, position)
|
unmarkSnackbar(position)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -22,7 +22,6 @@ import bou.amine.apps.readerforselfossv2.android.databinding.ActivitySettingsBin
|
|||||||
import bou.amine.apps.readerforselfossv2.android.themes.AppColors
|
import bou.amine.apps.readerforselfossv2.android.themes.AppColors
|
||||||
import bou.amine.apps.readerforselfossv2.android.themes.Toppings
|
import bou.amine.apps.readerforselfossv2.android.themes.Toppings
|
||||||
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
|
import bou.amine.apps.readerforselfossv2.service.AppSettingsService
|
||||||
import com.ftinc.scoop.Scoop
|
|
||||||
|
|
||||||
private const val TITLE_TAG = "settingsActivityTitle"
|
private const val TITLE_TAG = "settingsActivityTitle"
|
||||||
|
|
||||||
@@ -31,15 +30,8 @@ class SettingsActivity : AppCompatActivity(),
|
|||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
if (PreferenceManager.getDefaultSharedPreferences(this).getBoolean("dark_theme", false)) {
|
|
||||||
setTheme(R.style.NoBarDark)
|
|
||||||
}
|
|
||||||
val binding = ActivitySettingsBinding.inflate(layoutInflater)
|
val binding = ActivitySettingsBinding.inflate(layoutInflater)
|
||||||
|
|
||||||
val scoop = Scoop.getInstance()
|
|
||||||
scoop.bind(this, Toppings.PRIMARY.value, binding.toolbar)
|
|
||||||
scoop.bindStatusBar(this, Toppings.PRIMARY_DARK.value)
|
|
||||||
|
|
||||||
setContentView(binding.root)
|
setContentView(binding.root)
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
supportFragmentManager
|
supportFragmentManager
|
||||||
@@ -171,20 +163,6 @@ class SettingsActivity : AppCompatActivity(),
|
|||||||
setPreferencesFromResource(R.xml.pref_theme, rootKey)
|
setPreferencesFromResource(R.xml.pref_theme, rootKey)
|
||||||
setHasOptionsMenu(true)
|
setHasOptionsMenu(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
|
||||||
super.onCreateOptionsMenu(menu, inflater)
|
|
||||||
inflater.inflate(R.menu.settings_theme, menu)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
||||||
val id = item.itemId
|
|
||||||
if (id == R.id.clear) {
|
|
||||||
AppColors.resetColors()
|
|
||||||
requireActivity().recreate()
|
|
||||||
}
|
|
||||||
return super.onOptionsItemSelected(item)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class LinksPreferenceFragment : PreferenceFragmentCompat() {
|
class LinksPreferenceFragment : PreferenceFragmentCompat() {
|
||||||
|
@@ -7,66 +7,20 @@ import com.russhwolf.settings.Settings
|
|||||||
|
|
||||||
class AppColors(a: Activity) {
|
class AppColors(a: Activity) {
|
||||||
|
|
||||||
@ColorInt val colorPrimary: Int
|
@ColorInt val colorPrimary: Int = a.resources.getColor(R.color.colorPrimary)
|
||||||
@ColorInt val colorPrimaryDark: Int
|
@ColorInt val colorPrimaryDark: Int = a.resources.getColor(R.color.colorPrimaryDark)
|
||||||
@ColorInt val colorAccent: Int
|
@ColorInt val colorAccent: Int = a.resources.getColor(R.color.colorAccent)
|
||||||
@ColorInt val colorAccentDark: Int
|
@ColorInt val colorAccentDark: Int = a.resources.getColor(R.color.colorAccentDark)
|
||||||
@ColorInt val colorBackground: Int
|
|
||||||
@ColorInt val textColor: Int
|
|
||||||
val isDarkTheme: Boolean
|
val isDarkTheme: Boolean
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val settings = Settings()
|
val settings = Settings()
|
||||||
|
|
||||||
colorPrimary =
|
|
||||||
settings.getInt(
|
|
||||||
"color_primary",
|
|
||||||
a.resources.getColor(R.color.colorPrimary)
|
|
||||||
)
|
|
||||||
colorPrimaryDark =
|
|
||||||
settings.getInt(
|
|
||||||
"color_primary_dark",
|
|
||||||
a.resources.getColor(R.color.colorPrimaryDark)
|
|
||||||
)
|
|
||||||
colorAccent =
|
|
||||||
settings.getInt(
|
|
||||||
"color_accent",
|
|
||||||
a.resources.getColor(R.color.colorAccent)
|
|
||||||
)
|
|
||||||
colorAccentDark =
|
|
||||||
settings.getInt(
|
|
||||||
"color_accent_dark",
|
|
||||||
a.resources.getColor(R.color.colorAccentDark)
|
|
||||||
)
|
|
||||||
isDarkTheme =
|
isDarkTheme =
|
||||||
settings.getBoolean(
|
settings.getBoolean(
|
||||||
"dark_theme",
|
"dark_theme",
|
||||||
false
|
false
|
||||||
)
|
)
|
||||||
|
|
||||||
colorBackground = if (isDarkTheme) {
|
|
||||||
a.setTheme(R.style.NoBarDark)
|
|
||||||
a.resources.getColor(R.color.darkBackground)
|
|
||||||
} else {
|
|
||||||
a.setTheme(R.style.NoBar)
|
|
||||||
a.resources.getColor(R.color.grey_50)
|
|
||||||
}
|
|
||||||
|
|
||||||
textColor = if (isDarkTheme) {
|
|
||||||
a.resources.getColor(R.color.white)
|
|
||||||
} else {
|
|
||||||
a.resources.getColor(R.color.grey_900)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
|
||||||
fun resetColors() {
|
|
||||||
val settings = Settings()
|
|
||||||
settings.remove("color_primary")
|
|
||||||
settings.remove("color_primary_dark")
|
|
||||||
settings.remove("color_accent")
|
|
||||||
settings.remove("color_accent_dark")
|
|
||||||
settings.remove("dark_theme")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -163,7 +163,7 @@ private fun openInBrowser(linkDecoded: String, app: Activity) {
|
|||||||
fun String.isUrlValid(): Boolean =
|
fun String.isUrlValid(): Boolean =
|
||||||
this.toHttpUrlOrNull() != null && Patterns.WEB_URL.matcher(this).matches()
|
this.toHttpUrlOrNull() != null && Patterns.WEB_URL.matcher(this).matches()
|
||||||
|
|
||||||
fun String.isBaseUrlInvalid(ctx: Context): Boolean {
|
fun String.isBaseUrlInvalid(): Boolean {
|
||||||
val baseUrl = this.toHttpUrlOrNull()
|
val baseUrl = this.toHttpUrlOrNull()
|
||||||
var existsAndEndsWithSlash = false
|
var existsAndEndsWithSlash = false
|
||||||
if (baseUrl != null) {
|
if (baseUrl != null) {
|
||||||
|
@@ -1,8 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<item
|
<item>
|
||||||
android:drawable="@color/ic_launcher_background"/>
|
<shape android:shape="rectangle" >
|
||||||
|
<solid android:color="?attr/colorSurface" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
|
||||||
<item>
|
<item>
|
||||||
<bitmap
|
<bitmap
|
||||||
|
@@ -18,8 +18,8 @@
|
|||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:theme="@style/ToolBarStyle"
|
|
||||||
app:popupTheme="?attr/toolbarPopupTheme" />
|
/>
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
@@ -107,8 +107,7 @@
|
|||||||
app:layout_constraintTop_toBottomOf="@+id/tags"
|
app:layout_constraintTop_toBottomOf="@+id/tags"
|
||||||
app:layout_constraintRight_toRightOf="parent"
|
app:layout_constraintRight_toRightOf="parent"
|
||||||
app:layout_constraintLeft_toLeftOf="parent"
|
app:layout_constraintLeft_toLeftOf="parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"/>
|
||||||
android:theme="@style/App.Spinner"/>
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:text="@string/add_source_save"
|
android:text="@string/add_source_save"
|
||||||
|
@@ -32,8 +32,8 @@
|
|||||||
android:id="@+id/toolBar"
|
android:id="@+id/toolBar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:theme="@style/ToolBarStyle"
|
|
||||||
app:popupTheme="?attr/toolbarPopupTheme" />
|
/>
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
@@ -78,10 +78,12 @@
|
|||||||
|
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
<com.ashokvarma.bottomnavigation.BottomNavigationBar
|
<com.ashokvarma.bottomnavigation.BottomNavigationBar
|
||||||
android:layout_gravity="bottom"
|
|
||||||
android:id="@+id/bottomBar"
|
android:id="@+id/bottomBar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="60dp"/>
|
android:layout_height="60dp"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
app:bnbActiveColor="@color/colorAccent"
|
||||||
|
app:bnbBackgroundColor="?attr/bottomBarBackground" />
|
||||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||||
|
|
||||||
<com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView
|
<com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView
|
||||||
|
@@ -16,8 +16,8 @@
|
|||||||
android:id="@+id/toolBar"
|
android:id="@+id/toolBar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:popupTheme="?attr/toolbarPopupTheme"
|
|
||||||
app:theme="@style/ToolBarStyle" />
|
/>
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
|
@@ -14,8 +14,8 @@
|
|||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:theme="@style/ToolBarStyle"
|
|
||||||
app:popupTheme="?attr/toolbarPopupTheme" />
|
/>
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
@@ -17,8 +17,8 @@
|
|||||||
android:id="@+id/toolBar"
|
android:id="@+id/toolBar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:popupTheme="?attr/toolbarPopupTheme"
|
|
||||||
app:theme="@style/ToolBarStyle" />
|
/>
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
|
@@ -12,7 +12,7 @@
|
|||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
android:theme="@style/ToolBarStyle" />
|
/>
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
<FrameLayout
|
<FrameLayout
|
||||||
|
@@ -14,8 +14,8 @@
|
|||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:theme="@style/ToolBarStyle"
|
|
||||||
app:popupTheme="?attr/toolbarPopupTheme" />
|
/>
|
||||||
|
|
||||||
</com.google.android.material.appbar.AppBarLayout>
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
|
@@ -1,10 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
|
|
||||||
<item
|
|
||||||
android:id="@+id/clear"
|
|
||||||
android:icon="@drawable/ic_history_white_24dp"
|
|
||||||
android:title="@string/drawer_action_clear"
|
|
||||||
app:showAsAction="ifRoom" />
|
|
||||||
</menu>
|
|
13
androidApp/src/main/res/values-night/styles.xml
Normal file
13
androidApp/src/main/res/values-night/styles.xml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<resources>
|
||||||
|
<style name="NoBar" parent="Theme.MaterialComponents.DayNight.NoActionBar">
|
||||||
|
<item name="colorPrimary">@color/colorPrimary</item>
|
||||||
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||||
|
<item name="colorAccent">@color/colorAccent</item>
|
||||||
|
<item name="colorAccentDark">@color/colorAccentDark</item>
|
||||||
|
<item name="cardBackgroundColor">@color/white</item>
|
||||||
|
<item name="materialDrawerHeaderStyle">@style/Widget.MaterialDrawerHeaderStyle</item>
|
||||||
|
<item name="preferenceTheme">@style/PreferenceStyle</item>
|
||||||
|
<item name="android:statusBarColor">#282828</item>
|
||||||
|
<item name="bottomBarBackground">#282828</item>
|
||||||
|
</style>
|
||||||
|
</resources>
|
@@ -2,5 +2,6 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<declare-styleable name="Theme">
|
<declare-styleable name="Theme">
|
||||||
<attr name="colorAccentDark" format="reference|color" />
|
<attr name="colorAccentDark" format="reference|color" />
|
||||||
|
<attr name="bottomBarBackground" format="reference|color" />
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
</resources>
|
</resources>
|
@@ -11,6 +11,4 @@
|
|||||||
<color name="refresh_progress_1">@color/colorAccentDark</color>
|
<color name="refresh_progress_1">@color/colorAccentDark</color>
|
||||||
<color name="refresh_progress_2">@color/colorAccent</color>
|
<color name="refresh_progress_2">@color/colorAccent</color>
|
||||||
<color name="refresh_progress_3">@color/pink</color>
|
<color name="refresh_progress_3">@color/pink</color>
|
||||||
|
|
||||||
<color name="darkBackground">#303030</color>
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -4,70 +4,20 @@
|
|||||||
<item name="android:windowBackground">@drawable/background_splash</item>
|
<item name="android:windowBackground">@drawable/background_splash</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NoBar" parent="Theme.MaterialComponents.Light.NoActionBar">
|
<style name="NoBar" parent="Theme.MaterialComponents.DayNight.NoActionBar">
|
||||||
<item name="colorPrimary">@color/colorPrimary</item>
|
<item name="colorPrimary">@color/colorPrimary</item>
|
||||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||||
<item name="colorAccent">@color/colorAccent</item>
|
<item name="colorAccent">@color/colorAccent</item>
|
||||||
<item name="colorAccentDark">@color/colorAccentDark</item>
|
<item name="colorAccentDark">@color/colorAccentDark</item>
|
||||||
<item name="cardBackgroundColor">@color/white</item>
|
<item name="cardBackgroundColor">@color/white</item>
|
||||||
<item name="android:colorBackground">@color/grey_50</item>
|
|
||||||
<item name="colorSurface">@color/grey_50</item>
|
|
||||||
<item name="android:textColorPrimary">@color/grey_900</item>
|
|
||||||
<item name="android:textColorSecondary">@color/grey_400</item>
|
|
||||||
<item name="materialDrawerStyle">@style/App.materialDrawerStyle</item>
|
|
||||||
<item name="materialDrawerHeaderStyle">@style/Widget.MaterialDrawerHeaderStyle</item>
|
<item name="materialDrawerHeaderStyle">@style/Widget.MaterialDrawerHeaderStyle</item>
|
||||||
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
|
|
||||||
<item name="preferenceTheme">@style/PreferenceStyle</item>
|
<item name="preferenceTheme">@style/PreferenceStyle</item>
|
||||||
|
<item name="android:statusBarColor">?attr/colorPrimary</item>
|
||||||
|
<item name="bottomBarBackground">@color/white</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NoBarDark" parent="Theme.MaterialComponents.DayNight.NoActionBar">
|
|
||||||
<item name="colorPrimary">@color/colorPrimary</item>
|
|
||||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
|
||||||
<item name="colorAccent">@color/colorAccent</item>
|
|
||||||
<item name="colorAccentDark">@color/colorAccentDark</item>
|
|
||||||
<item name="cardBackgroundColor">@color/grey_800</item>
|
|
||||||
<item name="android:colorBackground">@color/darkBackground</item>
|
|
||||||
<item name="colorSurface">@color/darkBackground</item>
|
|
||||||
<item name="alertDialogTheme">@style/AlertDialogDark</item>
|
|
||||||
<item name="bnbBackgroundColor">@color/grey_900</item>
|
|
||||||
<item name="android:textColorPrimary">@color/white</item>
|
|
||||||
<item name="android:textColorSecondary">@color/grey_600</item>
|
|
||||||
<item name="materialDrawerStyle">@style/App.materialDrawerStyle</item>
|
|
||||||
<item name="materialDrawerHeaderStyle">@style/Widget.MaterialDrawerHeaderStyle</item>
|
|
||||||
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item>
|
|
||||||
<item name="preferenceTheme">@style/PreferenceStyle</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- ToolBar -->
|
|
||||||
<style name="ToolBarStyle" parent="Theme.AppCompat">
|
|
||||||
<item name="android:textColorPrimary">@color/white</item>
|
|
||||||
<item name="android:textColorSecondary">@color/white</item>
|
|
||||||
<item name="actionMenuTextColor">@color/white</item>
|
|
||||||
<!--<item name="actionOverflowButtonStyle">@style/ActionButtonOverflowStyle</item>
|
|
||||||
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>-->
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- Material Drawer Theme -->
|
|
||||||
<style name="App.materialDrawerStyle" parent="@style/Widget.MaterialDrawerStyle">
|
|
||||||
<item name="materialDrawerPrimaryIcon">?android:textColorPrimary</item>
|
|
||||||
<item name="materialDrawerSecondaryIcon">?android:textColorPrimary</item>
|
|
||||||
<item name="materialDrawerSecondaryText">?android:textColorPrimary</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- Preference Theme -->
|
<!-- Preference Theme -->
|
||||||
<style name="PreferenceStyle" parent="@style/PreferenceThemeOverlay">
|
<style name="PreferenceStyle" parent="@style/PreferenceThemeOverlay">
|
||||||
<item name="android:tint">?android:textColorPrimary</item>
|
<item name="android:tint">?attr/colorOnSurface</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<!-- Spinner Theme -->
|
|
||||||
<style name="App.Spinner" parent="Widget.AppCompat.Light.DropDownItem.Spinner">
|
|
||||||
<item name="android:textColor">?android:textColorPrimary</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<!-- Alert dialog Theme -->
|
|
||||||
|
|
||||||
<style name="AlertDialogDark" parent="Theme.MaterialComponents.Dialog">
|
|
||||||
<item name="android:background">@color/darkBackground</item>
|
|
||||||
</style>
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:defaultValue="200"
|
android:defaultValue="20"
|
||||||
android:inputType="number"
|
android:inputType="number"
|
||||||
android:key="prefer_api_items_number"
|
android:key="prefer_api_items_number"
|
||||||
android:selectAllOnFocus="true"
|
android:selectAllOnFocus="true"
|
||||||
|
@@ -8,28 +8,4 @@
|
|||||||
android:key="dark_theme"
|
android:key="dark_theme"
|
||||||
app:iconSpaceReserved="false"
|
app:iconSpaceReserved="false"
|
||||||
android:title="Dark theme" />
|
android:title="Dark theme" />
|
||||||
|
|
||||||
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
|
|
||||||
android:defaultValue="@color/colorPrimary"
|
|
||||||
android:key="color_primary"
|
|
||||||
app:iconSpaceReserved="false"
|
|
||||||
android:title="Primary color"/>
|
|
||||||
|
|
||||||
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
|
|
||||||
android:defaultValue="@color/colorPrimaryDark"
|
|
||||||
android:key="color_primary_dark"
|
|
||||||
app:iconSpaceReserved="false"
|
|
||||||
android:title="Primary dark color"/>
|
|
||||||
|
|
||||||
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
|
|
||||||
android:defaultValue="@color/colorAccent"
|
|
||||||
android:key="color_accent"
|
|
||||||
app:iconSpaceReserved="false"
|
|
||||||
android:title="Accent color"/>
|
|
||||||
|
|
||||||
<com.jaredrummler.android.colorpicker.ColorPreferenceCompat
|
|
||||||
android:defaultValue="@color/colorAccentDark"
|
|
||||||
android:key="color_accent_dark"
|
|
||||||
app:iconSpaceReserved="false"
|
|
||||||
android:title="Accent dark color"/>
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
@@ -28,12 +28,12 @@ kotlin {
|
|||||||
sourceSets {
|
sourceSets {
|
||||||
val commonMain by getting {
|
val commonMain by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("io.ktor:ktor-client-core:2.0.1")
|
implementation("io.ktor:ktor-client-core:2.1.1")
|
||||||
implementation("io.ktor:ktor-client-content-negotiation:2.0.1")
|
implementation("io.ktor:ktor-client-content-negotiation:2.1.1")
|
||||||
implementation("io.ktor:ktor-serialization-kotlinx-json:2.0.1")
|
implementation("io.ktor:ktor-serialization-kotlinx-json:2.1.1")
|
||||||
implementation("io.ktor:ktor-client-logging:2.0.1")
|
implementation("io.ktor:ktor-client-logging:2.1.1")
|
||||||
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0")
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0")
|
||||||
implementation("io.ktor:ktor-client-auth:2.0.1")
|
implementation("io.ktor:ktor-client-auth:2.1.1")
|
||||||
implementation("org.jsoup:jsoup:1.14.3")
|
implementation("org.jsoup:jsoup:1.14.3")
|
||||||
|
|
||||||
//Dependency Injection
|
//Dependency Injection
|
||||||
@@ -60,7 +60,7 @@ kotlin {
|
|||||||
}
|
}
|
||||||
val androidMain by getting {
|
val androidMain by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("io.ktor:ktor-client-android:2.0.1")
|
implementation("io.ktor:ktor-client-okhttp:2.1.1")
|
||||||
|
|
||||||
// Sql
|
// Sql
|
||||||
implementation(SqlDelight.android)
|
implementation(SqlDelight.android)
|
||||||
@@ -94,7 +94,7 @@ kotlin {
|
|||||||
iosX64Test.dependsOn(this)
|
iosX64Test.dependsOn(this)
|
||||||
iosArm64Test.dependsOn(this)
|
iosArm64Test.dependsOn(this)
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation("io.ktor:ktor-client-ios:2.0.1")
|
implementation("io.ktor:ktor-client-ios:2.1.1")
|
||||||
}
|
}
|
||||||
//iosSimulatorArm64Test.dependsOn(this)
|
//iosSimulatorArm64Test.dependsOn(this)
|
||||||
}
|
}
|
||||||
|
@@ -48,6 +48,7 @@ class Repository(private val api: SelfossApi, private val appSettingsService: Ap
|
|||||||
suspend fun getNewerItems(): ArrayList<SelfossModel.Item> {
|
suspend fun getNewerItems(): ArrayList<SelfossModel.Item> {
|
||||||
// TODO: Use the updatedSince parameter
|
// TODO: Use the updatedSince parameter
|
||||||
var fetchedItems: SelfossModel.StatusAndData<List<SelfossModel.Item>> = SelfossModel.StatusAndData.error()
|
var fetchedItems: SelfossModel.StatusAndData<List<SelfossModel.Item>> = SelfossModel.StatusAndData.error()
|
||||||
|
var fromDB = false
|
||||||
if (isNetworkAvailable()) {
|
if (isNetworkAvailable()) {
|
||||||
fetchedItems = api.getItems(
|
fetchedItems = api.getItems(
|
||||||
displayedItems.type,
|
displayedItems.type,
|
||||||
@@ -59,6 +60,7 @@ class Repository(private val api: SelfossApi, private val appSettingsService: Ap
|
|||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
if (appSettingsService.isItemCachingEnabled()) {
|
if (appSettingsService.isItemCachingEnabled()) {
|
||||||
|
fromDB = true
|
||||||
fetchedItems = SelfossModel.StatusAndData.succes(
|
fetchedItems = SelfossModel.StatusAndData.succes(
|
||||||
getDBItems().filter {
|
getDBItems().filter {
|
||||||
displayedItems == ItemType.ALL ||
|
displayedItems == ItemType.ALL ||
|
||||||
@@ -71,7 +73,9 @@ class Repository(private val api: SelfossApi, private val appSettingsService: Ap
|
|||||||
|
|
||||||
if (fetchedItems.success && fetchedItems.data != null) {
|
if (fetchedItems.success && fetchedItems.data != null) {
|
||||||
items = ArrayList(fetchedItems.data!!)
|
items = ArrayList(fetchedItems.data!!)
|
||||||
sortItems()
|
if (fromDB) {
|
||||||
|
items.sortByDescending { dateUtils.parseDate(it.datetime) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return items
|
return items
|
||||||
}
|
}
|
||||||
@@ -92,7 +96,6 @@ class Repository(private val api: SelfossApi, private val appSettingsService: Ap
|
|||||||
|
|
||||||
if (fetchedItems.success && fetchedItems.data != null) {
|
if (fetchedItems.success && fetchedItems.data != null) {
|
||||||
items.addAll(fetchedItems.data!!)
|
items.addAll(fetchedItems.data!!)
|
||||||
sortItems()
|
|
||||||
}
|
}
|
||||||
return items
|
return items
|
||||||
}
|
}
|
||||||
@@ -118,10 +121,6 @@ class Repository(private val api: SelfossApi, private val appSettingsService: Ap
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun sortItems() {
|
|
||||||
items.sortByDescending { dateUtils.parseDate(it.datetime) }
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun reloadBadges(): Boolean {
|
suspend fun reloadBadges(): Boolean {
|
||||||
var success = false
|
var success = false
|
||||||
if (isNetworkAvailable()) {
|
if (isNetworkAvailable()) {
|
||||||
|
@@ -35,6 +35,7 @@ class AppSettingsService {
|
|||||||
|
|
||||||
private var _fontSize: Int? = null
|
private var _fontSize: Int? = null
|
||||||
private var _staticBar: Boolean? = null
|
private var _staticBar: Boolean? = null
|
||||||
|
private var _darkTheme: Boolean? = null
|
||||||
private var _font: String = ""
|
private var _font: String = ""
|
||||||
|
|
||||||
|
|
||||||
@@ -88,7 +89,7 @@ class AppSettingsService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun refreshItemsNumber() {
|
fun refreshItemsNumber() {
|
||||||
_itemsNumber = settings.getString("prefer_api_items_number", "200").toInt()
|
_itemsNumber = settings.getString("prefer_api_items_number", "20").toInt()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getApiTimeout(): Long {
|
fun getApiTimeout(): Long {
|
||||||
@@ -319,6 +320,17 @@ class AppSettingsService {
|
|||||||
return _staticBar == true
|
return _staticBar == true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun refreshDarkThemeEnabled() {
|
||||||
|
_darkTheme = settings.getBoolean("dark_theme", false)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isDarkThemeEnabled(): Boolean {
|
||||||
|
if (_darkTheme != null) {
|
||||||
|
refreshDarkThemeEnabled()
|
||||||
|
}
|
||||||
|
return _darkTheme == true
|
||||||
|
}
|
||||||
|
|
||||||
private fun refreshFont() {
|
private fun refreshFont() {
|
||||||
_font = settings.getString("reader_font", "")
|
_font = settings.getString("reader_font", "")
|
||||||
}
|
}
|
||||||
@@ -359,6 +371,7 @@ class AppSettingsService {
|
|||||||
refreshFontSize()
|
refreshFontSize()
|
||||||
refreshFont()
|
refreshFont()
|
||||||
refreshStaticBarEnabled()
|
refreshStaticBarEnabled()
|
||||||
|
refreshDarkThemeEnabled()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun refreshLoginInformation(
|
fun refreshLoginInformation(
|
||||||
|
Reference in New Issue
Block a user