From 9eae35bc7c6797e966768854c20be2ee55e9dfd5 Mon Sep 17 00:00:00 2001 From: xiaji Date: Sat, 14 Mar 2026 20:02:31 +0800 Subject: [PATCH] Replace configuration page with new settings interface featuring LLM config, custom headers, preset prompts, and custom buttons sections --- .../com/example/flomo_ai/SecondActivity.kt | 634 +++++++++++------- app/src/main/res/layout/activity_second.xml | 494 +++++++++----- app/src/main/res/layout/button_entry.xml | 93 +++ app/src/main/res/layout/header_entry.xml | 42 ++ app/src/main/res/layout/prompt_entry.xml | 60 ++ 5 files changed, 921 insertions(+), 402 deletions(-) create mode 100644 app/src/main/res/layout/button_entry.xml create mode 100644 app/src/main/res/layout/header_entry.xml create mode 100644 app/src/main/res/layout/prompt_entry.xml diff --git a/app/src/main/java/com/example/flomo_ai/SecondActivity.kt b/app/src/main/java/com/example/flomo_ai/SecondActivity.kt index 51515e1..34ab461 100644 --- a/app/src/main/java/com/example/flomo_ai/SecondActivity.kt +++ b/app/src/main/java/com/example/flomo_ai/SecondActivity.kt @@ -1,295 +1,433 @@ package com.example.flomo_ai import android.annotation.SuppressLint +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import android.content.Intent +import android.graphics.drawable.Drawable import android.os.Bundle -import android.graphics.Color +import android.text.method.PasswordTransformationMethod +import android.view.View import android.widget.Button import android.widget.EditText +import android.widget.ImageButton import android.widget.LinearLayout import android.widget.TextView +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat import com.google.gson.Gson import com.google.gson.reflect.TypeToken -import androidx.core.content.ContextCompat -import android.content.Context -import android.util.Log -import androidx.core.content.res.ResourcesCompat -import android.app.Activity -import android.content.Intent -import android.net.Uri -import androidx.activity.result.contract.ActivityResultContracts +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import okhttp3.MediaType.Companion.toMediaType +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.RequestBody.Companion.toRequestBody +import okhttp3.Response +import org.json.JSONObject +import java.util.* +// Data classes for the new settings structure +data class HeaderConfig(val key: String, val value: String) +data class PromptConfig(val id: String, val title: String, val content: String, val expanded: Boolean = false) +data class ButtonConfig(val id: String, val label: String, val action: String, val apiUrl: String? = null, val apiMethod: String? = null, val apiBodyTemplate: String? = null, val expanded: Boolean = false) class SecondActivity : AppCompatActivity() { - private lateinit var etApiName: EditText - private lateinit var etApiUrl: EditText + + // View references + private lateinit var etBaseUrl: EditText private lateinit var etApiKey: EditText - private lateinit var etApiSecretKey: EditText - private lateinit var etApiModel: EditText - private lateinit var btnSave: Button - private lateinit var llConfigList: LinearLayout + private lateinit var btnToggleApiKey: ImageButton + private lateinit var etModel: EditText + private lateinit var llHeadersList: LinearLayout + private lateinit var btnAddHeader: Button + private lateinit var llPromptsList: LinearLayout + private lateinit var btnAddPrompt: Button + private lateinit var tvEmptyPrompts: TextView + private lateinit var llButtonsList: LinearLayout + private lateinit var btnAddButton: Button + private lateinit var tvEmptyButtons: TextView - private var configs = mutableListOf() - private var editingId: Long? = null + // Data storage + private var headerConfigs = mutableListOf() + private var promptConfigs = mutableListOf() + private var buttonConfigs = mutableListOf() - private val pickImageLauncher = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri -> - if (uri!= null) { - // 处理选中的图片 - } - } - private fun setButtonListeners() { - val buttonIds = listOf( - R.id.button_holo_red_light, - R.id.button_holo_green_light, - R.id.button_holo_blue_light, - R.id.button_holo_orange_light - ) - - buttonIds.forEach { buttonId -> - findViewById