From 3be51085e085050b5617ff17771b643cc0af23bc Mon Sep 17 00:00:00 2001 From: Jack Devey Date: Thu, 18 Mar 2021 09:51:14 +0000 Subject: [PATCH] Revert to 2.1.1 for F-Droid --- .idea/misc.xml | 7 +- CHANGELOG.md | 6 - app/build.gradle | 82 ++--- app/src/main/AndroidManifest.xml | 5 +- .../bandev/buddhaquotes/activities/About.kt | 62 ++-- .../buddhaquotes/activities/AboutLibraries.kt | 32 +- .../buddhaquotes/activities/AddToList.kt | 88 ++--- .../activities/{IntroActivity.kt => Intro.kt} | 26 +- .../bandev/buddhaquotes/activities/Main.kt | 205 ++++++++++++ .../buddhaquotes/activities/MainActivity.kt | 311 ------------------ .../bandev/buddhaquotes/activities/Migrate.kt | 81 ----- .../activities/ScrollingActivity.kt | 151 +++++---- .../buddhaquotes/activities/Settings.kt | 248 +++++--------- .../bandev/buddhaquotes/activities/Splash.kt | 19 +- .../buddhaquotes/activities/TimerActivity.kt | 140 ++++---- .../buddhaquotes/adapters/QuoteRecycler.kt | 2 +- .../org/bandev/buddhaquotes/core/Colours.kt | 39 +-- .../bandev/buddhaquotes/core/Compatibility.kt | 50 ++- .../org/bandev/buddhaquotes/core/Lists.kt | 11 +- .../org/bandev/buddhaquotes/core/ListsV2.kt | 189 ----------- .../org/bandev/buddhaquotes/core/Quotes.kt | 243 -------------- .../org/bandev/buddhaquotes/core/Store.kt | 10 +- .../buddhaquotes/custom/NonScrollListView.kt | 44 --- .../custom/OnDoubleClickListener.kt | 2 +- .../buddhaquotes/fragments/ListsFragment.kt | 40 +-- .../buddhaquotes/fragments/QuoteFragment.kt | 148 +++------ .../buddhaquotes/fragments/TimerFragment.kt | 15 +- .../header.xml => drawable-night/toolbar.xml} | 2 +- .../main/res/drawable/heart_full_white.xml | 9 + app/src/main/res/drawable/heart_white.xml | 9 + app/src/main/res/drawable/ic_add.xml | 9 + app/src/main/res/drawable/ic_add_circle.xml | 10 + app/src/main/res/drawable/ic_alert_black.xml | 9 + app/src/main/res/drawable/ic_arrow_back.xml | 9 + app/src/main/res/drawable/ic_breath.xml | 9 + app/src/main/res/drawable/ic_day_settings.xml | 10 + app/src/main/res/drawable/ic_default.xml | 10 + app/src/main/res/drawable/ic_delete.xml | 9 + app/src/main/res/drawable/ic_down_arrow.xml | 9 + .../main/res/drawable/ic_heart_octicons.xml | 10 + app/src/main/res/drawable/ic_help.xml | 9 + app/src/main/res/drawable/ic_info.xml | 9 + app/src/main/res/drawable/ic_language.xml | 10 +- app/src/main/res/drawable/ic_language_big.xml | 9 + .../main/res/drawable/ic_library_books.xml | 9 + app/src/main/res/drawable/ic_link.xml | 10 + app/src/main/res/drawable/ic_list.xml | 9 + .../main/res/drawable/ic_list_octicons.xml | 10 + app/src/main/res/drawable/ic_machine.xml | 10 + app/src/main/res/drawable/ic_more.xml | 9 + app/src/main/res/drawable/ic_mute.xml | 13 + .../main/res/drawable/ic_night_settings.xml | 12 + app/src/main/res/drawable/ic_palette.xml | 9 + app/src/main/res/drawable/ic_party_popper.xml | 9 + app/src/main/res/drawable/ic_posture.xml | 9 + app/src/main/res/drawable/ic_settings.xml | 2 +- app/src/main/res/drawable/ic_share.xml | 10 + app/src/main/res/drawable/ic_text_fields.xml | 9 + app/src/main/res/drawable/ic_x.xml | 9 + .../main/res/drawable/popup_background.xml | 5 + app/src/main/res/drawable/share.xml | 9 + app/src/main/res/drawable/toolbar.xml | 3 + app/src/main/res/layout/activity_about.xml | 34 +- .../res/layout/activity_about_libraries.xml | 2 + app/src/main/res/layout/activity_migrate.xml | 34 -- .../main/res/layout/activity_scrolling.xml | 17 +- app/src/main/res/layout/activity_settings.xml | 2 + app/src/main/res/layout/activity_timer.xml | 211 ++++++------ app/src/main/res/layout/addlist_content.xml | 2 + .../main/res/layout/card_lists_fragment.xml | 12 +- .../main/res/layout/card_quote_fragment.xml | 55 ++-- app/src/main/res/layout/fragment_quote.xml | 23 +- app/src/main/res/layout/main_activity.xml | 100 +++--- app/src/main/res/menu/add_menu.xml | 1 + app/src/main/res/menu/search.xml | 1 + app/src/main/res/menu/settings_menu.xml | 1 + app/src/main/res/values-de/strings.xml | 4 +- app/src/main/res/values-es/strings.xml | 6 +- app/src/main/res/values-fr/strings.xml | 4 +- app/src/main/res/values-hdpi/dimens.xml | 9 + app/src/main/res/values-hi/strings.xml | 6 +- app/src/main/res/values-ja/strings.xml | 5 +- app/src/main/res/values-ldpi/dimens.xml | 9 + app/src/main/res/values-mdpi/dimens.xml | 9 + app/src/main/res/values-night/colors.xml | 4 +- app/src/main/res/values-pl-rPL/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 6 +- app/src/main/res/values-xxhdpi/dimens.xml | 9 + app/src/main/res/values-zh/strings.xml | 5 +- app/src/main/res/values/colors.xml | 18 +- app/src/main/res/values/dimens.xml | 6 +- app/src/main/res/values/strings.xml | 6 +- app/src/main/res/values/styles.xml | 25 +- app/src/main/res/xml/root_preferences.xml | 16 +- build.gradle | 6 +- .../android/en-US/changelogs/1013.txt | 5 + gradle/wrapper/gradle-wrapper.properties | 7 +- 97 files changed, 1338 insertions(+), 1887 deletions(-) rename app/src/main/java/org/bandev/buddhaquotes/activities/{IntroActivity.kt => Intro.kt} (92%) create mode 100644 app/src/main/java/org/bandev/buddhaquotes/activities/Main.kt delete mode 100644 app/src/main/java/org/bandev/buddhaquotes/activities/MainActivity.kt delete mode 100644 app/src/main/java/org/bandev/buddhaquotes/activities/Migrate.kt delete mode 100644 app/src/main/java/org/bandev/buddhaquotes/core/ListsV2.kt delete mode 100644 app/src/main/java/org/bandev/buddhaquotes/custom/NonScrollListView.kt rename app/src/main/res/{drawable/header.xml => drawable-night/toolbar.xml} (60%) create mode 100644 app/src/main/res/drawable/heart_full_white.xml create mode 100644 app/src/main/res/drawable/heart_white.xml create mode 100644 app/src/main/res/drawable/ic_add.xml create mode 100644 app/src/main/res/drawable/ic_add_circle.xml create mode 100644 app/src/main/res/drawable/ic_alert_black.xml create mode 100644 app/src/main/res/drawable/ic_arrow_back.xml create mode 100644 app/src/main/res/drawable/ic_breath.xml create mode 100644 app/src/main/res/drawable/ic_day_settings.xml create mode 100644 app/src/main/res/drawable/ic_default.xml create mode 100644 app/src/main/res/drawable/ic_delete.xml create mode 100644 app/src/main/res/drawable/ic_down_arrow.xml create mode 100644 app/src/main/res/drawable/ic_heart_octicons.xml create mode 100644 app/src/main/res/drawable/ic_help.xml create mode 100644 app/src/main/res/drawable/ic_info.xml create mode 100644 app/src/main/res/drawable/ic_language_big.xml create mode 100644 app/src/main/res/drawable/ic_library_books.xml create mode 100644 app/src/main/res/drawable/ic_link.xml create mode 100644 app/src/main/res/drawable/ic_list.xml create mode 100644 app/src/main/res/drawable/ic_list_octicons.xml create mode 100644 app/src/main/res/drawable/ic_machine.xml create mode 100644 app/src/main/res/drawable/ic_more.xml create mode 100644 app/src/main/res/drawable/ic_mute.xml create mode 100644 app/src/main/res/drawable/ic_night_settings.xml create mode 100644 app/src/main/res/drawable/ic_palette.xml create mode 100644 app/src/main/res/drawable/ic_party_popper.xml create mode 100644 app/src/main/res/drawable/ic_posture.xml create mode 100644 app/src/main/res/drawable/ic_share.xml create mode 100644 app/src/main/res/drawable/ic_text_fields.xml create mode 100644 app/src/main/res/drawable/ic_x.xml create mode 100644 app/src/main/res/drawable/popup_background.xml create mode 100644 app/src/main/res/drawable/share.xml create mode 100644 app/src/main/res/drawable/toolbar.xml delete mode 100644 app/src/main/res/layout/activity_migrate.xml create mode 100644 app/src/main/res/values-hdpi/dimens.xml create mode 100644 app/src/main/res/values-ldpi/dimens.xml create mode 100644 app/src/main/res/values-mdpi/dimens.xml create mode 100644 app/src/main/res/values-xxhdpi/dimens.xml create mode 100644 fastlane/metadata/android/en-US/changelogs/1013.txt diff --git a/.idea/misc.xml b/.idea/misc.xml index a17b4adc..47002838 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,11 +1,6 @@ - - - - - - + diff --git a/CHANGELOG.md b/CHANGELOG.md index d7192b70..c2650fca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,12 +4,6 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -### 2.1.1 - (2021-02-28) - -This update fixes a crash with devices that have installed with an aab. - -Only affects apps installed via the play store. - ### 2.1.0 - (2021-02-28) #### Added diff --git a/app/build.gradle b/app/build.gradle index 978afd37..a286201d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -50,71 +50,61 @@ android { } dependencies { - implementation fileTree(dir: "libs", include: ["*.jar"]) - - // AndroidX - implementation 'androidx.annotation:annotation:1.2.0-rc01' - implementation 'androidx.appcompat:appcompat:1.3.0-beta01' - implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.0-alpha2' implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' - implementation 'androidx.core:core-ktx:1.5.0-beta03' - implementation 'androidx.preference:preference-ktx:1.1.1' - implementation 'androidx.recyclerview:recyclerview:1.2.0-beta02' - implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01' + implementation fileTree(dir: "libs", include: ["*.jar"]) + implementation 'com.quiph.ui:recyclerviewfastscroller:1.0.0' + implementation 'nl.joery.animatedbottombar:library:1.0.9' + implementation 'org.greenrobot:eventbus:3.2.0' implementation 'androidx.viewpager2:viewpager2:1.1.0-alpha01' - implementation 'com.google.android.material:material:1.3.0' - // AboutLibraries - https://github.com/mikepenz/AboutLibraries - implementation 'com.mikepenz:aboutlibraries-core:8.8.4' + // AboutLibraries + implementation 'com.mikepenz:aboutlibraries-core:8.8.3' - // Android Iconics - https://github.com/mikepenz/Android-Iconics - def iconics_version = "5.2.8" - implementation "com.mikepenz:iconics-core:$iconics_version" - implementation "com.mikepenz:iconics-views:$iconics_version" - implementation 'com.mikepenz:google-material-typeface-rounded:4.0.0.1-kotlin@aar' - implementation 'com.mikepenz:octicons-typeface:11.1.0.0-kotlin@aar' - - // AnimatedBottomBar - https://github.com/Droppers/AnimatedBottomBar - implementation 'nl.joery.animatedbottombar:library:1.0.9' - - // AppIntro - https://github.com/AppIntro/AppIntro + // AppIntro implementation 'com.github.AppIntro:AppIntro:6.1.0' - // Eventbus - https://github.com/greenrobot/EventBus - implementation 'org.greenrobot:eventbus:3.2.0' + // Material components + implementation 'com.google.android.material:material:1.3.0' + implementation 'androidx.cardview:cardview:1.0.0' - // Lifecycle components - def lifecycle_version = "2.3.0" - implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" + // Sheets + def sheets_version = "2.1.3" + implementation "com.maxkeppeler.sheets:core:$sheets_version" + implementation "com.maxkeppeler.sheets:input:$sheets_version" + implementation "com.maxkeppeler.sheets:color:$sheets_version" + implementation "com.maxkeppeler.sheets:options:$sheets_version" + implementation "com.maxkeppeler.sheets:time:$sheets_version" + + // AppCompat + implementation 'androidx.appcompat:appcompat:1.3.0-beta01' - // Material Drawer - https://github.com/mikepenz/MaterialDrawer - def drawer_version = "8.3.3" - implementation "com.mikepenz:materialdrawer:$drawer_version" - implementation "com.mikepenz:materialdrawer-iconics:$drawer_version" + // Preference + implementation 'androidx.preference:preference-ktx:1.1.1' // Navigation components - def nav_version = "2.3.4" + def nav_version = "2.3.3" implementation "androidx.navigation:navigation-fragment-ktx:$nav_version" implementation "androidx.navigation:navigation-ui-ktx:$nav_version" - // RecyclerView-FastScroller - https://github.com/quiph/RecyclerView-FastScroller - implementation 'com.quiph.ui:recyclerviewfastscroller:1.0.0' + // Lifecycle components + def lifecycle_version = "2.3.0" + implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" - // Sheets - https://github.com/maxkeppeler/sheets - def sheets_version = "2.1.3" - implementation "com.maxkeppeler.sheets:core:$sheets_version" - implementation "com.maxkeppeler.sheets:input:$sheets_version" - implementation "com.maxkeppeler.sheets:color:$sheets_version" - implementation "com.maxkeppeler.sheets:options:$sheets_version" - implementation "com.maxkeppeler.sheets:time:$sheets_version" + // Recycler View + implementation 'androidx.recyclerview:recyclerview:1.2.0-beta02' + + // Android KTX + implementation 'androidx.core:core-ktx:1.5.0-beta02' // [Testing] Basic testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3-alpha04' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0-alpha04' - // Xplosion - https://github.com/BanDev/Xplosion - implementation 'uk.bandev:xplosion:1.0.5' + // Swipe to refresh + implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01' + + implementation 'com.github.BanDev:Xplosion:1.0.4' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 69ffd2cb..56efcfa9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,7 +13,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme"> @@ -49,7 +49,6 @@ android:name=".activities.About" android:label="@string/about" android:theme="@style/About" /> - @@ -58,7 +57,7 @@ android:label="@string/title_activity_settings" android:theme="@style/Settings" /> + android:name=".activities.Intro" /> diff --git a/app/src/main/java/org/bandev/buddhaquotes/activities/About.kt b/app/src/main/java/org/bandev/buddhaquotes/activities/About.kt index b3a3ff9f..514ee993 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/activities/About.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/activities/About.kt @@ -20,14 +20,12 @@ along with this program. If not, see . package org.bandev.buddhaquotes.activities -import android.graphics.Color import android.os.Bundle +import android.view.View +import android.view.ViewGroup import android.widget.ArrayAdapter +import android.widget.ListView import androidx.appcompat.app.AppCompatActivity -import com.mikepenz.iconics.IconicsDrawable -import com.mikepenz.iconics.typeface.library.googlematerial.RoundedGoogleMaterial -import com.mikepenz.iconics.utils.colorInt -import com.mikepenz.iconics.utils.sizeDp import org.bandev.buddhaquotes.R import org.bandev.buddhaquotes.core.Colours import org.bandev.buddhaquotes.core.Compatibility @@ -45,47 +43,51 @@ class About : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + // Set theme, navigation bar and language + Colours().setAccentColour(this, window, resources) + Compatibility().setNavigationBarColourDefault(this, window, resources) + Languages(baseContext).setLanguage() + // Setup view binding binding = ActivityAboutBinding.inflate(layoutInflater) setContentView(binding.root) - // Set accent colour, navigation bar and language - Colours().setAccentColour(this) - Colours().setStatusBar(this, window) - Compatibility().setNavigationBarColourDefault(this, window) - Languages(baseContext).setLanguage() - // Setup toolbar setSupportActionBar(binding.toolbar) - with(binding.toolbar) { - navigationIcon = - IconicsDrawable(context, RoundedGoogleMaterial.Icon.gmr_arrow_back).apply { - colorInt = Color.WHITE - sizeDp = 16 - } - setBackgroundColor(Colours().toolbarColour(context)) - setNavigationOnClickListener { - onBackPressed() - } + binding.toolbar.setNavigationOnClickListener { + onBackPressed() } // Setup contributors array val contributors = resources.getStringArray(R.array.contributors) val contributorsAdapter = ArrayAdapter(this, R.layout.layout_list_item, contributors) - with(binding.contributorsList) { - adapter = contributorsAdapter - divider = null - isClickable = false - } + binding.contributorsList.adapter = contributorsAdapter + binding.contributorsList.divider = null + binding.contributorsList.isClickable = false + justifyListViewHeightBasedOnChildren(binding.contributorsList) // Setup translators array val translators = resources.getStringArray(R.array.translators) val translatorsAdapter = ArrayAdapter(this, R.layout.layout_list_item, translators) - with(binding.translatorsList) { - adapter = translatorsAdapter - divider = null - isClickable = false + binding.translatorsList.adapter = translatorsAdapter + binding.translatorsList.divider = null + binding.translatorsList.isClickable = false + justifyListViewHeightBasedOnChildren(binding.translatorsList) + } + + private fun justifyListViewHeightBasedOnChildren(listView: ListView) { + val adapter = listView.adapter ?: return + val vg: ViewGroup = listView + var totalHeight = 0 + for (i in 0 until adapter.count) { + val listItem: View = adapter.getView(i, null, vg) + listItem.measure(0, 0) + totalHeight += listItem.measuredHeight + 10 } + val par = listView.layoutParams + par.height = totalHeight + listView.dividerHeight * (adapter.count - 1) + listView.layoutParams = par + listView.requestLayout() } override fun onBackPressed() { diff --git a/app/src/main/java/org/bandev/buddhaquotes/activities/AboutLibraries.kt b/app/src/main/java/org/bandev/buddhaquotes/activities/AboutLibraries.kt index e8a250ff..0d8a3ce5 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/activities/AboutLibraries.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/activities/AboutLibraries.kt @@ -20,7 +20,6 @@ along with this program. If not, see . package org.bandev.buddhaquotes.activities -import android.graphics.Color import android.os.Build import android.os.Bundle import android.text.Html @@ -32,10 +31,6 @@ import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.mikepenz.aboutlibraries.Libs import com.mikepenz.aboutlibraries.entity.Library -import com.mikepenz.iconics.IconicsDrawable -import com.mikepenz.iconics.typeface.library.googlematerial.RoundedGoogleMaterial -import com.mikepenz.iconics.utils.colorInt -import com.mikepenz.iconics.utils.sizeDp import org.bandev.buddhaquotes.R import org.bandev.buddhaquotes.core.Colours import org.bandev.buddhaquotes.core.Compatibility @@ -54,9 +49,8 @@ class AboutLibraries : AppCompatActivity() { super.onCreate(savedInstanceState) // Set theme, navigation bar and language - Colours().setAccentColour(this) - Colours().setStatusBar(this, window) - Compatibility().setNavigationBarColourDefault(this, window) + Colours().setAccentColour(this, window, resources) + Compatibility().setNavigationBarColourDefault(this, window, resources) Languages(baseContext).setLanguage() // Setup view binding @@ -65,16 +59,8 @@ class AboutLibraries : AppCompatActivity() { // Setup toolbar setSupportActionBar(binding.toolbar) - with(binding.toolbar) { - navigationIcon = - IconicsDrawable(context, RoundedGoogleMaterial.Icon.gmr_arrow_back).apply { - colorInt = Color.WHITE - sizeDp = 16 - } - setBackgroundColor(Colours().toolbarColour(context)) - setNavigationOnClickListener { - onBackPressed() - } + binding.toolbar.setNavigationOnClickListener { + finish() } with(binding.recyclerView) { @@ -83,7 +69,6 @@ class AboutLibraries : AppCompatActivity() { } } - @Suppress("DEPRECATION") class LibraryAdapter(private val itemList: List) : RecyclerView.Adapter() { @@ -112,7 +97,9 @@ class AboutLibraries : AppCompatActivity() { if (library.author.isNotEmpty()) { binding.authorTextView.text = library.author - } else binding.authorTextView.visibility = View.GONE + } else { + binding.authorTextView.visibility = View.GONE + } val license = library.licenses?.firstOrNull() if (license != null) { @@ -123,7 +110,10 @@ class AboutLibraries : AppCompatActivity() { license.licenseShortDescription, Html.FROM_HTML_MODE_COMPACT ) - } else Html.fromHtml(license.licenseShortDescription) + } else { + @Suppress("DEPRECATION") + Html.fromHtml(license.licenseShortDescription) + } } else { binding.licenseNameTextView.visibility = View.GONE binding.licenseDescriptionTextView.visibility = View.GONE diff --git a/app/src/main/java/org/bandev/buddhaquotes/activities/AddToList.kt b/app/src/main/java/org/bandev/buddhaquotes/activities/AddToList.kt index fd6cda3e..54773968 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/activities/AddToList.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/activities/AddToList.kt @@ -33,10 +33,6 @@ import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.SearchView import androidx.recyclerview.widget.LinearLayoutManager import com.google.android.material.snackbar.Snackbar -import com.mikepenz.iconics.IconicsDrawable -import com.mikepenz.iconics.typeface.library.googlematerial.RoundedGoogleMaterial -import com.mikepenz.iconics.utils.colorInt -import com.mikepenz.iconics.utils.sizeDp import org.bandev.buddhaquotes.R import org.bandev.buddhaquotes.adapters.AddQuoteRecycler import org.bandev.buddhaquotes.core.* @@ -52,15 +48,14 @@ import java.util.* class AddToList : AppCompatActivity(), AddQuoteRecycler.ClickListener { private lateinit var binding: AddlistContentBinding - private lateinit var recyclerAdapter: AddQuoteRecycler + private lateinit var rAdapter: AddQuoteRecycler override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Set theme, navigation bar and language - Colours().setAccentColour(this) - Colours().setStatusBar(this, window) - Compatibility().setNavigationBarColourDefault(this, window) + Colours().setAccentColour(this, window, resources) + Compatibility().setNavigationBarColourDefault(this, window, resources) Languages(baseContext).setLanguage() // Setup view binding @@ -69,22 +64,14 @@ class AddToList : AppCompatActivity(), AddQuoteRecycler.ClickListener { // Setup toolbar setSupportActionBar(binding.toolbar) - with(binding.toolbar) { - navigationIcon = - IconicsDrawable(context, RoundedGoogleMaterial.Icon.gmr_arrow_back).apply { - colorInt = Color.WHITE - sizeDp = 16 - } - setBackgroundColor(Colours().toolbarColour(context)) - setNavigationOnClickListener { - onBackPressed() - } + binding.toolbar.setNavigationOnClickListener { + onBackPressed() } - recyclerAdapter = AddQuoteRecycler(genList(), this@AddToList) + rAdapter = AddQuoteRecycler(genList(), this@AddToList) with(binding.recycler) { - adapter = recyclerAdapter + adapter = rAdapter layoutManager = LinearLayoutManager(context) setHasFixedSize(true) } @@ -92,15 +79,13 @@ class AddToList : AppCompatActivity(), AddQuoteRecycler.ClickListener { override fun onClick(quote: String) { val list = (intent.extras ?: return).getString("list").toString() - val lists2 = ListsV2(this) - val quoteID = Quotes().getFromString(quote, this) - if (!lists2.queryInList(quoteID, list)) { + if (!Lists().queryInList(quote, list, this)) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { binding.root.performHapticFeedback(HapticFeedbackConstants.CONFIRM) } else { binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) } - lists2.addToList(quoteID, list) + Lists().addToList(quote, list, this) val intent2 = Intent(this, ScrollingActivity::class.java) intent2.putExtra("list", list) startActivity(intent2) @@ -116,14 +101,8 @@ class AddToList : AppCompatActivity(), AddQuoteRecycler.ClickListener { } else { binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) } - val outName = if (list == "Favourites") { - getString(R.string.favourites) - } else list - Snackbar.make( - binding.root, - getString(R.string.duplicate) + " $outName", - Snackbar.LENGTH_SHORT - ).show() + Snackbar.make(binding.root, "This quote is already in $list", Snackbar.LENGTH_SHORT) + .show() } } @@ -145,40 +124,39 @@ class AddToList : AppCompatActivity(), AddQuoteRecycler.ClickListener { val searchItem = menu!!.findItem(R.id.appSearchBar) val searchView = searchItem.actionView as SearchView - val searchIcon = searchView.findViewById(androidx.appcompat.R.id.search_button) + val searchCloseBtn = searchView.findViewById(androidx.appcompat.R.id.search_close_btn) - val searchEditText = - searchView.findViewById(androidx.appcompat.R.id.search_src_text) - searchCloseBtn.setColorFilter(Color.WHITE) + + val searchIcon = searchView.findViewById(androidx.appcompat.R.id.search_button) searchIcon.setColorFilter(Color.WHITE) - with(searchEditText) { - setTextColor(Color.WHITE) - setHintTextColor(Color.WHITE) - hint = getString(R.string.searchHint) - } + val searchEditText = + searchView.findViewById(androidx.appcompat.R.id.search_src_text) + searchEditText.setTextColor(Color.WHITE) + searchEditText.setHintTextColor(Color.WHITE) + searchEditText.hint = getString(R.string.searchHint) + + searchView.imeOptions = EditorInfo.IME_ACTION_DONE + searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { + override fun onQueryTextSubmit(query: String): Boolean { + return false + } - with(searchView) { - imeOptions = EditorInfo.IME_ACTION_DONE - setOnQueryTextListener(object : SearchView.OnQueryTextListener { - override fun onQueryTextSubmit(query: String): Boolean { - return false - } - - override fun onQueryTextChange(newText: String): Boolean { - recyclerAdapter.filter.filter(newText) - return false - } - }) - } + override fun onQueryTextChange(newText: String): Boolean { + rAdapter.filter.filter(newText) + return false + } + }) return true } override fun onBackPressed() { val list = (intent.getStringExtra("list") ?: return).toString() - startActivity(Intent(this, ScrollingActivity::class.java).putExtra("list", list)) + val intent2 = Intent(this, ScrollingActivity::class.java) + intent2.putExtra("list", list) + startActivity(intent2) finish() overridePendingTransition( R.anim.anim_slide_in_right, diff --git a/app/src/main/java/org/bandev/buddhaquotes/activities/IntroActivity.kt b/app/src/main/java/org/bandev/buddhaquotes/activities/Intro.kt similarity index 92% rename from app/src/main/java/org/bandev/buddhaquotes/activities/IntroActivity.kt rename to app/src/main/java/org/bandev/buddhaquotes/activities/Intro.kt index 612ab65e..d3c49946 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/activities/IntroActivity.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/activities/Intro.kt @@ -20,8 +20,6 @@ along with this program. If not, see . package org.bandev.buddhaquotes.activities -import android.content.Context -import android.content.Intent import android.content.res.Configuration import android.graphics.Color import android.os.Build @@ -39,7 +37,7 @@ import org.bandev.buddhaquotes.R * The Intro activity is the first thing people see on buddha quotes * AppIntro is used to make it more simple */ -class IntroActivity : AppIntro2() { +class Intro : AppIntro2() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -52,7 +50,6 @@ class IntroActivity : AppIntro2() { val sharedPreferences = getSharedPreferences("Settings", 0) val editor = sharedPreferences.edit() editor.putString("latestShown", getString(R.string.version)) - editor.putBoolean("old_quotes", false) editor.apply() showStatusBar(true) @@ -60,10 +57,12 @@ class IntroActivity : AppIntro2() { when (this.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { Configuration.UI_MODE_NIGHT_NO -> { setupStatusBarForLightMode() - setupNavBarForLightMode(this) + setupNavBarForLightMode() lightModeSlides() } - Configuration.UI_MODE_NIGHT_YES -> darkModeSlides() + Configuration.UI_MODE_NIGHT_YES -> { + darkModeSlides() + } } } @@ -187,8 +186,8 @@ class IntroActivity : AppIntro2() { setStatusBarColor(Color.WHITE) } - private fun setupNavBarForLightMode(context: Context) { - if (!ViewConfiguration.get(context).hasPermanentMenuKey()) { + private fun setupNavBarForLightMode() { + if (!ViewConfiguration.get(this).hasPermanentMenuKey()) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { window.decorView.windowInsetsController?.setSystemBarsAppearance( WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS, // value @@ -206,19 +205,12 @@ class IntroActivity : AppIntro2() { override fun onSkipPressed(currentFragment: Fragment?) { super.onSkipPressed(currentFragment) // Decide what to do when the user clicks on "Skip" - end() + finish() } override fun onDonePressed(currentFragment: Fragment?) { super.onDonePressed(currentFragment) // Decide what to do when the user clicks on "Done" - end() - } - - private fun end() { - when (intent.extras?.getInt("backto", 0)) { - 0 -> finish() - 1 -> startActivity(Intent(this, MainActivity::class.java)) - } + finish() } } diff --git a/app/src/main/java/org/bandev/buddhaquotes/activities/Main.kt b/app/src/main/java/org/bandev/buddhaquotes/activities/Main.kt new file mode 100644 index 00000000..9d99ba88 --- /dev/null +++ b/app/src/main/java/org/bandev/buddhaquotes/activities/Main.kt @@ -0,0 +1,205 @@ +/** + +Buddha Quotes +Copyright (C) 2021 BanDev + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + */ + +package org.bandev.buddhaquotes.activities + +import android.content.Intent +import android.os.Build +import android.os.Bundle +import android.view.HapticFeedbackConstants +import android.view.Menu +import android.view.MenuItem +import androidx.appcompat.app.AppCompatActivity +import com.maxkeppeler.sheets.input.InputSheet +import com.maxkeppeler.sheets.input.Validation +import com.maxkeppeler.sheets.input.type.InputEditText +import nl.joery.animatedbottombar.AnimatedBottomBar +import org.bandev.buddhaquotes.R +import org.bandev.buddhaquotes.core.* +import org.bandev.buddhaquotes.core.Notify +import org.bandev.buddhaquotes.databinding.MainActivityBinding +import org.bandev.buddhaquotes.fragments.FragmentAdapter +import org.greenrobot.eventbus.EventBus +import org.greenrobot.eventbus.Subscribe +import org.greenrobot.eventbus.ThreadMode +import java.util.* + +/** + * Main is the main page of Buddha Quotes + * + * It has a ViewPager and allows the user to scroll between its fragments. + * It uses [FragmentAdapter] as a fragment adapter and + * https://github.com/Droppers/AnimatedBottomBar for its nice bottom bar. + * @since v1.0.0 + * @author jack.txt & Fennec_exe + */ + +class Main : AppCompatActivity() { + + private lateinit var binding: MainActivityBinding + + /** + * On activity created + * + * @param savedInstanceState [Bundle] + */ + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + // Set theme, navigation bar and language + Colours().setAccentColour(this, window, resources) + Compatibility().setNavigationBarColourMain(this, window, resources) + Languages(baseContext).setLanguage() + + val sharedPrefs = getSharedPreferences("Settings", 0) + val editor = sharedPrefs.edit() + + if (sharedPrefs.getBoolean("first_time", true)) { + editor.putBoolean("first_time", false) + editor.apply() + startActivity(Intent(this, Intro::class.java)) + } else { + editor.putBoolean("old_quotes", true) + editor.apply() + } + + // Setup view binding + binding = MainActivityBinding.inflate(layoutInflater) + setContentView(binding.root) + + // Setup toolbar + setSupportActionBar(binding.toolbar) + + // Setup viewPager with FragmentAdapter + binding.viewPager.adapter = FragmentAdapter(supportFragmentManager, lifecycle) + binding.viewPager.setCurrentItem(Store(this).fragment, false) + binding.bottomBar.setupWithViewPager2(binding.viewPager) + + binding.bottomBar.setOnTabInterceptListener(object : + AnimatedBottomBar.OnTabInterceptListener { + override fun onTabIntercepted( + lastIndex: Int, + lastTab: AnimatedBottomBar.Tab?, + newIndex: Int, + newTab: AnimatedBottomBar.Tab + ): Boolean { + Store(applicationContext).fragment = newIndex + return true + } + }) + } + + @Subscribe(threadMode = ThreadMode.MAIN) + fun onNotifyReceive(event: Notify) { + } + + /** + * On options menu created + * @param menu [Menu] + * @return [Boolean] + */ + + override fun onCreateOptionsMenu(menu: Menu?): Boolean { + menuInflater.inflate(R.menu.settings_menu, menu) + return true + } + + override fun onOptionsItemSelected(item: MenuItem): Boolean { + return when (item.itemId) { + R.id.add -> { + showCreateListSheet() + true + } + R.id.settings -> { + val intent = Intent(this, Settings::class.java) + intent.putExtra("from", Activities.MAIN) + startActivity(intent) + finish() + overridePendingTransition( + R.anim.anim_slide_in_left, + R.anim.anim_slide_out_left + ) + true + } + else -> super.onOptionsItemSelected(item) + } + } + + /** + * On options menu item selected + * @return [Boolean] + */ + + // Build the input bottom sheet that allows creation of a new list + private fun showCreateListSheet() { + // Retrieve the lists + val pref = getSharedPreferences("List_system", 0) + val lists = pref.getString("MASTER_LIST", "Favourites")?.toLowerCase(Locale.ROOT) + ?.split("//".toRegex())?.toTypedArray() + + InputSheet().show(this) { + title(R.string.createNewList) + with( + InputEditText { + required() + hint(R.string.insertName) + validationListener { value -> + when { + value.contains("//") -> { + Validation.failed(getString(R.string.validationRule1)) + } + value.toLowerCase(Locale.ROOT) == "favourites" -> { + Validation.failed(getString(R.string.validationRule2)) + } + lists!!.contains(value.toLowerCase(Locale.ROOT)) -> { + Validation.failed(getString(R.string.validationRule3) + " $value") + } + else -> { + Validation.success() + } + } + } + resultListener { value -> + EventBus.getDefault().post(Notify.NotifyNewList(value.toString())) + } + } + ) + onNegative { binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) } + onPositive(R.string.add) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + binding.root.performHapticFeedback(HapticFeedbackConstants.CONFIRM) + } else { + binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) + } + } + } + } + + override fun onStart() { + super.onStart() + EventBus.getDefault().register(this) + } + + override fun onStop() { + super.onStop() + EventBus.getDefault().unregister(this) + } +} diff --git a/app/src/main/java/org/bandev/buddhaquotes/activities/MainActivity.kt b/app/src/main/java/org/bandev/buddhaquotes/activities/MainActivity.kt deleted file mode 100644 index b90af465..00000000 --- a/app/src/main/java/org/bandev/buddhaquotes/activities/MainActivity.kt +++ /dev/null @@ -1,311 +0,0 @@ -/** - -Buddha Quotes -Copyright (C) 2021 BanDev - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - - */ - -package org.bandev.buddhaquotes.activities - -import android.content.Intent -import android.graphics.Color -import android.os.Build -import android.os.Bundle -import android.view.HapticFeedbackConstants -import android.view.Menu -import android.view.MenuItem -import androidx.appcompat.app.ActionBarDrawerToggle -import androidx.appcompat.app.AppCompatActivity -import androidx.core.content.ContextCompat -import com.maxkeppeler.sheets.input.InputSheet -import com.maxkeppeler.sheets.input.Validation -import com.maxkeppeler.sheets.input.type.InputEditText -import com.mikepenz.iconics.IconicsDrawable -import com.mikepenz.iconics.typeface.library.googlematerial.RoundedGoogleMaterial -import com.mikepenz.iconics.utils.colorInt -import com.mikepenz.iconics.utils.sizeDp -import com.mikepenz.materialdrawer.holder.ImageHolder -import com.mikepenz.materialdrawer.iconics.iconicsIcon -import com.mikepenz.materialdrawer.model.DividerDrawerItem -import com.mikepenz.materialdrawer.model.PrimaryDrawerItem -import com.mikepenz.materialdrawer.model.SectionDrawerItem -import com.mikepenz.materialdrawer.model.interfaces.iconDrawable -import com.mikepenz.materialdrawer.model.interfaces.nameRes -import com.mikepenz.materialdrawer.widget.AccountHeaderView -import org.bandev.buddhaquotes.R -import org.bandev.buddhaquotes.core.* -import org.bandev.buddhaquotes.databinding.MainActivityBinding -import org.bandev.buddhaquotes.fragments.FragmentAdapter -import org.greenrobot.eventbus.EventBus -import org.greenrobot.eventbus.Subscribe -import org.greenrobot.eventbus.ThreadMode -import java.util.* - -/** - * Main is the main page of Buddha Quotes - * - * It has a ViewPager and allows the user to scroll between its fragments. - * It uses [FragmentAdapter] as a fragment adapter and - * https://github.com/Droppers/AnimatedBottomBar for its nice bottom bar. - * @since v1.0.0 - * @author jack.txt & Fennec_exe - */ - -class MainActivity : AppCompatActivity() { - - private lateinit var binding: MainActivityBinding - private lateinit var headerView: AccountHeaderView - private lateinit var actionBarDrawerToggle: ActionBarDrawerToggle - - /** - * On activity created - * - * @param savedInstanceState [Bundle] - */ - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - // Setup view binding - binding = MainActivityBinding.inflate(layoutInflater) - setContentView(binding.root) - - // Set navigation bar and language - Compatibility().setNavigationBarColourMain(this, window) - Languages(baseContext).setLanguage() - - val sharedPrefs = getSharedPreferences("Settings", 0) - val editor = sharedPrefs.edit() - if (sharedPrefs.getBoolean("first_time", true)) { - editor.putBoolean("first_time", false) - editor.apply() - startActivity(Intent(this, IntroActivity::class.java)) - } - - // Setup toolbar - setSupportActionBar(binding.toolbar) - with(binding.toolbar) { - navigationIcon = IconicsDrawable(context, RoundedGoogleMaterial.Icon.gmr_menu).apply { - colorInt = Color.WHITE - sizeDp = 20 - } - setBackgroundColor(Colours().toolbarColour(context)) - setNavigationOnClickListener { - onBackPressed() - } - } - - // Setup viewPager with FragmentAdapter - with(binding.viewPager) { - adapter = FragmentAdapter(supportFragmentManager, lifecycle) - setCurrentItem(0, false) - } - - // Setup bottomBar with the viewpager - binding.bottomBar.setupWithViewPager2(binding.viewPager) - - actionBarDrawerToggle = ActionBarDrawerToggle( - this, - binding.root, - binding.toolbar, - com.mikepenz.materialdrawer.R.string.material_drawer_open, - com.mikepenz.materialdrawer.R.string.material_drawer_close - ) - - fun buildHeader(compact: Boolean, savedInstanceState: Bundle?) { - headerView = AccountHeaderView(this, compact = compact).apply { - attachToSliderView(binding.slider) - headerBackground = ImageHolder(R.drawable.header) - - withSavedInstance(savedInstanceState) - } - } - - buildHeader(false, savedInstanceState) - - binding.slider.apply { - itemAdapter.add( - PrimaryDrawerItem().apply { - nameRes = R.string.app_name; iconDrawable = - ContextCompat.getDrawable( - context, - R.drawable.ic_buddha - ); isSelectable = - false; identifier = 0 - }, - SectionDrawerItem().apply { nameRes = R.string.vibrate_second }, - PrimaryDrawerItem().apply { - nameRes = R.string.fragment_quote; iconicsIcon = - RoundedGoogleMaterial.Icon.gmr_format_quote; isSelectable = false; identifier = - 1 - }, - PrimaryDrawerItem().apply { - nameRes = R.string.fragment_lists; iconicsIcon = - RoundedGoogleMaterial.Icon.gmr_list; isSelectable = false; identifier = 2 - }, - PrimaryDrawerItem().apply { - nameRes = R.string.fragment_meditation; iconicsIcon = - RoundedGoogleMaterial.Icon.gmr_self_improvement; isSelectable = - false; identifier = 3 - }, - DividerDrawerItem(), - PrimaryDrawerItem().apply { - nameRes = R.string.about; iconicsIcon = - RoundedGoogleMaterial.Icon.gmr_info; isSelectable = false; identifier = 5 - }, - PrimaryDrawerItem().apply { - nameRes = R.string.settings; iconicsIcon = - RoundedGoogleMaterial.Icon.gmr_settings; isSelectable = false; identifier = 4 - }, - PrimaryDrawerItem().apply { - nameRes = R.string.open_source_libraries; iconicsIcon = - RoundedGoogleMaterial.Icon.gmr_library_books; isSelectable = false; identifier = - 6 - }) - setSavedInstance(savedInstanceState) - } - - var intent: Intent? = null - binding.slider.onDrawerItemClickListener = { _, drawerItem, _ -> - when (drawerItem.identifier) { - 0L -> intent = Intent(this, Settings::class.java).putExtra("from", Activities.MAIN) - 1L -> binding.bottomBar.selectTabAt(0, true) - 2L -> binding.bottomBar.selectTabAt(1, true) - 3L -> binding.bottomBar.selectTabAt(2, true) - 4L -> intent = Intent(this, Settings::class.java).putExtra("from", Activities.MAIN) - 5L -> intent = Intent(this, About::class.java) - 6L -> intent = Intent(this, AboutLibraries::class.java) - else -> binding.slider.drawerLayout?.closeDrawer(binding.slider) - } - if (intent != null) { - startActivity(intent) - } - intent = null - - false - } - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onNotifyReceive(event: Notify) { - } - - @Subscribe(threadMode = ThreadMode.MAIN) - fun onNotifyReceive(event: SendEvent.ToListFragment) { - } - - /** - * On options menu created - * @param menu [Menu] - * @return [Boolean] - */ - - override fun onCreateOptionsMenu(menu: Menu?): Boolean { - menuInflater.inflate(R.menu.settings_menu, menu) - menu?.findItem(R.id.settings)?.icon = - IconicsDrawable(this, RoundedGoogleMaterial.Icon.gmr_settings).apply { - colorInt = Color.WHITE - sizeDp = 20 - } - return true - } - - override fun onOptionsItemSelected(item: MenuItem): Boolean { - return when (item.itemId) { - R.id.add -> { - showCreateListSheet() - true - } - R.id.settings -> { - startActivity(Intent(this, Settings::class.java).putExtra("from", Activities.MAIN)) - true - } - else -> super.onOptionsItemSelected(item) - } - } - - /** - * On options menu item selected - * @return [Boolean] - */ - - // Build the input bottom sheet that allows creation of a new list - private fun showCreateListSheet() { - // Retrieve the lists - val lists = ListsV2(this).getMasterList() - - InputSheet().show(this) { - title(R.string.createNewList) - with( - InputEditText { - required() - hint(R.string.insertName) - validationListener { value -> - when { - value.contains("//") -> Validation.failed(getString(R.string.validationRule1)) - value.toLowerCase(Locale.ROOT) == "favourites" -> Validation.failed( - getString(R.string.validationRule2) - ) - lists.contains(value.toLowerCase(Locale.ROOT)) -> Validation.failed( - getString(R.string.validationRule3) + " $value" - ) - else -> Validation.success() - } - } - resultListener { value -> - EventBus.getDefault().post(Notify.NotifyNewList(value.toString())) - } - } - ) - onNegative { binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) } - onPositive(R.string.add) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - binding.root.performHapticFeedback(HapticFeedbackConstants.CONFIRM) - } else { - binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) - } - } - } - } - - override fun onResume() { - // Set the colour of everything to the accent colour when the user returns to the Main Activity - super.onResume() - Colours().setAccentColour(this) - Colours().setStatusBar(this, window) - binding.toolbar.setBackgroundColor(Colours().toolbarColour(this)) - with(binding.bottomBar) { - tabColorSelected = Colours().getAccentColourAsInt(context) - indicatorColor = Colours().getAccentColourAsInt(context) - } - } - - override fun onStart() { - super.onStart() - EventBus.getDefault().register(this) - } - - override fun onStop() { - super.onStop() - EventBus.getDefault().unregister(this) - } - - override fun onBackPressed() { - // If the drawer is open, close it. If it is already closed, exit the app - if (binding.root.isDrawerOpen(binding.slider)) { - binding.root.closeDrawer(binding.slider) - } else super.onBackPressed() - } -} diff --git a/app/src/main/java/org/bandev/buddhaquotes/activities/Migrate.kt b/app/src/main/java/org/bandev/buddhaquotes/activities/Migrate.kt deleted file mode 100644 index 926aba9b..00000000 --- a/app/src/main/java/org/bandev/buddhaquotes/activities/Migrate.kt +++ /dev/null @@ -1,81 +0,0 @@ -/** - -Buddha Quotes -Copyright (C) 2021 BanDev - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - - */ - -package org.bandev.buddhaquotes.activities - -import android.content.Intent -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity -import org.bandev.buddhaquotes.core.Lists -import org.bandev.buddhaquotes.core.ListsV2 -import org.bandev.buddhaquotes.core.Quotes -import org.bandev.buddhaquotes.databinding.ActivityMigrateBinding - -class Migrate : AppCompatActivity() { - - private lateinit var binding: ActivityMigrateBinding - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - //Setup view - binding = ActivityMigrateBinding.inflate(layoutInflater) - setContentView(binding.root) - - binding.yes.setOnClickListener { begin() } - - val sharedPrefs = getSharedPreferences("Settings", 0) - val editor = sharedPrefs.edit() - - if (sharedPrefs.getBoolean("first_time", true)) { - editor.putBoolean("first_time", false) - editor.apply() - startActivity(Intent(this, IntroActivity::class.java).putExtra("backto", 1)) - finish() - } - - if (!sharedPrefs.getBoolean("old_quotes", true)) { - startActivity(Intent(this, MainActivity::class.java)) - finish() - } - } - - private fun begin() { - val lists = Lists() - val newLists = ListsV2(this) - val quotes = Quotes() - for (listTitle in lists.getMasterList(this)) { - val list = lists.getList(listTitle, this) - val newList = mutableListOf() - for (quote in list) { - if (quote == "") continue - val id = quotes.getFromString(quote, this) - newList.add(id) - } - newList.add(-1) - newLists.newList(listTitle, newList) - } - val sharedPrefs = getSharedPreferences("Settings", 0) - val editor = sharedPrefs.edit() - editor.putBoolean("old_quotes", false) - editor.apply() - startActivity(Intent(this, MainActivity::class.java)) - finish() - } -} diff --git a/app/src/main/java/org/bandev/buddhaquotes/activities/ScrollingActivity.kt b/app/src/main/java/org/bandev/buddhaquotes/activities/ScrollingActivity.kt index 4b02b184..091433cd 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/activities/ScrollingActivity.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/activities/ScrollingActivity.kt @@ -20,23 +20,20 @@ along with this program. If not, see . package org.bandev.buddhaquotes.activities -import android.content.Context import android.content.Intent -import android.graphics.Color import android.os.Bundle import android.view.HapticFeedbackConstants import android.view.Menu import android.view.MenuItem -import android.view.View import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat import androidx.recyclerview.widget.LinearLayoutManager -import com.mikepenz.iconics.IconicsDrawable -import com.mikepenz.iconics.typeface.library.googlematerial.RoundedGoogleMaterial -import com.mikepenz.iconics.utils.colorInt -import com.mikepenz.iconics.utils.sizeDp +import com.google.android.material.snackbar.Snackbar import org.bandev.buddhaquotes.R import org.bandev.buddhaquotes.adapters.QuoteRecycler -import org.bandev.buddhaquotes.core.* +import org.bandev.buddhaquotes.core.Colours +import org.bandev.buddhaquotes.core.Compatibility +import org.bandev.buddhaquotes.core.Languages import org.bandev.buddhaquotes.databinding.ActivityScrollingBinding import org.bandev.buddhaquotes.items.QuoteItem import java.util.* @@ -50,54 +47,51 @@ class ScrollingActivity : AppCompatActivity(), QuoteRecycler.OnItemClickFinder { private lateinit var binding: ActivityScrollingBinding private lateinit var scrollingList: ArrayList - private lateinit var recyclerAdapter: QuoteRecycler - private lateinit var prefList: List + private lateinit var adapter: QuoteRecycler + private lateinit var prefList: List private var listTmp: String = "" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - Colours().setAccentColour(this) - Colours().setStatusBar(this, window) - Compatibility().setNavigationBarColourDefault(this, window) + Colours().setAccentColour(this, window, resources) + Compatibility().setNavigationBarColourDefault(this, window, resources) Languages(baseContext).setLanguage() // Setup view binding binding = ActivityScrollingBinding.inflate(layoutInflater) setContentView(binding.root) + if ((intent.extras ?: return).getBoolean("duplicate", false)) { + Snackbar.make(binding.scrolling, "Already in list!", Snackbar.LENGTH_SHORT).show() + } + + val back = ContextCompat.getDrawable(this, R.drawable.ic_arrow_back) val list = (intent.getStringExtra("list") ?: return).toString() listTmp = list - val pref = getSharedPreferences("ListV2", 0) + val pref = getSharedPreferences("List_system", 0) val prefString = pref.getString(listTmp, "") val prefListTmp: MutableList = (prefString ?: return).split("//").toMutableList() prefListTmp.remove("null") - prefList = ListsV2(this).getList(listTmp) + prefList = prefListTmp scrollingList = generateDummyList(prefList.size) - recyclerAdapter = QuoteRecycler(scrollingList, this@ScrollingActivity) + adapter = QuoteRecycler(scrollingList, this@ScrollingActivity) - // Setup toolbar setSupportActionBar(binding.toolbar) - with(binding.toolbar) { - title = if (listTmp == "Favourites") { - getString(R.string.favourites) - } else listTmp - navigationIcon = - IconicsDrawable(context, RoundedGoogleMaterial.Icon.gmr_arrow_back).apply { - colorInt = Color.WHITE - sizeDp = 16 - } - setBackgroundColor(Colours().toolbarColour(context)) - setNavigationOnClickListener { - onBackPressed() - } + binding.toolbar.title = listTmp + + (supportActionBar ?: return).setDisplayShowTitleEnabled(true) + (supportActionBar ?: return).setDisplayHomeAsUpEnabled(true) + + binding.toolbar.navigationIcon = back + binding.toolbar.setNavigationOnClickListener { + onBackPressed() } - checkListSize(this) + binding.recyclerView.adapter = adapter with(binding.recyclerView) { - adapter = recyclerAdapter layoutManager = LinearLayoutManager(context) setHasFixedSize(false) } @@ -105,18 +99,15 @@ class ScrollingActivity : AppCompatActivity(), QuoteRecycler.OnItemClickFinder { override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.add_menu, menu) - menu?.findItem(R.id.add)?.icon = - IconicsDrawable(this, RoundedGoogleMaterial.Icon.gmr_add).apply { - colorInt = Color.WHITE - sizeDp = 16 - } return true } override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.add -> { - startActivity(Intent(this, AddToList::class.java).putExtra("list", listTmp)) + val intent2 = Intent(this, AddToList::class.java) + intent2.putExtra("list", listTmp) + startActivity(intent2) finish() overridePendingTransition( R.anim.anim_slide_in_left, @@ -134,13 +125,33 @@ class ScrollingActivity : AppCompatActivity(), QuoteRecycler.OnItemClickFinder { if (clickedItem.resource == R.drawable.heart_full_red) { clickedItem.resource = R.drawable.like - ListsV2(this).removeFromList(Quotes().getFromString(text, this), "Favourites") + + val pref = getSharedPreferences("List_system", 0) + val editor = pref.edit() + val listArr = pref.getString("Favourites", "") + val listArrTemp: MutableList = + (listArr?.split("//") ?: return).toMutableList() + val listArrFinal = LinkedList(listArrTemp) + listArrFinal.remove(text) + val stringOut = listArrFinal.joinToString(separator = "//") + editor.putString("Favourites", stringOut) + editor.apply() } else { clickedItem.resource = R.drawable.heart_full_red - ListsV2(this).addToList(Quotes().getFromString(text, this), "Favourites") + + val pref = getSharedPreferences("List_system", 0) + val editor = pref.edit() + val listArr = pref.getString("Favourites", "") + val listArrTemp: MutableList = + (listArr?.split("//") ?: return).toMutableList() + val listArrFinal = LinkedList(listArrTemp) + listArrFinal.push(text) + val stringOut = listArrFinal.joinToString(separator = "//") + editor.putString("Favourites", stringOut) + editor.apply() } binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) - recyclerAdapter.notifyItemChanged(position) + adapter.notifyItemChanged(position) } } @@ -161,44 +172,56 @@ class ScrollingActivity : AppCompatActivity(), QuoteRecycler.OnItemClickFinder { override fun onBinClick(position: Int, text: String) { binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) - scrollingList.removeAt(position) - recyclerAdapter.notifyItemRemoved(position) - ListsV2(this).removeFromList(Quotes().getFromString(text, this), listTmp) - checkListSize(this) - } - private fun checkListSize(context: Context) { - if (ListsV2(context).getList(listTmp).size > 1) { - binding.noQuotesText.visibility = View.GONE - } else binding.noQuotesText.visibility = View.VISIBLE + scrollingList.removeAt(position) + adapter.notifyItemRemoved(position) + + val pref = getSharedPreferences("List_system", 0) + val editor = pref.edit() + val listArr = pref.getString(listTmp, "") + val listArrTemp: MutableList = + (listArr?.split("//") ?: return).toMutableList() + val listArrFinal = LinkedList(listArrTemp) + listArrFinal.remove(text) + val stringOut = listArrFinal.joinToString(separator = "//") + editor.putString(listTmp, stringOut) + editor.apply() } private fun generateDummyList(max: Int): ArrayList { val list = ArrayList() - var item: QuoteItem - val favs = ListsV2(this).getList("Favourites") + var i = 0 + var item: QuoteItem - for (id in prefList) { - val special = listTmp == "Favourites" - if (id == -1) continue + val pref = getSharedPreferences("List_system", 0) + val listArr = pref.getString("Favourites", "") + val listArrTemp: MutableList = listArr?.split("//")!!.toMutableList() + val listArrFinal = LinkedList(listArrTemp) - val drawable = if (favs.contains(id)) { - R.drawable.heart_full_red - } else R.drawable.like + while (i != max) { + var special = false + if (listTmp == "Favourites") { + special = true + } + if ((listArrFinal as MutableList).contains(prefList[i])) { + if (prefList[i] != "") { + item = QuoteItem(prefList[i], R.drawable.heart_full_red, special) + list += item + } + } else { + item = QuoteItem(prefList[i], R.drawable.like, special) + list += item + } - item = QuoteItem( - Quotes().getQuote(id, this), - drawable, - special - ) - list += item + i++ } return list } override fun onBackPressed() { + startActivity(Intent(this@ScrollingActivity, Main::class.java)) finish() } } diff --git a/app/src/main/java/org/bandev/buddhaquotes/activities/Settings.kt b/app/src/main/java/org/bandev/buddhaquotes/activities/Settings.kt index e4d2f396..515a8165 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/activities/Settings.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/activities/Settings.kt @@ -21,32 +21,25 @@ along with this program. If not, see . package org.bandev.buddhaquotes.activities import android.content.Intent -import android.graphics.Color import android.os.Build import android.os.Bundle -import android.view.HapticFeedbackConstants +import android.view.* import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate import androidx.core.content.ContextCompat.getColor import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceManager +import com.google.android.material.snackbar.BaseTransientBottomBar.LENGTH_SHORT +import com.google.android.material.snackbar.Snackbar import com.maxkeppeler.sheets.color.ColorSheet import com.maxkeppeler.sheets.color.ColorView import com.maxkeppeler.sheets.core.SheetStyle import com.maxkeppeler.sheets.options.DisplayMode import com.maxkeppeler.sheets.options.Option import com.maxkeppeler.sheets.options.OptionsSheet -import com.mikepenz.iconics.IconicsDrawable -import com.mikepenz.iconics.typeface.library.googlematerial.RoundedGoogleMaterial -import com.mikepenz.iconics.typeface.library.octicons.Octicons -import com.mikepenz.iconics.utils.colorInt -import com.mikepenz.iconics.utils.sizeDp import org.bandev.buddhaquotes.R -import org.bandev.buddhaquotes.core.Colours -import org.bandev.buddhaquotes.core.Compatibility -import org.bandev.buddhaquotes.core.Languages -import org.bandev.buddhaquotes.core.Theme +import org.bandev.buddhaquotes.core.* import org.bandev.buddhaquotes.databinding.ActivitySettingsBinding /** @@ -60,27 +53,22 @@ class Settings : AppCompatActivity() { super.onCreate(savedInstanceState) // Set theme, navigation bar and language - Colours().setAccentColour(this) - Colours().setStatusBar(this, window) - Compatibility().setNavigationBarColourDefault(this, window) + Colours().setAccentColour(this, window, resources) + Compatibility().setNavigationBarColourDefault(this, window, resources) Languages(baseContext).setLanguage() // Setup view binding binding = ActivitySettingsBinding.inflate(layoutInflater) setContentView(binding.root) + if (intent.extras?.getBoolean("paused") == true) { + Snackbar.make(binding.root, "Timer has been paused", LENGTH_SHORT).show() + } + // Setup toolbar setSupportActionBar(binding.toolbar) - with(binding.toolbar) { - navigationIcon = - IconicsDrawable(context, RoundedGoogleMaterial.Icon.gmr_arrow_back).apply { - colorInt = Color.WHITE - sizeDp = 16 - } - setBackgroundColor(Colours().toolbarColour(context)) - setNavigationOnClickListener { - onBackPressed() - } + binding.toolbar.setNavigationOnClickListener { + onBackPressed() } if ((intent.extras ?: return).getBoolean("switch")) { @@ -88,9 +76,15 @@ class Settings : AppCompatActivity() { val darkmode = sharedPrefs.getBoolean("dark_mode", false) val sys = sharedPrefs.getBoolean("sys", true) when { - sys -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) - darkmode -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) - else -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) + sys -> { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) + } + darkmode -> { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) + } + else -> { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) + } } } @@ -105,7 +99,7 @@ class Settings : AppCompatActivity() { override fun onPreferenceTreeClick(preference: Preference?): Boolean { when (preference?.key) { "About" -> startActivity(Intent(activity, About::class.java)) - "Intro" -> startActivity(Intent(activity, IntroActivity::class.java).putExtra("backto", 0)) + "Help" -> startActivity(Intent(activity, Intro::class.java)) "AboutLibraries" -> startActivity(Intent(activity, AboutLibraries::class.java)) } return true @@ -115,135 +109,72 @@ class Settings : AppCompatActivity() { setPreferencesFromResource(R.xml.root_preferences, rootKey) - updateLanguageSummary() - updateThemeSummary() updateColorSummary() + updateThemeSummary() + updateLanguageSummary() - findPreference("app_language")?.apply { - onPreferenceClickListener = Preference.OnPreferenceClickListener { - showLanguagePopup() + findPreference("accent_color")?.apply { + this.onPreferenceClickListener = Preference.OnPreferenceClickListener { + showColorPopup() true } } findPreference("theme")?.apply { - onPreferenceClickListener = Preference.OnPreferenceClickListener { + this.onPreferenceClickListener = Preference.OnPreferenceClickListener { showThemePopup() true } } - findPreference("accent_color")?.apply { - onPreferenceClickListener = Preference.OnPreferenceClickListener { - showColorPopup() + findPreference("app_language")?.apply { + this.onPreferenceClickListener = Preference.OnPreferenceClickListener { + showLanguagePopup() true } } - - findPreference("About")?.apply { - icon = - IconicsDrawable(requireContext(), RoundedGoogleMaterial.Icon.gmr_info).apply { - colorInt = getColor(requireContext(), R.color.textColorPrimary) - sizeDp = 20 - } - } - - findPreference("Intro")?.apply { - icon = IconicsDrawable( - requireContext(), - RoundedGoogleMaterial.Icon.gmr_view_carousel - ).apply { - colorInt = getColor(requireContext(), R.color.textColorPrimary) - sizeDp = 20 - } - } - - findPreference("AboutLibraries")?.apply { - icon = IconicsDrawable( - requireContext(), - RoundedGoogleMaterial.Icon.gmr_library_books - ).apply { - colorInt = getColor(requireContext(), R.color.textColorPrimary) - sizeDp = 20 - } - } } - private fun updateLanguageSummary() { - findPreference("app_language")?.apply { - icon = IconicsDrawable( - requireContext(), - RoundedGoogleMaterial.Icon.gmr_language - ).apply { - colorInt = getColor(requireContext(), R.color.textColorPrimary) - sizeDp = 20 + private fun updateColorSummary() { + findPreference("accent_color")?.apply { + this.summary = when (Colours().getAccentColourAsString(requireContext())) { + "pink" -> getString(R.string.pink) + "violet" -> getString(R.string.violet) + "blue" -> getString(R.string.blue) + "lightBlue" -> getString(R.string.lightBlue) + "teal" -> getString(R.string.teal) + "green" -> getString(R.string.green) + "lime" -> getString(R.string.lime) + "yellow" -> getString(R.string.yellow) + "orange" -> getString(R.string.orange) + "red" -> getString(R.string.red) + "crimson" -> getString(R.string.crimson) + else -> getString(R.string.original) } - val int = Languages(base = context).getLanguageAsInt(requireContext()) - val singleItems = resources.getStringArray(R.array.language_entries) - summary = singleItems[int] } } private fun updateThemeSummary() { - val lightModeDrawable = - IconicsDrawable(requireContext(), RoundedGoogleMaterial.Icon.gmr_wb_sunny).apply { - colorInt = getColor(requireContext(), R.color.textColorPrimary) - sizeDp = 20 - } - val darkModeDrawable = IconicsDrawable( - requireContext(), - RoundedGoogleMaterial.Icon.gmr_nights_stay - ).apply { - colorInt = getColor(requireContext(), R.color.textColorPrimary) - sizeDp = 20 - } - val systemDefaultDrawable = IconicsDrawable( - requireContext(), - RoundedGoogleMaterial.Icon.gmr_brightness_medium - ).apply { - colorInt = getColor(requireContext(), R.color.textColorPrimary) - sizeDp = 20 - } findPreference("theme")?.apply { - summary = when (Theme().getAppTheme(requireContext())) { + this.summary = when (Theme().getAppTheme(requireContext())) { 0 -> { - icon = lightModeDrawable + this.setIcon(R.drawable.ic_day_settings) getString(R.string.light_mode) } 1 -> { - icon = darkModeDrawable + this.setIcon(R.drawable.ic_night_settings) getString(R.string.dark_mode) } - else -> { - icon = systemDefaultDrawable - getString(R.string.follow_system_default) - } + else -> getString(R.string.follow_system_default) } } } - private fun updateColorSummary() { - val paletteDrawable = - IconicsDrawable(requireContext(), RoundedGoogleMaterial.Icon.gmr_palette).apply { - colorInt = getColor(requireContext(), R.color.textColorPrimary) - sizeDp = 20 - } - findPreference("accent_color")?.apply { - icon = paletteDrawable - summary = when (Colours().getAccentColourAsString(requireContext())) { - "pink" -> getString(R.string.pink) - "violet" -> getString(R.string.violet) - "blue" -> getString(R.string.blue) - "lightBlue" -> getString(R.string.lightBlue) - "teal" -> getString(R.string.teal) - "green" -> getString(R.string.green) - "lime" -> getString(R.string.lime) - "yellow" -> getString(R.string.yellow) - "orange" -> getString(R.string.orange) - "red" -> getString(R.string.red) - "crimson" -> getString(R.string.crimson) - else -> getString(R.string.original) - } + private fun updateLanguageSummary() { + findPreference("app_language")?.apply { + val int = Languages(base = context).getLanguageAsInt(requireContext()) + val singleItems = resources.getStringArray(R.array.language_entries) + this.summary = singleItems[int] } } @@ -251,22 +182,20 @@ class Settings : AppCompatActivity() { val sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context) val editor = sharedPrefs.edit() val values = resources.getStringArray(R.array.language_values) - val defaultDrawable = IconicsDrawable(requireContext(), Octicons.Icon.oct_code_review) - val machineDrawable = IconicsDrawable(requireContext(), Octicons.Icon.oct_cpu) OptionsSheet().show(requireContext()) { title(R.string.settings_language) style(SheetStyle.DIALOG) displayMode(DisplayMode.GRID_VERTICAL) with( - Option(defaultDrawable, R.string.en), - Option(machineDrawable, R.string.fr), - Option(machineDrawable, R.string.de), - Option(machineDrawable, R.string.es), - Option(machineDrawable, R.string.ru), - Option(machineDrawable, R.string.zh), - Option(machineDrawable, R.string.ja), - Option(machineDrawable, R.string.hi), + Option(R.drawable.ic_default, R.string.en), + Option(R.drawable.ic_machine, R.string.fr), + Option(R.drawable.ic_machine, R.string.de), + Option(R.drawable.ic_machine, R.string.es), + Option(R.drawable.ic_machine, R.string.ru), + Option(R.drawable.ic_machine, R.string.zh), + Option(R.drawable.ic_machine, R.string.ja), + Option(R.drawable.ic_machine, R.string.hi), Option(R.drawable.ic_language, R.string.pl) ) onNegative { requireView().performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) } @@ -281,13 +210,17 @@ class Settings : AppCompatActivity() { editor.putInt("app_language_int", index) editor.putString("app_language", values[index]) editor.apply() - startActivity(Intent(context, Settings::class.java).putExtra("lang", true)) + val intent2 = Intent(context, Settings::class.java) + intent2.putExtra("lang", true) + startActivity(intent2) activity?.finish() activity?.overridePendingTransition( android.R.anim.fade_in, android.R.anim.fade_out ) - } else dismiss() + } else { + dismiss() + } } onNegative { requireView().performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) @@ -298,20 +231,14 @@ class Settings : AppCompatActivity() { private fun showThemePopup() { val pref = requireContext().getSharedPreferences("Settings", 0) val editor = pref.edit() - val lightModeDrawable = - IconicsDrawable(requireContext(), RoundedGoogleMaterial.Icon.gmr_wb_sunny) - val darkModeDrawable = - IconicsDrawable(requireContext(), RoundedGoogleMaterial.Icon.gmr_nights_stay) - val systemDefaultDrawable = - IconicsDrawable(requireContext(), RoundedGoogleMaterial.Icon.gmr_brightness_medium) OptionsSheet().show(requireContext()) { title(R.string.app_theme) style(SheetStyle.DIALOG) with( - Option(lightModeDrawable, R.string.light_mode), - Option(darkModeDrawable, R.string.dark_mode), - Option(systemDefaultDrawable, R.string.follow_system_default) + Option(R.drawable.ic_day_settings, R.string.light_mode), + Option(R.drawable.ic_night_settings, R.string.dark_mode), + Option(R.drawable.ic_palette, R.string.follow_system_default) ) onNegative { requireView().performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) } onPositive { index: Int, _: Option -> @@ -342,15 +269,14 @@ class Settings : AppCompatActivity() { } } editor.apply() - startActivity( - Intent(context, Settings::class.java).putExtra( - "switch", - true - ) - ) + val intent2 = Intent(context, Settings::class.java) + intent2.putExtra("switch", true) + startActivity(intent2) activity?.finish() activity?.overridePendingTransition(0, 0) - } else dismiss() + } else { + dismiss() + } } } } @@ -409,24 +335,28 @@ class Settings : AppCompatActivity() { updateColorSummary() - startActivity( - Intent(context, Settings::class.java).putExtra( - "switch", - true - ) - ) + val intent2 = Intent(context, Settings::class.java) + intent2.putExtra("switch", true) + startActivity(intent2) activity?.finish() activity?.overridePendingTransition( android.R.anim.fade_in, android.R.anim.fade_out ) - } else dismiss() + } else { + dismiss() + } } } } } override fun onBackPressed() { + startActivity(Intent(this@Settings, Main::class.java)) finish() + overridePendingTransition( + R.anim.anim_slide_in_right, + R.anim.anim_slide_out_right + ) } } diff --git a/app/src/main/java/org/bandev/buddhaquotes/activities/Splash.kt b/app/src/main/java/org/bandev/buddhaquotes/activities/Splash.kt index 4969805b..90f64240 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/activities/Splash.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/activities/Splash.kt @@ -28,6 +28,7 @@ import android.os.Build import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate +import org.bandev.buddhaquotes.core.Store /** * The splash screen @@ -41,12 +42,22 @@ class Splash : AppCompatActivity() { val darkmode = sharedPrefs.getBoolean("dark_mode", false) val sys = sharedPrefs.getBoolean("sys", true) + // Clear the stored data + Store(this).fragment = 0 + Store(this).quoteID = 0 + when { - sys -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) - darkmode -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) - else -> AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) + sys -> { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) + } + darkmode -> { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) + } + else -> { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) + } } - startActivity(Intent(this, Migrate::class.java)) + startActivity(Intent(this, Main::class.java)) finish() } diff --git a/app/src/main/java/org/bandev/buddhaquotes/activities/TimerActivity.kt b/app/src/main/java/org/bandev/buddhaquotes/activities/TimerActivity.kt index 4f498c44..838281af 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/activities/TimerActivity.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/activities/TimerActivity.kt @@ -21,7 +21,6 @@ along with this program. If not, see . package org.bandev.buddhaquotes.activities import android.content.Context -import android.graphics.Color import android.media.MediaPlayer import android.os.Build import android.os.Bundle @@ -34,10 +33,6 @@ import com.maxkeppeler.sheets.input.InputSheet import com.maxkeppeler.sheets.input.type.InputCheckBox import com.maxkeppeler.sheets.time.TimeFormat import com.maxkeppeler.sheets.time.TimeSheet -import com.mikepenz.iconics.IconicsDrawable -import com.mikepenz.iconics.typeface.library.googlematerial.RoundedGoogleMaterial -import com.mikepenz.iconics.utils.colorInt -import com.mikepenz.iconics.utils.sizeDp import org.bandev.buddhaquotes.R import org.bandev.buddhaquotes.core.Colours import org.bandev.buddhaquotes.core.Compatibility @@ -61,42 +56,26 @@ class TimerActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - // Setup view binding - binding = ActivityTimerBinding.inflate(layoutInflater) - setContentView(binding.root) // Get an instance of settings settings = Timer().Settings(this) // Set theme, navigation bar and language - Colours().setAccentColour(this) - Colours().setStatusBar(this, window) - Compatibility().setNavigationBarColourDefault(this, window) + Colours().setAccentColour(this, window, resources) + Compatibility().setNavigationBarColourDefault(this, window, resources) Languages(baseContext).setLanguage() - // Setup toolbar - setSupportActionBar(binding.toolbar) - with(binding.toolbar) { - navigationIcon = IconicsDrawable(context, RoundedGoogleMaterial.Icon.gmr_close).apply { - colorInt = Color.WHITE - sizeDp = 16 - } - setBackgroundColor(Colours().toolbarColour(context)) - setNavigationOnClickListener { - onBackPressed() - } - } + // Setup da view + binding = ActivityTimerBinding.inflate(layoutInflater) + setContentView(binding.root) // On settings click - with(binding.settings) { - setBackgroundColor(Colours().getAccentColourAsInt(context)) - setOnClickListener { - binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) - settingsSheet() - } + binding.settings.setOnClickListener { + binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) + settingsSheet() } - // Get the duration (milli seconds) of the timer + // Get the duration (mili seconds) of the timer durationTimeInMillis = (intent.extras ?: return).getLong("durationTimeInMillis") // Work out the other things we now know @@ -112,20 +91,32 @@ class TimerActivity : AppCompatActivity() { // Begin the timer startTimer(durationTimeInS) + // Handle the people that want to leave + binding.toolbar.setNavigationOnClickListener { + onBackPressed() + } + // When some geezer presses Pause - with(binding.pause) { - setBackgroundColor(Colours().getAccentColourAsInt(context)) - setOnClickListener { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - binding.root.performHapticFeedback(HapticFeedbackConstants.CONFIRM) - } else { - binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) - } + binding.pause.setOnClickListener { + // Nice haptic feedback. I like!!!! + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + binding.root.performHapticFeedback(HapticFeedbackConstants.CONFIRM) + } else { + binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) + } - when { - isPaused -> resume() - isRunning -> pause() - else -> reset() + when { + isPaused -> { + // Resume timer + resume() + } + isRunning -> { + // Pause timer + pause() + } + else -> { + // Reset the timer once it has finished + reset() } } } @@ -135,6 +126,7 @@ class TimerActivity : AppCompatActivity() { val vibrateSecondOriginal = settings.vibrateSecond val endSoundOriginal = settings.endSoundID val endNotificationOriginal = settings.showNotificaton + val sounds = mutableListOf("Chime", "No") InputSheet().show(this) { title("Timer Settings") @@ -162,11 +154,9 @@ class TimerActivity : AppCompatActivity() { onNegative { binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) // Reset their settings if they cancel the sheet - with(settings) { - vibrateSecond = vibrateSecondOriginal - endSoundID = endSoundOriginal - showNotificaton = endNotificationOriginal - } + settings.vibrateSecond = vibrateSecondOriginal + settings.endSoundID = endSoundOriginal + settings.showNotificaton = endNotificationOriginal } onPositive { binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) } } @@ -187,12 +177,10 @@ class TimerActivity : AppCompatActivity() { } // Change button text & icon - with(binding.pause) { - text = getString(R.string.pause) - setCompoundDrawablesWithIntrinsicBounds( - R.drawable.ic_pause, 0, 0, 0 - ) - } + binding.pause.text = getString(R.string.pause) + binding.pause.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_pause, 0, 0, 0 + ) // Restart timer now startTimer(durationTimeInMillis * 1000) @@ -203,12 +191,10 @@ class TimerActivity : AppCompatActivity() { // Resume timer private fun resume() { // Change button text & icon - with(binding.pause) { - text = getString(R.string.pause) - setCompoundDrawablesWithIntrinsicBounds( - R.drawable.ic_pause, 0, 0, 0 - ) - } + binding.pause.text = getString(R.string.pause) + binding.pause.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_pause, 0, 0, 0 + ) // Start the timer from the last recorded progress startTimer(progressTimeInMillis) @@ -219,12 +205,10 @@ class TimerActivity : AppCompatActivity() { // Pause timer private fun pause() { // Change button text & icon - with(binding.pause) { - text = getString(R.string.play) - setCompoundDrawablesWithIntrinsicBounds( - R.drawable.ic_play, 0, 0, 0 - ) - } + binding.pause.text = getString(R.string.play) + binding.pause.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_play, 0, 0, 0 + ) // Stop the timer countDownTimer.cancel() @@ -256,12 +240,10 @@ class TimerActivity : AppCompatActivity() { } // Change button text & icon - with(binding.pause) { - text = getString(R.string.reset) - setCompoundDrawablesWithIntrinsicBounds( - R.drawable.ic_refresh, 0, 0, 0 - ) - } + binding.pause.text = getString(R.string.reset) + binding.pause.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_refresh, 0, 0, 0 + ) // Play the gong gong.start() @@ -311,15 +293,13 @@ class TimerActivity : AppCompatActivity() { // Update the notification text and progress if (settings.showNotificaton) { - with(notifBuilder) { - setContentTitle(getString(R.string.meditating_for) + " $maxTime") - setContentText("$minute:$seconds") - setProgress( - durationTimeInMillis.toInt(), - durationTimeInMillis.toInt() - time.toInt() / 1000, - false - ) - } + notifBuilder.setContentTitle(getString(R.string.meditating_for) + " $maxTime") + notifBuilder.setContentText("$minute:$seconds") + notifBuilder.setProgress( + durationTimeInMillis.toInt(), + durationTimeInMillis.toInt() - time.toInt() / 1000, + false + ) pushNotification(this) } diff --git a/app/src/main/java/org/bandev/buddhaquotes/adapters/QuoteRecycler.kt b/app/src/main/java/org/bandev/buddhaquotes/adapters/QuoteRecycler.kt index 94b9d078..e53b5f9a 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/adapters/QuoteRecycler.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/adapters/QuoteRecycler.kt @@ -72,7 +72,7 @@ class QuoteRecycler( init { binding.like.setOnClickListener(this) - binding.share.setOnClickListener { + binding.more.setOnClickListener { val position = bindingAdapterPosition if (position != RecyclerView.NO_POSITION) { listener.onCardClick(position) diff --git a/app/src/main/java/org/bandev/buddhaquotes/core/Colours.kt b/app/src/main/java/org/bandev/buddhaquotes/core/Colours.kt index 78c53125..939c7cc5 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/core/Colours.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/core/Colours.kt @@ -25,7 +25,7 @@ import android.content.res.Configuration import android.content.res.Resources import android.util.TypedValue import android.view.Window -import androidx.core.content.ContextCompat.getColor +import androidx.core.content.res.ResourcesCompat import androidx.preference.PreferenceManager import org.bandev.buddhaquotes.R @@ -42,9 +42,10 @@ class Colours { /** * Sets activity's theme based off setting from preferences * @param [context] context of activity (Context) + * @param [window] context of window (Window) */ - fun setAccentColour(context: Context) { + fun setAccentColour(context: Context, window: Window, resources: Resources) { val sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context) //Set the accent @@ -62,38 +63,21 @@ class Colours { "crimson" -> context.setTheme(R.style.AppTheme_Crimson) else -> context.setTheme(R.style.AppTheme_Original) } - } - - /** - * Sets status bar as accent colour when in light mode or a dark grey when in dark mode - * @param [context] context of activity (Context) - * @param [window] context of window (Window) - */ - - fun setStatusBar(context: Context, window: Window) { - when (context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { - Configuration.UI_MODE_NIGHT_NO -> window.statusBarColor = getAccentColourAsInt(context) - Configuration.UI_MODE_NIGHT_YES -> window.statusBarColor = - getColor(context, R.color.darkModeBar) - } - } - - /** - * Returns the accent colour when in light mode or a dark grey when in dark mode - * @param [context] context of activity (Context) - * @return The integer of the colour (Int) - */ - fun toolbarColour(context: Context): Int { when (context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { - Configuration.UI_MODE_NIGHT_NO -> return getAccentColourAsInt(context) - Configuration.UI_MODE_NIGHT_YES -> return getColor(context, R.color.darkModeBar) + Configuration.UI_MODE_NIGHT_NO -> { + window.statusBarColor = getAccentColourAsInt(context) + } + Configuration.UI_MODE_NIGHT_YES -> { + window.statusBarColor = + ResourcesCompat.getColor(resources, R.color.darkModeBar, null) + } } - return -1 } /** * Gets the current colour and returns it as a string + * * @param [context] context of activity (Context) * @return The name of the colour (String) */ @@ -105,6 +89,7 @@ class Colours { /** * Gets the current colour and returns it as an int + * * @param [context] context of activity (Context) * @return The accent colour (Int) */ diff --git a/app/src/main/java/org/bandev/buddhaquotes/core/Compatibility.kt b/app/src/main/java/org/bandev/buddhaquotes/core/Compatibility.kt index ca87d152..c0c05bc8 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/core/Compatibility.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/core/Compatibility.kt @@ -22,13 +22,14 @@ package org.bandev.buddhaquotes.core import android.content.Context import android.content.res.Configuration +import android.content.res.Resources import android.graphics.Color import android.os.Build import android.view.View import android.view.ViewConfiguration import android.view.Window import android.view.WindowInsetsController.APPEARANCE_LIGHT_NAVIGATION_BARS -import androidx.core.content.ContextCompat.getColor +import androidx.core.content.res.ResourcesCompat import org.bandev.buddhaquotes.R /** @@ -37,10 +38,9 @@ import org.bandev.buddhaquotes.R * * @author Fennec_exe * @since v1.5.0 - * @updated 13/03/2021 + * @updated 29/10/2020 */ -@Suppress("DEPRECATION") class Compatibility { /** @@ -49,33 +49,30 @@ class Compatibility { * @param [window] context of window (Window) */ - fun setNavigationBarColourDefault(context: Context, window: Window) { - // Only run the code if the user has a navigation bar + fun setNavigationBarColourDefault(context: Context, window: Window, resources: Resources) { if (!ViewConfiguration.get(context).hasPermanentMenuKey()) { when (context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { Configuration.UI_MODE_NIGHT_NO -> { - // If using >= Android 11, set the navigation bar icons to be dark using the newer function if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { window.decorView.windowInsetsController?.setSystemBarsAppearance( APPEARANCE_LIGHT_NAVIGATION_BARS, // value APPEARANCE_LIGHT_NAVIGATION_BARS // mask ) - } - // If using Android 8-10, set the navigation bar icons to be dark with the deprecated function - else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + @Suppress("DEPRECATION") window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR } - // If using >= Android 8, set the navigation bar colour to white to match dark icons if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { window.navigationBarColor = Color.WHITE + } else { + window.navigationBarColor = Color.GRAY } - // If using < Android 8, set the navigation bar colour to gray as dark icons were not supported before Android 8 - else window.navigationBarColor = Color.GRAY } - // If using dark mode, set the navigation bar colour to the colour of the background - Configuration.UI_MODE_NIGHT_YES -> window.navigationBarColor = - getColor(context, R.color.background) + Configuration.UI_MODE_NIGHT_YES -> { + window.navigationBarColor = + ResourcesCompat.getColor(resources, R.color.background, null) + } } } } @@ -86,34 +83,31 @@ class Compatibility { * @param [window] context of window (Window) */ - fun setNavigationBarColourMain(context: Context, window: Window) { - // Only run the code if the user has a navigation bar + fun setNavigationBarColourMain(context: Context, window: Window, resources: Resources) { if (!ViewConfiguration.get(context).hasPermanentMenuKey()) { when (context.resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) { Configuration.UI_MODE_NIGHT_NO -> { - // If using >= Android 11, set the navigation bar icons to be dark using the newer function if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { window.decorView.windowInsetsController?.setSystemBarsAppearance( APPEARANCE_LIGHT_NAVIGATION_BARS, // value APPEARANCE_LIGHT_NAVIGATION_BARS // mask ) - } - // If using Android 8-10, set the navigation bar icons to be dark with the deprecated function - else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + @Suppress("DEPRECATION") window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR } - // If using >= Android 8, set the navigation bar colour to white to match dark icons if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { window.navigationBarColor = Color.WHITE + } else { + window.navigationBarColor = Color.GRAY } - // If using < Android 8, set the navigation bar colour to gray as dark icons were not supported before Android 8 - else window.navigationBarColor = Color.GRAY } - // If using dark mode, set the navigation bar colour to the same colour as the bottom bar on the Main Activity - Configuration.UI_MODE_NIGHT_YES -> window.navigationBarColor = - getColor(context, R.color.abbBackgroundColor) + Configuration.UI_MODE_NIGHT_YES -> { + window.navigationBarColor = + ResourcesCompat.getColor(resources, R.color.abbBackgroundColor, null) + } } } } -} +} \ No newline at end of file diff --git a/app/src/main/java/org/bandev/buddhaquotes/core/Lists.kt b/app/src/main/java/org/bandev/buddhaquotes/core/Lists.kt index e6e76149..221617d7 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/core/Lists.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/core/Lists.kt @@ -32,8 +32,7 @@ import java.util.* * @updated 10/12/2020 */ -@Deprecated("This is deprecated use Listsv2 instead") -open class Lists { +class Lists { /** * Sets activity's theme based off setting from preferences @@ -159,12 +158,4 @@ open class Lists { editor.apply() } - fun getList(name: String, context: Context): List { - val pref = context.getSharedPreferences("List_system", 0) - val prefString = pref.getString(name, "") - val prefListTmp: MutableList = prefString!!.split("//").toMutableList() - prefListTmp.remove("null") - return prefListTmp - } - } \ No newline at end of file diff --git a/app/src/main/java/org/bandev/buddhaquotes/core/ListsV2.kt b/app/src/main/java/org/bandev/buddhaquotes/core/ListsV2.kt deleted file mode 100644 index 842b99a9..00000000 --- a/app/src/main/java/org/bandev/buddhaquotes/core/ListsV2.kt +++ /dev/null @@ -1,189 +0,0 @@ -/** - -Buddha Quotes -Copyright (C) 2021 BanDev - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - - */ - -package org.bandev.buddhaquotes.core - -import android.content.Context -import android.content.SharedPreferences -import java.util.* - -class ListsV2(context: Context) { - - var sharedPrefs: SharedPreferences = context.getSharedPreferences("ListV2", 0) - var editor: SharedPreferences.Editor = sharedPrefs.edit() - - /** - * Get a list of quotes - * @param name [String] - The name of the list - * @return [List] - The list of QuoteID's - * @author Jack Devey - * @since v2.2.0 (01/03/2021) - */ - - fun getList(name: String): List { - val listStr = sharedPrefs.getString(name, "-1") - val listStrTmp: MutableList = listStr!!.split("//").toMutableList() - val intList: MutableList = mutableListOf() - for (s in listStrTmp) intList.add(Integer.valueOf(s)) - return intList - } - - /** - * Creates a new list with the name provided - * @param name [String] - The name of the list - * @param data [List] - The data of the list - * @return [Boolean] - True if data was saved, false if not - * @author Jack Devey - * @since v2.2.0 (01/03/2021) - */ - - fun newList(name: String, data: List) { - val current = sharedPrefs.getString("MASTER_LIST", "Favourites") - if (!getMasterList().contains(name)) editor.putString("MASTER_LIST", "$current//$name") - with(editor) { - putString(name, data.joinToString(separator = "//")) - apply() - } - } - - /** - * Removes a whole list - * @param name [String] - The name of the list - * @author Jack Devey - * @since v2.2.0 (01/03/2021) - */ - - fun removeList(name: String) { - val listArr = sharedPrefs.getString("MASTER_LIST", "Favourites") - val listArrTemp: MutableList = (listArr?.split("//") ?: return).toMutableList() - val listArrFinal = LinkedList(listArrTemp) - listArrFinal.remove(name) - val stringOut = listArrFinal.joinToString(separator = "//") - with(editor) { - remove(name) - putString("MASTER_LIST", stringOut) - apply() - } - } - - /** - * Creates a new empty list - * @param name [String] - The name of the list - * @author Jack Devey - * @since v2.2.0 (01/03/2021) - */ - - fun newEmptyList(name: String) { - val current = sharedPrefs.getString("MASTER_LIST", "Favourites") - with(editor) { - putString(name, "-1") - putString("MASTER_LIST", "$current//$name") - apply() - } - } - - /** - * Checks if the quote is inside the list already - * @param [quote] the quote to be queried (String) - * @param [name] the name of the list (String) - * @return true if quote is already added, false if it isn't (Boolean) - * @author Jack Devey - * @since v2.2.0 (02/03/2021) - */ - - fun queryInList(quote: Int, name: String): Boolean = getList(name).contains(quote) - - /** - * Saves a list - * @param [list] the integer list (String) - * @param [name] the name of the list (String) - * @author Jack Devey - * @since v2.2.0 (02/03/2021) - */ - - private fun saveList(list: List, name: String) { - val stringOut = list.joinToString(separator = "//") - with(editor) { - putString(name, stringOut) - apply() - } - } - - /** - * Adds a quote to a list - * @param quote [Int] - The quote integer to be added - * @param name [String] - The name of the list - * @author Jack Devey - * @since v2.2.0 (02/03/2021) - */ - - fun addToList(quote: Int, name: String) { - val list: MutableList = getList(name).toMutableList() - list.add(0, quote) - saveList(list, name) - } - - /** - * Removes a quote from a list - * @param quote [Int] - The quote integer to be added - * @param name [String] - The name of the list - * @author Jack Devey - * @since v2.2.0 (02/03/2021) - */ - - fun removeFromList(quote: Int, name: String) { - val list: MutableList = getList(name).toMutableList() - list.remove(quote) - saveList(list, name) - } - - /** - * Gets the list of all the lists on the app - * @return [List] of all the lists - * @author Jack Devey - * @since v2.2.0 (02/03/2021) - */ - - fun getMasterList(): List { - val listArr = sharedPrefs.getString("MASTER_LIST", "Favourites") - val listArrFinal: MutableList = listArr?.split("//")!!.toMutableList() - return LinkedList(listArrFinal) - } - - /** - * Toggles the quote in the list, if it already exists it will be removed - * @param quote [Int] the integer id of the quote - * @param name [String] the name of the list - * @return [Boolean] True if was added, False if deleted - * @author Jack Devey - * @since v2.2.0 (02/03/2021) - */ - - fun toggleInList(quote: Int, name: String): Boolean { - val lists: List = getList(name) - return if (lists.contains(quote)) { - removeFromList(quote, name) - false - } else { - addToList(quote, name) - true - } - } -} \ No newline at end of file diff --git a/app/src/main/java/org/bandev/buddhaquotes/core/Quotes.kt b/app/src/main/java/org/bandev/buddhaquotes/core/Quotes.kt index 7accd7fb..f421795e 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/core/Quotes.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/core/Quotes.kt @@ -295,249 +295,6 @@ class Quotes { return text } - fun getFromString(quote: String, context: Context): Int { - return when (quote) { - context.getString(R.string.quote_1) -> 1 - context.getString(R.string.quote_2) -> 2 - context.getString(R.string.quote_3) -> 3 - context.getString(R.string.quote_4) -> 4 - context.getString(R.string.quote_5) -> 5 - context.getString(R.string.quote_6) -> 6 - context.getString(R.string.quote_7) -> 7 - context.getString(R.string.quote_8) -> 8 - context.getString(R.string.quote_9) -> 9 - context.getString(R.string.quote_10) -> 10 - context.getString(R.string.quote_11) -> 11 - context.getString(R.string.quote_12) -> 12 - context.getString(R.string.quote_13) -> 13 - context.getString(R.string.quote_14) -> 14 - context.getString(R.string.quote_15) -> 15 - context.getString(R.string.quote_16) -> 16 - context.getString(R.string.quote_17) -> 17 - context.getString(R.string.quote_18) -> 18 - context.getString(R.string.quote_19) -> 19 - context.getString(R.string.quote_20) -> 20 - context.getString(R.string.quote_21) -> 21 - context.getString(R.string.quote_22) -> 22 - context.getString(R.string.quote_23) -> 23 - context.getString(R.string.quote_24) -> 24 - context.getString(R.string.quote_25) -> 25 - context.getString(R.string.quote_26) -> 26 - context.getString(R.string.quote_27) -> 27 - context.getString(R.string.quote_28) -> 28 - context.getString(R.string.quote_29) -> 29 - context.getString(R.string.quote_30) -> 30 - context.getString(R.string.quote_31) -> 31 - context.getString(R.string.quote_32) -> 32 - context.getString(R.string.quote_33) -> 33 - context.getString(R.string.quote_34) -> 34 - context.getString(R.string.quote_35) -> 35 - context.getString(R.string.quote_36) -> 36 - context.getString(R.string.quote_37) -> 37 - context.getString(R.string.quote_38) -> 38 - context.getString(R.string.quote_39) -> 39 - context.getString(R.string.quote_40) -> 40 - context.getString(R.string.quote_41) -> 41 - context.getString(R.string.quote_42) -> 42 - context.getString(R.string.quote_43) -> 43 - context.getString(R.string.quote_44) -> 44 - context.getString(R.string.quote_45) -> 45 - context.getString(R.string.quote_46) -> 46 - context.getString(R.string.quote_47) -> 47 - context.getString(R.string.quote_48) -> 48 - context.getString(R.string.quote_49) -> 49 - context.getString(R.string.quote_50) -> 50 - context.getString(R.string.quote_51) -> 51 - context.getString(R.string.quote_52) -> 52 - context.getString(R.string.quote_53) -> 53 - context.getString(R.string.quote_54) -> 54 - context.getString(R.string.quote_55) -> 55 - context.getString(R.string.quote_56) -> 56 - context.getString(R.string.quote_57) -> 57 - context.getString(R.string.quote_58) -> 58 - context.getString(R.string.quote_59) -> 59 - context.getString(R.string.quote_60) -> 60 - context.getString(R.string.quote_61) -> 61 - context.getString(R.string.quote_62) -> 62 - context.getString(R.string.quote_63) -> 63 - context.getString(R.string.quote_64) -> 64 - context.getString(R.string.quote_65) -> 65 - context.getString(R.string.quote_66) -> 66 - context.getString(R.string.quote_67) -> 67 - context.getString(R.string.quote_68) -> 68 - context.getString(R.string.quote_69) -> 69 - context.getString(R.string.quote_70) -> 70 - context.getString(R.string.quote_71) -> 71 - context.getString(R.string.quote_72) -> 72 - context.getString(R.string.quote_73) -> 73 - context.getString(R.string.quote_74) -> 74 - context.getString(R.string.quote_75) -> 75 - context.getString(R.string.quote_76) -> 76 - context.getString(R.string.quote_77) -> 77 - context.getString(R.string.quote_78) -> 78 - context.getString(R.string.quote_79) -> 79 - context.getString(R.string.quote_80) -> 80 - context.getString(R.string.quote_81) -> 81 - context.getString(R.string.quote_82) -> 82 - context.getString(R.string.quote_83) -> 83 - context.getString(R.string.quote_84) -> 84 - context.getString(R.string.quote_85) -> 85 - context.getString(R.string.quote_86) -> 86 - context.getString(R.string.quote_87) -> 87 - context.getString(R.string.quote_88) -> 88 - context.getString(R.string.quote_89) -> 89 - context.getString(R.string.quote_90) -> 90 - context.getString(R.string.quote_91) -> 91 - context.getString(R.string.quote_92) -> 92 - context.getString(R.string.quote_93) -> 93 - context.getString(R.string.quote_94) -> 94 - context.getString(R.string.quote_95) -> 95 - context.getString(R.string.quote_96) -> 96 - context.getString(R.string.quote_97) -> 97 - context.getString(R.string.quote_98) -> 98 - context.getString(R.string.quote_99) -> 99 - context.getString(R.string.quote_100) -> 100 - context.getString(R.string.quote_101) -> 101 - context.getString(R.string.quote_102) -> 102 - context.getString(R.string.quote_103) -> 103 - context.getString(R.string.quote_104) -> 104 - context.getString(R.string.quote_105) -> 105 - context.getString(R.string.quote_106) -> 106 - context.getString(R.string.quote_107) -> 107 - context.getString(R.string.quote_108) -> 108 - context.getString(R.string.quote_109) -> 109 - context.getString(R.string.quote_110) -> 110 - context.getString(R.string.quote_111) -> 111 - context.getString(R.string.quote_112) -> 112 - context.getString(R.string.quote_113) -> 113 - context.getString(R.string.quote_114) -> 114 - context.getString(R.string.quote_115) -> 115 - context.getString(R.string.quote_116) -> 116 - context.getString(R.string.quote_117) -> 117 - context.getString(R.string.quote_118) -> 118 - context.getString(R.string.quote_119) -> 119 - context.getString(R.string.quote_120) -> 120 - context.getString(R.string.quote_121) -> 121 - context.getString(R.string.quote_122) -> 122 - context.getString(R.string.quote_123) -> 123 - context.getString(R.string.quote_124) -> 124 - context.getString(R.string.quote_125) -> 125 - context.getString(R.string.quote_126) -> 126 - context.getString(R.string.quote_127) -> 127 - context.getString(R.string.quote_128) -> 128 - context.getString(R.string.quote_129) -> 129 - context.getString(R.string.quote_130) -> 130 - context.getString(R.string.quote_131) -> 131 - context.getString(R.string.quote_132) -> 132 - context.getString(R.string.quote_133) -> 133 - context.getString(R.string.quote_134) -> 134 - context.getString(R.string.quote_135) -> 135 - context.getString(R.string.quote_136) -> 136 - context.getString(R.string.quote_137) -> 137 - context.getString(R.string.quote_138) -> 138 - context.getString(R.string.quote_139) -> 139 - context.getString(R.string.quote_140) -> 140 - context.getString(R.string.quote_141) -> 141 - context.getString(R.string.quote_142) -> 142 - context.getString(R.string.quote_143) -> 143 - context.getString(R.string.quote_144) -> 144 - context.getString(R.string.quote_145) -> 145 - context.getString(R.string.quote_146) -> 146 - context.getString(R.string.quote_147) -> 147 - context.getString(R.string.quote_148) -> 148 - context.getString(R.string.quote_149) -> 149 - context.getString(R.string.quote_150) -> 150 - context.getString(R.string.quote_151) -> 151 - context.getString(R.string.quote_152) -> 152 - context.getString(R.string.quote_153) -> 153 - context.getString(R.string.quote_154) -> 154 - context.getString(R.string.quote_155) -> 155 - context.getString(R.string.quote_156) -> 156 - context.getString(R.string.quote_157) -> 157 - context.getString(R.string.quote_158) -> 158 - context.getString(R.string.quote_159) -> 159 - context.getString(R.string.quote_160) -> 160 - context.getString(R.string.quote_161) -> 161 - context.getString(R.string.quote_162) -> 162 - context.getString(R.string.quote_163) -> 163 - context.getString(R.string.quote_164) -> 164 - context.getString(R.string.quote_165) -> 165 - context.getString(R.string.quote_166) -> 166 - context.getString(R.string.quote_167) -> 167 - context.getString(R.string.quote_168) -> 168 - context.getString(R.string.quote_169) -> 169 - context.getString(R.string.quote_170) -> 170 - context.getString(R.string.quote_171) -> 171 - context.getString(R.string.quote_172) -> 172 - context.getString(R.string.quote_173) -> 173 - context.getString(R.string.quote_174) -> 174 - context.getString(R.string.quote_175) -> 175 - context.getString(R.string.quote_176) -> 176 - context.getString(R.string.quote_177) -> 177 - context.getString(R.string.quote_178) -> 178 - context.getString(R.string.quote_179) -> 179 - context.getString(R.string.quote_180) -> 180 - context.getString(R.string.quote_181) -> 181 - context.getString(R.string.quote_182) -> 182 - context.getString(R.string.quote_183) -> 183 - context.getString(R.string.quote_184) -> 184 - context.getString(R.string.quote_185) -> 185 - context.getString(R.string.quote_186) -> 186 - context.getString(R.string.quote_187) -> 187 - context.getString(R.string.quote_188) -> 188 - context.getString(R.string.quote_189) -> 189 - context.getString(R.string.quote_190) -> 190 - context.getString(R.string.quote_191) -> 191 - context.getString(R.string.quote_192) -> 192 - context.getString(R.string.quote_193) -> 193 - context.getString(R.string.quote_194) -> 194 - context.getString(R.string.quote_195) -> 195 - context.getString(R.string.quote_196) -> 196 - context.getString(R.string.quote_197) -> 197 - context.getString(R.string.quote_198) -> 198 - context.getString(R.string.quote_199) -> 199 - context.getString(R.string.quote_200) -> 200 - context.getString(R.string.quote_201) -> 201 - context.getString(R.string.quote_202) -> 202 - context.getString(R.string.quote_203) -> 203 - context.getString(R.string.quote_204) -> 204 - context.getString(R.string.quote_205) -> 205 - context.getString(R.string.quote_206) -> 206 - context.getString(R.string.quote_207) -> 207 - context.getString(R.string.quote_208) -> 208 - context.getString(R.string.quote_209) -> 209 - context.getString(R.string.quote_210) -> 210 - context.getString(R.string.quote_211) -> 211 - context.getString(R.string.quote_212) -> 212 - context.getString(R.string.quote_213) -> 213 - context.getString(R.string.quote_214) -> 214 - context.getString(R.string.quote_215) -> 215 - context.getString(R.string.quote_216) -> 216 - context.getString(R.string.quote_217) -> 217 - context.getString(R.string.quote_218) -> 218 - context.getString(R.string.quote_219) -> 219 - context.getString(R.string.quote_220) -> 220 - context.getString(R.string.quote_221) -> 221 - context.getString(R.string.quote_222) -> 222 - context.getString(R.string.quote_223) -> 223 - context.getString(R.string.quote_224) -> 224 - context.getString(R.string.quote_225) -> 225 - context.getString(R.string.quote_226) -> 226 - context.getString(R.string.quote_227) -> 227 - context.getString(R.string.quote_228) -> 228 - context.getString(R.string.quote_229) -> 229 - context.getString(R.string.quote_230) -> 230 - context.getString(R.string.quote_231) -> 231 - context.getString(R.string.quote_232) -> 232 - context.getString(R.string.quote_233) -> 233 - context.getString(R.string.quote_234) -> 234 - context.getString(R.string.quote_235) -> 235 - context.getString(R.string.quote_236) -> 236 - context.getString(R.string.quote_237) -> 237 - else -> -1 - } - } - companion object { fun getRandomIntegerBetweenRange(min: Double, max: Double): Double { return (Math.random() * (max - min + 1)).toInt() + min diff --git a/app/src/main/java/org/bandev/buddhaquotes/core/Store.kt b/app/src/main/java/org/bandev/buddhaquotes/core/Store.kt index 10c68b69..ace2e55e 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/core/Store.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/core/Store.kt @@ -32,10 +32,18 @@ class Store(context: Context) { private var sharedPrefs: SharedPreferences = context.getSharedPreferences("Store", 0) private var editor: SharedPreferences.Editor = sharedPrefs.edit() + var fragment: Int + get() = sharedPrefs.getInt("fragment", Fragments.QUOTE) + set(value) { + editor.putInt("fragment", value) + editor.commit() + } + var quoteID: Int get() = sharedPrefs.getInt("quoteID", 0) set(value) { editor.putInt("quoteID", value) editor.commit() } -} + +} \ No newline at end of file diff --git a/app/src/main/java/org/bandev/buddhaquotes/custom/NonScrollListView.kt b/app/src/main/java/org/bandev/buddhaquotes/custom/NonScrollListView.kt deleted file mode 100644 index 4cec1424..00000000 --- a/app/src/main/java/org/bandev/buddhaquotes/custom/NonScrollListView.kt +++ /dev/null @@ -1,44 +0,0 @@ -/** - -Buddha Quotes -Copyright (C) 2021 BanDev - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - - */ - -package org.bandev.buddhaquotes.custom - -import android.content.Context -import android.util.AttributeSet -import android.widget.ListView - -class NonScrollListView : ListView { - constructor(context: Context?) : super(context) - constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs) - constructor(context: Context?, attrs: AttributeSet?, defStyle: Int) : super( - context, - attrs, - defStyle - ) - - public override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { - val heightmeasurespecCustom = MeasureSpec.makeMeasureSpec( - Int.MAX_VALUE shr 2, MeasureSpec.AT_MOST - ) - super.onMeasure(widthMeasureSpec, heightmeasurespecCustom) - val params = layoutParams - params.height = measuredHeight - } -} \ No newline at end of file diff --git a/app/src/main/java/org/bandev/buddhaquotes/custom/OnDoubleClickListener.kt b/app/src/main/java/org/bandev/buddhaquotes/custom/OnDoubleClickListener.kt index 0f9fc2bf..f8112dd2 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/custom/OnDoubleClickListener.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/custom/OnDoubleClickListener.kt @@ -27,7 +27,7 @@ import android.view.View * click time delay change [DOUBLE_CLICK_TIME_DELTA] variable. * * @author jack.txt - * @since v2.0.0 + * @since v1.7.0 * @updated 09/12/2020 */ diff --git a/app/src/main/java/org/bandev/buddhaquotes/fragments/ListsFragment.kt b/app/src/main/java/org/bandev/buddhaquotes/fragments/ListsFragment.kt index 648d625c..cf49b053 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/fragments/ListsFragment.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/fragments/ListsFragment.kt @@ -21,20 +21,18 @@ along with this program. If not, see . package org.bandev.buddhaquotes.fragments import android.content.Intent -import android.graphics.Color import android.os.Bundle import android.view.* import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager -import com.mikepenz.iconics.IconicsDrawable -import com.mikepenz.iconics.typeface.library.googlematerial.RoundedGoogleMaterial -import com.mikepenz.iconics.utils.colorInt -import com.mikepenz.iconics.utils.sizeDp import org.bandev.buddhaquotes.R import org.bandev.buddhaquotes.activities.ScrollingActivity import org.bandev.buddhaquotes.adapters.ListRecycler import org.bandev.buddhaquotes.adapters.QuoteRecycler -import org.bandev.buddhaquotes.core.* +import org.bandev.buddhaquotes.core.Fragments +import org.bandev.buddhaquotes.core.Lists +import org.bandev.buddhaquotes.core.Notify +import org.bandev.buddhaquotes.core.SendEvent import org.bandev.buddhaquotes.databinding.FragmentListsBinding import org.bandev.buddhaquotes.items.ListItem import org.greenrobot.eventbus.EventBus @@ -75,7 +73,7 @@ class ListsFragment : Fragment(), QuoteRecycler.OnItemClickFinder { } private fun setupRecycler() { - masterlist = ListsV2(requireContext()).getMasterList() + masterlist = Lists().getMasterList(requireContext()) masterListFinal = generateMasterList(masterlist.size, masterlist) @@ -95,7 +93,7 @@ class ListsFragment : Fragment(), QuoteRecycler.OnItemClickFinder { fun onNotifyReceive(event: Notify) { when (event) { is Notify.NotifyNewList -> { - ListsV2(requireContext()).newEmptyList(event.listName) + Lists().newList(event.listName, requireContext()) setupRecycler() } } @@ -116,24 +114,22 @@ class ListsFragment : Fragment(), QuoteRecycler.OnItemClickFinder { */ private fun generateMasterList(max: Int, listIn: List): ArrayList { - val listNames = mutableListOf() val list = ArrayList() - val lists = ListsV2(requireContext()) var i = 0 while (i != max) { var special = false - val individualList = lists.getList(listIn[i]) - val count: Int = individualList.size - 1 + val pref = requireContext().getSharedPreferences("List_system", 0) + val array2 = pref.getString(listIn[i], "")!!.split("//") + val count: Int = array2.size - 1 if (listIn[i] == "Favourites") { - listNames.add(getString(R.string.favourites)) special = true - } else listNames.add(listIn[i]) + } val summary: String = if (count != 1) { "$count items" } else { "$count item" } - val item = ListItem(listNames[i], summary, special) + val item = ListItem(listIn[i], summary, special) list += item i++ } @@ -159,11 +155,6 @@ class ListsFragment : Fragment(), QuoteRecycler.OnItemClickFinder { override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.add_menu, menu) - menu.findItem(R.id.add).icon = - IconicsDrawable(requireContext(), RoundedGoogleMaterial.Icon.gmr_add).apply { - colorInt = Color.WHITE - sizeDp = 16 - } super.onCreateOptionsMenu(menu, inflater) } @@ -177,20 +168,15 @@ class ListsFragment : Fragment(), QuoteRecycler.OnItemClickFinder { bundle.putInt("from", Fragments.LISTS) intent.putExtras(bundle) startActivity(intent) + activity?.finish() } override fun onBinClick(position: Int, text: String) { - binding.root.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) - ListsV2(requireContext()).removeList(text) + Lists().removeList(text, requireContext()) masterListFinal.removeAt(position) binding.recyclerView.adapter?.notifyItemRemoved(position) } - override fun onResume() { - super.onResume() - setupRecycler() - } - override fun onStart() { super.onStart() EventBus.getDefault().register(this) diff --git a/app/src/main/java/org/bandev/buddhaquotes/fragments/QuoteFragment.kt b/app/src/main/java/org/bandev/buddhaquotes/fragments/QuoteFragment.kt index f31c6e6a..32bb0853 100644 --- a/app/src/main/java/org/bandev/buddhaquotes/fragments/QuoteFragment.kt +++ b/app/src/main/java/org/bandev/buddhaquotes/fragments/QuoteFragment.kt @@ -26,19 +26,16 @@ import android.view.HapticFeedbackConstants import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.core.content.ContextCompat.getColor +import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import com.google.android.material.snackbar.Snackbar import com.maxkeppeler.sheets.options.DisplayMode import com.maxkeppeler.sheets.options.Option import com.maxkeppeler.sheets.options.OptionsSheet -import com.mikepenz.iconics.IconicsDrawable -import com.mikepenz.iconics.typeface.library.googlematerial.RoundedGoogleMaterial -import com.mikepenz.iconics.utils.colorInt -import com.mikepenz.iconics.utils.sizeDp import org.bandev.buddhaquotes.R import org.bandev.buddhaquotes.core.* import org.bandev.buddhaquotes.custom.OnDoubleClickListener +import org.bandev.buddhaquotes.core.SendEvent import org.bandev.buddhaquotes.databinding.FragmentQuoteBinding import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe @@ -57,7 +54,6 @@ class QuoteFragment : Fragment() { private var _binding: FragmentQuoteBinding? = null internal val binding get() = _binding!! private var quotes = Quotes() - private lateinit var lists: ListsV2 private var liked = false private var options = mutableListOf