优化UI配色方案,新增快捷操作图标,添加笔记API配置和提交功能
This commit is contained in:
@@ -11,6 +11,7 @@ import android.widget.ArrayAdapter
|
|||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
import android.widget.ImageButton
|
import android.widget.ImageButton
|
||||||
|
import android.widget.LinearLayout
|
||||||
import android.widget.Spinner
|
import android.widget.Spinner
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
@@ -23,6 +24,13 @@ import kotlinx.coroutines.CoroutineScope
|
|||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
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 org.json.JSONArray
|
||||||
|
import org.json.JSONObject
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity() {
|
class MainActivity : AppCompatActivity() {
|
||||||
private lateinit var inputEditText: EditText
|
private lateinit var inputEditText: EditText
|
||||||
@@ -65,7 +73,10 @@ class MainActivity : AppCompatActivity() {
|
|||||||
Log.d("MainActivity", "onCreate: Views initialized")
|
Log.d("MainActivity", "onCreate: Views initialized")
|
||||||
|
|
||||||
headerTitle.text = "AI优化"
|
headerTitle.text = "AI优化"
|
||||||
headerModelName.text = "gpt-4o"
|
headerModelName.text = "GPT-4o"
|
||||||
|
|
||||||
|
// Initialize quick action buttons
|
||||||
|
initQuickButtons()
|
||||||
|
|
||||||
// Load prompts from configuration
|
// Load prompts from configuration
|
||||||
loadPromptsFromConfig()
|
loadPromptsFromConfig()
|
||||||
@@ -158,6 +169,17 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val btnSaveNote = findViewById<Button>(R.id.btnSaveNote)
|
||||||
|
btnSaveNote.setOnClickListener {
|
||||||
|
Log.d("MainActivity", "btnSaveNote clicked")
|
||||||
|
val textToSave = outputTextView.text.toString()
|
||||||
|
if (textToSave.isNotEmpty() && textToSave != "发送消息后结果将在此显示") {
|
||||||
|
saveToNoteApi(textToSave)
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this, "没有可保存的内容", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
configButton = findViewById<Button>(R.id.configButton)
|
configButton = findViewById<Button>(R.id.configButton)
|
||||||
Log.d("MainActivity", "Config button found: $configButton")
|
Log.d("MainActivity", "Config button found: $configButton")
|
||||||
@@ -222,6 +244,24 @@ class MainActivity : AppCompatActivity() {
|
|||||||
promptContents.add("解释代码的功能和逻辑")
|
promptContents.add("解释代码的功能和逻辑")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add quick action prompts
|
||||||
|
if (!promptTitles.contains("检查错别字")) {
|
||||||
|
promptTitles.add("检查错别字")
|
||||||
|
promptContents.add("请检查以下文本中的错别字并纠正:")
|
||||||
|
}
|
||||||
|
if (!promptTitles.contains("总结")) {
|
||||||
|
promptTitles.add("总结")
|
||||||
|
promptContents.add("请用简洁的语言总结以下文本的主要内容:")
|
||||||
|
}
|
||||||
|
if (!promptTitles.contains("翻译")) {
|
||||||
|
promptTitles.add("翻译")
|
||||||
|
promptContents.add("请翻译以下文本:")
|
||||||
|
}
|
||||||
|
if (!promptTitles.contains("润色")) {
|
||||||
|
promptTitles.add("润色")
|
||||||
|
promptContents.add("请润色以下文本,使其更通顺流畅:")
|
||||||
|
}
|
||||||
|
|
||||||
// Store prompt contents in a map for easy access
|
// Store prompt contents in a map for easy access
|
||||||
val promptMap = mutableMapOf<String, String>()
|
val promptMap = mutableMapOf<String, String>()
|
||||||
for (i in promptTitles.indices) {
|
for (i in promptTitles.indices) {
|
||||||
@@ -256,4 +296,143 @@ class MainActivity : AppCompatActivity() {
|
|||||||
promptSelector.setSelection(0)
|
promptSelector.setSelection(0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun initQuickButtons() {
|
||||||
|
val btnCheckTypos = findViewById<LinearLayout>(R.id.btnCheckTypos)
|
||||||
|
val btnSummarize = findViewById<LinearLayout>(R.id.btnSummarize)
|
||||||
|
val btnTranslate = findViewById<LinearLayout>(R.id.btnTranslate)
|
||||||
|
val btnPolishing = findViewById<LinearLayout>(R.id.btnPolishing)
|
||||||
|
|
||||||
|
btnCheckTypos.setOnClickListener {
|
||||||
|
selectPrompt("检查错别字")
|
||||||
|
}
|
||||||
|
|
||||||
|
btnSummarize.setOnClickListener {
|
||||||
|
selectPrompt("总结")
|
||||||
|
}
|
||||||
|
|
||||||
|
btnTranslate.setOnClickListener {
|
||||||
|
selectPrompt("翻译")
|
||||||
|
}
|
||||||
|
|
||||||
|
btnPolishing.setOnClickListener {
|
||||||
|
selectPrompt("润色")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun selectPrompt(promptName: String) {
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
val promptMap = promptSelector.tag as? MutableMap<String, String>
|
||||||
|
|
||||||
|
val content = promptMap?.get(promptName) ?: when (promptName) {
|
||||||
|
"检查错别字" -> "请检查以下文本中的错别字并纠正:"
|
||||||
|
"总结" -> "请用简洁的语言总结以下文本的主要内容:"
|
||||||
|
"翻译" -> "请翻译以下文本:"
|
||||||
|
"润色" -> "请润色以下文本,使其更通顺流畅:"
|
||||||
|
else -> ""
|
||||||
|
}
|
||||||
|
|
||||||
|
promptContentText.text = content
|
||||||
|
Toast.makeText(this, "已选择: $promptName", Toast.LENGTH_SHORT).show()
|
||||||
|
|
||||||
|
// Auto-trigger send if input is not empty
|
||||||
|
if (inputEditText.text.isNotEmpty()) {
|
||||||
|
findViewById<Button>(R.id.sendButton).performClick()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun saveToNoteApi(content: String) {
|
||||||
|
try {
|
||||||
|
val sharedPrefs = getSharedPreferences("APIConfigs", Context.MODE_PRIVATE)
|
||||||
|
val json = sharedPrefs.getString("configs", null)
|
||||||
|
|
||||||
|
if (json == null) {
|
||||||
|
Toast.makeText(this, "请先配置笔记API", Toast.LENGTH_SHORT).show()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val settings = Gson().fromJson(json, NoteSettingsData::class.java)
|
||||||
|
val noteConfig = settings.noteApiConfig
|
||||||
|
|
||||||
|
if (noteConfig == null || noteConfig.apiUrl.isBlank() || noteConfig.apiKey.isBlank()) {
|
||||||
|
Toast.makeText(this, "请先配置笔记API", Toast.LENGTH_SHORT).show()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
outputStatusLabel.text = "提交中..."
|
||||||
|
|
||||||
|
CoroutineScope(Dispatchers.Main).launch {
|
||||||
|
try {
|
||||||
|
val result = submitToNoteApi(noteConfig.apiType, noteConfig.apiUrl, noteConfig.apiKey, content)
|
||||||
|
if (result) {
|
||||||
|
outputStatusLabel.text = "已提交"
|
||||||
|
Toast.makeText(this@MainActivity, "笔记已保存", Toast.LENGTH_SHORT).show()
|
||||||
|
} else {
|
||||||
|
outputStatusLabel.text = "提交失败"
|
||||||
|
Toast.makeText(this@MainActivity, "保存失败,请检查配置", Toast.LENGTH_SHORT).show()
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
outputStatusLabel.text = "提交失败"
|
||||||
|
Toast.makeText(this@MainActivity, "保存失败: ${e.message}", Toast.LENGTH_SHORT).show()
|
||||||
|
Log.e("MainActivity", "saveToNoteApi error", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Toast.makeText(this, "请先配置笔记API", Toast.LENGTH_SHORT).show()
|
||||||
|
Log.e("MainActivity", "saveToNoteApi error", e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun submitToNoteApi(apiType: String, apiUrl: String, apiKey: String, content: String): Boolean {
|
||||||
|
return withContext(Dispatchers.IO) {
|
||||||
|
try {
|
||||||
|
val client = OkHttpClient()
|
||||||
|
val requestBody = when (apiType) {
|
||||||
|
"Flomo" -> {
|
||||||
|
val json = JSONObject().put("content", content)
|
||||||
|
json.toString().toRequestBody("application/json".toMediaType())
|
||||||
|
}
|
||||||
|
"Notion" -> {
|
||||||
|
val json = JSONObject()
|
||||||
|
.put("parent", JSONObject().put("database_id", apiKey))
|
||||||
|
.put("properties", JSONObject()
|
||||||
|
.put("Name", JSONObject()
|
||||||
|
.put("title", JSONArray()
|
||||||
|
.put(JSONObject().put("text", JSONObject().put("content", "AI优化结果")))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
json.toString().toRequestBody("application/json".toMediaType())
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
val json = JSONObject().put("content", content)
|
||||||
|
json.toString().toRequestBody("application/json".toMediaType())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val request = Request.Builder()
|
||||||
|
.url(apiUrl)
|
||||||
|
.addHeader("Authorization", "Bearer $apiKey")
|
||||||
|
.addHeader("Content-Type", "application/json")
|
||||||
|
.post(requestBody)
|
||||||
|
.build()
|
||||||
|
|
||||||
|
val response = client.newCall(request).execute()
|
||||||
|
response.isSuccessful
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e("MainActivity", "submitToNoteApi error", e)
|
||||||
|
false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
data class NoteSettingsData(
|
||||||
|
val noteApiConfig: NoteApiConfig?
|
||||||
|
)
|
||||||
|
|
||||||
|
data class NoteApiConfig(
|
||||||
|
val apiType: String,
|
||||||
|
val apiUrl: String,
|
||||||
|
val apiKey: String
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,11 +10,13 @@ import android.os.Bundle
|
|||||||
import android.text.method.PasswordTransformationMethod
|
import android.text.method.PasswordTransformationMethod
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.widget.ArrayAdapter
|
||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
import android.widget.ImageButton
|
import android.widget.ImageButton
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
|
import android.widget.Spinner
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import android.widget.RadioGroup
|
import android.widget.RadioGroup
|
||||||
@@ -67,6 +69,12 @@ class SecondActivity : AppCompatActivity() {
|
|||||||
private lateinit var rbThemeLight: RadioButton
|
private lateinit var rbThemeLight: RadioButton
|
||||||
private lateinit var rbThemeDark: RadioButton
|
private lateinit var rbThemeDark: RadioButton
|
||||||
|
|
||||||
|
// Note API view references
|
||||||
|
private lateinit var spNoteApiType: Spinner
|
||||||
|
private lateinit var etNoteApiUrl: EditText
|
||||||
|
private lateinit var etNoteApiKey: EditText
|
||||||
|
private lateinit var btnToggleNoteApiKey: ImageButton
|
||||||
|
|
||||||
// Data storage
|
// Data storage
|
||||||
private var headerConfigs = mutableListOf<HeaderConfig>()
|
private var headerConfigs = mutableListOf<HeaderConfig>()
|
||||||
private var promptConfigs = mutableListOf<PromptConfig>()
|
private var promptConfigs = mutableListOf<PromptConfig>()
|
||||||
@@ -164,6 +172,12 @@ class SecondActivity : AppCompatActivity() {
|
|||||||
rbThemeLight = findViewById(R.id.rbThemeLight)
|
rbThemeLight = findViewById(R.id.rbThemeLight)
|
||||||
rbThemeDark = findViewById(R.id.rbThemeDark)
|
rbThemeDark = findViewById(R.id.rbThemeDark)
|
||||||
|
|
||||||
|
// Note API Section
|
||||||
|
spNoteApiType = findViewById(R.id.spNoteApiType)
|
||||||
|
etNoteApiUrl = findViewById(R.id.etNoteApiUrl)
|
||||||
|
etNoteApiKey = findViewById(R.id.etNoteApiKey)
|
||||||
|
btnToggleNoteApiKey = findViewById(R.id.btnToggleNoteApiKey)
|
||||||
|
|
||||||
Log.d("SecondActivity", "initViews: All views found")
|
Log.d("SecondActivity", "initViews: All views found")
|
||||||
|
|
||||||
// Setup API key toggle
|
// Setup API key toggle
|
||||||
@@ -208,6 +222,19 @@ class SecondActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Setup Note API key toggle
|
||||||
|
btnToggleNoteApiKey.setOnClickListener {
|
||||||
|
val isPassword = etNoteApiKey.transformationMethod is PasswordTransformationMethod
|
||||||
|
etNoteApiKey.transformationMethod = if (isPassword) null else PasswordTransformationMethod()
|
||||||
|
etNoteApiKey.setSelection(etNoteApiKey.text.length)
|
||||||
|
|
||||||
|
if (isPassword) {
|
||||||
|
btnToggleNoteApiKey.setImageResource(android.R.drawable.ic_menu_view)
|
||||||
|
} else {
|
||||||
|
btnToggleNoteApiKey.setImageResource(android.R.drawable.ic_lock_idle_lock)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Log.d("SecondActivity", "initViews: Completed")
|
Log.d("SecondActivity", "initViews: Completed")
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.e("SecondActivity", "initViews: Error finding views", e)
|
Log.e("SecondActivity", "initViews: Error finding views", e)
|
||||||
@@ -237,6 +264,17 @@ class SecondActivity : AppCompatActivity() {
|
|||||||
etApiKey.setText(settings.llmConfig?.apiKey ?: "")
|
etApiKey.setText(settings.llmConfig?.apiKey ?: "")
|
||||||
etModel.setText(settings.llmConfig?.model ?: "gpt-4o")
|
etModel.setText(settings.llmConfig?.model ?: "gpt-4o")
|
||||||
|
|
||||||
|
// Load Note API config
|
||||||
|
settings.noteApiConfig?.let { noteConfig ->
|
||||||
|
val apiTypes = listOf("Flomo", "Notion", "Joplin", "Custom")
|
||||||
|
val typeIndex = apiTypes.indexOf(noteConfig.apiType)
|
||||||
|
if (typeIndex >= 0) {
|
||||||
|
spNoteApiType.setSelection(typeIndex)
|
||||||
|
}
|
||||||
|
etNoteApiUrl.setText(noteConfig.apiUrl)
|
||||||
|
etNoteApiKey.setText(noteConfig.apiKey)
|
||||||
|
}
|
||||||
|
|
||||||
// Update API key visibility based on whether it has text
|
// Update API key visibility based on whether it has text
|
||||||
updateApiKeyVisibility()
|
updateApiKeyVisibility()
|
||||||
|
|
||||||
@@ -302,6 +340,12 @@ class SecondActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
// Setup theme
|
// Setup theme
|
||||||
setupTheme()
|
setupTheme()
|
||||||
|
|
||||||
|
// Setup Note API spinner
|
||||||
|
val noteApiTypes = listOf("Flomo", "Notion", "Joplin", "Custom")
|
||||||
|
val noteApiAdapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, noteApiTypes)
|
||||||
|
noteApiAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
|
||||||
|
spNoteApiType.adapter = noteApiAdapter
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupTheme() {
|
private fun setupTheme() {
|
||||||
@@ -406,12 +450,20 @@ class SecondActivity : AppCompatActivity() {
|
|||||||
model = etModel.text.toString()
|
model = etModel.text.toString()
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Save Note API config
|
||||||
|
val noteApiConfig = NoteApiConfig(
|
||||||
|
apiType = spNoteApiType.selectedItem.toString(),
|
||||||
|
apiUrl = etNoteApiUrl.text.toString(),
|
||||||
|
apiKey = etNoteApiKey.text.toString()
|
||||||
|
)
|
||||||
|
|
||||||
// Save everything
|
// Save everything
|
||||||
val settingsData = SettingsData(
|
val settingsData = SettingsData(
|
||||||
llmConfig = llmConfig,
|
llmConfig = llmConfig,
|
||||||
headerConfigs = headerConfigs,
|
headerConfigs = headerConfigs,
|
||||||
promptConfigs = promptConfigs,
|
promptConfigs = promptConfigs,
|
||||||
buttonConfigs = buttonConfigs
|
buttonConfigs = buttonConfigs,
|
||||||
|
noteApiConfig = noteApiConfig
|
||||||
)
|
)
|
||||||
|
|
||||||
val json = Gson().toJson(settingsData)
|
val json = Gson().toJson(settingsData)
|
||||||
@@ -446,10 +498,17 @@ class SecondActivity : AppCompatActivity() {
|
|||||||
val model: String
|
val model: String
|
||||||
)
|
)
|
||||||
|
|
||||||
|
data class NoteApiConfig(
|
||||||
|
val apiType: String,
|
||||||
|
val apiUrl: String,
|
||||||
|
val apiKey: String
|
||||||
|
)
|
||||||
|
|
||||||
data class SettingsData(
|
data class SettingsData(
|
||||||
val llmConfig: LLMConfig?,
|
val llmConfig: LLMConfig?,
|
||||||
val headerConfigs: List<HeaderConfig>?,
|
val headerConfigs: List<HeaderConfig>?,
|
||||||
val promptConfigs: List<PromptConfig>?,
|
val promptConfigs: List<PromptConfig>?,
|
||||||
val buttonConfigs: List<ButtonConfig>?
|
val buttonConfigs: List<ButtonConfig>?,
|
||||||
|
val noteApiConfig: NoteApiConfig?
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
9
app/src/main/res/drawable/button_polish_bg.xml
Normal file
9
app/src/main/res/drawable/button_polish_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/btn_polish_bg" />
|
||||||
|
<stroke
|
||||||
|
android:width="1dp"
|
||||||
|
android:color="@color/btn_polish_border" />
|
||||||
|
<corners android:radius="14dp" />
|
||||||
|
</shape>
|
||||||
@@ -2,5 +2,5 @@
|
|||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:shape="rectangle">
|
android:shape="rectangle">
|
||||||
<solid android:color="@color/primary" />
|
<solid android:color="@color/primary" />
|
||||||
<corners android:radius="16dp" />
|
<corners android:radius="14dp" />
|
||||||
</shape>
|
</shape>
|
||||||
|
|||||||
6
app/src/main/res/drawable/button_quick_bg.xml
Normal file
6
app/src/main/res/drawable/button_quick_bg.xml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/icon_container_bg"/>
|
||||||
|
<corners android:radius="10dp"/>
|
||||||
|
</shape>
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
android:shape="rectangle">
|
android:shape="rectangle">
|
||||||
<solid android:color="@android:color/transparent" />
|
<solid android:color="@android:color/transparent" />
|
||||||
<stroke
|
<stroke
|
||||||
android:width="2dp"
|
android:width="1dp"
|
||||||
android:color="@color/primary" />
|
android:color="@color/config_button_border" />
|
||||||
<corners android:radius="16dp" />
|
<corners android:radius="12dp" />
|
||||||
</shape>
|
</shape>
|
||||||
|
|||||||
9
app/src/main/res/drawable/button_summarize_bg.xml
Normal file
9
app/src/main/res/drawable/button_summarize_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/btn_summarize_bg" />
|
||||||
|
<stroke
|
||||||
|
android:width="1dp"
|
||||||
|
android:color="@color/btn_summarize_border" />
|
||||||
|
<corners android:radius="14dp" />
|
||||||
|
</shape>
|
||||||
9
app/src/main/res/drawable/button_translate_bg.xml
Normal file
9
app/src/main/res/drawable/button_translate_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/btn_translate_bg" />
|
||||||
|
<stroke
|
||||||
|
android:width="1dp"
|
||||||
|
android:color="@color/btn_translate_border" />
|
||||||
|
<corners android:radius="14dp" />
|
||||||
|
</shape>
|
||||||
9
app/src/main/res/drawable/button_typos_bg.xml
Normal file
9
app/src/main/res/drawable/button_typos_bg.xml
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/btn_typos_bg" />
|
||||||
|
<stroke
|
||||||
|
android:width="1dp"
|
||||||
|
android:color="@color/btn_typos_border" />
|
||||||
|
<corners android:radius="14dp" />
|
||||||
|
</shape>
|
||||||
@@ -3,6 +3,6 @@
|
|||||||
<solid android:color="@color/surface" />
|
<solid android:color="@color/surface" />
|
||||||
<stroke
|
<stroke
|
||||||
android:width="1dp"
|
android:width="1dp"
|
||||||
android:color="@color/border" />
|
android:color="@color/border_default" />
|
||||||
<corners android:radius="16dp" />
|
<corners android:radius="14dp" />
|
||||||
</shape>
|
</shape>
|
||||||
|
|||||||
6
app/src/main/res/drawable/indicator_dot.xml
Normal file
6
app/src/main/res/drawable/indicator_dot.xml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="oval">
|
||||||
|
<solid android:color="@color/primary"/>
|
||||||
|
<size android:width="6dp" android:height="6dp"/>
|
||||||
|
</shape>
|
||||||
7
app/src/main/res/drawable/input_bg.xml
Normal file
7
app/src/main/res/drawable/input_bg.xml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/surface"/>
|
||||||
|
<stroke android:width="1dp" android:color="@color/border_default"/>
|
||||||
|
<corners android:radius="22dp"/>
|
||||||
|
</shape>
|
||||||
7
app/src/main/res/drawable/result_card_bg.xml
Normal file
7
app/src/main/res/drawable/result_card_bg.xml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/surface"/>
|
||||||
|
<stroke android:width="1dp" android:color="@color/card_border"/>
|
||||||
|
<corners android:radius="14dp"/>
|
||||||
|
</shape>
|
||||||
6
app/src/main/res/drawable/send_button_bg.xml
Normal file
6
app/src/main/res/drawable/send_button_bg.xml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/primary"/>
|
||||||
|
<corners android:radius="14dp"/>
|
||||||
|
</shape>
|
||||||
7
app/src/main/res/drawable/stop_button_bg.xml
Normal file
7
app/src/main/res/drawable/stop_button_bg.xml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/stop_generate_bg"/>
|
||||||
|
<stroke android:width="1dp" android:color="@color/stop_generate"/>
|
||||||
|
<corners android:radius="8dp"/>
|
||||||
|
</shape>
|
||||||
@@ -7,45 +7,64 @@
|
|||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:background="@color/background">
|
android:background="@color/background">
|
||||||
|
|
||||||
<!-- 顶部导航栏 - 去掉圆角 -->
|
<!-- 导航栏 -->
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="56dp"
|
||||||
android:background="@color/surface"
|
android:background="@color/surface"
|
||||||
android:padding="16dp">
|
android:paddingStart="20dp"
|
||||||
|
android:paddingEnd="20dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/headerLeft"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/headerTitle"
|
android:id="@+id/headerTitle"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="AI优化"
|
android:text="AI优化"
|
||||||
android:textSize="18sp"
|
android:textSize="20sp"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:textColor="@color/text_primary"
|
android:textColor="@color/text_primary"/>
|
||||||
android:layout_alignParentStart="true"
|
|
||||||
android:layout_alignParentTop="true"/>
|
<LinearLayout
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:layout_marginTop="2dp">
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="6dp"
|
||||||
|
android:layout_height="6dp"
|
||||||
|
android:background="@drawable/indicator_dot"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/headerModelName"
|
android:id="@+id/headerModelName"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="gpt-4o"
|
android:text="GPT-4o"
|
||||||
android:textSize="14sp"
|
android:textSize="11sp"
|
||||||
android:textColor="@color/text_hint"
|
android:textColor="@color/primary"
|
||||||
android:layout_alignParentStart="true"
|
android:layout_marginStart="5dp"/>
|
||||||
android:layout_below="@id/headerTitle"/>
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/configButton"
|
android:id="@+id/configButton"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="40dp"
|
android:layout_height="36dp"
|
||||||
android:text="配置"
|
android:text="配置"
|
||||||
android:textSize="14sp"
|
android:textSize="14sp"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/primary"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:layout_alignParentTop="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_marginTop="4dp"
|
android:background="@drawable/button_secondary_bg"
|
||||||
android:background="@drawable/button_config_bg"
|
|
||||||
android:paddingLeft="16dp"
|
android:paddingLeft="16dp"
|
||||||
android:paddingRight="16dp"
|
android:paddingRight="16dp"
|
||||||
android:minWidth="0dp"
|
android:minWidth="0dp"
|
||||||
@@ -53,67 +72,188 @@
|
|||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<!-- 提示词选择区域 - 去掉圆角 -->
|
<ScrollView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:fillViewport="true">
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:background="@color/surface"
|
android:padding="20dp">
|
||||||
android:padding="16dp"
|
|
||||||
android:layout_marginTop="1dp">
|
|
||||||
|
|
||||||
|
<!-- 快速操作 -->
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="快速操作"
|
||||||
|
android:textSize="12sp"
|
||||||
|
android:textColor="@color/text_hint"
|
||||||
|
android:textAllCaps="true"
|
||||||
|
android:letterSpacing="0.15"
|
||||||
|
android:layout_marginBottom="14dp"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_marginBottom="18dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/btnCheckTypos"
|
||||||
|
android:layout_width="34dp"
|
||||||
|
android:layout_height="34dp"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:gravity="center"
|
||||||
|
android:background="@drawable/button_quick_bg"
|
||||||
|
android:layout_marginEnd="10dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:text="🔍"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:gravity="center"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/btnSummarize"
|
||||||
|
android:layout_width="34dp"
|
||||||
|
android:layout_height="34dp"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:gravity="center"
|
||||||
|
android:background="@drawable/button_quick_bg"
|
||||||
|
android:layout_marginEnd="10dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:text="📋"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:gravity="center"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/btnTranslate"
|
||||||
|
android:layout_width="34dp"
|
||||||
|
android:layout_height="34dp"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:gravity="center"
|
||||||
|
android:background="@drawable/button_quick_bg"
|
||||||
|
android:layout_marginEnd="10dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:text="🌐"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:gravity="center"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/btnPolishing"
|
||||||
|
android:layout_width="34dp"
|
||||||
|
android:layout_height="34dp"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:gravity="center"
|
||||||
|
android:background="@drawable/button_quick_bg">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="20dp"
|
||||||
|
android:layout_height="20dp"
|
||||||
|
android:text="✨"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:gravity="center"/>
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<!-- 提示词 -->
|
||||||
<TextView
|
<TextView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="提示词"
|
android:text="提示词"
|
||||||
android:textSize="14sp"
|
|
||||||
android:textColor="@color/text_primary"
|
|
||||||
android:layout_marginBottom="8dp"/>
|
|
||||||
|
|
||||||
<Spinner
|
|
||||||
android:id="@+id/promptSelector"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="48dp"
|
|
||||||
android:background="@drawable/edittext_border"
|
|
||||||
android:spinnerMode="dropdown"
|
|
||||||
android:padding="8dp"/>
|
|
||||||
|
|
||||||
<!-- 提示词内容显示区域 -->
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/promptContentText"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
android:padding="4dp"
|
|
||||||
android:textSize="12sp"
|
android:textSize="12sp"
|
||||||
android:textColor="@color/text_hint"
|
android:textColor="@color/text_hint"
|
||||||
android:minLines="1"
|
android:textAllCaps="true"
|
||||||
android:maxLines="3"/>
|
android:letterSpacing="0.15"
|
||||||
|
android:layout_marginBottom="14dp"/>
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<!-- 输入区域 - 去掉圆角 -->
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
android:background="@color/surface"
|
|
||||||
android:padding="16dp"
|
|
||||||
android:layout_marginTop="1dp">
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:id="@+id/inputEditText"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="100dp"
|
|
||||||
android:background="@drawable/edittext_border"
|
android:background="@drawable/edittext_border"
|
||||||
android:hint="输入待发送内容…"
|
android:padding="14dp"
|
||||||
android:inputType="textMultiLine"
|
android:layout_marginBottom="18dp">
|
||||||
android:minLines="5"
|
|
||||||
android:padding="12dp"
|
<Spinner
|
||||||
android:textSize="16sp"
|
android:id="@+id/promptSelector"
|
||||||
android:textColor="@color/text_secondary"
|
android:layout_width="match_parent"
|
||||||
android:textColorHint="@color/text_hint"
|
android:layout_height="40dp"
|
||||||
android:gravity="top|start"/>
|
android:background="@android:color/transparent"
|
||||||
|
android:spinnerMode="dropdown"
|
||||||
|
android:padding="4dp"/>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/divider"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:layout_marginBottom="8dp"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/promptContentText"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textSize="12sp"
|
||||||
|
android:textColor="@color/text_hint"
|
||||||
|
android:minLines="1"
|
||||||
|
android:maxLines="3"/>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<!-- 优化结果 -->
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="优化结果"
|
||||||
|
android:textSize="12sp"
|
||||||
|
android:textColor="@color/text_hint"
|
||||||
|
android:textAllCaps="true"
|
||||||
|
android:letterSpacing="0.15"
|
||||||
|
android:layout_marginBottom="14dp"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:background="@drawable/result_card_bg"
|
||||||
|
android:padding="16dp">
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="2dp"
|
||||||
|
android:background="@color/primary"
|
||||||
|
android:layout_marginBottom="12dp"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/outputStatusLabel"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="等待发送"
|
||||||
|
android:textSize="12sp"
|
||||||
|
android:textColor="@color/primary"
|
||||||
|
android:layout_marginBottom="8dp"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/outputTextView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:minLines="3"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:text="发送消息后结果将在此显示"
|
||||||
|
android:textColor="@color/text_secondary"/>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@@ -122,87 +262,107 @@
|
|||||||
android:layout_marginTop="12dp">
|
android:layout_marginTop="12dp">
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/sendButton"
|
android:id="@+id/btnCopyResult"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="32dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:text="发送"
|
android:text="复制结果"
|
||||||
android:textSize="16sp"
|
android:textSize="12sp"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/primary"
|
||||||
android:layout_marginEnd="8dp"
|
android:background="@drawable/button_secondary_bg"
|
||||||
android:background="@drawable/button_primary_bg"
|
android:minWidth="0dp"
|
||||||
|
android:minHeight="0dp"
|
||||||
|
android:layout_marginEnd="8dp"/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
android:id="@+id/btnSaveNote"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="32dp"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:text="提交笔记"
|
||||||
|
android:textSize="12sp"
|
||||||
|
android:textColor="@color/primary"
|
||||||
|
android:background="@drawable/button_secondary_bg"
|
||||||
android:minWidth="0dp"
|
android:minWidth="0dp"
|
||||||
android:minHeight="0dp"/>
|
android:minHeight="0dp"/>
|
||||||
|
</LinearLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
<!-- 输入区域 -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:background="@color/surface"
|
||||||
|
android:padding="20dp">
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/inputEditText"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:background="@drawable/input_bg"
|
||||||
|
android:hint="输入待发送内容…"
|
||||||
|
android:inputType="textMultiLine"
|
||||||
|
android:paddingStart="16dp"
|
||||||
|
android:paddingEnd="16dp"
|
||||||
|
android:paddingTop="12dp"
|
||||||
|
android:paddingBottom="12dp"
|
||||||
|
android:textSize="14sp"
|
||||||
|
android:textColor="@color/text_secondary"
|
||||||
|
android:textColorHint="@color/text_hint"
|
||||||
|
android:gravity="top|start"/>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:layout_marginTop="12dp"
|
||||||
|
android:gravity="center_vertical">
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/stopButton"
|
android:id="@+id/stopButton"
|
||||||
android:layout_width="0dp"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="48dp"
|
android:layout_height="36dp"
|
||||||
android:layout_weight="1"
|
|
||||||
android:text="停止生成"
|
android:text="停止生成"
|
||||||
android:textSize="16sp"
|
android:textSize="12sp"
|
||||||
android:textColor="@color/primary"
|
android:textColor="@color/stop_generate"
|
||||||
android:layout_marginStart="8dp"
|
android:background="@drawable/stop_button_bg"
|
||||||
android:background="@drawable/button_secondary_bg"
|
android:paddingLeft="12dp"
|
||||||
|
android:paddingRight="12dp"
|
||||||
android:minWidth="0dp"
|
android:minWidth="0dp"
|
||||||
android:minHeight="0dp"/>
|
android:minHeight="0dp"
|
||||||
|
android:visibility="gone"/>
|
||||||
|
|
||||||
</LinearLayout>
|
<View
|
||||||
|
android:layout_width="0dp"
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<!-- 输出区域 - 去掉圆角 -->
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="0dp"
|
android:layout_height="0dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"/>
|
||||||
android:orientation="vertical"
|
|
||||||
android:background="@color/surface"
|
|
||||||
android:padding="16dp"
|
|
||||||
android:layout_marginTop="1dp">
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/outputStatusLabel"
|
android:id="@+id/tvCharCount"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="等待发送"
|
android:text="0/4000"
|
||||||
android:textSize="14sp"
|
android:textSize="11sp"
|
||||||
android:textColor="@color/primary"
|
android:textColor="@color/text_hint"
|
||||||
android:layout_marginBottom="8dp"/>
|
android:layout_marginEnd="12dp"/>
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/outputTextView"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="0dp"
|
|
||||||
android:layout_weight="1"
|
|
||||||
android:background="@drawable/edittext_border"
|
|
||||||
android:padding="12dp"
|
|
||||||
android:textSize="16sp"
|
|
||||||
android:text="发送消息后结果将在此显示"
|
|
||||||
android:textColor="@color/text_secondary"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<!-- 复制结果按钮 - 去掉圆角 -->
|
|
||||||
<LinearLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:background="@color/surface"
|
|
||||||
android:padding="16dp"
|
|
||||||
android:layout_marginTop="1dp">
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/btnCopyResult"
|
android:id="@+id/sendButton"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="42dp"
|
||||||
android:layout_height="48dp"
|
android:layout_height="42dp"
|
||||||
android:text="复制结果"
|
android:text="➤"
|
||||||
android:textSize="16sp"
|
android:textSize="18sp"
|
||||||
android:textColor="@color/primary"
|
android:textColor="@color/white"
|
||||||
android:background="@drawable/button_secondary_bg"
|
android:background="@drawable/send_button_bg"
|
||||||
android:minWidth="0dp"
|
android:minWidth="0dp"
|
||||||
android:minHeight="0dp"/>
|
android:minHeight="0dp"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|||||||
@@ -308,7 +308,138 @@
|
|||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</androidx.cardview.widget.CardView>
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
<!-- 4. 自定义提示词卡片 -->
|
<!-- 4. 笔记API配置卡片 -->
|
||||||
|
<androidx.cardview.widget.CardView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="16dp"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:layout_marginEnd="16dp"
|
||||||
|
android:layout_marginBottom="16dp"
|
||||||
|
app:cardBackgroundColor="@color/surface"
|
||||||
|
app:cardCornerRadius="16dp"
|
||||||
|
app:cardElevation="2dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="16dp">
|
||||||
|
|
||||||
|
<!-- 卡片标题 -->
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="笔记API配置"
|
||||||
|
android:textColor="@color/text_primary"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="4dp"
|
||||||
|
android:text="配置第三方笔记应用API"
|
||||||
|
android:textColor="@color/text_hint"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<!-- API类型选择 -->
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:text="API类型"
|
||||||
|
android:textColor="@color/text_secondary"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<Spinner
|
||||||
|
android:id="@+id/spNoteApiType"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:background="@drawable/edittext_border"
|
||||||
|
android:spinnerMode="dropdown"
|
||||||
|
android:padding="12dp"/>
|
||||||
|
|
||||||
|
<!-- API URL -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="API地址"
|
||||||
|
android:textColor="@color/text_secondary"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/etNoteApiUrl"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:background="@drawable/edittext_border"
|
||||||
|
android:hint="https://api.example.com/notes"
|
||||||
|
android:inputType="textUri"
|
||||||
|
android:padding="12dp"
|
||||||
|
android:textColor="@color/text_secondary"
|
||||||
|
android:textColorHint="@color/text_hint"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<!-- API Key -->
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="API密钥"
|
||||||
|
android:textColor="@color/text_secondary"
|
||||||
|
android:textSize="14sp" />
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="48dp"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:background="@drawable/edittext_border">
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/etNoteApiKey"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="@android:color/transparent"
|
||||||
|
android:hint="API Key"
|
||||||
|
android:inputType="textPassword"
|
||||||
|
android:paddingStart="12dp"
|
||||||
|
android:paddingEnd="48dp"
|
||||||
|
android:textColor="@color/text_secondary"
|
||||||
|
android:textColorHint="@color/text_hint"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
<ImageButton
|
||||||
|
android:id="@+id/btnToggleNoteApiKey"
|
||||||
|
android:layout_width="24dp"
|
||||||
|
android:layout_height="24dp"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:layout_marginEnd="12dp"
|
||||||
|
android:background="?attr/selectableItemBackgroundBorderless"
|
||||||
|
android:contentDescription="显示/隐藏"
|
||||||
|
android:src="@android:drawable/ic_lock_idle_lock"
|
||||||
|
app:tint="@color/text_hint" />
|
||||||
|
</RelativeLayout>
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
</androidx.cardview.widget.CardView>
|
||||||
|
|
||||||
|
<!-- 5. 自定义提示词卡片 -->
|
||||||
<androidx.cardview.widget.CardView
|
<androidx.cardview.widget.CardView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
|||||||
@@ -1,38 +1,64 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
<color name="purple_200">#FFBB86FC</color>
|
|
||||||
<color name="purple_500">#FF6200EE</color>
|
|
||||||
<color name="purple_700">#FF3700B3</color>
|
|
||||||
<color name="teal_200">#FF03DAC5</color>
|
|
||||||
<color name="teal_700">#FF018786</color>
|
|
||||||
<color name="black">#FF000000</color>
|
|
||||||
<color name="white">#FFFFFFFF</color>
|
|
||||||
<color name="foreground_color">#eFeFeF</color>
|
|
||||||
<color name="background_color">#333333</color>
|
|
||||||
<color name="gray_light">#CCCCCC</color>
|
|
||||||
<color name="semi_transparent_background">#19000000</color>
|
|
||||||
|
|
||||||
<!-- 核心色值 -->
|
<!-- 核心色值 -->
|
||||||
<color name="primary">#42A5F5</color>
|
<color name="primary">#2DD4A8</color>
|
||||||
<color name="primary_variant">#1976D2</color>
|
<color name="primary_variant">#1A1D27</color>
|
||||||
<color name="secondary">#81C784</color>
|
<color name="secondary">#2DD4A8</color>
|
||||||
<color name="secondary_variant">#4CAF50</color>
|
<color name="secondary_variant">#1A1D27</color>
|
||||||
|
|
||||||
<!-- 中性色 -->
|
<!-- 背景色 -->
|
||||||
<color name="background">#F5F5F5</color>
|
<color name="background">#0F1117</color>
|
||||||
<color name="surface">#FAFAFA</color>
|
<color name="surface">#1A1D27</color>
|
||||||
<color name="surface_variant">#EEEEEE</color> <!-- 用于卡片阴影/边框 -->
|
<color name="surface_elevated">#232733</color>
|
||||||
|
|
||||||
<!-- 文本色 -->
|
<!-- 主强调色 -->
|
||||||
<color name="text_primary">#212121</color>
|
<color name="primary_light">#1A2DD4A8</color>
|
||||||
<color name="text_secondary">#424242</color>
|
|
||||||
<color name="text_hint">#757575</color>
|
<!-- 文字层级 -->
|
||||||
<color name="text_disabled">#BDBDBD</color>
|
<color name="text_primary">#F0F2F5</color>
|
||||||
|
<color name="text_secondary">#C8CDD5</color>
|
||||||
|
<color name="text_hint">#6B7280</color>
|
||||||
|
<color name="text_placeholder">#4B5260</color>
|
||||||
|
|
||||||
|
<!-- 四个操作按钮颜色 -->
|
||||||
|
<!-- 检查错别字 -->
|
||||||
|
<color name="btn_typos_bg">#0E38BDF8</color>
|
||||||
|
<color name="btn_typos_icon">#38BDF8</color>
|
||||||
|
<color name="btn_typos_border">#4D38BDF8</color>
|
||||||
|
|
||||||
|
<!-- 总结 -->
|
||||||
|
<color name="btn_summarize_bg">#0E2DD4A8</color>
|
||||||
|
<color name="btn_summarize_icon">#2DD4A8</color>
|
||||||
|
<color name="btn_summarize_border">#4D2DD4A8</color>
|
||||||
|
|
||||||
|
<!-- 翻译 -->
|
||||||
|
<color name="btn_translate_bg">#0EFBBF24</color>
|
||||||
|
<color name="btn_translate_icon">#FBBF24</color>
|
||||||
|
<color name="btn_translate_border">#4DFBBF24</color>
|
||||||
|
|
||||||
|
<!-- 润色 -->
|
||||||
|
<color name="btn_polish_bg">#0EF472B6</color>
|
||||||
|
<color name="btn_polish_icon">#F472B6</color>
|
||||||
|
<color name="btn_polish_border">#4DF472B6</color>
|
||||||
|
|
||||||
|
<!-- 功能色 -->
|
||||||
|
<color name="stop_generate">#F59E0B</color>
|
||||||
|
<color name="stop_generate_bg">#14F59E0B</color>
|
||||||
|
<color name="config_button_border">#402DD4A8</color>
|
||||||
|
<color name="divider">#0FFFFFFF</color>
|
||||||
|
<color name="card_border">#14FFFFFF</color>
|
||||||
|
|
||||||
|
<!-- 图标容器 -->
|
||||||
|
<color name="icon_container_bg">#0AFFFFFF</color>
|
||||||
|
|
||||||
<!-- 边框色 -->
|
<!-- 边框色 -->
|
||||||
<color name="border">#E0E0E0</color>
|
<color name="border_default">#14FFFFFF</color>
|
||||||
|
<color name="border_focused">#4D2DD4A8</color>
|
||||||
|
<color name="border_glow">#0F2DD4A8</color>
|
||||||
|
|
||||||
<!-- 状态色 -->
|
<!-- 其他 -->
|
||||||
|
<color name="black">#FF000000</color>
|
||||||
|
<color name="white">#FFFFFFFF</color>
|
||||||
<color name="success">#4CAF50</color>
|
<color name="success">#4CAF50</color>
|
||||||
<color name="warning">#FF9800</color>
|
<color name="warning">#FF9800</color>
|
||||||
<color name="error">#F44336</color>
|
<color name="error">#F44336</color>
|
||||||
|
|||||||
Reference in New Issue
Block a user