diff --git a/app/build.gradle b/app/build.gradle index 9d069b4b3..3164356b7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,3 +1,5 @@ +import java.time.LocalDateTime + plugins { id 'com.android.application' id 'kotlin-android' @@ -37,6 +39,12 @@ android { shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } + nightly { + initWith release + applicationIdSuffix = '.nightly' + defaultConfig.versionCode = LocalDateTime.now().format("yyMMdd").toInteger() + defaultConfig.versionName = "N" + LocalDateTime.now().format("yyMMdd") + } } buildFeatures { viewBinding true diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/core/github/AppUpdateRepository.kt b/app/src/main/kotlin/org/koitharu/kotatsu/core/github/AppUpdateRepository.kt index a1d2a5544..4fb9d0c84 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/core/github/AppUpdateRepository.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/core/github/AppUpdateRepository.kt @@ -1,5 +1,7 @@ package org.koitharu.kotatsu.core.github +import android.content.Context +import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow @@ -9,6 +11,7 @@ import okhttp3.Request import org.json.JSONArray import org.json.JSONObject import org.koitharu.kotatsu.BuildConfig +import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.network.BaseHttpClient import org.koitharu.kotatsu.core.os.AppValidator import org.koitharu.kotatsu.core.prefs.AppSettings @@ -22,22 +25,29 @@ import javax.inject.Inject import javax.inject.Singleton private const val CONTENT_TYPE_APK = "application/vnd.android.package-archive" +private const val BUILD_TYPE_RELEASE = "release" @Singleton class AppUpdateRepository @Inject constructor( private val appValidator: AppValidator, private val settings: AppSettings, @BaseHttpClient private val okHttp: OkHttpClient, + @ApplicationContext context: Context, ) { private val availableUpdate = MutableStateFlow(null) + private val releasesUrl = buildString { + append("https://api.github.com/repos/") + append(context.getString(R.string.github_updates_repo)) + append("/releases?page=1&per_page=10") + } fun observeAvailableUpdate() = availableUpdate.asStateFlow() suspend fun getAvailableVersions(): List { val request = Request.Builder() .get() - .url("https://api.github.com/repos/KotatsuApp/Kotatsu/releases?page=1&per_page=10") + .url(releasesUrl) val jsonArray = okHttp.newCall(request.build()).await().parseJsonArray() return jsonArray.mapJSONNotNull { json -> val asset = json.optJSONArray("assets")?.find { jo -> @@ -74,8 +84,9 @@ class AppUpdateRepository @Inject constructor( }.getOrNull() } + @Suppress("KotlinConstantConditions") fun isUpdateSupported(): Boolean { - return BuildConfig.DEBUG || appValidator.isOriginalApp + return BuildConfig.BUILD_TYPE != BUILD_TYPE_RELEASE || appValidator.isOriginalApp } suspend fun getCurrentVersionChangelog(): String? { diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/settings/about/AboutSettingsFragment.kt b/app/src/main/kotlin/org/koitharu/kotatsu/settings/about/AboutSettingsFragment.kt index cc6655248..5419fed7a 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/settings/about/AboutSettingsFragment.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/settings/about/AboutSettingsFragment.kt @@ -32,6 +32,7 @@ class AboutSettingsFragment : BasePreferenceFragment(R.string.about) { isEnabled = viewModel.isUpdateSupported } findPreference(AppSettings.KEY_UPDATES_UNSTABLE)?.run { + isVisible = viewModel.isUpdateSupported isEnabled = VersionId(BuildConfig.VERSION_NAME).isStable if (!isEnabled) isChecked = true } diff --git a/app/src/main/res/values/constants.xml b/app/src/main/res/values/constants.xml index c1db553ce..1c260acf0 100644 --- a/app/src/main/res/values/constants.xml +++ b/app/src/main/res/values/constants.xml @@ -8,6 +8,7 @@ https://bugs.kotatsu.app/report org.kotatsu.sync https://sync.kotatsu.app + KotatsuApp/Kotatsu Mw6F0tPEOgyV7F9U9Twg50Q8SndMY7hzIOfXg0AX_XU euBMt1GGRSDpVIFQVPxZrO7Kh6X4gWyv0dABuj4B-M8 9887 diff --git a/app/src/nightly/kotlin/org/koitharu/kotatsu/KotatsuApp.kt b/app/src/nightly/kotlin/org/koitharu/kotatsu/KotatsuApp.kt new file mode 100644 index 000000000..983e1297c --- /dev/null +++ b/app/src/nightly/kotlin/org/koitharu/kotatsu/KotatsuApp.kt @@ -0,0 +1,5 @@ +package org.koitharu.kotatsu + +import org.koitharu.kotatsu.core.BaseApp + +class KotatsuApp : BaseApp() diff --git a/app/src/nightly/kotlin/org/koitharu/kotatsu/core/network/CurlLoggingInterceptor.kt b/app/src/nightly/kotlin/org/koitharu/kotatsu/core/network/CurlLoggingInterceptor.kt new file mode 100644 index 000000000..28441f840 --- /dev/null +++ b/app/src/nightly/kotlin/org/koitharu/kotatsu/core/network/CurlLoggingInterceptor.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.core.network + +import okhttp3.Interceptor +import okhttp3.Response + +class CurlLoggingInterceptor : Interceptor { + + override fun intercept(chain: Interceptor.Chain): Response { + return chain.proceed(chain.request()) // no-op implementation + } +} diff --git a/app/src/nightly/kotlin/org/koitharu/kotatsu/core/util/ext/Debug.kt b/app/src/nightly/kotlin/org/koitharu/kotatsu/core/util/ext/Debug.kt new file mode 100644 index 000000000..949497187 --- /dev/null +++ b/app/src/nightly/kotlin/org/koitharu/kotatsu/core/util/ext/Debug.kt @@ -0,0 +1,8 @@ +@file:Suppress("UnusedReceiverParameter") + +package org.koitharu.kotatsu.core.util.ext + +@Suppress("NOTHING_TO_INLINE") +inline fun Throwable.printStackTraceDebug() = Unit + +fun assertNotInMainThread() = Unit diff --git a/app/src/nightly/kotlin/org/koitharu/kotatsu/settings/SettingsMenuProvider.kt b/app/src/nightly/kotlin/org/koitharu/kotatsu/settings/SettingsMenuProvider.kt new file mode 100644 index 000000000..e9cc4b9a5 --- /dev/null +++ b/app/src/nightly/kotlin/org/koitharu/kotatsu/settings/SettingsMenuProvider.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.settings + +import android.content.Context +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem +import androidx.core.view.MenuProvider + +@Suppress("UNUSED_PARAMETER") +class SettingsMenuProvider(context: Context) : MenuProvider { + + override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) = Unit + + override fun onMenuItemSelected(menuItem: MenuItem): Boolean = false +} diff --git a/app/src/nightly/res/drawable/ic_launcher_foreground.xml b/app/src/nightly/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 000000000..510acf9f4 --- /dev/null +++ b/app/src/nightly/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/nightly/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/nightly/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 000000000..d8a3b79e5 --- /dev/null +++ b/app/src/nightly/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/nightly/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/nightly/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 000000000..7353dbd1f --- /dev/null +++ b/app/src/nightly/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/nightly/res/mipmap-hdpi/ic_launcher.webp b/app/src/nightly/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 000000000..ffc9a3a9f Binary files /dev/null and b/app/src/nightly/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/app/src/nightly/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/nightly/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 000000000..d6386726f Binary files /dev/null and b/app/src/nightly/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/app/src/nightly/res/mipmap-mdpi/ic_launcher.webp b/app/src/nightly/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 000000000..e1a9b7580 Binary files /dev/null and b/app/src/nightly/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/app/src/nightly/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/nightly/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 000000000..e9f23bf42 Binary files /dev/null and b/app/src/nightly/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/app/src/nightly/res/mipmap-xhdpi/ic_launcher.webp b/app/src/nightly/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 000000000..dbd9abfb5 Binary files /dev/null and b/app/src/nightly/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/app/src/nightly/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/nightly/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 000000000..4d59a10fe Binary files /dev/null and b/app/src/nightly/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/app/src/nightly/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/nightly/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 000000000..0845e96c1 Binary files /dev/null and b/app/src/nightly/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/app/src/nightly/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/nightly/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 000000000..0870f13d0 Binary files /dev/null and b/app/src/nightly/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/nightly/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/nightly/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 000000000..e7414ed46 Binary files /dev/null and b/app/src/nightly/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/app/src/nightly/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/nightly/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 000000000..0b731a133 Binary files /dev/null and b/app/src/nightly/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/nightly/res/values/constants.xml b/app/src/nightly/res/values/constants.xml new file mode 100644 index 000000000..136bedbbd --- /dev/null +++ b/app/src/nightly/res/values/constants.xml @@ -0,0 +1,7 @@ + + + org.kotatsu.nightly.sync + org.koitharu.kotatsu.nightly.history + org.koitharu.kotatsu.nightly.favourites + dragonx943/KotatsuDev + diff --git a/app/src/nightly/res/values/strings.xml b/app/src/nightly/res/values/strings.xml new file mode 100644 index 000000000..c73c49bd9 --- /dev/null +++ b/app/src/nightly/res/values/strings.xml @@ -0,0 +1,3 @@ + + Kotatsu Nightly +