diff --git a/app/src/main/java/com/futo/platformplayer/activities/SettingsActivity.kt b/app/src/main/java/com/futo/platformplayer/activities/SettingsActivity.kt
index c24c6cef..14efcdae 100644
--- a/app/src/main/java/com/futo/platformplayer/activities/SettingsActivity.kt
+++ b/app/src/main/java/com/futo/platformplayer/activities/SettingsActivity.kt
@@ -10,7 +10,10 @@ import androidx.activity.result.ActivityResult
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.lifecycleScope
import com.futo.platformplayer.*
+import com.futo.platformplayer.logging.Logger
+import com.futo.platformplayer.views.Loader
import com.futo.platformplayer.views.fields.FieldForm
import com.futo.platformplayer.views.fields.ReadOnlyTextField
import com.google.android.material.button.MaterialButton
@@ -18,6 +21,7 @@ import com.google.android.material.button.MaterialButton
class SettingsActivity : AppCompatActivity(), IWithResultLauncher {
private lateinit var _form: FieldForm;
private lateinit var _buttonBack: ImageButton;
+ private lateinit var _loader: Loader;
private lateinit var _devSets: LinearLayout;
private lateinit var _buttonDev: MaterialButton;
@@ -33,9 +37,10 @@ class SettingsActivity : AppCompatActivity(), IWithResultLauncher {
_buttonBack = findViewById(R.id.button_back);
_buttonDev = findViewById(R.id.button_dev);
_devSets = findViewById(R.id.dev_settings);
+ _loader = findViewById(R.id.loader);
- _form.fromObject(Settings.instance);
_form.onChanged.subscribe { field, value ->
+ Logger.i("SettingsActivity", "Setting [${field.field?.name}] changed, saving");
_form.setObjectValues();
Settings.instance.save();
};
@@ -59,6 +64,15 @@ class SettingsActivity : AppCompatActivity(), IWithResultLauncher {
}
};
_lastActivity = this;
+
+ reloadSettings();
+ }
+
+ fun reloadSettings() {
+ _loader.start();
+ _form.fromObject(lifecycleScope, Settings.instance) {
+ _loader.stop();
+ };
}
override fun onResume() {
diff --git a/app/src/main/java/com/futo/platformplayer/views/fields/FieldForm.kt b/app/src/main/java/com/futo/platformplayer/views/fields/FieldForm.kt
index 4fb7b7ed..8b8e7d18 100644
--- a/app/src/main/java/com/futo/platformplayer/views/fields/FieldForm.kt
+++ b/app/src/main/java/com/futo/platformplayer/views/fields/FieldForm.kt
@@ -8,6 +8,10 @@ import com.futo.platformplayer.R
import com.futo.platformplayer.api.media.platforms.js.SourcePluginConfig
import com.futo.platformplayer.constructs.Event2
import com.futo.platformplayer.logging.Logger
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import java.lang.reflect.Field
@@ -33,6 +37,28 @@ class FieldForm : LinearLayout {
_root = findViewById(R.id.field_form_root);
}
+ fun fromObject(scope: CoroutineScope, obj : Any, onLoaded: (()->Unit)? = null) {
+ _root.removeAllViews();
+
+ scope.launch(Dispatchers.Default) {
+ val newFields = getFieldsFromObject(context, obj);
+
+ withContext(Dispatchers.Main) {
+ for (field in newFields) {
+ if (field !is View)
+ throw java.lang.IllegalStateException("Only views can be IFields");
+
+ _root.addView(field as View);
+ field.onChanged.subscribe { a1, a2 ->
+ onChanged.emit(a1, a2);
+ };
+ }
+ _fields = newFields;
+
+ onLoaded?.invoke();
+ }
+ }
+ }
fun fromObject(obj : Any) {
_root.removeAllViews();
val newFields = getFieldsFromObject(context, obj);
diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml
index 9e862b2c..2b73e5c2 100644
--- a/app/src/main/res/layout/activity_settings.xml
+++ b/app/src/main/res/layout/activity_settings.xml
@@ -52,6 +52,13 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
+
+
diff --git a/app/src/main/res/layout/fragview_video_detail.xml b/app/src/main/res/layout/fragview_video_detail.xml
index 90122f36..8d8255c1 100644
--- a/app/src/main/res/layout/fragview_video_detail.xml
+++ b/app/src/main/res/layout/fragview_video_detail.xml
@@ -303,6 +303,7 @@
android:id="@+id/videodetail_channel_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
+ android:layout_marginTop="7dp"
android:orientation="horizontal"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
@@ -311,21 +312,22 @@
+ android:layout_width="35dp"
+ android:layout_height="35dp" />