Compare commits

...

6 Commits

Author SHA1 Message Date
74443950c4 chore(config): 调整项目构建配置,取消忽略 settings.gradle
- 修改 .gitignore 取消注释 settings.gradle 和 gradle.properties
- 删除 settings.gradle 文件
2026-05-06 12:25:05 +08:00
0607af429b Merge branch 'winboll' of https://gitea.winboll.cc/Studio/WinBoLL into winboll 2026-05-06 12:21:06 +08:00
39e825f03e fix(browser): 外部调用时直接打开传入的网页链接,不再默认加载首页
- BrowserFragment 新增 newInstance(initialUrl) 工厂方法
- initWinBoLLView 优先使用外部传入的 URL 参数
- MainActivity 在创建 Fragment 时即传入外部 URL,避免先加载首页再跳转的闪烁
2026-05-06 11:28:14 +08:00
cd0599d639 feat(browser): 支持外部应用调用传入网页地址
- 在 AndroidManifest.xml 为 MainActivity 添加 http/https 的 intent-filter
- 设置 singleTask 启动模式以复用 Activity 实例
- BrowserFragment 新增 MSG_OPEN_URL 消息处理外部 URL 跳转
- MainActivity 实现 handleExternalUrl 方法,在 onCreate/onNewIntent 中捕获并加载网页
2026-05-06 11:17:13 +08:00
aef5a62e47 feat(network): 全局启用 HTTP 明文流量支持
- 修改 network_security_config.xml 允许所有 HTTP 协议访问
- 移除对 HTTP 访问的域名限制
2026-05-06 11:11:39 +08:00
06253feba8 feat(ollama): 添加 Ollama 模型对话功能
- 新增 OllamaWindowActivity 用于模型对话交互
- 添加 Ollama 配置对话框(API地址、模型、温度、token等)
- 在主菜单中增加 Ollama 窗口入口
- 包含发送、停止、清空等对话控制功能
- 更新 buildCount 至 15
2026-05-06 11:08:04 +08:00
13 changed files with 746 additions and 93 deletions

4
.gitignore vendored
View File

@@ -101,5 +101,5 @@ lint-results.html
## WinBoLL 衍生应用,
## 外派类型类库应用需要注释掉以下部分,以便部署通用类库编译配置。
## APPBase,AES需要上传以下两种配置。
#/settings.gradle
#/gradle.properties
settings.gradle
gradle.properties

View File

@@ -1,79 +0,0 @@
// AutoInstaller 项目编译设置
//include ':autoinstaller'
//rootProject.name = "autoinstaller"
// MJ 项目编译设置
//include ':mj'
//rootProject.name = "mj"
// PowerBell 项目编译设置
//include ':powerbell'
//rootProject.name = "powerbell"
// APPBase 项目编译设置
//include ':appbase'
//include ':libappbase'
//rootProject.name = "appbase"
// APPUtils 项目编译设置
//include ':apputils'
//include ':libapputils'
//rootProject.name = "apputils"
// JC 项目编译设置
//include ':jc'
//include ':libjc'
//rootProject.name = "jc"
// AES 项目编译设置
include ':aes'
include ':libaes'
rootProject.name = "aes"
// Contacts 项目编译设置
//include ':contacts'
//rootProject.name = "contacts"
// MyMessageManager 项目编译设置
//include ':mymessagemanager'
//rootProject.name = "mymessagemanager"
// TimeStamp 项目编译设置
//include ':timestamp'
//rootProject.name = "timestamp"
// AndroidDemo 项目编译设置
//include ':androiddemo'
//rootProject.name = "androiddemo"
// AndroidXDemo 项目编译设置
//include ':androidxdemo'
//rootProject.name = "androidxdemo"
// Ollama 项目编译设置
//include ':ollama'
//rootProject.name = "ollama"
// NumTable 项目编译设置
//include ':numtable'
//rootProject.name = "numtable"
// MidiPlayer 项目编译设置
//include ':midiplayer'
//rootProject.name = "midiplayer"
// WebPageSources 项目编译设置
//include ':webpagesources'
//rootProject.name = "webpagesources"
// Positions 项目编译设置
//include ':positions'
//rootProject.name = "positions"
// WinBoLL 项目编译设置
//include ':winboll'
//rootProject.name = "winboll"
// RegExpUtils 项目编译设置
//include ':regexputils'
//rootProject.name = "regexputils"

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Thu Apr 30 14:58:25 CST 2026
#Wed May 06 11:22:14 CST 2026
stageCount=27
libraryProject=
baseVersion=15.11
publishVersion=15.11.26
buildCount=11
buildCount=20
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

