From 85a01c200bb920894a1403abff9bf47dcfd39c2f Mon Sep 17 00:00:00 2001 From: doomsdayrs Date: Wed, 1 Jan 2020 19:06:35 -0500 Subject: [PATCH 1/8] - Optimizations - Regrets added --- .../apps/shosetsu/backend/DownloadManager.kt | 3 --- .../apps/shosetsu/backend/UpdateManager.kt | 1 - .../doomsdayrs/apps/shosetsu/backend/Utilities.kt | 11 +++++------ .../apps/shosetsu/backend/database/Database.java | 15 +++++++-------- .../shosetsu/backend/scraper/WebViewScrapper.kt | 1 - .../apps/shosetsu/ui/novel/NovelFragment.kt | 6 ++---- .../shosetsu/ui/novel/adapters/ChaptersAdapter.kt | 1 - .../ui/novel/pages/NovelFragmentChapters.kt | 12 +++--------- .../shosetsu/ui/reader/fragments/ChapterView.kt | 9 ++++++--- .../apps/shosetsu/ui/updates/UpdateFragment.kt | 5 ----- .../apps/shosetsu/ui/updates/UpdatesFragment.kt | 5 +++-- .../apps/shosetsu/ui/webView/Actions.kt | 1 - .../apps/shosetsu/variables/DefaultScrapers.kt | 2 -- .../apps/shosetsu/variables/DownloadItem.kt | 8 ++------ .../apps/shosetsu/variables/Settings.kt | 9 --------- 15 files changed, 28 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/DownloadManager.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/DownloadManager.kt index 9398b91a38..b64ef73879 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/DownloadManager.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/DownloadManager.kt @@ -48,7 +48,6 @@ object DownloadManager { /** * Initializes download manager */ - @JvmStatic fun initDownloadManager(activity: Activity) { if (downloadTask.isCanceled) downloadTask = DownloadTask(activity) if (Database.DatabaseDownloads.getDownloadCount() >= 1) @@ -61,7 +60,6 @@ object DownloadManager { * * @param downloadItem download item to add */ - @JvmStatic fun addToDownload(activity: Activity?, downloadItem: DownloadItem) { if (!Database.DatabaseDownloads.inDownloads(downloadItem)) { Database.DatabaseDownloads.addToDownloads(downloadItem) @@ -79,7 +77,6 @@ object DownloadManager { * @param downloadItem download item to remove * @return if downloaded */ - @JvmStatic fun delete(context: Context?, downloadItem: DownloadItem): Boolean { Log.d("DeletingChapter", downloadItem.toString()) val file = File(Utilities.shoDir + "/download/" + downloadItem.formatter.formatterID + "/" + downloadItem.novelName + "/" + downloadItem.chapterName + ".txt") diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/UpdateManager.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/UpdateManager.kt index 26e68ef081..ed3489a848 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/UpdateManager.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/UpdateManager.kt @@ -31,7 +31,6 @@ import java.util.* */ object UpdateManager { private var chapterUpdater: ChapterUpdater? = null - @JvmStatic fun init(novelCards: ArrayList, context: Context) { if (chapterUpdater == null) { chapterUpdater = ChapterUpdater(novelCards, context) diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt index cc38a19e4e..7b027bcd74 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt @@ -91,7 +91,6 @@ object Utilities { * @param input String to clean * @return string without specials */ - @JvmStatic fun cleanString(input: String): String { return input.replace("[^A-Za-z0-9]".toRegex(), "_") } @@ -140,6 +139,7 @@ object Utilities { return null } + @JvmStatic /** * Checks string before deserialization * If null or empty, returns "". Else deserializes the string and returns @@ -147,7 +147,6 @@ object Utilities { * @param string String to be checked * @return Completed String */ - @JvmStatic fun checkStringDeserialize(string: String): String { if (string.isEmpty()) { return "" @@ -164,6 +163,7 @@ object Utilities { return "" } + @JvmStatic /** * Checks string before serialization * If null or empty, returns "". Else serializes the string and returns @@ -171,7 +171,6 @@ object Utilities { * @param string String to be checked * @return Completed String */ - @JvmStatic fun checkStringSerialize(string: String?): String { if (string == null || string.isEmpty()) { return "" @@ -185,13 +184,13 @@ object Utilities { return "" } + @JvmStatic /** * Converts String Stati back into Stati * * @param s String title * @return Stati */ - @JvmStatic fun convertStringToStati(s: String): NovelStatus { return when (s) { "Publishing" -> NovelStatus.PUBLISHING @@ -202,13 +201,13 @@ object Utilities { } } + @JvmStatic /** * Converts Array of Strings into a String * * @param a array of strings * @return String Array */ - @JvmStatic fun convertArrayToString(a: Array?): String { if (a != null && a.isNotEmpty()) { for (x in a.indices) { @@ -219,13 +218,13 @@ object Utilities { return "[]" } + @JvmStatic /** * Converts a String Array back into an Array of Strings * * @param s String array * @return Array of Strings */ - @JvmStatic fun convertStringToArray(s: String): Array { val a = s.substring(1, s.length - 1).split(", ".toRegex()).toTypedArray() for (x in a.indices) { diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/database/Database.java b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/database/Database.java index 0ac2cec151..13c4235f1a 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/database/Database.java +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/database/Database.java @@ -397,7 +397,7 @@ public static ArrayList getDownloadList() { String nName = cursor.getString(cursor.getColumnIndex(Columns.NOVEL_NAME.toString())); String cName = cursor.getString(cursor.getColumnIndex(Columns.CHAPTER_NAME.toString())); int formatter = DatabaseIdentification.getFormatterIDFromChapterID(id); - downloadItems.add(new DownloadItem(Objects.requireNonNull(DefaultScrapers.getByID(formatter)), nName, cName, id)); + downloadItems.add(new DownloadItem(Objects.requireNonNull(DefaultScrapers.Companion.getByID(formatter)), nName, cName, id)); } cursor.close(); @@ -422,7 +422,7 @@ public static DownloadItem getFirstDownload() { String cName = cursor.getString(cursor.getColumnIndex(Columns.CHAPTER_NAME.toString())); int formatter = getFormatterIDFromChapterID(id); cursor.close(); - return new DownloadItem(Objects.requireNonNull(DefaultScrapers.getByID(formatter)), nName, cName, id); + return new DownloadItem(Objects.requireNonNull(DefaultScrapers.Companion.getByID(formatter)), nName, cName, id); } } @@ -432,7 +432,7 @@ public static DownloadItem getFirstDownload() { * @param downloadItem download item to remove */ public static void removeDownload(@NonNull DownloadItem downloadItem) { - sqLiteDatabase.delete(Tables.DOWNLOADS.toString(), Columns.PARENT_ID + "=" + DatabaseIdentification.getChapterIDFromChapterURL(downloadItem.chapterURL) + "", null); + sqLiteDatabase.delete(Tables.DOWNLOADS.toString(), Columns.PARENT_ID + "=" + DatabaseIdentification.getChapterIDFromChapterURL(downloadItem.getChapterURL()) + "", null); } /** @@ -447,9 +447,9 @@ public static void addToDownloads(@NonNull DownloadItem downloadItem) { Columns.CHAPTER_NAME + "," + Columns.PAUSED + ") " + "values (" + - DatabaseIdentification.getChapterIDFromChapterURL(downloadItem.chapterURL) + ",'" + - DownloadItem.cleanse(downloadItem.novelName) + "','" + - DownloadItem.cleanse(downloadItem.chapterName) + "'," + 0 + ")"); + DatabaseIdentification.getChapterIDFromChapterURL(downloadItem.getChapterURL()) + ",'" + + DownloadItem.Companion.cleanse(downloadItem.getNovelName()) + "','" + + DownloadItem.Companion.cleanse(downloadItem.getChapterName()) + "'," + 0 + ")"); } /** @@ -459,7 +459,7 @@ public static void addToDownloads(@NonNull DownloadItem downloadItem) { * @return if is in list */ public static boolean inDownloads(@NonNull DownloadItem downloadItem) { - Cursor cursor = sqLiteDatabase.rawQuery("SELECT " + Columns.PARENT_ID + " from " + Tables.DOWNLOADS + " where " + Columns.PARENT_ID + " = " + DatabaseIdentification.getChapterIDFromChapterURL(downloadItem.chapterURL) + "", null); + Cursor cursor = sqLiteDatabase.rawQuery("SELECT " + Columns.PARENT_ID + " from " + Tables.DOWNLOADS + " where " + Columns.PARENT_ID + " = " + DatabaseIdentification.getChapterIDFromChapterURL(downloadItem.getChapterURL()) + "", null); int a = cursor.getCount(); cursor.close(); return !(a <= 0); @@ -706,7 +706,6 @@ public static String getSavedNovelPassage(int chapterID) { * @param chapterURL chapter url * @return if present */ - @SuppressWarnings("BooleanMethodIsAlwaysInverted") public static boolean isNotInChapters(@NonNull String chapterURL) { Cursor cursor = sqLiteDatabase.rawQuery("SELECT " + Columns.IS_SAVED + " from " + Tables.CHAPTERS + " where " + Columns.ID + " =" + DatabaseIdentification.getChapterIDFromChapterURL(chapterURL), null); int a = cursor.getCount(); diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/scraper/WebViewScrapper.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/scraper/WebViewScrapper.kt index 73257864d2..fc2cd84980 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/scraper/WebViewScrapper.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/scraper/WebViewScrapper.kt @@ -67,7 +67,6 @@ object WebViewScrapper { * @param url URL to retrieve; * @return Document of the URL */ - @JvmStatic fun docFromURL(url: String?, cloudflare: Boolean): Document? { if (url != null) { Log.i("URL load", url) diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/NovelFragment.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/NovelFragment.kt index 02814f8007..63eb775997 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/NovelFragment.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/NovelFragment.kt @@ -89,7 +89,6 @@ class NovelFragment : Fragment() { } else -2 } - @JvmField var novelFragmentInfo: NovelFragmentInfo? = null var novelFragmentChapters: NovelFragmentChapters? = null @@ -115,15 +114,14 @@ class NovelFragment : Fragment() { novelFragmentInfo = NovelFragmentInfo() novelFragmentInfo!!.novelFragment = (this) novelFragmentChapters = NovelFragmentChapters() - novelFragmentChapters!!.setNovelFragment(this) + novelFragmentChapters!!.novelFragment = (this) } //TODO FINISH TRACKING //boolean track = SettingsController.isTrackingEnabled(); if (savedInstanceState == null) { if (Utilities.isOnline && Database.DatabaseNovels.isNotInNovels(novelID)) { setViewPager() - if (formatter != null) - fragment_novel_tabLayout!!.post { NovelLoader(novelURL, novelID, formatter, this, true).execute() } + fragment_novel_tabLayout!!.post { NovelLoader(novelURL, novelID, formatter, this, true).execute() } } else { novelPage = Database.DatabaseNovels.getNovelPage(novelID) new = false diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/adapters/ChaptersAdapter.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/adapters/ChaptersAdapter.kt index 9e6b551f50..af875ec05d 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/adapters/ChaptersAdapter.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/adapters/ChaptersAdapter.kt @@ -130,7 +130,6 @@ class ChaptersAdapter(private val novelFragmentChapters: NovelFragmentChapters) } companion object { - @JvmField var DefaultTextColor = 0 private var set = false } diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/pages/NovelFragmentChapters.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/pages/NovelFragmentChapters.kt index 8440f384a8..d0f735825c 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/pages/NovelFragmentChapters.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/pages/NovelFragmentChapters.kt @@ -107,14 +107,11 @@ class NovelFragmentChapters : Fragment() { } private var currentMaxPage = 1 - @JvmField var selectedChapters = ArrayList() var adapter: ChaptersAdapter? = ChaptersAdapter(this) - @JvmField var novelFragment: NovelFragment? = null - @JvmField var menu: Menu? = null operator fun contains(novelChapter: NovelChapter): Boolean { @@ -134,9 +131,7 @@ class NovelFragmentChapters : Fragment() { return max } - fun setNovelFragment(novelFragment: NovelFragment?) { - this.novelFragment = novelFragment - } + override fun onDestroy() { super.onDestroy() @@ -180,7 +175,7 @@ class NovelFragmentChapters : Fragment() { resume.visibility = GONE if (novelFragment != null) fragment_novel_chapters_refresh.setOnRefreshListener { - if (novelFragment != null && novelFragment!!.formatter != null && novelFragment!!.novelURL.isNotEmpty()) + if (novelFragment != null && novelFragment!!.novelURL.isNotEmpty()) ChapterLoader(chaptersLoadedAction, novelFragment!!.formatter, novelFragment!!.novelURL).execute() } if (savedInstanceState != null) { @@ -191,7 +186,7 @@ class NovelFragmentChapters : Fragment() { resume.setOnClickListener { val i = novelFragment!!.lastRead() if (i != -1 && i != -2) { - if (activity != null && novelFragment!!.formatter != null) openChapter(activity!!, novelFragment!!.novelChapters[i], novelFragment!!.novelID, novelFragment!!.formatter.formatterID) + if (activity != null) openChapter(activity!!, novelFragment!!.novelChapters[i], novelFragment!!.novelID, novelFragment!!.formatter.formatterID) } else Toast.makeText(context, "No chapters! How did you even press this!", Toast.LENGTH_SHORT).show() } } @@ -314,7 +309,6 @@ class NovelFragmentChapters : Fragment() { if (selectedChapters.size <= 0) inflater.inflate(R.menu.toolbar_chapters, menu) else inflater.inflate(R.menu.toolbar_chapters_selected, menu) } - @JvmField var reversed = false /** diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/reader/fragments/ChapterView.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/reader/fragments/ChapterView.kt index ac7d71ec5b..393803b0f5 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/reader/fragments/ChapterView.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/reader/fragments/ChapterView.kt @@ -180,7 +180,8 @@ class ChapterView : Fragment() { true } R.id.tap_to_scroll -> { - tapToScroll!!.isChecked = Utilities.toggleTapToScroll() + Utilities.regret(context!!) + // tapToScroll!!.isChecked = Utilities.toggleTapToScroll() true } R.id.chapter_view_bookmark -> { @@ -241,11 +242,13 @@ class ChapterView : Fragment() { true } R.id.reader_0 -> { - Utilities.unmarkMenuItems(readers, 0, demarkActions[3]) + Utilities.regret(context!!) + //Utilities.unmarkMenuItems(readers, 0, demarkActions[3]) true } R.id.reader_1 -> { - Utilities.unmarkMenuItems(readers, 1, demarkActions[3]) + Utilities.regret(context!!) + //Utilities.unmarkMenuItems(readers, 1, demarkActions[3]) true } else -> false diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/updates/UpdateFragment.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/updates/UpdateFragment.kt index 47d6bbef6c..1c3ed1d480 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/updates/UpdateFragment.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/updates/UpdateFragment.kt @@ -37,7 +37,6 @@ import java.util.* * @author github.com/doomsdayrs */ class UpdateFragment : Fragment() { - @JvmField var date: Long = -1 private val novels = ArrayList() private var updates = ArrayList() @@ -47,10 +46,6 @@ class UpdateFragment : Fragment() { outState.putLong("date", date) } - fun setDate(date: Long) { - this.date = date - } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.updates_list, container, false) if (date == -1L) if (savedInstanceState != null) date = savedInstanceState.getLong("date") diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/updates/UpdatesFragment.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/updates/UpdatesFragment.kt index 6adca2cea7..faf183ae76 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/updates/UpdatesFragment.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/updates/UpdatesFragment.kt @@ -74,7 +74,7 @@ class UpdatesFragment : Fragment() { Log.d("StartingDay", DateTime(startTime).toString()) for (x in 0 until days) { val updateFragment = UpdateFragment() - updateFragment.setDate(startTime) + updateFragment.date = (startTime) startTime += 86400000 updatesFragments.add(updateFragment) } @@ -92,7 +92,7 @@ class UpdatesFragment : Fragment() { } // TODAY val updateFragment = UpdateFragment() - updateFragment.setDate(DatabaseUpdates.trimDate(DateTime(System.currentTimeMillis())).millis) + updateFragment.date = (DatabaseUpdates.trimDate(DateTime(System.currentTimeMillis())).millis) updatesFragments.add(updateFragment) updatesFragments.reverse() val pagerAdapter = UpdatedDaysPager(childFragmentManager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT, updatesFragments) @@ -102,6 +102,7 @@ class UpdatesFragment : Fragment() { override fun onTabSelected(tab: TabLayout.Tab) { viewpager!!.currentItem = tab.position } + override fun onTabUnselected(tab: TabLayout.Tab) {} override fun onTabReselected(tab: TabLayout.Tab) {} }) diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/webView/Actions.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/webView/Actions.kt index 99a19ee3ed..440ff8faf2 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/webView/Actions.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/webView/Actions.kt @@ -27,7 +27,6 @@ enum class Actions(val action: Int) { VIEW(0), CLOUD_FLARE(1); companion object { - @kotlin.jvm.JvmField val actions = ArrayList() init { diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/DefaultScrapers.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/DefaultScrapers.kt index 9ae7b7ae3f..58a66b0a06 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/DefaultScrapers.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/DefaultScrapers.kt @@ -48,7 +48,6 @@ enum class DefaultScrapers(private val formatter: Formatter) : Formatter { companion object { val formatters = ArrayList() - @JvmStatic fun getByID(ID: Int): Formatter? { for (formatter in formatters) { if (formatter.formatterID == ID) return formatter @@ -56,7 +55,6 @@ enum class DefaultScrapers(private val formatter: Formatter) : Formatter { return null } - @JvmStatic val asCatalogue: ArrayList get() { val catalogueCards = ArrayList() diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/DownloadItem.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/DownloadItem.kt index 2c6fdef14f..0d4e1df672 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/DownloadItem.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/DownloadItem.kt @@ -30,11 +30,8 @@ import com.github.doomsdayrs.apps.shosetsu.backend.database.Database.DatabaseIde * These items symbolize download items and their data */ class DownloadItem(val formatter: Formatter, novelName: String, chapterName: String, chapterID: Int) { - @JvmField val novelName: String - @JvmField val chapterName: String - @JvmField val chapterURL: String? val chapterID: Int @@ -48,7 +45,6 @@ class DownloadItem(val formatter: Formatter, novelName: String, chapterName: Str * @param s string to clean * @return cleaned string */ - @JvmStatic fun cleanse(s: String): String { //Log.d("Cleaning", s); var s = s s = s.replace("'".toRegex(), "_").replace("\"".toRegex(), "_") @@ -61,8 +57,8 @@ class DownloadItem(val formatter: Formatter, novelName: String, chapterName: Str init { this.novelName = cleanse(novelName) this.chapterName = cleanse(chapterName) - val novelID = DatabaseIdentification.getNovelIDFromChapterID(chapterID) - val novelURL = DatabaseIdentification.getNovelURLfromNovelID(novelID) + // val novelID = DatabaseIdentification.getNovelIDFromChapterID(chapterID) + //val novelURL = DatabaseIdentification.getNovelURLfromNovelID(novelID) chapterURL = DatabaseIdentification.getChapterURLFromChapterID(chapterID) this.chapterID = chapterID } diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/Settings.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/Settings.kt index 5359e24516..91026ba72a 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/Settings.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/Settings.kt @@ -31,7 +31,6 @@ object Settings { /** * How to mark a chapter as reading */ - @JvmField var ReaderMarkingType: Int = MarkingTypes.ONVIEW.i enum class MarkingTypes(val i: Int) { @@ -43,7 +42,6 @@ object Settings { /** * Reader text size */ - @JvmField var ReaderTextSize: Float = TextSizes.SMALL.i.toFloat() @Suppress("unused") @@ -58,31 +56,26 @@ object Settings { /** * Reader text color */ - @JvmField var ReaderTextColor = Color.BLACK /** * Reader background color */ - @JvmField var ReaderTextBackgroundColor = Color.WHITE /** * global connectivity manager variable */ - @JvmField var connectivityManager: ConnectivityManager? = null /** * If download manager is paused */ - @JvmField var downloadPaused = false /** * Current theme to use */ - @JvmField var themeMode = Themes.LIGHT.id //TODO Use this @@ -92,9 +85,7 @@ object Settings { DARK(2) } - @JvmField var paragraphSpacing = 0 - @JvmField var indentSize = 0 } \ No newline at end of file From bb6c80878168de457dea90812c4c2ece5fefd237 Mon Sep 17 00:00:00 2001 From: doomsdayrs Date: Wed, 1 Jan 2020 19:54:47 -0500 Subject: [PATCH 2/8] closes #60 --- app/src/main/res/values/styles.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 01671879f7..200bb6e3e5 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -4,6 +4,8 @@ From 0d9d0013880c6c224875a51f712516d06eda7ca5 Mon Sep 17 00:00:00 2001 From: doomsdayrs Date: Wed, 1 Jan 2020 20:25:09 -0500 Subject: [PATCH 3/8] - Added sepia mode --- .../apps/shosetsu/backend/Utilities.kt | 89 ++++++++++++------- .../ui/reader/demarkActions/ThemeChange.kt | 48 ++++++++++ .../ui/reader/fragments/ChapterView.kt | 53 +++++++---- .../ui/settings/subFragments/ViewSettings.kt | 39 ++++++-- .../main/res/menu/toolbar_chapter_view.xml | 21 ++++- app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/strings.xml | 13 ++- 7 files changed, 202 insertions(+), 62 deletions(-) create mode 100644 app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/reader/demarkActions/ThemeChange.kt diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt index 7b027bcd74..5f7128f683 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt @@ -12,6 +12,7 @@ import android.util.Log import android.view.MenuItem import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat import com.github.doomsdayrs.api.shosetsu.services.core.objects.NovelChapter import com.github.doomsdayrs.api.shosetsu.services.core.objects.NovelStatus import com.github.doomsdayrs.apps.shosetsu.R @@ -140,13 +141,13 @@ object Utilities { } @JvmStatic - /** - * Checks string before deserialization - * If null or empty, returns "". Else deserializes the string and returns - * - * @param string String to be checked - * @return Completed String - */ + /** + * Checks string before deserialization + * If null or empty, returns "". Else deserializes the string and returns + * + * @param string String to be checked + * @return Completed String + */ fun checkStringDeserialize(string: String): String { if (string.isEmpty()) { return "" @@ -164,13 +165,13 @@ object Utilities { } @JvmStatic - /** - * Checks string before serialization - * If null or empty, returns "". Else serializes the string and returns - * - * @param string String to be checked - * @return Completed String - */ + /** + * Checks string before serialization + * If null or empty, returns "". Else serializes the string and returns + * + * @param string String to be checked + * @return Completed String + */ fun checkStringSerialize(string: String?): String { if (string == null || string.isEmpty()) { return "" @@ -185,12 +186,12 @@ object Utilities { } @JvmStatic - /** - * Converts String Stati back into Stati - * - * @param s String title - * @return Stati - */ + /** + * Converts String Stati back into Stati + * + * @param s String title + * @return Stati + */ fun convertStringToStati(s: String): NovelStatus { return when (s) { "Publishing" -> NovelStatus.PUBLISHING @@ -202,12 +203,12 @@ object Utilities { } @JvmStatic - /** - * Converts Array of Strings into a String - * - * @param a array of strings - * @return String Array - */ + /** + * Converts Array of Strings into a String + * + * @param a array of strings + * @return String Array + */ fun convertArrayToString(a: Array?): String { if (a != null && a.isNotEmpty()) { for (x in a.indices) { @@ -219,12 +220,12 @@ object Utilities { } @JvmStatic - /** - * Converts a String Array back into an Array of Strings - * - * @param s String array - * @return Array of Strings - */ + /** + * Converts a String Array back into an Array of Strings + * + * @param s String array + * @return Array of Strings + */ fun convertStringToArray(s: String): Array { val a = s.substring(1, s.length - 1).split(", ".toRegex()).toTypedArray() for (x in a.indices) { @@ -331,14 +332,19 @@ object Utilities { get() =//TODO: Check this also, this doesn't seem to be a nice way to do things. Settings.ReaderTextColor == Color.WHITE + fun setNightNode() { setReaderColor(Color.WHITE, Color.BLACK) } - fun unsetNightMode() { + fun setLightMode() { setReaderColor(Color.BLACK, Color.WHITE) } + fun setSepiaMode(context: Context) { + setReaderColor(Color.BLACK, ContextCompat.getColor(context, R.color.wheat)) + } + /** * Sets the reader color * @@ -354,6 +360,23 @@ object Utilities { .apply() } + fun getReaderColor(context: Context): Int { + return when (Settings.ReaderTextBackgroundColor) { + Color.WHITE -> { + 1 + } + Color.BLACK -> { + 0 + } + ContextCompat.getColor(context, R.color.wheat) -> { + 2 + } + else -> { + 1 + } + } + } + /** * Swaps the reader colors */ diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/reader/demarkActions/ThemeChange.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/reader/demarkActions/ThemeChange.kt new file mode 100644 index 0000000000..9f33ed926f --- /dev/null +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/reader/demarkActions/ThemeChange.kt @@ -0,0 +1,48 @@ +package com.github.doomsdayrs.apps.shosetsu.ui.reader.demarkActions + +import com.github.doomsdayrs.apps.shosetsu.backend.Utilities +import com.github.doomsdayrs.apps.shosetsu.ui.reader.fragments.ChapterView + +/* + * This file is part of shosetsu. + * + * shosetsu 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. + * + * shosetsu 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 shosetsu. If not, see . + * ==================================================================== + */ + +/** + * shosetsu + * 01 / 01 / 2020 + * + * @author github.com/doomsdayrs + */ + +class ThemeChange(private val chapterReader: ChapterView) : Utilities.DeMarkAction { + + override fun action(spared: Int) { + when (spared) { + 0 -> { + Utilities.setNightNode() + } + 1 -> { + Utilities.setLightMode() + } + 2 -> { + Utilities.setSepiaMode(chapterReader.context!!) + } + } + chapterReader.setUpReader() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/reader/fragments/ChapterView.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/reader/fragments/ChapterView.kt index 393803b0f5..a749ddf3aa 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/reader/fragments/ChapterView.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/reader/fragments/ChapterView.kt @@ -12,10 +12,7 @@ import com.github.doomsdayrs.apps.shosetsu.backend.database.Database import com.github.doomsdayrs.apps.shosetsu.backend.database.Database.DatabaseIdentification import com.github.doomsdayrs.apps.shosetsu.ui.reader.ChapterReader import com.github.doomsdayrs.apps.shosetsu.ui.reader.async.ChapterViewLoader -import com.github.doomsdayrs.apps.shosetsu.ui.reader.demarkActions.IndentChange -import com.github.doomsdayrs.apps.shosetsu.ui.reader.demarkActions.ParaSpacingChange -import com.github.doomsdayrs.apps.shosetsu.ui.reader.demarkActions.ReaderChange -import com.github.doomsdayrs.apps.shosetsu.ui.reader.demarkActions.TextSizeChange +import com.github.doomsdayrs.apps.shosetsu.ui.reader.demarkActions.* import com.github.doomsdayrs.apps.shosetsu.ui.reader.listeners.ToolbarHideOnClickListener import com.github.doomsdayrs.apps.shosetsu.variables.Settings import com.github.doomsdayrs.apps.shosetsu.variables.enums.Status @@ -45,7 +42,11 @@ import kotlinx.android.synthetic.main.chapter_view.* * @author github.com/doomsdayrs */ class ChapterView : Fragment() { - private val demarkActions = arrayOf(TextSizeChange(this), ParaSpacingChange(this), IndentChange(this), ReaderChange(this)) + private val demarkActions = arrayOf(TextSizeChange(this), ParaSpacingChange(this), IndentChange(this), ReaderChange(this), ThemeChange(this)) + + // Order of values. Night, Light, Sepia + private lateinit var themes: Array + // Order of values. Small,Medium,Large private lateinit var textSizes: Array // Order of values. Non,Small,Medium,Large @@ -85,7 +86,27 @@ class ChapterView : Fragment() { override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.toolbar_chapter_view, menu) // Night mode - menu.findItem(R.id.chapter_view_nightMode).isChecked = Utilities.isReaderNightMode + run { + themes = arrayOf( + menu.findItem(R.id.chapter_view_reader_night), + menu.findItem(R.id.chapter_view_reader_light), + menu.findItem(R.id.chapter_view_reader_sepia)) + when (Utilities.getReaderColor(context!!)) { + 0 -> { + themes[0].setChecked(true) + } + 1 -> { + themes[1].setChecked(true) + } + 2 -> { + themes[2].setChecked(true) + } + else -> { + Utilities.setLightMode() + themes[1].setChecked(true) + } + } + } // Bookmark run { bookmark = menu.findItem(R.id.chapter_view_bookmark) @@ -168,15 +189,17 @@ class ChapterView : Fragment() { override fun onOptionsItemSelected(item: MenuItem): Boolean { Log.d("item", item.toString()) return when (item.itemId) { - R.id.chapter_view_nightMode -> { - if (!item.isChecked) { - Utilities.swapReaderColor() - setUpReader() - } else { - Utilities.swapReaderColor() - setUpReader() - } - item.isChecked = !item.isChecked + R.id.chapter_view_reader_night -> { + Utilities.unmarkMenuItems(themes, 0, demarkActions[4]) + true + } + + R.id.chapter_view_reader_light -> { + Utilities.unmarkMenuItems(themes, 1, demarkActions[4]) + true + } + R.id.chapter_view_reader_sepia -> { + Utilities.unmarkMenuItems(themes, 2, demarkActions[4]) true } R.id.tap_to_scroll -> { diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/settings/subFragments/ViewSettings.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/settings/subFragments/ViewSettings.kt index 7e3dcb0cfe..86e34a9c56 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/settings/subFragments/ViewSettings.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/settings/subFragments/ViewSettings.kt @@ -116,12 +116,27 @@ class ViewSettings : Fragment() { } }), - SettingsItemData(SettingsType.SWITCH) - .setTitle(R.string.reader_night_mode) - .setSwitchIsChecked(Utilities.isReaderNightMode) - .setSwitchOnCheckedListner(CompoundButton.OnCheckedChangeListener { _, p1 -> - Log.d("NightMode", p1.toString()) - if (!Utilities.isReaderNightMode) Utilities.setNightNode() else Utilities.unsetNightMode() + SettingsItemData(SettingsType.SPINNER) + .setTitle(R.string.reader_theme) + .setOnItemSelectedListener(object : OnItemSelectedListener { + override fun onNothingSelected(p0: AdapterView<*>?) {} + override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) { + Log.d("NightMode", p1.toString()) + when (p2) { + 0 -> { + Utilities.setNightNode() + } + 1 -> { + Utilities.setLightMode() + } + 2 -> { + p1?.context?.let { Utilities.setSepiaMode(it) } + } + else -> { + Log.e("NightMode", "UnknownType") + } + } + } }), SettingsItemData(SettingsType.SWITCH) @@ -131,7 +146,7 @@ class ViewSettings : Fragment() { Log.d("Tap to scroll", p1.toString()) Utilities.toggleTapToScroll() }) - ) + ) val adapter: SettingItemsAdapter = SettingItemsAdapter(settings) private fun findDataByID(@StringRes id: Int): Int { @@ -160,15 +175,21 @@ class ViewSettings : Fragment() { } } + run { + val x = findDataByID(R.string.reader_theme) + settings[x].adapter = ArrayAdapter(context!!, android.R.layout.simple_spinner_item, resources.getStringArray(R.array.reader_themes)) + settings[x].spinnerSelection = Utilities.getReaderColor(context!!) + } + run { val x = findDataByID(R.string.spacing) - settings[x].adapter = ArrayAdapter(context!!, android.R.layout.simple_spinner_item, resources.getStringArray(R.array.sizes_with_none)) + settings[x].adapter = ArrayAdapter(context!!, android.R.layout.simple_spinner_item, resources.getStringArray(R.array.sizes_with_none)) settings[x].spinnerSelection = Settings.paragraphSpacing } run { val x = findDataByID(R.string.indent_size) - settings[x].adapter = ArrayAdapter(context!!, android.R.layout.simple_spinner_item, resources.getStringArray(R.array.sizes_with_none)) + settings[x].adapter = ArrayAdapter(context!!, android.R.layout.simple_spinner_item, resources.getStringArray(R.array.sizes_with_none)) settings[x].spinnerSelection = (Settings.indentSize) } diff --git a/app/src/main/res/menu/toolbar_chapter_view.xml b/app/src/main/res/menu/toolbar_chapter_view.xml index fc18fca5c5..d01801fee5 100644 --- a/app/src/main/res/menu/toolbar_chapter_view.xml +++ b/app/src/main/res/menu/toolbar_chapter_view.xml @@ -11,10 +11,23 @@ app:showAsAction="never" /> + android:title="@string/reader_theme" + app:showAsAction="never"> + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index c902e8282e..a3ed63e8fc 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -13,6 +13,7 @@ #80000000 + #F5DEB3 #00000000 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 65dcbe0514..49dedfd6a8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -14,7 +14,7 @@ filter - Reader Night mode + Reader Theme Text size Paragraph spacing Paragraph indent @@ -134,6 +134,17 @@ Maybe later Huh, not interested + + Night + Light + Sepia + + + @string/night + @string/light + @string/sepia + + Check for updates Global search… From 01e98ac34f3951118b1237d1492273ec7027b3af Mon Sep 17 00:00:00 2001 From: doomsdayrs Date: Wed, 1 Jan 2020 20:42:48 -0500 Subject: [PATCH 4/8] - Fixes #57 --- .../doomsdayrs/apps/shosetsu/backend/Utilities.kt | 10 ++++++++++ .../apps/shosetsu/ui/search/SearchFragment.kt | 5 +++-- .../ui/search/adapters/SearchResultsAdapter.kt | 12 ++++++------ .../apps/shosetsu/ui/search/async/SearchLoader.kt | 9 ++++++--- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt index 5f7128f683..7c68365201 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt @@ -13,6 +13,7 @@ import android.view.MenuItem import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat +import com.github.doomsdayrs.api.shosetsu.services.core.objects.Novel import com.github.doomsdayrs.api.shosetsu.services.core.objects.NovelChapter import com.github.doomsdayrs.api.shosetsu.services.core.objects.NovelStatus import com.github.doomsdayrs.apps.shosetsu.R @@ -30,6 +31,7 @@ import com.github.doomsdayrs.apps.shosetsu.variables.enums.Status import java.io.* import java.util.* import java.util.concurrent.TimeUnit +import kotlin.collections.ArrayList /* * This file is part of Shosetsu. @@ -65,6 +67,14 @@ object Utilities { lateinit var trackingPreferences: SharedPreferences lateinit var backupPreferences: SharedPreferences + fun convertNovelArrayToString2DArray(array: List): ArrayList> { + val a: ArrayList> = ArrayList() + for (novel in array) { + a.add(arrayOf(novel.title, novel.link, novel.imageURL)) + } + return a + } + fun regret(context: Context) { Toast.makeText(context, context.getString(R.string.regret), Toast.LENGTH_LONG).show() } diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/SearchFragment.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/SearchFragment.kt index 2ac4512820..511138fb67 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/SearchFragment.kt @@ -12,6 +12,7 @@ import com.github.doomsdayrs.apps.shosetsu.R.layout.search_activity import com.github.doomsdayrs.apps.shosetsu.backend.Utilities.setActivityTitle import com.github.doomsdayrs.apps.shosetsu.ui.search.adapters.SearchAdapter import kotlinx.android.synthetic.main.search_activity.* +import java.io.Serializable /* * This file is part of Shosetsu. @@ -56,8 +57,8 @@ class SearchFragment : Fragment() { return StoredData(id) } - class StoredData(val id: Int) { - var novelArray: List = arrayListOf() + class StoredData(val id: Int) : Serializable { + var novelArray: List> = arrayListOf() var intArray: List = arrayListOf() } diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/adapters/SearchResultsAdapter.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/adapters/SearchResultsAdapter.kt index a00b1e1b84..98f3e36260 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/adapters/SearchResultsAdapter.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/adapters/SearchResultsAdapter.kt @@ -41,13 +41,13 @@ import com.squareup.picasso.Picasso */ class SearchResultsAdapter(private val searchViewHolder: SearchViewHolder) : RecyclerView.Adapter() { private var intArray: ArrayList = arrayListOf(-1) - private var novelArray: List = arrayListOf() + private var novelArray: List> = arrayListOf() constructor(array: ArrayList, searchViewHolder: SearchViewHolder) : this(searchViewHolder) { this.intArray = array } - constructor(array: List, searchViewHolder: SearchViewHolder) : this(searchViewHolder) { + constructor(array: List>, searchViewHolder: SearchViewHolder) : this(searchViewHolder) { novelArray = array } @@ -68,10 +68,10 @@ class SearchResultsAdapter(private val searchViewHolder: SearchViewHolder) : Rec val id: Int if (isWebsiteSearch()) { - val novel: Novel = novelArray[position] - title = novel.title - url = novel.link - imageURL = novel.imageURL + val novel: Array = novelArray[position] + title = novel[0] + url = novel[1] + imageURL = novel[2] formatter = searchViewHolder.formatter id = Database.DatabaseIdentification.getNovelIDFromNovelURL(imageURL) } else { diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/async/SearchLoader.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/async/SearchLoader.kt index f3ad4148f8..1e7ee8e032 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/async/SearchLoader.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/async/SearchLoader.kt @@ -3,6 +3,7 @@ package com.github.doomsdayrs.apps.shosetsu.ui.search.async import android.os.AsyncTask import android.view.View import com.github.doomsdayrs.api.shosetsu.services.core.objects.Novel +import com.github.doomsdayrs.apps.shosetsu.backend.Utilities import com.github.doomsdayrs.apps.shosetsu.backend.async.CatalogueLoader import com.github.doomsdayrs.apps.shosetsu.ui.search.SearchFragment import com.github.doomsdayrs.apps.shosetsu.ui.search.adapters.SearchResultsAdapter @@ -33,7 +34,7 @@ import com.github.doomsdayrs.apps.shosetsu.ui.search.viewHolders.SearchViewHolde * @author github.com/doomsdayrs */ class SearchLoader(private val searchViewHolder: SearchViewHolder) : AsyncTask() { - var array: List = arrayListOf() + var array: List> = arrayListOf() override fun onPreExecute() { super.onPreExecute() @@ -44,8 +45,10 @@ class SearchLoader(private val searchViewHolder: SearchViewHolder) : AsyncTask? = CatalogueLoader(searchViewHolder.query, searchViewHolder.formatter).execute() - if (a != null) - array = a + val correct: ArrayList> = if (a != null) + Utilities.convertNovelArrayToString2DArray(a) + else ArrayList() + array = correct return true } From ef03caeabd1befad2b9f95f4f6a52fe37e9a9dca Mon Sep 17 00:00:00 2001 From: doomsdayrs Date: Wed, 1 Jan 2020 20:45:56 -0500 Subject: [PATCH 5/8] Some cleaning of code and added a TODO --- .../apps/shosetsu/ui/search/SearchFragment.kt | 1 + .../recycleObjects/CatalogueNovelCard.kt | 17 +------------- .../variables/recycleObjects/NovelCard.kt | 23 +------------------ 3 files changed, 3 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/SearchFragment.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/SearchFragment.kt index 511138fb67..6d4330b0aa 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/SearchFragment.kt @@ -58,6 +58,7 @@ class SearchFragment : Fragment() { } class StoredData(val id: Int) : Serializable { + //TODO This is dirty, Maybe replace with CatalogueNovelCard later var novelArray: List> = arrayListOf() var intArray: List = arrayListOf() } diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/recycleObjects/CatalogueNovelCard.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/recycleObjects/CatalogueNovelCard.kt index 7e22652636..e1b9b1bd19 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/recycleObjects/CatalogueNovelCard.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/recycleObjects/CatalogueNovelCard.kt @@ -23,19 +23,4 @@ import java.io.Serializable * * @author github.com/doomsdayrs */ -class CatalogueNovelCard -/** - * Constructor - * @param imageURL image chapterURL - * @param title title - * @param novelID id of novel - * @param novelURL novelURL - */( - /** - * Image novelURL - */ - val imageURL: String, title: String, val novelID: Int, - /** - * link to the novel - */ - val novelURL: String) : RecycleCard(title), Serializable \ No newline at end of file +class CatalogueNovelCard(val imageURL: String, title: String, val novelID: Int, val novelURL: String) : RecycleCard(title), Serializable \ No newline at end of file diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/recycleObjects/NovelCard.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/recycleObjects/NovelCard.kt index 53eccb612a..de5bc16a40 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/recycleObjects/NovelCard.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/variables/recycleObjects/NovelCard.kt @@ -21,25 +21,4 @@ package com.github.doomsdayrs.apps.shosetsu.variables.recycleObjects * * @author github.com/doomsdayrs */ -class NovelCard -/** - * Constructor - * - * @param title title - * @param novelID novel ID - * @param novelURL novelURL - * @param imageURL imageURL - * @param formatterID id of formatter - */(title: String, val novelID: Int, - /** - * NovelURL - */ - val novelURL: String, - /** - * ImageURL - */ - val imageURL: String, - /** - * ID of formatter - */ - val formatterID: Int) : RecycleCard(title) \ No newline at end of file +class NovelCard(title: String, val novelID: Int, val novelURL: String, val imageURL: String, val formatterID: Int) : RecycleCard(title) \ No newline at end of file From ed1827d634f727f870ce8779c4fcc6d8d2604f41 Mon Sep 17 00:00:00 2001 From: doomsdayrs Date: Wed, 1 Jan 2020 22:08:45 -0500 Subject: [PATCH 6/8] - Created downloads dialog, To add features --- .../apps/shosetsu/ui/novel/NovelFragment.kt | 63 ++++++++++--- .../ui/novel/pages/NovelFragmentChapters.kt | 89 ++++++++++++++----- app/src/main/res/menu/toolbar_chapters.xml | 1 + app/src/main/res/values/strings.xml | 17 ++++ 4 files changed, 134 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/NovelFragment.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/NovelFragment.kt index 63eb775997..7068541c74 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/NovelFragment.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/NovelFragment.kt @@ -8,12 +8,16 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentPagerAdapter import com.github.doomsdayrs.api.shosetsu.services.core.dep.Formatter +import com.github.doomsdayrs.api.shosetsu.services.core.objects.Novel import com.github.doomsdayrs.api.shosetsu.services.core.objects.NovelChapter import com.github.doomsdayrs.api.shosetsu.services.core.objects.NovelPage import com.github.doomsdayrs.apps.shosetsu.R import com.github.doomsdayrs.apps.shosetsu.backend.Utilities import com.github.doomsdayrs.apps.shosetsu.backend.database.Database import com.github.doomsdayrs.apps.shosetsu.backend.database.Database.DatabaseChapter +import com.github.doomsdayrs.apps.shosetsu.backend.database.Database.DatabaseChapter.getChapter +import com.github.doomsdayrs.apps.shosetsu.backend.database.Database.DatabaseChapter.getStatus +import com.github.doomsdayrs.apps.shosetsu.backend.database.Database.DatabaseIdentification.getChapterIDFromChapterURL import com.github.doomsdayrs.apps.shosetsu.ui.novel.adapters.NovelPagerAdapter import com.github.doomsdayrs.apps.shosetsu.ui.novel.async.NovelLoader import com.github.doomsdayrs.apps.shosetsu.ui.novel.pages.NovelFragmentChapters @@ -26,6 +30,7 @@ import com.google.android.material.tabs.TabLayout.TabLayoutOnPageChangeListener import kotlinx.android.synthetic.main.fragment_novel.* import java.util.* + /* * This file is part of Shosetsu. * @@ -68,7 +73,7 @@ class NovelFragment : Fragment() { return if (novelChapters.isNotEmpty()) { if (!novelFragmentChapters?.reversed!!) { for (x in novelChapters.indices.reversed()) { - when (DatabaseChapter.getStatus(Database.DatabaseIdentification.getChapterIDFromChapterURL(novelChapters[x].link))) { + when (getStatus(getChapterIDFromChapterURL(novelChapters[x].link))) { Status.READ -> return x + 1 Status.READING -> return x else -> { @@ -77,7 +82,7 @@ class NovelFragment : Fragment() { } } else { for (x in novelChapters.indices) { - when (DatabaseChapter.getStatus(Database.DatabaseIdentification.getChapterIDFromChapterURL(novelChapters[x].link))) { + when (getStatus(getChapterIDFromChapterURL(novelChapters[x].link))) { Status.READ -> return x - 1 Status.READING -> return x else -> { @@ -151,9 +156,9 @@ class NovelFragment : Fragment() { fragments.add(novelFragmentChapters!!) } val pagerAdapter = NovelPagerAdapter(childFragmentManager, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT, fragments) - fragment_novel_viewpager!!.adapter = pagerAdapter - fragment_novel_viewpager!!.addOnPageChangeListener(TabLayoutOnPageChangeListener(fragment_novel_tabLayout)) - fragment_novel_tabLayout!!.addOnTabSelectedListener(object : OnTabSelectedListener { + fragment_novel_viewpager?.adapter = pagerAdapter + fragment_novel_viewpager?.addOnPageChangeListener(TabLayoutOnPageChangeListener(fragment_novel_tabLayout)) + fragment_novel_tabLayout?.addOnTabSelectedListener(object : OnTabSelectedListener { override fun onTabSelected(tab: TabLayout.Tab) { fragment_novel_viewpager!!.currentItem = tab.position } @@ -161,28 +166,58 @@ class NovelFragment : Fragment() { override fun onTabUnselected(tab: TabLayout.Tab) {} override fun onTabReselected(tab: TabLayout.Tab) {} }) - fragment_novel_tabLayout!!.post { fragment_novel_tabLayout!!.setupWithViewPager(fragment_novel_viewpager) } + fragment_novel_tabLayout?.post { fragment_novel_tabLayout?.setupWithViewPager(fragment_novel_viewpager) } } @Suppress("unused") - /** * @param chapterURL Current chapter URL * @return chapter after the input, returns the current chapter if no more */ fun getNextChapter(chapterURL: Int, novelChapters: IntArray?): NovelChapter? { - if (novelChapters != null && novelChapters.isNotEmpty()) for (x in novelChapters.indices) { - if (novelChapters[x] == chapterURL) { - return if (novelFragmentChapters?.reversed!!) { - if (x - 1 != -1) DatabaseChapter.getChapter(novelChapters[x - 1]) else DatabaseChapter.getChapter(novelChapters[x]) - } else { - if (x + 1 != novelChapters.size) DatabaseChapter.getChapter(novelChapters[x + 1]) else DatabaseChapter.getChapter(novelChapters[x]) + if (novelChapters != null && novelChapters.isNotEmpty()) + for (x in novelChapters.indices) { + if (novelChapters[x] == chapterURL) { + return if (novelFragmentChapters?.reversed!!) { + if (x - 1 != -1) getChapter(novelChapters[x - 1]) else getChapter(novelChapters[x]) + } else { + if (x + 1 != novelChapters.size) getChapter(novelChapters[x + 1]) else getChapter(novelChapters[x]) + } + } + } + return null + } + + fun getNextChapter(chapterURL: String, novelChapters: List): NovelChapter? { + if (novelChapters.isNotEmpty()) + for (x in novelChapters.indices) { + if (novelChapters[x].link == chapterURL) { + return if (novelFragmentChapters?.reversed!!) { + if (x - 1 != -1) getChapter(getChapterIDFromChapterURL(novelChapters[x - 1].link)) else getChapter(getChapterIDFromChapterURL(novelChapters[x].link)) + } else { + if (x + 1 != novelChapters.size) getChapter(getChapterIDFromChapterURL(novelChapters[x + 1].link)) else getChapter(getChapterIDFromChapterURL(novelChapters[x].link)) + } } } - } return null } + fun getLastRead(): NovelChapter? { + if (!novelChapters.isNullOrEmpty()) + if (!novelFragmentChapters!!.reversed) + for (x in novelChapters.size - 1 downTo 0) { + val stat = getStatus(getChapterIDFromChapterURL(novelChapters[x].link)) + if (stat == Status.READ || stat == Status.READING) + return novelChapters[x] + } + else for (x in novelChapters) { + val stat = getStatus(getChapterIDFromChapterURL(x.link)) + if (stat == Status.READ || stat == Status.READING) + return x + } + return if (novelFragmentChapters!!.reversed) novelChapters[0] else novelChapters[novelChapters.size - 1] + } + init { setHasOptionsMenu(true) } diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/pages/NovelFragmentChapters.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/pages/NovelFragmentChapters.kt index d0f735825c..f4c62dcde1 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/pages/NovelFragmentChapters.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/pages/NovelFragmentChapters.kt @@ -1,5 +1,6 @@ package com.github.doomsdayrs.apps.shosetsu.ui.novel.pages +import android.app.AlertDialog import android.os.Bundle import android.util.Log import android.view.* @@ -12,12 +13,13 @@ import androidx.recyclerview.widget.RecyclerView import com.github.doomsdayrs.api.shosetsu.services.core.objects.NovelChapter import com.github.doomsdayrs.apps.shosetsu.R import com.github.doomsdayrs.apps.shosetsu.backend.DownloadManager +import com.github.doomsdayrs.apps.shosetsu.backend.Utilities import com.github.doomsdayrs.apps.shosetsu.backend.Utilities.openChapter import com.github.doomsdayrs.apps.shosetsu.backend.async.ChapterLoader import com.github.doomsdayrs.apps.shosetsu.backend.async.ChapterLoader.ChapterLoaderAction import com.github.doomsdayrs.apps.shosetsu.backend.database.Database import com.github.doomsdayrs.apps.shosetsu.backend.database.Database.DatabaseChapter.* -import com.github.doomsdayrs.apps.shosetsu.backend.database.Database.DatabaseIdentification +import com.github.doomsdayrs.apps.shosetsu.backend.database.Database.DatabaseIdentification.getChapterIDFromChapterURL import com.github.doomsdayrs.apps.shosetsu.backend.database.Database.DatabaseUpdates.addToUpdates import com.github.doomsdayrs.apps.shosetsu.ui.novel.NovelFragment import com.github.doomsdayrs.apps.shosetsu.ui.novel.adapters.ChaptersAdapter @@ -132,7 +134,6 @@ class NovelFragmentChapters : Fragment() { } - override fun onDestroy() { super.onDestroy() reversed = false @@ -217,60 +218,104 @@ class NovelFragmentChapters : Fragment() { } override fun onOptionsItemSelected(item: MenuItem): Boolean { - when (item.itemId) { + return when (item.itemId) { + R.id.download -> { + val builder = AlertDialog.Builder(activity!!) + builder.setTitle(R.string.download) + .setItems(R.array.chapters_download_options) { dialog, which -> + when (which) { + 0 -> { + // All + for (chapter in novelFragment?.novelChapters!!) + DownloadManager.addToDownload(activity!!, DownloadItem(novelFragment!!.formatter, novelFragment!!.novelPage.title, chapter.title, getChapterIDFromChapterURL(chapter.link))) + } + 1 -> { + // Unread + for (chapter in novelFragment?.novelChapters!!) { + val id = getChapterIDFromChapterURL(chapter.link) + if (getStatus(id) == (Status.UNREAD)) + DownloadManager.addToDownload(activity!!, DownloadItem(novelFragment!!.formatter, novelFragment!!.novelPage.title, chapter.title, id)) + } + } + 2 -> { + // TODO Custom + Utilities.regret(context!!) + } + 3 -> { + // TODO Next 10 + Utilities.regret(context!!) + } + 4 -> { + // TODO Next 5 + Utilities.regret(context!!) + } + 5 -> { + // Download next + val last = novelFragment!!.getLastRead() + if (last != null) { + val next = novelFragment!!.getNextChapter(last.link, novelFragment!!.novelChapters) + if (next != null) + DownloadManager.addToDownload(activity!!, DownloadItem(novelFragment!!.formatter, novelFragment!!.novelPage.title, next.title, getChapterIDFromChapterURL(next.link))) + } + } + } + } + builder.create().show() + true + } R.id.chapter_select_all -> { for (novelChapter in novelFragment!!.novelChapters) if (!contains(novelChapter)) selectedChapters.add(novelChapter) updateAdapter() - return true + true } R.id.chapter_download_selected -> { for (novelChapter in selectedChapters) { - val chapterID = DatabaseIdentification.getChapterIDFromChapterURL(novelChapter.link) - if (!Database.DatabaseChapter.isSaved(chapterID)) { + val chapterID = getChapterIDFromChapterURL(novelChapter.link) + if (!isSaved(chapterID)) { val downloadItem = DownloadItem(novelFragment!!.formatter, novelFragment!!.novelPage.title, novelChapter.title, chapterID) DownloadManager.addToDownload(activity, downloadItem) } } updateAdapter() - return true + true } R.id.chapter_delete_selected -> { for (novelChapter in selectedChapters) { - val chapterID = DatabaseIdentification.getChapterIDFromChapterURL(novelChapter.link) - if (Database.DatabaseChapter.isSaved(chapterID)) DownloadManager.delete(context, DownloadItem(novelFragment!!.formatter, novelFragment!!.novelPage.title, novelChapter.title, chapterID)) + val chapterID = getChapterIDFromChapterURL(novelChapter.link) + if (isSaved(chapterID)) DownloadManager.delete(context, DownloadItem(novelFragment!!.formatter, novelFragment!!.novelPage.title, novelChapter.title, chapterID)) } updateAdapter() - return true + true } R.id.chapter_deselect_all -> { selectedChapters = ArrayList() updateAdapter() if (inflater != null) activity?.invalidateOptionsMenu() - return true + true } R.id.chapter_mark_read -> { for (novelChapter in selectedChapters) { - val chapterID = DatabaseIdentification.getChapterIDFromChapterURL(novelChapter.link) - if (Database.DatabaseChapter.getStatus(chapterID).a != 2) Database.DatabaseChapter.setChapterStatus(chapterID, Status.READ) + val chapterID = getChapterIDFromChapterURL(novelChapter.link) + if (getStatus(chapterID).a != 2) setChapterStatus(chapterID, Status.READ) } updateAdapter() - return true + true } R.id.chapter_mark_unread -> { for (novelChapter in selectedChapters) { - val chapterID = DatabaseIdentification.getChapterIDFromChapterURL(novelChapter.link) - if (Database.DatabaseChapter.getStatus(chapterID).a != 0) Database.DatabaseChapter.setChapterStatus(chapterID, Status.UNREAD) + val chapterID = getChapterIDFromChapterURL(novelChapter.link) + if (getStatus(chapterID).a != 0) setChapterStatus(chapterID, Status.UNREAD) } updateAdapter() - return true + true } R.id.chapter_mark_reading -> { for (novelChapter in selectedChapters) { - val chapterID = DatabaseIdentification.getChapterIDFromChapterURL(novelChapter.link) - if (Database.DatabaseChapter.getStatus(chapterID).a != 0) Database.DatabaseChapter.setChapterStatus(chapterID, Status.READING) + val chapterID = getChapterIDFromChapterURL(novelChapter.link) + if (getStatus(chapterID).a != 0) setChapterStatus(chapterID, Status.READING) } updateAdapter() - return true + true } R.id.chapter_select_between -> { val min = findMinPosition() @@ -281,15 +326,15 @@ class NovelFragmentChapters : Fragment() { x++ } updateAdapter() - return true + true } R.id.chapter_filter -> { novelFragment!!.novelChapters = novelFragment!!.novelChapters.reversed() reversed = !reversed return updateAdapter() } + else -> false } - return false } override fun onResume() { diff --git a/app/src/main/res/menu/toolbar_chapters.xml b/app/src/main/res/menu/toolbar_chapters.xml index 5b159ea0f5..dabca735a3 100644 --- a/app/src/main/res/menu/toolbar_chapters.xml +++ b/app/src/main/res/menu/toolbar_chapters.xml @@ -9,6 +9,7 @@ app:showAsAction="ifRoom" /> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 49dedfd6a8..1aeef19c49 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -149,6 +149,23 @@ Check for updates Global search… + + Download next chapter + Download next 5 chapters + Download next 10 chapters + Download custom + Download all + Download unread + + + @string/download_all_chapters + @string/download_unread_chapters + @string/download_custom_chapters + @string/download_next_10_chapters + @string/download_next_5_chapters + @string/download_next_chapter + + Processing data This feature have not been reintroduced yet due to time constraints :( From 3f2bfadeb8967442bc74f807f39ad7fd410c60ed Mon Sep 17 00:00:00 2001 From: doomsdayrs Date: Wed, 1 Jan 2020 22:14:22 -0500 Subject: [PATCH 7/8] - Optimizations --- .../apps/shosetsu/backend/Utilities.kt | 20 ----------- .../shosetsu/backend/database/Database.java | 1 + .../backend/database/objects/base/Base.kt | 33 ------------------ .../listeners/CatalogueSearchQuery.kt | 4 +-- .../apps/shosetsu/ui/novel/NovelFragment.kt | 2 -- .../apps/shosetsu/ui/search/SearchFragment.kt | 1 - .../search/adapters/SearchResultsAdapter.kt | 1 - .../ui/search/viewHolders/SearchViewHolder.kt | 2 +- .../main/res/layout/fragment_catalogue.xml | 1 - .../main/res/layout/updated_novel_card.xml | 4 +-- .../mipmap-hdpi/ic_launcher_foreground.png | Bin 8358 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 4907 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 12292 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 20806 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 30402 -> 0 bytes app/src/main/res/values/strings.xml | 2 -- build.gradle | 2 +- 17 files changed, 7 insertions(+), 66 deletions(-) delete mode 100644 app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/database/objects/base/Base.kt delete mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt index 7c68365201..540e23282e 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/Utilities.kt @@ -333,15 +333,6 @@ object Utilities { return if (activeNetwork != null) activeNetwork.type == ConnectivityManager.TYPE_WIFI || activeNetwork.type == ConnectivityManager.TYPE_MOBILE else false }//TODO: Check this also, this doesn't seem to be a nice way to do things. - /** - * Is reader in night mode - * - * @return true if so, otherwise false - */ - val isReaderNightMode: Boolean - get() =//TODO: Check this also, this doesn't seem to be a nice way to do things. - Settings.ReaderTextColor == Color.WHITE - fun setNightNode() { setReaderColor(Color.WHITE, Color.BLACK) @@ -387,17 +378,6 @@ object Utilities { } } - /** - * Swaps the reader colors - */ - fun swapReaderColor() { - if (isReaderNightMode) { - setReaderColor(Color.BLACK, Color.WHITE) - } else { - setReaderColor(Color.WHITE, Color.BLACK) - } - } - /** * Toggles bookmark * diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/database/Database.java b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/database/Database.java index 13c4235f1a..6e2f08df21 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/database/Database.java +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/database/Database.java @@ -706,6 +706,7 @@ public static String getSavedNovelPassage(int chapterID) { * @param chapterURL chapter url * @return if present */ + @SuppressWarnings("BooleanMethodIsAlwaysInverted") public static boolean isNotInChapters(@NonNull String chapterURL) { Cursor cursor = sqLiteDatabase.rawQuery("SELECT " + Columns.IS_SAVED + " from " + Tables.CHAPTERS + " where " + Columns.ID + " =" + DatabaseIdentification.getChapterIDFromChapterURL(chapterURL), null); int a = cursor.getCount(); diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/database/objects/base/Base.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/database/objects/base/Base.kt deleted file mode 100644 index c18dd57e64..0000000000 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/backend/database/objects/base/Base.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.github.doomsdayrs.apps.shosetsu.backend.database.objects.base - -import java.io.Serializable - -/* - * This file is part of Shosetsu. - * - * Shosetsu 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. - * - * Shosetsu 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 Shosetsu. If not, see . - * ==================================================================== - * shosetsu - * 27 / 07 / 2019 - * - * @author github.com/doomsdayrs - */ -open class Base internal constructor(val NOVEL_URL: String) : Serializable { - override fun toString(): String { - return "Base{" + - "NOVEL_URL='" + NOVEL_URL + '\'' + - '}' - } - -} \ No newline at end of file diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/catalogue/listeners/CatalogueSearchQuery.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/catalogue/listeners/CatalogueSearchQuery.kt index f2ca7d9f04..b0634f5ab3 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/catalogue/listeners/CatalogueSearchQuery.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/catalogue/listeners/CatalogueSearchQuery.kt @@ -51,10 +51,10 @@ class CatalogueSearchQuery(private val catalogueFragment: CatalogueFragment) : S catalogueFragment.isQuery = true val recycleCards = ArrayList(catalogueFragment.catalogueNovelCards) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - recycleCards.removeIf { recycleCard: CatalogueNovelCard? -> !recycleCard!!.title.toLowerCase().contains(newText.toLowerCase()) } + recycleCards.removeIf { recycleCard: CatalogueNovelCard? -> !recycleCard!!.title.toLowerCase(Locale.ROOT).contains(newText.toLowerCase(Locale.ROOT)) } } else { for (x in recycleCards.indices.reversed()) { - if (!recycleCards[x]!!.title.toLowerCase().contains(newText.toLowerCase())) { + if (!recycleCards[x]!!.title.toLowerCase(Locale.ROOT).contains(newText.toLowerCase(Locale.ROOT))) { recycleCards.removeAt(x) } } diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/NovelFragment.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/NovelFragment.kt index 7068541c74..b525d86966 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/NovelFragment.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/novel/NovelFragment.kt @@ -8,13 +8,11 @@ import android.view.ViewGroup import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentPagerAdapter import com.github.doomsdayrs.api.shosetsu.services.core.dep.Formatter -import com.github.doomsdayrs.api.shosetsu.services.core.objects.Novel import com.github.doomsdayrs.api.shosetsu.services.core.objects.NovelChapter import com.github.doomsdayrs.api.shosetsu.services.core.objects.NovelPage import com.github.doomsdayrs.apps.shosetsu.R import com.github.doomsdayrs.apps.shosetsu.backend.Utilities import com.github.doomsdayrs.apps.shosetsu.backend.database.Database -import com.github.doomsdayrs.apps.shosetsu.backend.database.Database.DatabaseChapter import com.github.doomsdayrs.apps.shosetsu.backend.database.Database.DatabaseChapter.getChapter import com.github.doomsdayrs.apps.shosetsu.backend.database.Database.DatabaseChapter.getStatus import com.github.doomsdayrs.apps.shosetsu.backend.database.Database.DatabaseIdentification.getChapterIDFromChapterURL diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/SearchFragment.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/SearchFragment.kt index 6d4330b0aa..08b099329d 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/SearchFragment.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/SearchFragment.kt @@ -6,7 +6,6 @@ import android.view.* import android.widget.SearchView import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager -import com.github.doomsdayrs.api.shosetsu.services.core.objects.Novel import com.github.doomsdayrs.apps.shosetsu.R import com.github.doomsdayrs.apps.shosetsu.R.layout.search_activity import com.github.doomsdayrs.apps.shosetsu.backend.Utilities.setActivityTitle diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/adapters/SearchResultsAdapter.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/adapters/SearchResultsAdapter.kt index 98f3e36260..b9700ee1c7 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/adapters/SearchResultsAdapter.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/adapters/SearchResultsAdapter.kt @@ -4,7 +4,6 @@ import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.github.doomsdayrs.api.shosetsu.services.core.dep.Formatter -import com.github.doomsdayrs.api.shosetsu.services.core.objects.Novel import com.github.doomsdayrs.apps.shosetsu.R import com.github.doomsdayrs.apps.shosetsu.backend.database.Database import com.github.doomsdayrs.apps.shosetsu.ui.main.MainActivity diff --git a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/viewHolders/SearchViewHolder.kt b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/viewHolders/SearchViewHolder.kt index 224cf8cfde..c930213324 100644 --- a/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/viewHolders/SearchViewHolder.kt +++ b/app/src/main/java/com/github/doomsdayrs/apps/shosetsu/ui/search/viewHolders/SearchViewHolder.kt @@ -62,7 +62,7 @@ class SearchViewHolder(itemView: View, val searchFragment: SearchFragment) : Rec if (!searchFragment.containsData(id)) { val intArray: ArrayList = getIntLibrary() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - intArray.removeIf { novelID: Int? -> !DatabaseNovels.getNovelTitle(novelID!!).toLowerCase().contains(query.toLowerCase(Locale.ROOT)) } + intArray.removeIf { novelID: Int? -> !DatabaseNovels.getNovelTitle(novelID!!).toLowerCase(Locale.ROOT).contains(query.toLowerCase(Locale.ROOT)) } } else { for (x in intArray.indices.reversed()) if (!DatabaseNovels.getNovelTitle(intArray[x]).toLowerCase(Locale.ROOT).contains(query.toLowerCase(Locale.ROOT))) intArray.removeAt(x) } diff --git a/app/src/main/res/layout/fragment_catalogue.xml b/app/src/main/res/layout/fragment_catalogue.xml index e195a8333e..8c78a0dfd2 100644 --- a/app/src/main/res/layout/fragment_catalogue.xml +++ b/app/src/main/res/layout/fragment_catalogue.xml @@ -44,7 +44,6 @@ @@ -82,7 +81,8 @@ android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" /> + app:layout_constraintStart_toStartOf="parent" + android:contentDescription="@string/todo" /> diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png deleted file mode 100644 index 3b337c37a5d8f5bd4e0dc25d791cc508f68ef39b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8358 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 YeftO9H?Pg`{~r)MdZ@2iukH}{e|qxCNdN!< diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png deleted file mode 100644 index eea1ec7bc62f081b6adc0a4b42e88f6e8e2227f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4907 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

(K$f= z_UGSJPC@E(QeV7XOY+@bIXji!Uv)p1z9~Rcpnt#D+0KeMWZ{4Rl5^nFJx*qtqL?yy zkItN&hOm1tW|&XQy@8I;CozOgCft*TM=_)=wf7fYYi)}oKuLTH=HoW0sU+N~W;)H! zTx#QIryY}xsKb2-?UP2rp4E|}N5Vs}+En!2zbA=dx-T+knG?3nrUnDwX>csRm05tW zV(GTy zxHKMDmMKr3i}F5kPX>?Iar8Lj_y85=_M&Tj5N$ZaCWZPRJ|WC(84 z)q$2DTN(GJIC0*3P-#V5(ptUIkgsA+$_SRRu`0Aw=GRyME@ERj_u23 z>)AD(i-BXCK$vb$nI$j51lI^cG>Gi!Yph#T-Wv1G9vyIXuMWND{Vru-r3U4EbUJF6 zm3vHob%)zYcEFMEI3DyFAtUYN;i^(cAKrC8hg%HC_|FB`0(~;vR%6}`Vx*&=x=9wo<@XS%L1gi`n>hVX*x4*BFcK?)4EI#73`-vl zGH)wL-hOnlUGXoIfs)yHxbw7J=8UEp0%k2WGeA@a(78#r0rzIFOF1)p=IIkIk$RiLSf)?V?og_WNar}mUHMS^e-E(eu{ z4W05t)lhSos8RFnhDrzsUb+(`Zjai=trnLc6t&& diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png deleted file mode 100644 index fca3f51320c31aeb8efe216593c6cf7e1a768021..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12292 zcmc&)gCh{Llcqth<^ z2I9#2Pzo-0))_1gUzFm}YeiqRA6V>S4{3U}qF!e_rFo5Y*5Qk9bh|rH*x1%KooH)( zyrb%fxq}N3}De zK0YJGKEnsO{O?ac;s7*|6cU5S9kqq;rkzCv_>Y)D^X%VU@1mcR(M&_|a~?;fhTJ}h zBEok|E+M1K#bdBUsnnu4qKFJ$s6+|m?bG`oM32XR&bgP)>Wl95o#Q!NARDJ?!wbkK zY*`WAv=V|n?``u*0e|8tRaT(R?x`2Q#4Ie)d3v1u++mIC5i7VzjKJg>Kmx18>Ut|`0lhK@7PZqUsXh&m1FdDoi{OY zmx_-k*_Fd?@YX5?0%WLs9y>|O5MY6{So$&)z3v$~ADHN~cU+PNK7Z1q=Z`d}#RFk3 zp+sz3TIh)~*NltVjj@nREmpZJ)z;A4mY~SL0byWi5_al&cskqz{R-}}e35v>adS)( z`+d0$5x4{j-yIhNjBh9^zgh(b`NJgGWV4bz8(yw{#>9F}o^@MEJsl&4F1bW zYd1 zVweN3zRf_5I8U_X#X^f0%TdG?rGFzRrDi8O8)-&X(6B)JJ8w3DH;RZv7Xa<_t05b1 zM`C_nuNQnx#a{n5f;M>x`+uI%gVb}8?sBKnH11c7|<-oXau~Cju;%n1LVCxpG8=@p>4zBAZP1pN7|LC+A5?u-iR|Ep1*Q zKxhO*kzmUC>GVEma#&hiO$w1iM2)XoMi5Qs0=@OGnVxH6PPZnogqj*on+JwHQDklo z&uV(lo;NxCv25#)d{|lS+l(JAW~`Py@&wp5GPlRjvIDDqj?y?+JRH)?_D%?ttW)>) z*NVh8_Ph2-Cak}1aoK6yH|@=M_@6R&RH`@Z7DY}~z3KrKAMYrF$2pEfDm{hf0>C+E z!b6x=lNwmdurX>g=Ak4h>+B4{eRF)*m+2&; zVwPA#5qUZkoP>dtzs;+5M50EHo}Fs`felnDeP(}cBz3aiqbq%Oy3=S&-Qm|$?kKg& znCK5A)k*wCJH;c=FjPYP_qb1?se&+2WT~FycW0iJ!oDHqzI#X!ayKJhul{+2u#;v} zwd<$uc#5;FDA!#8AR7fCUTmY9Hu*zSXO(B!mlphp7KLF%YL#N1bd0JsRaYOVjLIEr zL<^X=dA&brItH)og9r|2I=K45mV^#4e*szZkyd@}MHhb1?(v5RT0?f_RLzVkh z166Y07`=a_f=&O^>MK-5C;AEFgTSy-czLr8WIBC@B>527Uin~cUVuD0Jjk2)qv>vp z%=e^>hXKRAHakSfNrqNO5x@|B<%Z%fCjGpkRBTKXAY2&#q10*)(V4 zJNnv&8%2~~?~|xhHf+!Ml1spWh~4~7bS%^PpNX&57>Tg6%R*FZpoip0Q9G4qd$3$u zM+DDh+I&1$??Km&=Untpo{gn5M~Bs)o%uLhXC2Gf8y?dvpl!~kAJj>*+YvzM2r1Zd zLeAbA|BM}=)z@eZ4Hp$h;0>djk2DT%{*wqFUZ~2%xo%b29Gqm*4QfzJ*)_H+?s5=CdBxhOa_X0M3UKveL~nv zJ!(Wgto7Hphjb#66zQuhspwp{+TZtgSABRZ9^}~5Jl#^U0W<4gJ^!99%(1-opH~$Y zzxTI-mz!>^?F(7f0x@WkMO@f#;eP4WQ{gFyx-w^UO?b4WSi3uFodp9U4Fx z_%W@a?9@6e9BuTtYAz`*^^+zngEY-{CqlZ>UTda!n6^VfV<3(7Y_VQxF^B5v7ib^? zyXCuAAPRd`5Ob(Ay`1^2!fSt0(3%8eBn<|5GrgPui?lqb{V|*o-2aPwB~~+r0$}ax2+_?o0^-c97pGYCeX--txU(F#mZf8?SNJH zVlt6prUVTw_tO;AvTUS{w1Za8jEp929ZS<24uoP9evA=~sK5HDUNo$(+Sl=_jap*< zEdFcg@&uK9`eaQ8JgEw?W&j*?h4YnUWS?`=qTb)nyF*$9vVX_u#raSJYCL(#eEtKU zmo9G)TxgoNu#ipK(>NvOJ}u&j?zE|7tZXay+7*c9$}VS3`$pd5+9Q;pIHFf#TQQoA zqVH6<9Kn>@cQ?w=zOw9K@NAdi0nO_Wn>_7)<{MH@k*7tRbFgdoAK~Q^4Jw9&fsr4r z)w=u6ARx#3#*l!U3Q)3%{p9ns(yGa!^x%9xug>EOttoXvHcFNuwqcZNKp9xh)kaSJ zw!6pCm`m}eoP>Npu?toV@)=e!YP;li(%^O?;XXO#cB0@WzWdGadn?c0^!X0DK;?4% z$O|=6(ndrpihzDe`Z&j}Z#SZcQ#vCAS;-w#!af>ZdogXDQnQOWTClffVU7rJW{Al9 zPrw<%yZT=54YFpEOh^4C6-lZ0ZcRMb7wW@>{_2fdN5e|7rWZO`7a3_5<@)jIZ-yH6 z<9{;)#kRAOSkB&mJPWnnvI3P*&L{5Z1pF|eeJ(=|Bl>EjP0jf+;3?iuTC5Y^#mx!r zbad&&wQCrfgRb?o!@3gNdVe77K?$WEfC8LT@zzS+Ekr{1#5ezs_4^bA%^Q8b zQ#A)Vl=>^{=ryV#nY*`;g(QqrBr5|HbS2031`Zb&w&_;+^@GL^nw*A)$J?KqKmv%e}G1>=Gckn=3xw;t`fyau`ex2a3WMem%F}2nd#pn`^=`@QU12t!2)R|5nxc0VntXDjA^*-!#)})AzC;;NRi9+xT(;(D5be9yFESo zsl{2&ghB27Mcvt$j?|{N(jm|Zm0sg(+W>A|CJAtDJazCBL#kXc%xgWB0P!FwLEaq- zlkjNu50AbNEJ38Yj>R;q!DeX^fQv7V5om#lIYiqi8lJ$!)@tV>|czMJA1${i%utYrPE|-Ys$>him zF4#N|J2iz+&YB>i{H*nSpwu_0Z{4bS`L#`UX06bAAp(6cfXm0757Es&;EA z84D2OYC-^79l#wJXG;5s`7hvdzNobevXpXT6^HvMPQVb!FE9#|+gP^JKxEzdWUsh` zDKN+5F|6DJwlH|a-vmV&d(9+t+S@kS!A>qFz=r0#$T1v$J6b`SfrItK9fx=fs!F-N z+ocT1ECc7sjnR;jGQj`FVHw@&I%xc>l%BZt_dV4k&g*-dZHip ztPl!x!FBXp7WFf;OxDfS{>+wqgTuQq>`)(|s~;7u;G}|}xUTL#^nT7h`p9S2#yPY5 zM*$ai;5`^QR0tN$NxR05eE0Mdo(?BW>pw!x&wD&D1xxgxIu##=5 zHp7y4N1XwAcv0{bpBVxye8o337*0HG@8Ki(vlk4jioHl0B&w>kOz!A=#ze`{DW>uo z!ieO41zY6h>mmVqP!O1SHD&ejr;YYbA03s?A0BaA5!GcZ4+I8^P!OsEo1dgMWA`~B zjT@*sdnHhT=>6{;RNgyhT4oz*X8HdWC%tq~{Ve7TcGpdC_T|={^@07)1iaAxbfPXs zsIK(I;f$Hg^ikilEeenp6BC4x>Va$eqfei6qx@}blxfon&m$n-eCbwlzNa4Yb4WJY zI(~WC{L}ZCzfEo~O@%1Xi8n(tN-)2{2x#kD8*U%g$>m|nu@bP(<)KlWwFmkk?;vxs zG0?N$=g+M_pqCTYv(IVJ9}ga%UPBrQeAriOvW2s-eO?m%y!`rwB!Q@5DM^kv)DGsa z2V1k$*nmO4nBc%tF*U`c=O1@-UhF0(wWslwQ+^Cz1J^!pr_A*&pgXYQ z*EzvoUDXXwNd;R>4T^*R{oqetYUw`{z6FJFUJIC&<7XGp;9Pzv+F|>C4R}u8Fm? z|LUQ;47?%#O;BGx@?yH_lwcJ#>?YJ9_a}vL;_KL{<{M+E`PtZn>-X$D#{4Cd1AF}t+=J_mKk zh+cYsVmCi#yNThIzkST+@;mVhh0eu&qnLFJxBus{WoGI;hH6Fy@BRn$tjMUR&K$1N z@O!wmPo8j;zQ-kwXqrue7EuNEaL+lQd==@+(Fi(l%(~q!UTG? zrY!63z88+`HtwUo=MEPUSl^v<72@7?m5-@|tTs@QWz>@>t#Y2n><}M2n7FQ=f33D7 zu#AF>;|qh5P%v90OCh}jq_lUf?Zs_bXMSb)s^Q#X6BF&RfaSyChKvVzLLE^=QG<-y zPy$F$)DtJQ8MMn)CThbbA;VxoSryF?A=f|gyW;Owd44XHkUhjy?)J0|66VGCkuIlu zC}-W?$y~Mj{!%g-u-XV;R|-aU+cSm!^MjF!ULbUdcPFlF6OYxeG?+orK z^g;*Furo=}UIg1KKB1h29V0(6K`57y+r7j=Mi-nIn^8~hv6uqo$VvP~H2m3F=@XXT zmA;P^q9d_%TRr__Yc@sD9?s_l8IKygYspG*TDTY}1$x;V{y2e)DkI7-%uw?>gr>UE z-ej;&d>vA6*0>>M%OOK4JPj(2FWd2DtrXPE{MvoYncrIQ^w;i$6A^Qad zDG~&A)iV{VuW`B&sxxGQlT9fhxFr5t^piLaY8gsKe-Wv=ZZBl%dkQlF4Gf#GpT)qj zbnwdQ{mx`P=zuL=i2i)~jDO2Ta@pkYW4qs|_oTUa+%Hw~o(8`=N=r$hqIXtYuQcIw z)d*7-SaI&7D=|-V{Z*rEeMNZgra4+&E+up~iannl6W^6N5^py)9yntS@r?B;*JLpr z0^?-CwPL#nhn78!Gtjhk=XF9oK)K8{iNo0|+Ueb{7c&U2!#xZCP4n?so&4{k3(+ks z-#LWz5B;*7Fz7V8`{e+z2GW}o!DDwA2eL{^fg=w6M9@FcXwSXHtTfl@j^x*|i@mtE zo{%fl=T=slisg#IRz*2Gw4(Lb*jSPPw^7qQjRSvm8!0^ zb!SL~;B1nekIeW2Y+&4BU zu6-cbgsWg#WlPD(bC~Oh;cj?`4L5OBfYW3TtaG1}W1mw{51?F2C@Op~qNipden+x3 zarYO=-~Oc(@XA{T6R1x_)%BGrG=pL6*~Dro>l29!`7SO7OSrclX9hZBgnh22cOJpjKoqOe1+K zrCkJCRDh;P3*m#pP%9b_nf82>1z$2c@!;v)dcyOV8DXX*76+PB(L z_2UTlG7hd#Y?HgGqMMwL^(?nC;#DoxUHxIOU88)WQk$HZw%2niG9j7B53e5GedjOY z5)-v!g(S!#y_Re$bpOTV^ZOXWoIvKumi*M_{IBmx8jpmqo8KD+8weWzsE{!qILRR0 z`{Vr4dSUKUH1e;+*=ssP5)PcENpgytCZlT$<$X!op-@s=tNQl{H5}X-7?D9mVjxhe zhXa=#t|g3|I_Wl# zBd=2jd!)3S>(J_JABE&s1thLk4>?>jGx)x%#?$`urZC38Da_fXZlJg!Os3(som0a6 z*nm@Co>_N7%C9V&+hg-L4g>?&NX6;&+VMxgn@`DGe7gUsI4R& zJPLN?_&cL`2?B8e<@#Tz-P&VS;&y)k?Y5)p4uD6FSghFVBFo{|P&|s^DbVE92Msd& zt~yDgw6%i68dodKix~<7-%Yl#pxck6E6tsrP@l$A1;Q74gp`x$54`~YIAAW`N8Br7 zj#zTY#RUKyzRGe0t}ko+7m|~!N+J}m`1lj|#A<97R{ODAD5E6$xVdrdkq3qKYzFzx(cbyM=kg%VV;-l?A1v$u zJ%lXOCxG>qFGVJ`*b)TAdGKBIRx~eNWf&|KZ`kOka8Xsk{38X$K0=G^IKknI^G6rK zmXk9d5?1M@*;8^6O8<+@;#*)aS(K_C{}Z*dq%m;w0aYXgj*2ZK_y6m?31&Z1LQM8i z4Lh%T*54-lUHDPJnT#mk8@_r_@Pb6u3UL57)W=1?^C;(<%L{hb`^$N)nf+r1?5pCdKLJ|>Xm z3L}+XwLX}p+ZY4a_P1d>oAVZMYPpHJXebow2$WE%QjP-<1*iSMnKJ^<8@<<_{$Svk z2>0w>w&Y%wr6EdIe@U_789TRHamUrs=L;_%DbK2R_e!)JzAAY2%>8Ws+|B88HG+Ae z>5u%}H*&Ze+9rV;d4J{e<^z-p{t&~`6>dHSu=TM8a7+2g`I5fb2^ZsA^0Vd)7v!7I z!(vmPU0Sh?(KW3w7k)Zc=T=Bmz75^FZ?H!Am)Sa}vwsY`YVq^)`EjPLb33N=Fd+-b z8Bj4fPGjnh`8=TUcMI94l8$(?_LqRMetW+A*-ID)E~;Dr+{Ask)2r2h#{*@9f3GNf z#eFO^>+P3hATD88#yked(FS%QQ(njd;9LCHsG;- zX?0@@BlorwcjIMKfK-mD;^*=HlTNg#*R~Mzwu#P{q=DeP;(rKpD?1fNNM{7=Jb za;qJ*xO?#Gsc)4D857mR)$R0)m7}M>N@E6(l_{&0d=>2L%tBHGx-rFXhThr#(#ASf zJG@W(-{IkaD;ay?mb`n-!fs8F1tle_H@*n#K4%}{>D&n2iqR*iNJjF<^s+m_8s}@CApCW9b%C_E5<5kRPWZ|>Rr(BnWcxSIvFq=X{F5qRbhJ%CPCI;Ex4bk!BrfM~KlIAe3gLhs+MfF8{Zr$#|KsNW;Dmjo$tfOZ%SDW#+ z&8~uAhvtgAd*q5e%k*3Kb>fKur)Ur@JSVS5qc5 z{#`g&5!Ay)kJz3D2SH{C1=`+8O@G{^))`3vIxKD9$V_-pO6uCRNMJ*uZlry9R3y65 zL+nr&M|4ZZnpP1A4o8SEy-b`jg)?s3pxXd&BH-ZL5l2$S+41ozYS83ABvqBdB?ypr zyrVxK<`jr2dpa=Z>oOmwiP6bQ$!=X`O>|0=;sQd zk?1YlzJQ-hdGaK-p|{v8gL^|NKxZ3eg@uqSp?T|m=kOclp4zXvtdO?j2VavDQbRe8 zqa-Lrr#5_pSB(_^i{r4}V3-)aud4bhFMJIDMKjC4MMN2Ee-h&#BXW+2P6A+awWGNrdmp(tHMgY{CV_B zX0m539`p#h%jjwfv_(1PZ9;c>Wsk~`OEzXRx8nF;9x_2HyT$_N||dE8u$Zle6k zxJZ8WAE3>r|MSHOZ>`T2yo{**ZhXPPxnNG+tbe6QYYemEDa>> z-q33+_|NMLhf7@BwR#Qc0jpL^6S~25e~rwp(KNc!;D9$=__!jYyz0$jf`8;*$U_6? zl2q@@qFL{kdd1&lOp6m_qJvwtD(UFxAeZwFGuq%plVuXSyfpYh<@XLaiB6Ihtg<*K%^#E!fi%^Ml_&> zZ1&w?X7E=^qd;bAGu<|^20c6ert^!xt)UVed^H45Y7`hGAwJA$3luNRiSS)BqH5<) z%9&9r@n1gc<1)a!^*uHhYZlj?G;O(=t;jH_8P6g>TBwE9v)w;IuM*xNafh>%;l*WH zQ#EJo!9J{L=oyf0QL3*|@)JkdD>`{?2d%nm&5BNw7%KGR31YI<`P*mEZwA+f_aru-*g~I7)!q@d2>hxH%ICiRq zxLsQc@KZyKV1xE^C1zZ(jeQ#Y1AlG*=da1szc%7+q-_r$R9lWtx>bxoE z&u*n~BHwOVL>wB?cJDbxJ&AAsDdo*IYo^QP*5X-rU$dVz#chj=QqGxt!V5=_it7K0 z5|?abd_x#$PS-ULqMZf3HluOjgccmkhVkgH+21$@i&5zhov2vUxzuhfT_?VqAeR$f zO$R!ZuJx#5L(a|QeZ6G%-4|jGCO@pOOvRs@s|vPHj>Xl8|5|-j@cFOOS9DVY7wvKL zck3CHK&8A4J8*Qdi=B&Z#6IY&n{xq)s!RNI8?4CVe>GeeVamZ_nGojeYTPr#*PeYy z{8Z{EG=8u0Jbl-$b(Ec!&J5C7WXRa3cmB7_<{}QBa91DMCNA$c+(Add8nQxzQUT~5 z{{j%FH0R~RlN^{G^0(CfT-`Y-qCB|F7V91*8*JeVTsJ}9lB{bI4RyltS1qebnjykev@KA}-Ot~2TZ4V{;tVaVniSctsn^##C{@j~H&}+AboH+d>fO&m9t@qZ7&kxZ$UgAtkc%X{_3<{3Gq6-d&du+5K;G29geTyf zp$Av0kmB2t3Epq!V~ju)rUBG zvL;?P-(`FX@~?%2DBEnsuNSz^2qhP)_Z;-AdThknvYOa=A7*#2Yru4cGMaOL@27hG ziy?$VtBrtdSnYrJs?wsSSk*you-cQDUWP!;+3Zc5ysX0H9Ii7`h_b^{s)dNNhUjn` z{|#ggw?he!Aq2*?@Sy4$rWqpPFA`E}yA_}APfb5F{?l|{TYb7#j*HTDclomWhx56~ zfDhwo&c#Su7=x7GzbuYqNLV}?&S9&n_7;IQ`A;?>xoAQ!AfSffX8mSjDrMh5YqeS1LgcC%a`6K7u@w;Aajc<7qZ+waZ4aYD1}Y9?mb9 z@g;X3b{;91u$py9iUyDzHL}kA2oxD9d@G@C+=)t7gaQ}Z$pRfgaBtU~IDz>jM9JKa zKho*(zu6<91M_p~I(#y-RN^}5)-u_y{F$pHNOeE@s<36MBM7Nj;rFm0_HM5B9`R-Q zY8U#uYOn&#vne&Kqw~Ay?Rkz>FbCZ$JfgL>6=X9DqCH<1lGr~e#edhEyN-{3 z0wA0IrI>QK^Ih{x{O6|MWrU`~5Aaj6`3f_xpK{ML&80JjSlezAB=Nm`^hO_J575VE zMfZO(u{FEk3Od+5xnG*B2dQ#>_`X^~;zA1Sp&M(hpA@Rhr9)+E`UkiAal)bFFa-Wq z7)3xXSmPIh@zQd}K&Evc*8S4&K~GkooW94lmy%|* zP+guS5qJXH(-b1rUU&HtBz*T^q^P*mr)dbg4RO>PMhPdcb2(3iFgDt0St6*&X7+e+ z{qjb-lIdNEjbu*T9P<{X-Xl&Udhv)UZa=0`fbd`+iKNLe^L(PjcHkNv2C`8gae`k?(@7s)4qXT=Tnn$Hla)_ur zah0G`6j5rQr_%@rmz=@JZLpFtMst2h6PTSTBorZTZbF!H!m^-A8@Z|%)2IN%P;G$) z7vVKE!Awe{B?*K#-+kRmG?@4sDOM-@^RWh3_uJcUrolCH#NF#RK=|W*VoT0>bUZ?8c9-Kd+PhYy+8|`ck zqrGFgV0BF=2Q_N*1`4ia7${mOGJB8jJn=JBW8qC3kYmlKd0SV&_inABE6+r0Y(QFk zfrzvq8p-5D+P^6EJA=48*-{hQ&T!X$8+`p}j|Xdf{D?X9043)+yri?t(fw?GYa-uS z`V`~#r*RRnm?aN4>sRWXa?N>B@muHyH0gdZ+81FJ%)1$**4??Qex^b^d)d>RGy2KE z@Sp3l!PFyHe-2-kdtlzl$T73a*8U)GVRv~I?>GK2OS>rARv^y0f?)0=C8NoK@=%>S zQrI$~rYe|z+Vkeg{^A*3M9!VGiSadQ3(JAVVQ0%lVfCj2>ThiA4+ZH?&!$csi5@PZ z+t;sZ8!tJoKRdCp^+OZ$TNqYfO?SlM9EBrbhM}F*_MNrBUGc6X?A+cs>`(1Vb3Z`L3hD+#z!ke1-5HJo%}|zQ?xg@ROKd`=|4&ivA@!T096tH_aMm5QkEEqzHfee?fKz6NO=)`~s`eiRipc!qU?A+$I(+6!^oK zNM43jGoQsqJAb33e`e!ZPltLrIrm0ka(JX^#gY2dKE>ch(2huq4&IvqMh;%(*okBY z@qoixioAJtG_n@)HulZ{)2IVoc;6*#942D$tcIvkA(2u(As(t=}HH(Y**6F zXKUuIo0Cxz7_TWZm?6aw_;--4Es(w?gGoH?>&xc8wLknz{rx6>3UKh?Oz`BbjD`AR zjp(FsVTOy)!AfafBK{H?lTqxy>>U7(EzYd1rAYkRQ%eD5y6DPX<|}(vNq;bEsN&;a z8L)-B!Or0G@t47SxPZw7gKNSq!MmJ}*4?6}zr$DYYv+LNZW&btihg?R`561#!82!bo7ci6dcxJbuw=0dbt2|DSfW d3w^n~!#v+ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png deleted file mode 100644 index 90a410db9ef36b31cce6693ed52f523d9feaf59e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20806 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 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png deleted file mode 100644 index 6762eb478beba04d4bf451cbce356cf4f01afa0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30402 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 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1aeef19c49..a546f45c64 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -22,9 +22,7 @@ Novel Title: Novel Author(s): Novel Description - Anilist Download - Myanimelist Download directory Position: Backup Now diff --git a/build.gradle b/build.gradle index 4fda55a999..74a12d3e07 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:4.0.0-alpha06' + classpath 'com.android.tools.build:gradle:4.0.0-alpha07' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files From 405184acf653aadb9c78d6bba06fb871d44bfa1f Mon Sep 17 00:00:00 2001 From: doomsdayrs Date: Wed, 1 Jan 2020 22:21:48 -0500 Subject: [PATCH 8/8] - Update init --- app/build.gradle | 4 ++-- app/update.xml | 10 +++------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ed3d2355ae..2b77401b74 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId 'com.github.doomsdayrs.apps.shosetsu' minSdkVersion 22 targetSdkVersion 29 - versionCode 22 - versionName "v1.0.0" + versionCode 23 + versionName "v1.1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" multiDexEnabled true } diff --git a/app/update.xml b/app/update.xml index 6654ffc23f..d280fd5108 100644 --- a/app/update.xml +++ b/app/update.xml @@ -1,15 +1,11 @@ - 1.0.0 - 22 + 1.1.0 + 23 https://github.com/Doomsdayrs/shosetsu/releases - - New DB structure, Incompatible to old releases - - Some UI differences - - New App icon - - Settings redesign - - Some features disabled for due to being untested with new DB + - Spoooood update :D