Skip to content

Commit 21fdda3

Browse files
committed
Rekado 4.1.2
- Added: All finished localizations from Crowdin. - Removed: SX Loader from bundled payloads. - Updated: fusee_primary and hekate payloads to the latest versions.
1 parent 46fbc2b commit 21fdda3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+765
-299
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ Payload launcher written in Kotlin for Nintendo Switch.
1111

1212
**Application doesn't require Root on your device.**
1313

14-
[SX Loader](https://sx.xecuter.com/), [ReiNX](https://reinx.guide/), [Fusee Primary](https://github.com/Atmosphere-NX/Atmosphere) and [Hekate](https://github.com/CTCaer/hekate) payloads bundled as default.
14+
[ReiNX](https://reinx.guide/), [Fusee Primary](https://github.com/Atmosphere-NX/Atmosphere) and [Hekate](https://github.com/CTCaer/hekate) payloads bundled as default.
1515

1616
## Usage
1717
* Launch application.
1818
* Find a cable to connect your device to the Nintendo Switch. For proper work, this should be a cable that is designed for data transmission, not just for charging. It is advisable to use an **A-to-C** cable and an **USB OTG** adapter.
19-
* In the **"Payloads"** category, click the **"+"** button to select preloaded payload from your device's storage. Or simply transfer your payload to the Rekado folder in the device's memory. Or you can use the bundled payloads (**SX Loader/ReiNX/Hekate/Fusee Primary**).
19+
* In the **"Payloads"** category, click the **"+"** button to select preloaded payload from your device's storage. Or simply transfer your payload to the Rekado folder in the device's memory. Or you can use the bundled payloads (**ReiNX/Hekate/Fusee Primary**).
2020
* Enter your Nintendo Switch into **RCM** mode in any convenient way. Your Nintendo Switch will power on by itself when plugged in, be sure to hold **VOLUME +**.
2121
* Connect the device to the Nintendo Switch and allow permission for the **USB** access if necessary. Wait unit payloads chooser dialog will be opened and select which one you want to load.
2222
* Wait for payload to finish loading on your console.

app/build.gradle

+5-4
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ android {
99
applicationId "com.pavelrekun.rekado"
1010
minSdkVersion minimumSDKVersion
1111
targetSdkVersion currentSDKVersion
12-
versionCode 74
13-
versionName "4.1.1"
12+
versionCode appVersionCode
13+
versionName appVersionName
1414

1515
archivesBaseName = "[$versionName] Rekado [${versionCode}]"
1616
}
@@ -66,8 +66,9 @@ dependencies {
6666
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$androidXLifecycleVersion"
6767
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$androidXLifecycleVersion"
6868
implementation "androidx.lifecycle:lifecycle-common-java8:$androidXLifecycleVersion"
69-
implementation "androidx.navigation:navigation-fragment-ktx:$androixXNavigationVersion"
70-
implementation "androidx.navigation:navigation-ui-ktx:$androixXNavigationVersion"
69+
implementation "androidx.navigation:navigation-fragment-ktx:$androidXNavigationVersion"
70+
implementation "androidx.navigation:navigation-ui-ktx:$androidXNavigationVersion"
71+
implementation "androidx.swiperefreshlayout:swiperefreshlayout:$androidXSwipeToRefreshLayoutVersion"
7172

7273
// Google: Design
7374
implementation "com.google.android.material:material:$materialComponentsVersion"

app/libs/magta.aar

18.9 KB
Binary file not shown.

app/libs/penza.aar

-5.4 KB
Binary file not shown.

app/src/main/java/com/pavelrekun/rekado/base/BaseActivity.kt

+5-3
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ import android.os.Build
55
import android.os.Bundle
66
import androidx.navigation.NavController
77
import androidx.navigation.findNavController
8+
import com.pavelrekun.magta.design.resolveColorAttribute
9+
import com.pavelrekun.magta.design.tintNavigationBar
10+
import com.pavelrekun.magta.design.tintTaskDescription
811
import com.pavelrekun.penza.base.PenzaActivity
912
import com.pavelrekun.penza.services.helpers.ColorsHelper
10-
import com.pavelrekun.penza.services.helpers.DesignHelper
1113
import com.pavelrekun.rekado.R
1214
import com.pavelrekun.rekado.containers.PrimaryContainerActivity
1315

@@ -35,11 +37,11 @@ open class BaseActivity : PenzaActivity() {
3537
}
3638

3739
private fun initDesignRules() {
38-
DesignHelper.tintTaskDescription(this, R.mipmap.ic_launcher, R.string.app_name, ColorsHelper.resolveColorAttribute(this, android.R.attr.windowBackground))
40+
tintTaskDescription(R.mipmap.ic_launcher, R.string.app_name, resolveColorAttribute(android.R.attr.windowBackground))
3941

4042
if (this is PrimaryContainerActivity) {
4143
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
42-
DesignHelper.tintNavigationBar(this, ColorsHelper.resolveColorAttribute(this, R.attr.colorBackgroundSecondary))
44+
tintNavigationBar(resolveColorAttribute(R.attr.colorBackgroundSecondary))
4345
}
4446
}
4547
}

app/src/main/java/com/pavelrekun/rekado/base/BasePreferencesFragment.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import android.view.ViewGroup
77
import androidx.preference.Preference
88
import androidx.preference.PreferenceFragmentCompat
99
import androidx.recyclerview.widget.RecyclerView
10-
import com.pavelrekun.penza.services.extensions.convertPXToDP
10+
import com.pavelrekun.magta.design.px
1111

1212
open class BasePreferencesFragment(private val preferencesLayoutId: Int, private val titleResId: Int) : PreferenceFragmentCompat() {
1313

@@ -33,7 +33,7 @@ open class BasePreferencesFragment(private val preferencesLayoutId: Int, private
3333
super.onScrolled(recyclerView, dx, dy)
3434

3535
if (view.canScrollVertically(SCROLL_DIRECTION_UP)) {
36-
requireBaseActivity().supportActionBar?.elevation = 3.convertPXToDP(requireBaseActivity()).toFloat()
36+
requireBaseActivity().supportActionBar?.elevation = 3.px.toFloat()
3737
} else {
3838
requireBaseActivity().supportActionBar?.elevation = 0F
3939
}

app/src/main/java/com/pavelrekun/rekado/containers/PrimaryContainerActivity.kt

-6
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import com.pavelrekun.rekado.services.Constants
1414
import com.pavelrekun.rekado.services.dialogs.DialogsShower
1515
import com.pavelrekun.rekado.services.extensions.openAboutScreen
1616
import com.pavelrekun.rekado.services.extensions.openSettingsScreen
17-
import com.pavelrekun.rekado.services.extensions.openTranslatorsScreen
1817

1918
class PrimaryContainerActivity : BaseActivity() {
2019

@@ -54,11 +53,6 @@ class PrimaryContainerActivity : BaseActivity() {
5453
true
5554
}
5655

57-
R.id.navigation_translators -> {
58-
openTranslatorsScreen()
59-
true
60-
}
61-
6256
else -> return false
6357
}
6458
}

app/src/main/java/com/pavelrekun/rekado/containers/SecondaryContainerActivity.kt

+12-9
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ import android.graphics.Color
44
import android.os.Build
55
import android.os.Bundle
66
import androidx.activity.viewModels
7-
import androidx.lifecycle.Observer
8-
import com.pavelrekun.magta.isGesturalNavigationEnabled
7+
import com.pavelrekun.magta.design.tintNavigationBar
8+
import com.pavelrekun.magta.system.isGesturalNavigationEnabled
99
import com.pavelrekun.penza.pickers.theme.ThemePickerViewModel
10-
import com.pavelrekun.penza.services.helpers.DesignHelper
1110
import com.pavelrekun.rekado.R
1211
import com.pavelrekun.rekado.base.BaseActivity
1312
import com.pavelrekun.rekado.databinding.ActivityContainerSecondaryBinding
1413
import com.pavelrekun.rekado.services.dialogs.DialogsShower
1514
import com.pavelrekun.rekado.services.extensions.*
15+
import dev.chrisbanes.insetter.applyInsetter
1616
import dev.chrisbanes.insetter.applySystemWindowInsetsToPadding
1717

1818
class SecondaryContainerActivity : BaseActivity() {
@@ -31,7 +31,7 @@ class SecondaryContainerActivity : BaseActivity() {
3131
prepareEdgeToEdge()
3232
prepareObservers()
3333

34-
if(savedInstanceState == null) {
34+
if (savedInstanceState == null) {
3535
navigate()
3636
}
3737
}
@@ -42,10 +42,14 @@ class SecondaryContainerActivity : BaseActivity() {
4242
window.setDecorFitsSystemWindows(false)
4343
}
4444

45-
DesignHelper.tintNavigationBar(this, Color.TRANSPARENT)
45+
tintNavigationBar(Color.TRANSPARENT)
4646
}
4747

48-
binding.secondaryLayoutToolbar.applySystemWindowInsetsToPadding(top = true)
48+
binding.secondaryLayoutToolbar.applyInsetter {
49+
type(statusBars = true) {
50+
padding()
51+
}
52+
}
4953
}
5054

5155
private fun navigate() {
@@ -63,7 +67,6 @@ class SecondaryContainerActivity : BaseActivity() {
6367
return when (intent.getIntExtra(NAVIGATION_TYPE, NAVIGATION_DESTINATION_UNKNOWN)) {
6468
NAVIGATION_DESTINATION_SETTINGS -> R.id.navigationSettings
6569
NAVIGATION_DESTINATION_ABOUT -> R.id.navigationAbout
66-
NAVIGATION_DESTINATION_TRANSLATORS -> R.id.navigationTranslators
6770
NAVIGATION_DESTINATION_TOOLS_SERIAL_CHECKER -> R.id.navigationSerialChecker
6871
else -> NAVIGATION_DESTINATION_UNKNOWN
6972
}
@@ -77,11 +80,11 @@ class SecondaryContainerActivity : BaseActivity() {
7780
}
7881

7982
private fun prepareObservers() {
80-
themesPickerViewModel.selectionResult.observe(this, Observer {
83+
themesPickerViewModel.selectionResult.observe(this, {
8184
DialogsShower.showSettingsRestartDialog(this)
8285
})
8386

84-
themesPickerViewModel.controlResult.observe(this, Observer {
87+
themesPickerViewModel.controlResult.observe(this, {
8588
DialogsShower.showSettingsRestartDialog(this)
8689
})
8790
}

app/src/main/java/com/pavelrekun/rekado/data/Payload.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.pavelrekun.rekado.data
22

33
import com.google.gson.annotations.SerializedName
4-
import com.pavelrekun.penza.services.extensions.EMPTY_STRING
4+
import com.pavelrekun.magta.system.EMPTY_STRING
55
import com.pavelrekun.rekado.services.utils.MemoryUtils.getLocation
66

77
data class Payload(

app/src/main/java/com/pavelrekun/rekado/screens/about_fragment/AboutFragment.kt

+8-4
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ package com.pavelrekun.rekado.screens.about_fragment
22

33
import android.os.Bundle
44
import android.view.View
5-
import com.pavelrekun.magta.constants.Links
5+
import com.pavelrekun.magta.services.constants.Links
6+
import com.pavelrekun.magta.system.viewBinding
67
import com.pavelrekun.rekado.BuildConfig
78
import com.pavelrekun.rekado.R
89
import com.pavelrekun.rekado.base.BaseFragment
910
import com.pavelrekun.rekado.databinding.FragmentAboutBinding
1011
import com.pavelrekun.rekado.services.Constants
11-
import com.pavelrekun.rekado.services.extensions.viewBinding
1212
import com.pavelrekun.rekado.services.utils.Utils
13-
import dev.chrisbanes.insetter.applySystemWindowInsetsToPadding
13+
import dev.chrisbanes.insetter.applyInsetter
1414

1515
class AboutFragment : BaseFragment(R.layout.fragment_about) {
1616

@@ -39,7 +39,11 @@ class AboutFragment : BaseFragment(R.layout.fragment_about) {
3939
}
4040

4141
private fun initEdgeToEdge() {
42-
binding.aboutLayoutContainer.applySystemWindowInsetsToPadding(bottom = true)
42+
binding.aboutLayoutContainer.applyInsetter {
43+
type(navigationBars = true) {
44+
padding()
45+
}
46+
}
4347
}
4448

4549
}

app/src/main/java/com/pavelrekun/rekado/screens/instructions_fragment/InstructionsFragment.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ package com.pavelrekun.rekado.screens.instructions_fragment
22

33
import android.os.Bundle
44
import android.view.View
5+
import com.pavelrekun.magta.system.viewBinding
56
import com.pavelrekun.rekado.R
67
import com.pavelrekun.rekado.base.BaseFragment
78
import com.pavelrekun.rekado.databinding.FragmentInstructionsBinding
89
import com.pavelrekun.rekado.services.Constants
9-
import com.pavelrekun.rekado.services.extensions.viewBinding
1010
import com.pavelrekun.rekado.services.utils.Utils
1111

1212
class InstructionsFragment : BaseFragment(R.layout.fragment_instructions) {

app/src/main/java/com/pavelrekun/rekado/screens/logs_fragment/LogsFragment.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ import android.os.Bundle
44
import android.view.View
55
import androidx.recyclerview.widget.LinearLayoutManager
66
import androidx.recyclerview.widget.RecyclerView
7-
import com.pavelrekun.penza.services.extensions.tintContrast
7+
import com.pavelrekun.magta.design.tintContrast
8+
import com.pavelrekun.magta.system.viewBinding
89
import com.pavelrekun.rekado.R
910
import com.pavelrekun.rekado.base.BaseFragment
1011
import com.pavelrekun.rekado.databinding.FragmentLogsBinding
1112
import com.pavelrekun.rekado.services.utils.LoginUtils
12-
import com.pavelrekun.rekado.services.extensions.viewBinding
1313

1414
class LogsFragment : BaseFragment(R.layout.fragment_logs) {
1515

app/src/main/java/com/pavelrekun/rekado/screens/payload_fragment/PayloadsAdapter.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ import android.view.LayoutInflater
44
import android.view.View
55
import android.view.ViewGroup
66
import androidx.recyclerview.widget.RecyclerView
7-
import com.pavelrekun.penza.services.extensions.EMPTY_STRING
7+
import com.pavelrekun.magta.system.EMPTY_STRING
88
import com.pavelrekun.rekado.data.Payload
99
import com.pavelrekun.rekado.databinding.ItemPayloadBinding
1010
import com.pavelrekun.rekado.services.Events
11-
import com.pavelrekun.rekado.services.utils.LoginUtils
1211
import com.pavelrekun.rekado.services.payloads.PayloadHelper
12+
import com.pavelrekun.rekado.services.utils.LoginUtils
1313
import org.greenrobot.eventbus.EventBus
1414
import java.io.File
1515

app/src/main/java/com/pavelrekun/rekado/screens/payload_fragment/PayloadsFragment.kt

+4-5
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,16 @@ import android.os.Bundle
66
import android.view.View
77
import android.widget.Toast
88
import androidx.fragment.app.activityViewModels
9-
import androidx.lifecycle.Observer
109
import androidx.recyclerview.widget.LinearLayoutManager
11-
import com.pavelrekun.penza.services.extensions.tintContrast
10+
import com.pavelrekun.magta.design.tintContrast
11+
import com.pavelrekun.magta.system.extractFileName
12+
import com.pavelrekun.magta.system.viewBinding
1213
import com.pavelrekun.rekado.R
1314
import com.pavelrekun.rekado.base.BaseFragment
1415
import com.pavelrekun.rekado.databinding.FragmentPayloadsBinding
1516
import com.pavelrekun.rekado.services.Constants
1617
import com.pavelrekun.rekado.services.Events
1718
import com.pavelrekun.rekado.services.dialogs.DialogsShower
18-
import com.pavelrekun.rekado.services.extensions.extractFileName
19-
import com.pavelrekun.rekado.services.extensions.viewBinding
2019
import com.pavelrekun.rekado.services.payloads.PayloadHelper
2120
import com.pavelrekun.rekado.services.payloads.Result
2221
import com.pavelrekun.rekado.services.utils.LoginUtils
@@ -50,7 +49,7 @@ class PayloadsFragment : BaseFragment(R.layout.fragment_payloads) {
5049
if (requestCode == Constants.KEY_OPEN_PAYLOAD) {
5150
when (resultCode) {
5251
Activity.RESULT_OK -> data?.data?.let {
53-
val name = it.extractFileName()
52+
val name = it.extractFileName(requireContext())
5453
if (name != null) {
5554
val inputStream = requireBaseActivity().contentResolver.openInputStream(it)
5655

app/src/main/java/com/pavelrekun/rekado/screens/payload_fragment/PayloadsViewModel.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class PayloadsViewModel : ViewModel() {
2727
val downloadPayloadResult = MutableLiveData<Result>()
2828

2929
fun fetchExternalConfig() {
30-
val errorsHandler = CoroutineExceptionHandler { _, exception ->
30+
val errorsHandler = CoroutineExceptionHandler { _, _ ->
3131
fetchConfigResult.value = Result.ERROR
3232
isProgressShowing.value = false
3333
}

app/src/main/java/com/pavelrekun/rekado/screens/serial_checker_activity/SerialCheckerFragment.kt

+9-4
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@ import android.os.Bundle
55
import android.view.View
66
import android.widget.Toast
77
import com.google.zxing.integration.android.IntentIntegrator
8+
import com.pavelrekun.magta.design.getString
9+
import com.pavelrekun.magta.design.isEmpty
10+
import com.pavelrekun.magta.system.viewBinding
811
import com.pavelrekun.rekado.R
912
import com.pavelrekun.rekado.base.BaseFragment
1013
import com.pavelrekun.rekado.databinding.FragmentSerialCheckerBinding
1114
import com.pavelrekun.rekado.services.Constants
12-
import com.pavelrekun.rekado.services.extensions.getString
13-
import com.pavelrekun.rekado.services.extensions.isEmpty
14-
import com.pavelrekun.rekado.services.extensions.viewBinding
1515
import com.pavelrekun.rekado.services.utils.SerialUtils
1616
import com.pavelrekun.rekado.services.utils.Utils
17+
import dev.chrisbanes.insetter.applyInsetter
1718
import dev.chrisbanes.insetter.applySystemWindowInsetsToPadding
1819

1920
class SerialCheckerFragment : BaseFragment(R.layout.fragment_serial_checker) {
@@ -73,7 +74,11 @@ class SerialCheckerFragment : BaseFragment(R.layout.fragment_serial_checker) {
7374
}
7475

7576
private fun initEdgeToEdge() {
76-
binding.serialCheckerLayoutContainer.applySystemWindowInsetsToPadding(bottom = true)
77+
binding.serialCheckerLayoutContainer.applyInsetter {
78+
type(navigationBars = true) {
79+
padding()
80+
}
81+
}
7782
}
7883

7984
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {

app/src/main/java/com/pavelrekun/rekado/screens/settings_fragment/SettingsFragment.kt

+7-2
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import com.pavelrekun.rekado.services.payloads.PayloadHelper
1818
import com.pavelrekun.rekado.services.utils.LoginUtils
1919
import com.pavelrekun.rekado.services.utils.PreferencesUtils
2020
import com.pavelrekun.rekado.services.utils.Utils
21+
import dev.chrisbanes.insetter.applyInsetter
2122
import dev.chrisbanes.insetter.applySystemWindowInsetsToPadding
2223

2324
class SettingsFragment : BasePreferencesFragment(R.xml.preferences, R.string.navigation_settings) {
@@ -120,7 +121,7 @@ class SettingsFragment : BasePreferencesFragment(R.xml.preferences, R.string.nav
120121
}
121122

122123
private fun initPayloadsCategory() {
123-
payloadsHidePreference.setOnPreferenceChangeListener { preference, newValue ->
124+
payloadsHidePreference.setOnPreferenceChangeListener { _, newValue ->
124125
PreferencesUtils.setHideBundledPayloadsEnabled(newValue as Boolean)
125126
initAutoInjectorCategory()
126127
true
@@ -141,7 +142,11 @@ class SettingsFragment : BasePreferencesFragment(R.xml.preferences, R.string.nav
141142

142143

143144
private fun initEdgeToEdge() {
144-
listView.applySystemWindowInsetsToPadding(bottom = true)
145+
listView.applyInsetter {
146+
type(navigationBars = true) {
147+
padding()
148+
}
149+
}
145150
}
146151

147152
}

app/src/main/java/com/pavelrekun/rekado/screens/tools_fragment/ToolsFragment.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ package com.pavelrekun.rekado.screens.tools_fragment
22

33
import android.os.Bundle
44
import android.view.View
5+
import com.pavelrekun.magta.system.viewBinding
56
import com.pavelrekun.rekado.R
67
import com.pavelrekun.rekado.base.BaseFragment
78
import com.pavelrekun.rekado.databinding.FragmentToolsBinding
89
import com.pavelrekun.rekado.services.extensions.openToolsSerialCheckerScreen
9-
import com.pavelrekun.rekado.services.extensions.viewBinding
1010

1111
class ToolsFragment : BaseFragment(R.layout.fragment_tools) {
1212

0 commit comments

Comments
 (0)