diff --git a/app/build.gradle b/app/build.gradle index 6b56ffa..91a2cd4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -56,6 +56,9 @@ dependencies { implementation 'androidx.constraintlayout:constraintlayout:1.1.3' implementation 'com.github.doyaaaaaken:kotlin-csv-jvm:0.7.3' implementation "androidx.cardview:cardview:1.0.0" + implementation 'androidx.navigation:navigation-fragment-ktx:2.0.0' + implementation 'androidx.navigation:navigation-ui-ktx:2.0.0' + implementation 'androidx.preference:preference:1.1.0-rc01' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2f3f481..7df836f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,9 +20,10 @@ - - + AppCompatDelegate.MODE_NIGHT_NO + 1 -> AppCompatDelegate.MODE_NIGHT_YES + 2 -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM + else -> AppCompatDelegate.MODE_NIGHT_UNSPECIFIED + }) + + return super.callChangeListener(newValue) + } + + override fun setValue(value: String?) { + super.setValue(value) + summary = value + } + + override fun setSummary(summary: CharSequence?) { + super.setSummary(entry) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/illusionware/npsbrowser/activities/AppsListActivity.kt b/app/src/main/java/com/illusionware/npsbrowser/activities/AppsListActivity.kt index 2c48c2e..37c0718 100644 --- a/app/src/main/java/com/illusionware/npsbrowser/activities/AppsListActivity.kt +++ b/app/src/main/java/com/illusionware/npsbrowser/activities/AppsListActivity.kt @@ -4,7 +4,6 @@ import android.content.Intent import android.os.Bundle import android.view.View import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.illusionware.npsbrowser.AppData @@ -12,7 +11,7 @@ import com.illusionware.npsbrowser.RecyclerTouchListener import com.illusionware.npsbrowser.adapters.AppAdapter import com.illusionware.npsbrowser.databinding.ActivityAppsListBinding -class AppsListActivity : AppCompatActivity() { +class AppsListActivity : BaseActivity() { companion object { lateinit var apps : ArrayList } diff --git a/app/src/main/java/com/illusionware/npsbrowser/activities/BaseActivity.kt b/app/src/main/java/com/illusionware/npsbrowser/activities/BaseActivity.kt new file mode 100644 index 0000000..e31284f --- /dev/null +++ b/app/src/main/java/com/illusionware/npsbrowser/activities/BaseActivity.kt @@ -0,0 +1,40 @@ +package com.illusionware.npsbrowser.activities + +import android.content.SharedPreferences +import android.content.res.Configuration +import android.os.Bundle +import android.view.View +import androidx.appcompat.app.AppCompatActivity +import androidx.appcompat.app.AppCompatDelegate +import androidx.preference.PreferenceManager +import com.illusionware.npsbrowser.R + +open class BaseActivity : AppCompatActivity() { + + private lateinit var sharedPreferences : SharedPreferences + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + PreferenceManager.setDefaultValues(this, R.xml.root_preferences, false) + sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) + val decor: View = window.decorView + + AppCompatDelegate.setDefaultNightMode(when ((sharedPreferences.getString("app_theme", "2")?.toInt())) { + 0 -> { + decor.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; + AppCompatDelegate.MODE_NIGHT_NO + } + 1 -> { + decor.systemUiVisibility = 0; + AppCompatDelegate.MODE_NIGHT_YES + } + 2 -> { + decor.systemUiVisibility = if (resources.configuration.uiMode and + Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES) 0 else View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR + AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM + } + else -> AppCompatDelegate.MODE_NIGHT_UNSPECIFIED + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/illusionware/npsbrowser/activities/MainActivity.kt b/app/src/main/java/com/illusionware/npsbrowser/activities/MainActivity.kt index 69be772..430ebb3 100644 --- a/app/src/main/java/com/illusionware/npsbrowser/activities/MainActivity.kt +++ b/app/src/main/java/com/illusionware/npsbrowser/activities/MainActivity.kt @@ -16,7 +16,7 @@ import com.illusionware.npsbrowser.databinding.ActivityMainBinding import kotlinx.android.synthetic.main.appbar.* import java.io.InputStream -class MainActivity : AppCompatActivity() { +class MainActivity : BaseActivity() { private val tsvReader = csvReader { charset = "UTF-8" @@ -52,6 +52,8 @@ class MainActivity : AppCompatActivity() { override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.action_settings -> { + val settingsIntent = Intent(this, SettingsActivity::class.java) + startActivity(settingsIntent) true } else -> return super.onOptionsItemSelected(item) @@ -65,7 +67,7 @@ class MainActivity : AppCompatActivity() { val inputStream: InputStream? = contentResolver.openInputStream(uri) val entries : List> = tsvReader.readAllWithHeader(inputStream!!) val myIntent = Intent(this, AppsListActivity::class.java) - var apps = ArrayList(entries.size) + val apps = ArrayList(entries.size) entries.forEach { entry -> if (entry["Name"].isNullOrEmpty()) { @@ -81,7 +83,7 @@ class MainActivity : AppCompatActivity() { val fileSize = entry["File Size"]?.toLongOrNull() val sha256 = entry["SHA256"] val minFW = entry["Required FW"] - var app = AppData(id, region, name, link ?: "MISSING", license ?: "MISSING", + val app = AppData(id, region, name, link ?: "MISSING", license ?: "MISSING", contentID ?: "MISSING", lastDateTime ?: "MISSING", fileSize ?: 0, sha256 ?: "MISSING", minFW) apps.add(app) diff --git a/app/src/main/java/com/illusionware/npsbrowser/activities/SettingsActivity.kt b/app/src/main/java/com/illusionware/npsbrowser/activities/SettingsActivity.kt new file mode 100644 index 0000000..d072484 --- /dev/null +++ b/app/src/main/java/com/illusionware/npsbrowser/activities/SettingsActivity.kt @@ -0,0 +1,35 @@ +package com.illusionware.npsbrowser.activities + +import android.os.Bundle +import androidx.preference.PreferenceFragmentCompat +import androidx.preference.PreferenceManager +import com.illusionware.npsbrowser.R +import com.illusionware.npsbrowser.databinding.SettingsActivityBinding +import kotlinx.android.synthetic.main.appbar.* + +class SettingsActivity : BaseActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val binding = SettingsActivityBinding.inflate(layoutInflater) + setContentView(binding.root) + + setSupportActionBar(toolbar) + + supportFragmentManager + .beginTransaction() + .replace( + R.id.settings, + SettingsFragment() + ) + .commit() + supportActionBar?.setDisplayHomeAsUpEnabled(true) + } + + class SettingsFragment : PreferenceFragmentCompat() { + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { + setPreferencesFromResource(R.xml.root_preferences, rootKey) + PreferenceManager.setDefaultValues(context, R.xml.root_preferences, false); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/illusionware/npsbrowser/activities/SingleAppActivity.kt b/app/src/main/java/com/illusionware/npsbrowser/activities/SingleAppActivity.kt index 6d4b2fd..c4abaa0 100644 --- a/app/src/main/java/com/illusionware/npsbrowser/activities/SingleAppActivity.kt +++ b/app/src/main/java/com/illusionware/npsbrowser/activities/SingleAppActivity.kt @@ -1,11 +1,10 @@ package com.illusionware.npsbrowser.activities import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity import com.illusionware.npsbrowser.AppData import com.illusionware.npsbrowser.databinding.ActivitySingleAppBinding -class SingleAppActivity: AppCompatActivity() { +class SingleAppActivity: BaseActivity() { companion object { lateinit var app : AppData } diff --git a/app/src/main/res/layout/activity_single_app.xml b/app/src/main/res/layout/activity_single_app.xml index 4fb40ff..9040fb9 100644 --- a/app/src/main/res/layout/activity_single_app.xml +++ b/app/src/main/res/layout/activity_single_app.xml @@ -14,7 +14,6 @@ android:layout_marginTop="8dp" android:layout_marginEnd="48dp" android:fontFamily="sans-serif-medium" - android:text="gameTitle" android:textAlignment="center" android:textSize="24sp" android:textStyle="bold" @@ -30,7 +29,6 @@ android:layout_marginTop="56dp" android:layout_marginEnd="48dp" android:fontFamily="sans-serif-smallcaps" - android:text="titleID" android:textAlignment="center" android:textSize="24sp" android:textStyle="bold" @@ -53,7 +51,7 @@ android:layout_marginStart="140dp" android:layout_marginTop="30dp" android:layout_marginEnd="141dp" - android:contentDescription="Game Icon" + android:contentDescription="game Icon" app:srcCompat="@drawable/ic_games_black_24dp" /> diff --git a/app/src/main/res/layout/list_item.xml b/app/src/main/res/layout/list_item.xml index 33944dd..f10fad1 100644 --- a/app/src/main/res/layout/list_item.xml +++ b/app/src/main/res/layout/list_item.xml @@ -36,7 +36,6 @@ android:paddingEnd="4dp" android:paddingRight="10dp" android:paddingBottom="4dp" - android:text="US" android:textAlignment="center" android:textColor="@color/colorOnSecondary" app:layout_constraintBottom_toBottomOf="parent" @@ -54,7 +53,6 @@ android:marqueeRepeatLimit="marquee_forever" android:scrollHorizontally="true" android:singleLine="true" - android:text="Placeholder" android:textAlignment="viewStart" android:textAppearance="?android:attr/textAppearanceListItem" android:textColor="@color/colorOnPrimary" @@ -67,6 +65,7 @@ android:id="@+id/imageView" android:layout_width="62dp" android:layout_height="56dp" + android:contentDescription="game icon" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" @@ -79,7 +78,6 @@ android:layout_marginStart="8dp" android:background="@drawable/rect_red" android:padding="4dp" - android:text="3.60" android:textAlignment="center" android:textColor="@color/colorOnSecondary" app:layout_constraintBottom_toBottomOf="parent" @@ -90,7 +88,6 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="4dp" - android:text="2020-5-5" android:textColor="@color/colorOnSecondary" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> diff --git a/app/src/main/res/layout/settings_activity.xml b/app/src/main/res/layout/settings_activity.xml new file mode 100644 index 0000000..8123489 --- /dev/null +++ b/app/src/main/res/layout/settings_activity.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/toolbar_main.xml b/app/src/main/res/menu/toolbar_main.xml index 5a3bca0..21b0794 100644 --- a/app/src/main/res/menu/toolbar_main.xml +++ b/app/src/main/res/menu/toolbar_main.xml @@ -4,7 +4,7 @@ \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml new file mode 100644 index 0000000..7ca39db --- /dev/null +++ b/app/src/main/res/values/arrays.xml @@ -0,0 +1,13 @@ + + + + Light + Dark + Use System Default + + + 0 + 1 + 2 + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6c67f93..aa9676c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,4 @@ NPS Browser + Settings diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml new file mode 100644 index 0000000..c22af9e --- /dev/null +++ b/app/src/main/res/xml/root_preferences.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file