@@ -39,6 +39,7 @@ import androidx.room.Room
3939import androidx.room.RoomDatabase
4040import coil.load
4141import com.atilika.kuromoji.ipadic.Tokenizer
42+ import com.google.android.material.materialswitch.MaterialSwitch
4243import com.spotify.android.appremote.api.ConnectionParams
4344import com.spotify.android.appremote.api.Connector
4445import com.spotify.android.appremote.api.SpotifyAppRemote
@@ -182,36 +183,45 @@ class MainActivity : AppCompatActivity() {
182183 override fun onCreate (savedInstanceState : Bundle ? ) {
183184 super .onCreate(savedInstanceState)
184185 setContentView(R .layout.activity_main)
185- // remove status and navbar of android (fullscreen app)
186+
187+ // 1. DECLARE ONCE AT THE TOP
188+ val sharedPrefs = getSharedPreferences(" LyriSyncPrefs" , MODE_PRIVATE )
189+ val controller = WindowCompat .getInsetsController(window, window.decorView)
190+
191+ // 2. SYSTEM NAVIGATION LOGIC
186192 if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .R ) {
187- // Make app draw edge-to-edge
188- // WindowCompat.setDecorFitsSystemWindows(window, false)
193+ val systemNavSwitch = findViewById<MaterialSwitch >(R .id.switchSystemNav)
189194
190- // Get controller
191- val controller = WindowCompat .getInsetsController(window, window.decorView)
195+ // Load saved state
196+ val isNavHidden = sharedPrefs.getBoolean(" HIDE_SYSTEM_NAV" , true )
197+ systemNavSwitch.isChecked = isNavHidden
192198
193- // Optional: allow swipe to temporarily show bars
194- controller.systemBarsBehavior =
195- WindowInsetsControllerCompat .BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
199+ if (isNavHidden) {
200+ controller.hide(WindowInsetsCompat .Type .systemBars())
201+ controller.systemBarsBehavior =
202+ WindowInsetsControllerCompat .BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
203+ }
196204
197- // Hide status + navigation bars (fullscreen)
198- controller.hide(WindowInsetsCompat .Type .statusBars())
199- controller.hide(WindowInsetsCompat .Type .navigationBars())
205+ systemNavSwitch.setOnCheckedChangeListener { _, isChecked ->
206+ sharedPrefs.edit { putBoolean(" HIDE_SYSTEM_NAV" , isChecked) }
207+ if (isChecked) {
208+ controller.hide(WindowInsetsCompat .Type .systemBars())
209+ } else {
210+ controller.show(WindowInsetsCompat .Type .systemBars())
211+ }
212+ }
200213 } else {
201214 @Suppress(" DEPRECATION" )
202- window.decorView.systemUiVisibility =
203- View .SYSTEM_UI_FLAG_FULLSCREEN
215+ window.decorView.systemUiVisibility = View .SYSTEM_UI_FLAG_FULLSCREEN
204216 }
205217
206- findViewById<TextView >(R .id.songTitleText)?.text = " Waiting for Spotify..."
207- Log .d(" Lyrisync" , " onCreate finished" )
208-
209- // setup settings views
218+ // 3. SETTINGS & OTHER UI (Remove the 'val' from the sharedPrefs lines below)
219+ // Just use 'sharedPrefs' directly now.
210220 val radioGroupSubtitle = findViewById<RadioGroup >(R .id.spinnerSubtitleMode)
211- val btnClearHistory = findViewById<Button >(R .id.wipeHistoryButton)
212- val sharedPrefs = getSharedPreferences(" LyriSyncPrefs" , MODE_PRIVATE )
213221 val version = packageManager.getPackageInfo(packageName, 0 ).versionName
214222 findViewById<TextView >(R .id.version).text = version
223+ val btnClearHistory = findViewById<Button >(R .id.wipeHistoryButton)
224+ findViewById<TextView >(R .id.version).text = version
215225
216226 // --- Setup Subtitle Radio Logic ---
217227 val idToIndex = mapOf (
@@ -268,7 +278,8 @@ class MainActivity : AppCompatActivity() {
268278 jishoRv.layoutManager = androidx.recyclerview.widget.LinearLayoutManager (this )
269279
270280 // setup text size buttons
271- val textSizeSlider = findViewById< com.google.android.material.slider.Slider > (R .id.textSizeSlider)
281+ val textSizeSlider =
282+ findViewById< com.google.android.material.slider.Slider > (R .id.textSizeSlider)
272283
273284 // Load saved text sizes
274285 val savedTextSize = sharedPrefs.getFloat(" TEXT_SIZE" , 22f )
0 commit comments