feat(ollama): 添加 Ollama 模型对话功能

- 新增 OllamaWindowActivity 用于模型对话交互
- 添加 Ollama 配置对话框(API地址、模型、温度、token等)
- 在主菜单中增加 Ollama 窗口入口
- 包含发送、停止、清空等对话控制功能
- 更新 buildCount 至 15
This commit is contained in:
2026-05-06 11:08:04 +08:00
parent 1dbca0f290
commit 06253feba8
7 changed files with 666 additions and 2 deletions

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Thu Apr 30 14:58:25 CST 2026
#Thu Apr 30 18:43:22 CST 2026
stageCount=27
libraryProject=
baseVersion=15.11
publishVersion=15.11.26
buildCount=11
buildCount=15
baseBetaVersion=15.11.27

View File

@@ -0,0 +1,32 @@
package cc.winboll.studio.winboll.activities;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import cc.winboll.studio.winboll.R;
/**
* Ollama 模型对话窗口
*/
public class OllamaWindowActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ollama_window);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Ollama 窗口");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_ollama_window, menu);
return true;
}
}

View File

@@ -0,0 +1,140 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#1E1E1E"
android:orientation="vertical">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#333333"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.MaterialComponents.ActionBar" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="56dp"
android:layout_marginBottom="48dp">
<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="Ollama 模型对话"
android:textColor="#FFFFFF"
android:textSize="18sp"
android:textStyle="bold" />
<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="系统提示:"
android:textColor="#B0B0B0" />
<EditText
android:id="@+id/etSystemPrompt"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="#2D2D2D"
android:hint="请输入系统提示"
android:textColor="#FFFFFF"
android:textColorHint="#666666"
android:gravity="top|start"
android:inputType="textMultiLine" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="模型名称:"
android:textColor="#B0B0B0" />
<EditText
android:id="@+id/etModelName"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#2D2D2D"
android:hint="llama3"
android:text="llama3"
android:textColor="#FFFFFF"
android:textColorHint="#666666"
android:singleLine="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="系统消息:"
android:textColor="#B0B0B0" />
<EditText
android:id="@+id/etUserMessage"
android:layout_width="match_parent"
android:layout_height="120dp"
android:background="#2D2D2D"
android:ems="10"
android:gravity="top|start"
android:hint="输入你要发送的消息..."
android:inputType="textMultiLine" />
<EditText
android:id="@+id/etAssistantMessage"
android:layout_width="match_parent"
android:layout_height="120dp"
android:background="#2D2D2D"
android:gravity="top|start"
android:hint="模型响应将显示在这里..."
android:inputType="textMultiLine" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:orientation="horizontal">
<Button
android:id="@+id/btnSend"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="发送"
android:textColor="#FFFFFF" />
<Button
android:id="@+id/btnStop"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_weight="1"
android:text="停止"
android:textColor="#FF5252" />
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
</LinearLayout>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_config"
android:title="配置"
android:orderInCategory="100"
app:showAsAction="always" />
</menu>

View File

@@ -0,0 +1,206 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#1E1E1E">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="48dp"
android:layout_marginBottom="48dp">
<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="Ollama 模型对话"
android:textColor="#FFFFFF"
android:textSize="18sp"
android:textStyle="bold" />
<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="系统提示:"
android:textColor="#B0B0B0" />
<EditText
android:id="@+id/etSystemPrompt"
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="#2D2D2D"
android:hint="请输入系统提示"
android:textColor="#FFFFFF"
android:textColorHint="#666666"
android:gravity="top|start"
android:inputType="textMultiLine" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="模型名称:"
android:textColor="#B0B0B0" />
<EditText
android:id="@+id/etModelName"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="#2D2D2D"
android:hint="llama3"
android:text="llama3"
android:textColor="#FFFFFF"
android:textColorHint="#666666"
android:singleLine="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="温度设置:"
android:textColor="#B0B0B0" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2">
<EditText
android:id="@+id/etTemperature"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:background="#2D2D2D"
android:hint="0.7"
android:textColor="#FFFFFF"
android:textColorHint="#666666"
android:digits="0123456789.,-"
android:singleLine="true" />
<EditText
android:id="@+id/etMaxTokens"
android:layout_width="0dp"
android:layout_height="48dp"
android:layout_weight="1"
android:background="#2D2D2D"
android:hint="4096"
android:textColor="#FFFFFF"
android:textColorHint="#666666"
android:digits="0123456789."
android:singleLine="true" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="系统消息:"
android:textColor="#B0B0B0" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="用户消息:"
android:textColor="#B0B0B0" />
<EditText
android:id="@+id/etUserMessage"
android:layout_width="match_parent"
android:layout_height="120dp"
android:background="#2D2D2D"
android:ems="10"
android:gravity="top|start"
android:hint="输入你要发送的消息..."
android:inputType="textMultiLine" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="响应消息:"
android:textColor="#B0B0B0" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/etAssistantMessage"
android:layout_width="0dp"
android:layout_height="120dp"
android:layout_weight="3"
android:background="#2D2D2D"
android:gravity="top|start"
android:hint="模型响应将显示在这里..."
android:inputType="textMultiLine" />
<Button
android:id="@+id/btnClear"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="8dp"
android:text="清空"
android:textColor="#FFFFFF" />
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="48dp"
android:gravity="center">
<Button
android:id="@+id/btnSend"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送"
android:textSize="18sp" />
<Button
android:id="@+id/btnStop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="停止"
android:textSize="18sp" />
</LinearLayout>
</LinearLayout>
</FrameLayout>

