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" />