@@ -37,7 +37,16 @@
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:exported="true">
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="http"/>
<data android:scheme="https"/>
</intent-filter>
</activity>

View File

@@ -1,6 +1,7 @@
package cc.winboll.studio.winboll;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
@@ -40,12 +41,39 @@ public class MainActivity extends DrawerFragmentActivity {
initMainHandler();
if (mBrowserFragment == null) {
mBrowserFragment = new BrowserFragment();
String externalUrl = extractExternalUrl(getIntent());
if (externalUrl != null) {
mBrowserFragment = BrowserFragment.newInstance(externalUrl);
} else {
mBrowserFragment = new BrowserFragment();
}
addFragment(mBrowserFragment);
}
showFragment(mBrowserFragment);
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
String externalUrl = extractExternalUrl(intent);
if (externalUrl != null && mBrowserFragment != null && mBrowserFragment.getBrowserHandler() != null) {
Message msg = Message.obtain();
msg.what = BrowserFragment.MSG_OPEN_URL;
msg.obj = externalUrl;
mBrowserFragment.getBrowserHandler().sendMessage(msg);
}
}
private String extractExternalUrl(Intent intent) {
if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) {
Uri uri = intent.getData();
if (uri != null) {
return uri.toString();
}
}
return null;
}
public static void sendMessage(Message msg) {
_mMainHandler.sendMessage(msg);
}

View File

@@ -44,15 +44,26 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W
// 消息标识跳转首页winboll.cc
public static final int MSG_HOMEPAGE = 1001;
// 跳转到历史记录位置
public static final int MSG_HISTORY_POSITION = 1002;
public static final int MSG_HISTORY_POSITION = 1002;
// 打开外部应用传入的 URL
public static final int MSG_OPEN_URL = 1003;
// 自定义Handler接收应用内其他页面发送的消息
private Handler mBrowserHandler;
// 单例创建方法Java 7 静态工厂模式)
// 单例创建方法Java 7 显式工厂模式)
public static BrowserFragment newInstance() {
return new BrowserFragment();
}
// 创建带初始URL的实例供外部应用调用时使用
public static BrowserFragment newInstance(String initialUrl) {
BrowserFragment fragment = new BrowserFragment();
Bundle args = new Bundle();
args.putString("initial_url", initialUrl);
fragment.setArguments(args);
return fragment;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
@@ -116,10 +127,23 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W
mWinBoLLView.setProgressBar(mProgressBar);
// 设置页面状态监听this 实现 OnPageStatusListener
mWinBoLLView.setOnPageStatusListener(this);
// 预加载默认页面winboll.cc 首页)
String defaultUrl = "https://www.winboll.cc";
mWinBoLLView.loadUrlSafe(defaultUrl);
mEtUrl.setText(defaultUrl);
// 检查是否有外部传入的初始 URL
String initialUrl = null;
if (getArguments() != null) {
initialUrl = getArguments().getString("initial_url");
}
if (initialUrl != null && !initialUrl.isEmpty()) {
// 使用外部传入的 URL
mWinBoLLView.loadUrlSafe(initialUrl);
mEtUrl.setText(initialUrl);
} else {
// 预加载默认页面winboll.cc 首页)
String defaultUrl = "https://www.winboll.cc";
mWinBoLLView.loadUrlSafe(defaultUrl);
mEtUrl.setText(defaultUrl);
}
}
// ------------------- 新增初始化Handler接收应用内消息 -------------------
@@ -148,6 +172,13 @@ public class BrowserFragment extends Fragment implements View.OnClickListener, W
//showToast("已跳转至" + historyUrl);
}
break;
case MSG_OPEN_URL:
String openUrl = (String) msg.obj;
if (openUrl != null && !openUrl.isEmpty()) {
mWinBoLLView.loadUrlSafe(openUrl);
mEtUrl.setText(openUrl);
}
break;
default:
break;
}

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>

View File

@@ -5,8 +5,8 @@
<domain includeSubdomains="true">winboll.cc</domain> <!-- 你的目标域名 -->
<domain includeSubdomains="true">www.winboll.cc</domain> <!-- 其他需要兼容的域名 -->
</domain-config>
<!-- 默认允许HTTPS全局生效 -->
<base-config cleartextTrafficPermitted="false">
<!-- 全局允许HTTP明文请求支持网站HTTP协议访问 -->
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>