View File

@@ -0,0 +1,269 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#1E1E1E"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ollama 配置"
android:textColor="#FFFFFF"
android:textSize="20sp"
android:textStyle="bold"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="12dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="API 地址"
android:textColor="#B0B0B0"
android:textSize="14sp"
android:layout_marginBottom="4dp" />
<EditText
android:id="@+id/etBaseUrl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="http://localhost:11434"
android:text="http://localhost:11434"
android:textColor="#FFFFFF"
android:textColorHint="#666666"
android:inputType="textUri"
android:singleLine="true"
android:background="#2D2D2D"
android:padding="12dp"
android:layout_marginBottom="12dp"
android:minHeight="48dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="模型名称"
android:textColor="#B0B0B0"
android:textSize="14sp"
android:layout_marginBottom="4dp" />
<EditText
android:id="@+id/etModelName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="模型名称 (如llama3)"
android:text="llama3"
android:textColor="#FFFFFF"
android:textColorHint="#666666"
android:inputType="textCapCharacters"
android:singleLine="true"
android:background="#2D2D2D"
android:padding="12dp"
android:layout_marginBottom="12dp"
android:minHeight="48dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="温度设置"
android:textColor="#B0B0B0"
android:textSize="14sp"
android:layout_marginBottom="4dp" />
<EditText
android:id="@+id/etTemperature"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="0.7"
android:text="0.7"
android:textColor="#FFFFFF"
android:textColorHint="#666666"
android:inputType="text"
android:singleLine="true"
android:background="#2D2D2D"
android:padding="12dp"
android:layout_marginBottom="12dp"
android:minHeight="48dp"
android:digits="0123456789.,-" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="最大 token 数"
android:textColor="#B0B0B0"
android:textSize="14sp"
android:layout_marginBottom="4dp" />
<EditText
android:id="@+id/etMaxTokens"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="4096"
android:text="4096"
android:textColor="#FFFFFF"
android:textColorHint="#666666"
android:inputType="text"
android:singleLine="true"
android:background="#2D2D2D"
android:padding="12dp"
android:layout_marginBottom="12dp"
android:minHeight="48dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="系统提示"
android:textColor="#B0B0B0"
android:textSize="14sp"
android:layout_marginBottom="4dp" />
<EditText
android:id="@+id/etSystemPrompt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="你是 WinBoLL Ollama API 客户端..."
android:text="你是 WinBoLL Ollama API 客户端。用户将向你提问,请给予有用的、详细的回答。"
android:textColor="#FFFFFF"
android:textColorHint="#666666"
android:inputType="textMultiLine"
android:gravity="top|start"
android:background="#2D2D2D"
android:padding="12dp"
android:layout_marginBottom="12dp"
android:minHeight="100dp"
android:maxLines="4" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="API 版本"
android:textColor="#B0B0B0"
android:textSize="14sp"
android:layout_marginBottom="4dp" />
<EditText
android:id="@+id/etApiVersion"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="v1"
android:text="v1"
android:textColor="#FFFFFF"
android:textColorHint="#666666"
android:inputType="textCapCharacters"
android:singleLine="true"
android:background="#2D2D2D"
android:padding="12dp"
android:layout_marginBottom="12dp"
android:minHeight="48dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="调试模式"
android:textColor="#B0B0B0"
android:textSize="14sp"
android:layout_marginBottom="4dp" />
<EditText
android:id="@+id/etDebugMode"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="false"
android:text="false"
android:textColor="#FFFFFF"
android:textColorHint="#666666"
android:inputType="text"
android:singleLine="true"
android:background="#2D2D2D"
android:padding="12dp"
android:layout_marginBottom="12dp"
android:minHeight="48dp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:orientation="horizontal">
<Space
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
<Button
android:id="@+id/btnSaveConfig"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存配置"
android:textColor="#FFFFFF"
android:textSize="14sp"
android:paddingStart="40dp"
android:paddingEnd="40dp"
android:layout_marginEnd="8dp"
android:backgroundTint="#4A90E2" />
<Button
android:id="@+id/btnLoadConfig"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="加载配置"
android:textColor="#4A90E2"
android:textSize="14sp"
android:paddingStart="40dp"
android:paddingEnd="40dp"
android:layout_marginEnd="8dp"
style="@style/Widget.MaterialComponents.Button.OutlinedButton" />
<Button
android:id="@+id/btnReset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重置"
android:textColor="#B0B0B0"
android:textSize="14sp"
android:paddingStart="40dp"
android:paddingEnd="40dp"
style="@style/Widget.MaterialComponents.Button.TextButton" />
<Space
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
</LinearLayout>
<TextView
android:id="@+id/tvStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textColor="#00CC00"
android:textSize="12sp"
android:layout_gravity="center"
android:layout_marginTop="8dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存后,配置将对所有会话生效"
android:textColor="#666666"
android:textSize="12sp"
android:layout_marginTop="8dp" />
</LinearLayout>
</LinearLayout>
</ScrollView>

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_ollama"
android:title="Ollama 窗口" />
</menu>