feat: unify picker island style

This commit is contained in:
7015725
2026-05-18 14:28:59 +08:00
parent 2e3ff489a0
commit 25ea8b7837
3 changed files with 91 additions and 51 deletions

View File

@@ -136,6 +136,31 @@ FloatBallAppWM.prototype.addSettingsHomeDashedDivider = function(parent) {
parent.addView(line, lp); parent.addView(line, lp);
}; };
FloatBallAppWM.prototype.getIslandPickerTheme = function() {
var isDark = this.isDarkTheme();
var C = this.ui.colors;
var T = this.getAnimalIslandTheme();
var cfgTpl = null;
try { cfgTpl = this.state.pendingUserCfg ? this.state.pendingUserCfg : this.config; } catch(eCfg) { cfgTpl = this.config; }
try { this.applySettingsTheme(T, isDark, C, cfgTpl); } catch(eTheme) {}
return {
isDark: isDark,
C: C,
T: T,
bg: T.bg,
card: T.card,
card2: T.card2,
text: T.text,
sub: T.sub,
primary: T.primary,
primaryDeep: T.primaryDeep,
primarySoft: T.primarySoft,
stroke: T.stroke,
onPrimary: T.onPrimary
};
};
FloatBallAppWM.prototype.createSettingsHomeEntry = function(parent, title, desc, actionText, onClick) { FloatBallAppWM.prototype.createSettingsHomeEntry = function(parent, title, desc, actionText, onClick) {
var self = this; var self = this;
var isDark = this.isDarkTheme(); var isDark = this.isDarkTheme();
@@ -4221,12 +4246,14 @@ FloatBallAppWM.prototype.showPopupOverlay = function(opts) {
var onDismiss = (typeof opt.onDismiss === "function") ? opt.onDismiss : null; var onDismiss = (typeof opt.onDismiss === "function") ? opt.onDismiss : null;
var builder = (typeof opt.builder === "function") ? opt.builder : null; var builder = (typeof opt.builder === "function") ? opt.builder : null;
var isDark = this.isDarkTheme(); var PT = this.getIslandPickerTheme ? this.getIslandPickerTheme() : null;
var isDark = PT ? PT.isDark : this.isDarkTheme();
var C = this.ui.colors; var C = this.ui.colors;
var T = PT ? PT.T : this.getAnimalIslandTheme();
var wm = this.state.wm; var wm = this.state.wm;
var root = new android.widget.FrameLayout(context); var root = new android.widget.FrameLayout(context);
root.setBackgroundColor(self.withAlpha(isDark ? 0xFF000000 : 0xFFFFFFFF, 0.55)); root.setBackgroundColor(self.withAlpha(isDark ? 0xFF000000 : 0xFFFFFFFF, isDark ? 0.58 : 0.42));
root.setClickable(true); root.setClickable(true);
var card = new android.widget.LinearLayout(context); var card = new android.widget.LinearLayout(context);
@@ -4236,27 +4263,32 @@ FloatBallAppWM.prototype.showPopupOverlay = function(opts) {
); );
cardLp.gravity = android.view.Gravity.CENTER; cardLp.gravity = android.view.Gravity.CENTER;
card.setLayoutParams(cardLp); card.setLayoutParams(cardLp);
card.setBackground(self.ui.createRoundDrawable(isDark ? C.cardDark : C.cardLight, self.dp(16))); card.setBackground(self.ui.createStrokeDrawable(T.card, self.withAlpha(T.primaryDeep, isDark ? 0.28 : 0.22), self.dp(1), self.dp(24)));
card.setPadding(self.dp(12), self.dp(12), self.dp(12), self.dp(12)); card.setPadding(self.dp(14), self.dp(12), self.dp(14), self.dp(12));
try { card.setElevation(self.dp(10)); } catch(eCardElev) {}
var header = new android.widget.LinearLayout(context); var header = new android.widget.LinearLayout(context);
header.setOrientation(android.widget.LinearLayout.HORIZONTAL); header.setOrientation(android.widget.LinearLayout.HORIZONTAL);
header.setGravity(android.view.Gravity.CENTER_VERTICAL); header.setGravity(android.view.Gravity.CENTER_VERTICAL);
var titleTv = new android.widget.TextView(context); var titleTv = new android.widget.TextView(context);
titleTv.setText(title); titleTv.setText("❧ " + title + " ❧");
titleTv.setTextColor(isDark ? C.textPriDark : C.textPriLight); titleTv.setTextColor(T.text);
titleTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 16); titleTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 16);
titleTv.setTypeface(null, android.graphics.Typeface.BOLD); titleTv.setTypeface(null, android.graphics.Typeface.BOLD);
header.addView(titleTv, new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, 1)); header.addView(titleTv, new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, 1));
var closeBtn = self.ui.createFlatButton(self, "关闭", C.primary, function() { var closeBtn = self.ui.createFlatButton(self, "", T.primaryDeep, function() {
closePopup(); closePopup();
}); });
header.addView(closeBtn); closeBtn.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 18);
closeBtn.setTypeface(null, android.graphics.Typeface.BOLD);
try { closeBtn.setBackground(self.ui.createStrokeDrawable(T.primarySoft, self.withAlpha(T.primaryDeep, isDark ? 0.30 : 0.22), self.dp(1), self.dp(18))); } catch(eCloseBg) {}
header.addView(closeBtn, new android.widget.LinearLayout.LayoutParams(self.dp(42), self.dp(38)));
card.addView(header); card.addView(header);
var content = new android.widget.LinearLayout(context); var content = new android.widget.LinearLayout(context);
content.setOrientation(android.widget.LinearLayout.VERTICAL); content.setOrientation(android.widget.LinearLayout.VERTICAL);
content.setPadding(0, self.dp(8), 0, 0);
var contentLp = new android.widget.LinearLayout.LayoutParams( var contentLp = new android.widget.LinearLayout.LayoutParams(
android.widget.LinearLayout.LayoutParams.MATCH_PARENT, android.widget.LinearLayout.LayoutParams.MATCH_PARENT,
android.widget.LinearLayout.LayoutParams.MATCH_PARENT android.widget.LinearLayout.LayoutParams.MATCH_PARENT
@@ -4280,11 +4312,12 @@ FloatBallAppWM.prototype.showPopupOverlay = function(opts) {
android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND, android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND,
android.graphics.PixelFormat.TRANSLUCENT android.graphics.PixelFormat.TRANSLUCENT
); );
lp.dimAmount = 0.5; lp.dimAmount = isDark ? 0.55 : 0.38;
lp.gravity = android.view.Gravity.TOP | android.view.Gravity.START; lp.gravity = android.view.Gravity.TOP | android.view.Gravity.START;
lp.x = 0; lp.x = 0;
lp.y = 0; lp.y = 0;
lp.softInputMode = android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE; lp.softInputMode = android.view.WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING
| android.view.WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN;
try { wm.addView(root, lp); } catch(eAdd) { safeLog(self.L, 'e', "popup addView fail: " + String(eAdd)); return null; } try { wm.addView(root, lp); } catch(eAdd) { safeLog(self.L, 'e', "popup addView fail: " + String(eAdd)); return null; }
@@ -4321,12 +4354,14 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
var selectedName = currentName; var selectedName = currentName;
var popupState = { currentPage: 0 }; var popupState = { currentPage: 0 };
var isDark = self.isDarkTheme(); var PT = self.getIslandPickerTheme ? self.getIslandPickerTheme() : null;
var isDark = PT ? PT.isDark : self.isDarkTheme();
var C = self.ui.colors; var C = self.ui.colors;
var textColor = isDark ? C.textPriDark : C.textPriLight; var T = PT ? PT.T : self.getAnimalIslandTheme();
var subTextColor = isDark ? C.textSecDark : C.textSecLight; var textColor = PT ? PT.text : (isDark ? C.textPriDark : C.textPriLight);
var cardColor = isDark ? C.cardDark : C.cardLight; var subTextColor = PT ? PT.sub : (isDark ? C.textSecDark : C.textSecLight);
var bgColor = isDark ? C.bgDark : C.bgLight; var cardColor = PT ? PT.card2 : (isDark ? C.cardDark : C.cardLight);
var bgColor = PT ? PT.bg : (isDark ? C.bgDark : C.bgLight);
var wm = self.state.wm; var wm = self.state.wm;
function filterCatalog(q) { function filterCatalog(q) {
@@ -4386,14 +4421,14 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
var pageSize = colCount * rowCount; var pageSize = colCount * rowCount;
var rootOverlay = new android.widget.FrameLayout(context); var rootOverlay = new android.widget.FrameLayout(context);
try { rootOverlay.setBackgroundColor(android.graphics.Color.parseColor("#33000000")); } try { rootOverlay.setBackgroundColor(self.withAlpha(isDark ? 0xFF000000 : 0xFFFFFFFF, isDark ? 0.58 : 0.42)); }
catch(eOverlayBg) { rootOverlay.setBackgroundColor(0x33000000); } catch(eOverlayBg) { rootOverlay.setBackgroundColor(0x33000000); }
rootOverlay.setClickable(true); rootOverlay.setClickable(true);
var card = new android.widget.LinearLayout(context); var card = new android.widget.LinearLayout(context);
card.setOrientation(android.widget.LinearLayout.VERTICAL); card.setOrientation(android.widget.LinearLayout.VERTICAL);
card.setPadding(padH, padV, padH, padV); card.setPadding(padH, padV, padH, padV);
card.setBackground(self.ui.createRoundDrawable(bgColor, self.dp(18))); card.setBackground(self.ui.createStrokeDrawable(T.card, self.withAlpha(T.primaryDeep, isDark ? 0.28 : 0.22), self.dp(1), self.dp(24)));
try { card.setElevation(self.dp(10)); } catch(eCardElev) { safeLog(null, 'e', "catch " + String(eCardElev)); } try { card.setElevation(self.dp(10)); } catch(eCardElev) { safeLog(null, 'e', "catch " + String(eCardElev)); }
// 与 ToolHub 设置页外壳保持同款宽高、圆角、居中方式。 // 与 ToolHub 设置页外壳保持同款宽高、圆角、居中方式。
@@ -4439,15 +4474,17 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
header.setOrientation(android.widget.LinearLayout.HORIZONTAL); header.setOrientation(android.widget.LinearLayout.HORIZONTAL);
header.setGravity(android.view.Gravity.CENTER_VERTICAL); header.setGravity(android.view.Gravity.CENTER_VERTICAL);
var titleTv = new android.widget.TextView(context); var titleTv = new android.widget.TextView(context);
titleTv.setText("\u9009\u62e9 ShortX \u56fe\u6807"); titleTv.setText("❧ 岛上图标库 ❧");
titleTv.setTextColor(textColor); titleTv.setTextColor(textColor);
titleTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 16); titleTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 16);
titleTv.setTypeface(null, android.graphics.Typeface.BOLD); titleTv.setTypeface(null, android.graphics.Typeface.BOLD);
header.addView(titleTv, new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, 1)); header.addView(titleTv, new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, 1));
var closeBtn = self.ui.createFlatButton(self, "✕", subTextColor, function() { dismiss(); }); var closeBtn = self.ui.createFlatButton(self, "✕", T.primaryDeep, function() { dismiss(); });
closeBtn.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 18); closeBtn.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 18);
closeBtn.setTypeface(null, android.graphics.Typeface.BOLD);
closeBtn.setPadding(self.dp(8), 0, self.dp(8), 0); closeBtn.setPadding(self.dp(8), 0, self.dp(8), 0);
try { closeBtn.setBackground(self.ui.createStrokeDrawable(T.primarySoft, self.withAlpha(T.primaryDeep, isDark ? 0.30 : 0.22), self.dp(1), self.dp(18))); } catch(eCloseBg) {}
header.addView(closeBtn, new android.widget.LinearLayout.LayoutParams(self.dp(42), self.dp(38))); header.addView(closeBtn, new android.widget.LinearLayout.LayoutParams(self.dp(42), self.dp(38)));
card.addView(header); card.addView(header);
@@ -4456,12 +4493,12 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
searchEt.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 13); searchEt.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 13);
searchEt.setTextColor(textColor); searchEt.setTextColor(textColor);
try { searchEt.setHintTextColor(subTextColor); } catch(e) { safeLog(null, 'e', "catch " + String(e)); } try { searchEt.setHintTextColor(subTextColor); } catch(e) { safeLog(null, 'e', "catch " + String(e)); }
searchEt.setHint("\u641c\u7d22\u56fe\u6807\u540d\uff0c\u5982 share / home"); searchEt.setHint("寻找岛上图标,如 share / home");
searchEt.setSingleLine(true); searchEt.setSingleLine(true);
searchEt.setFocusable(true); searchEt.setFocusable(true);
searchEt.setFocusableInTouchMode(true); searchEt.setFocusableInTouchMode(true);
searchEt.setPadding(self.dp(10), self.dp(8), self.dp(10), self.dp(8)); searchEt.setPadding(self.dp(10), self.dp(8), self.dp(10), self.dp(8));
searchEt.setBackground(self.ui.createStrokeDrawable(isDark ? C.inputBgDark : C.inputBgLight, isDark ? C.dividerDark : C.dividerLight, self.dp(1), self.dp(8))); searchEt.setBackground(self.ui.createStrokeDrawable(T.card2, self.withAlpha(T.primaryDeep, isDark ? 0.24 : 0.18), self.dp(1), self.dp(16)));
var searchLp = new android.widget.LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.MATCH_PARENT, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT); var searchLp = new android.widget.LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.MATCH_PARENT, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT);
searchLp.setMargins(0, self.dp(8), 0, self.dp(6)); searchLp.setMargins(0, self.dp(8), 0, self.dp(6));
searchEt.setLayoutParams(searchLp); searchEt.setLayoutParams(searchLp);
@@ -4490,7 +4527,7 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
pageBar.setGravity(android.view.Gravity.CENTER_VERTICAL); pageBar.setGravity(android.view.Gravity.CENTER_VERTICAL);
pageBar.setPadding(self.dp(8), 0, self.dp(8), self.dp(6)); pageBar.setPadding(self.dp(8), 0, self.dp(8), self.dp(6));
var btnPrev = self.ui.createFlatButton(self, "\u4e0a\u4e00\u9875", subTextColor, function() { var btnPrev = self.ui.createFlatButton(self, "上一页", T.primaryDeep, function() {
if (popupState.currentPage > 0) { popupState.currentPage--; renderGrid(); } if (popupState.currentPage > 0) { popupState.currentPage--; renderGrid(); }
}); });
pageBar.addView(btnPrev); pageBar.addView(btnPrev);
@@ -4503,7 +4540,7 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
pageInfo.setLayoutParams(new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, 1)); pageInfo.setLayoutParams(new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, 1));
pageBar.addView(pageInfo); pageBar.addView(pageInfo);
var btnNext = self.ui.createFlatButton(self, "\u4e0b\u4e00\u9875", C.primary, function() { var btnNext = self.ui.createFlatButton(self, "下一页", T.primaryDeep, function() {
popupState.currentPage++; renderGrid(); popupState.currentPage++; renderGrid();
}); });
pageBar.addView(btnNext); pageBar.addView(btnNext);
@@ -4538,7 +4575,7 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
selectNameTv.setLayoutParams(new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, 1)); selectNameTv.setLayoutParams(new android.widget.LinearLayout.LayoutParams(0, android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, 1));
selectRow.addView(selectNameTv); selectRow.addView(selectNameTv);
var selectConfirm = self.ui.createSolidButton(self, "\u786e\u5b9a", C.primary, android.graphics.Color.WHITE, function() { var selectConfirm = self.ui.createSolidButton(self, "带回小岛", T.primary, T.onPrimary, function() {
self.touchActivity(); self.touchActivity();
try { try {
if (typeof onSelect === "function") onSelect(selectedName); if (typeof onSelect === "function") onSelect(selectedName);
@@ -4559,7 +4596,7 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
if (dr) selectPreview.setImageDrawable(dr); if (dr) selectPreview.setImageDrawable(dr);
else selectPreview.setImageDrawable(null); else selectPreview.setImageDrawable(null);
} else { } else {
selectNameTv.setText("\u672a\u9009\u62e9"); selectNameTv.setText("还没选图标");
selectPreview.setImageDrawable(null); selectPreview.setImageDrawable(null);
} }
} catch(e) { safeLog(null, 'e', "catch " + String(e)); } } catch(e) { safeLog(null, 'e', "catch " + String(e)); }
@@ -4578,14 +4615,14 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
var start = popupState.currentPage * pageSize; var start = popupState.currentPage * pageSize;
var pageItems = matched.slice(start, start + pageSize); var pageItems = matched.slice(start, start + pageSize);
statusTv.setText("\u5171 " + matched.length + " \u4e2a\uff0c\u7b2c " + (popupState.currentPage + 1) + "/" + totalPages + " \u9875\uff0c\u6bcf\u9875 " + pageSize + " \u4e2a"); statusTv.setText(" " + matched.length + " 个图标 · 第 " + (popupState.currentPage + 1) + "/" + totalPages + " ");
pageInfo.setText((popupState.currentPage + 1) + " / " + totalPages); pageInfo.setText((popupState.currentPage + 1) + " / " + totalPages);
btnPrev.setEnabled(popupState.currentPage > 0); btnPrev.setEnabled(popupState.currentPage > 0);
btnNext.setEnabled(popupState.currentPage < totalPages - 1); btnNext.setEnabled(popupState.currentPage < totalPages - 1);
if (pageItems.length === 0) { if (pageItems.length === 0) {
var emptyTv = new android.widget.TextView(context); var emptyTv = new android.widget.TextView(context);
emptyTv.setText("\u672a\u627e\u5230\u5339\u914d\u7684\u56fe\u6807"); emptyTv.setText("没有找到这枚小图标");
emptyTv.setTextColor(subTextColor); emptyTv.setTextColor(subTextColor);
emptyTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 14); emptyTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 14);
emptyTv.setGravity(android.view.Gravity.CENTER); emptyTv.setGravity(android.view.Gravity.CENTER);
@@ -4604,9 +4641,9 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
cell.setPadding(self.dp(4), self.dp(6), self.dp(4), self.dp(6)); cell.setPadding(self.dp(4), self.dp(6), self.dp(4), self.dp(6));
cell.setClickable(true); cell.setClickable(true);
var bgColor = cardColor; var cellBg = cardColor;
try { bgColor = self.withAlpha(cardColor, 0.96); } catch(e) { safeLog(null, 'e', "catch " + String(e)); } try { cellBg = self.withAlpha(cardColor, 0.96); } catch(e) { safeLog(null, 'e', "catch " + String(e)); }
cell.setBackground(self.ui.createRoundDrawable(bgColor, self.dp(10))); cell.setBackground(self.ui.createStrokeDrawable(cellBg, self.withAlpha(T.primaryDeep, isDark ? 0.18 : 0.12), self.dp(1), self.dp(14)));
var iv = new android.widget.ImageView(context); var iv = new android.widget.ImageView(context);
iv.setLayoutParams(new android.widget.LinearLayout.LayoutParams(iconSize, iconSize)); iv.setLayoutParams(new android.widget.LinearLayout.LayoutParams(iconSize, iconSize));
@@ -4627,8 +4664,8 @@ FloatBallAppWM.prototype.showShortXIconPickerPopup = function(opts) {
cell.addView(tv); cell.addView(tv);
if (selectedName === item.name) { if (selectedName === item.name) {
try { cell.setBackground(self.ui.createRoundDrawable(self.withAlpha(C.primary, 0.2), self.dp(10))); } catch(e) { safeLog(null, 'e', "catch " + String(e)); } try { cell.setBackground(self.ui.createStrokeDrawable(T.primarySoft, self.withAlpha(T.primaryDeep, isDark ? 0.42 : 0.34), self.dp(2), self.dp(14))); } catch(e) { safeLog(null, 'e', "catch " + String(e)); }
try { tv.setTextColor(C.primary); } catch(e) { safeLog(null, 'e', "catch " + String(e)); } try { tv.setTextColor(T.primaryDeep); } catch(e) { safeLog(null, 'e', "catch " + String(e)); }
} else { } else {
try { tv.setTextColor(subTextColor); } catch(e) { safeLog(null, 'e', "catch " + String(e)); } try { tv.setTextColor(subTextColor); } catch(e) { safeLog(null, 'e', "catch " + String(e)); }
} }
@@ -4682,10 +4719,12 @@ FloatBallAppWM.prototype.showColorPickerPopup = function(opts) {
var onSelect = (typeof opt.onSelect === "function") ? opt.onSelect : null; var onSelect = (typeof opt.onSelect === "function") ? opt.onSelect : null;
var onDismiss = (typeof opt.onDismiss === "function") ? opt.onDismiss : null; var onDismiss = (typeof opt.onDismiss === "function") ? opt.onDismiss : null;
var isDark = this.isDarkTheme(); var PT = this.getIslandPickerTheme ? this.getIslandPickerTheme() : null;
var isDark = PT ? PT.isDark : this.isDarkTheme();
var C = this.ui.colors; var C = this.ui.colors;
var textColor = isDark ? C.textPriDark : C.textPriLight; var T = PT ? PT.T : this.getAnimalIslandTheme();
var subTextColor = isDark ? C.textSecDark : C.textSecLight; var textColor = PT ? PT.text : (isDark ? C.textPriDark : C.textPriLight);
var subTextColor = PT ? PT.sub : (isDark ? C.textSecDark : C.textSecLight);
function getThemeTintHex() { function getThemeTintHex() {
try { try {
@@ -4782,14 +4821,15 @@ FloatBallAppWM.prototype.showColorPickerPopup = function(opts) {
var currentAlphaByte = extractTintAlphaByte(currentColor); var currentAlphaByte = extractTintAlphaByte(currentColor);
var popupResult = self.showPopupOverlay({ var popupResult = self.showPopupOverlay({
title: "选择颜色", title: "颜色",
onDismiss: onDismiss, onDismiss: onDismiss,
builder: function(content, closePopup) { builder: function(content, closePopup) {
// 图标预览区 // 图标预览区
var previewRow = new android.widget.LinearLayout(context); var previewRow = new android.widget.LinearLayout(context);
previewRow.setOrientation(android.widget.LinearLayout.HORIZONTAL); previewRow.setOrientation(android.widget.LinearLayout.HORIZONTAL);
previewRow.setGravity(android.view.Gravity.CENTER_VERTICAL); previewRow.setGravity(android.view.Gravity.CENTER_VERTICAL);
previewRow.setPadding(self.dp(12), self.dp(8), self.dp(12), self.dp(8)); previewRow.setPadding(self.dp(12), self.dp(10), self.dp(12), self.dp(10));
previewRow.setBackground(self.ui.createStrokeDrawable(T.primarySoft, self.withAlpha(T.primaryDeep, isDark ? 0.24 : 0.18), self.dp(1), self.dp(18)));
var previewIv = new android.widget.ImageView(context); var previewIv = new android.widget.ImageView(context);
previewIv.setLayoutParams(new android.widget.LinearLayout.LayoutParams(self.dp(48), self.dp(48))); previewIv.setLayoutParams(new android.widget.LinearLayout.LayoutParams(self.dp(48), self.dp(48)));
@@ -4797,7 +4837,7 @@ FloatBallAppWM.prototype.showColorPickerPopup = function(opts) {
previewRow.addView(previewIv); previewRow.addView(previewIv);
var previewLabel = new android.widget.TextView(context); var previewLabel = new android.widget.TextView(context);
previewLabel.setText("图标预览"); previewLabel.setText("图标试衣间");
previewLabel.setTextColor(subTextColor); previewLabel.setTextColor(subTextColor);
previewLabel.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 12); previewLabel.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 12);
previewLabel.setPadding(self.dp(12), 0, 0, 0); previewLabel.setPadding(self.dp(12), 0, 0, 0);
@@ -4830,7 +4870,7 @@ FloatBallAppWM.prototype.showColorPickerPopup = function(opts) {
// ========== 最近使用颜色 ========== // ========== 最近使用颜色 ==========
var recentTitle = new android.widget.TextView(context); var recentTitle = new android.widget.TextView(context);
recentTitle.setText("最近使用"); recentTitle.setText("最近用过的小颜色");
recentTitle.setTextColor(subTextColor); recentTitle.setTextColor(subTextColor);
recentTitle.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 12); recentTitle.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 12);
recentTitle.setPadding(self.dp(12), self.dp(8), self.dp(12), self.dp(4)); recentTitle.setPadding(self.dp(12), self.dp(8), self.dp(12), self.dp(4));
@@ -4842,7 +4882,7 @@ FloatBallAppWM.prototype.showColorPickerPopup = function(opts) {
content.addView(recentGrid); content.addView(recentGrid);
var recentEmptyTv = new android.widget.TextView(context); var recentEmptyTv = new android.widget.TextView(context);
recentEmptyTv.setText("暂无最近颜色"); recentEmptyTv.setText("还没有最近颜色");
recentEmptyTv.setTextColor(subTextColor); recentEmptyTv.setTextColor(subTextColor);
recentEmptyTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 11); recentEmptyTv.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 11);
recentEmptyTv.setPadding(self.dp(12), self.dp(4), self.dp(12), self.dp(8)); recentEmptyTv.setPadding(self.dp(12), self.dp(4), self.dp(12), self.dp(8));
@@ -4885,7 +4925,7 @@ FloatBallAppWM.prototype.showColorPickerPopup = function(opts) {
var border = new android.graphics.drawable.GradientDrawable(); var border = new android.graphics.drawable.GradientDrawable();
border.setColor(android.graphics.Color.TRANSPARENT); border.setColor(android.graphics.Color.TRANSPARENT);
border.setCornerRadius(self.dp(5)); border.setCornerRadius(self.dp(5));
border.setStroke(self.dp(2), C.primary); border.setStroke(self.dp(2), T.primaryDeep);
cell.setForeground(border); cell.setForeground(border);
} catch(e) { safeLog(null, 'e', "catch " + String(e)); } } catch(e) { safeLog(null, 'e', "catch " + String(e)); }
} }
@@ -4913,7 +4953,7 @@ FloatBallAppWM.prototype.showColorPickerPopup = function(opts) {
// 21 色常用颜色 // 21 色常用颜色
var commonTitle = new android.widget.TextView(context); var commonTitle = new android.widget.TextView(context);
commonTitle.setText("常用色"); commonTitle.setText("糖果常用色");
commonTitle.setTextColor(subTextColor); commonTitle.setTextColor(subTextColor);
commonTitle.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 12); commonTitle.setTextSize(android.util.TypedValue.COMPLEX_UNIT_SP, 12);
commonTitle.setPadding(self.dp(12), self.dp(8), self.dp(12), self.dp(4)); commonTitle.setPadding(self.dp(12), self.dp(8), self.dp(12), self.dp(4));
@@ -4950,7 +4990,7 @@ FloatBallAppWM.prototype.showColorPickerPopup = function(opts) {
var border = new android.graphics.drawable.GradientDrawable(); var border = new android.graphics.drawable.GradientDrawable();
border.setColor(android.graphics.Color.TRANSPARENT); border.setColor(android.graphics.Color.TRANSPARENT);
border.setCornerRadius(self.dp(6)); border.setCornerRadius(self.dp(6));
border.setStroke(self.dp(3), C.primary); border.setStroke(self.dp(3), T.primaryDeep);
cell.setForeground(border); cell.setForeground(border);
} catch(e) { safeLog(null, 'e', "catch " + String(e)); } } catch(e) { safeLog(null, 'e', "catch " + String(e)); }
} }
@@ -4991,7 +5031,7 @@ FloatBallAppWM.prototype.showColorPickerPopup = function(opts) {
var border = new android.graphics.drawable.GradientDrawable(); var border = new android.graphics.drawable.GradientDrawable();
border.setColor(android.graphics.Color.TRANSPARENT); border.setColor(android.graphics.Color.TRANSPARENT);
border.setCornerRadius(self.dp(6)); border.setCornerRadius(self.dp(6));
border.setStroke(self.dp(3), C.primary); border.setStroke(self.dp(3), T.primaryDeep);
matchedCell.setForeground(border); matchedCell.setForeground(border);
} catch(e) { safeLog(null, 'e', "catch " + String(e)); } } catch(e) { safeLog(null, 'e', "catch " + String(e)); }
} }
@@ -5007,7 +5047,7 @@ FloatBallAppWM.prototype.showColorPickerPopup = function(opts) {
content.addView(valueTv); content.addView(valueTv);
function updateValueTv() { function updateValueTv() {
valueTv.setText(isFollowTheme ? "当前:跟随主题" : ("当前:" + (selectedColor || "无"))); valueTv.setText(isFollowTheme ? "当前:跟随岛屿主题" : ("当前:" + (selectedColor || "无")));
} }
updateValueTv(); updateValueTv();
@@ -5136,7 +5176,7 @@ FloatBallAppWM.prototype.showColorPickerPopup = function(opts) {
actionRow.setGravity(android.view.Gravity.CENTER); actionRow.setGravity(android.view.Gravity.CENTER);
actionRow.setPadding(self.dp(12), self.dp(8), self.dp(12), self.dp(8)); actionRow.setPadding(self.dp(12), self.dp(8), self.dp(12), self.dp(8));
var btnClear = self.ui.createFlatButton(self, "清空", subTextColor, function() { var btnClear = self.ui.createFlatButton(self, "恢复默认", T.primaryDeep, function() {
self.touchActivity(); self.touchActivity();
isFollowTheme = true; isFollowTheme = true;
selectedColor = ""; selectedColor = "";
@@ -5151,7 +5191,7 @@ FloatBallAppWM.prototype.showColorPickerPopup = function(opts) {
}); });
actionRow.addView(btnClear); actionRow.addView(btnClear);
var btnOk = self.ui.createSolidButton(self, "确定", C.primary, android.graphics.Color.WHITE, function() { var btnOk = self.ui.createSolidButton(self, "保存颜色", T.primary, T.onPrimary, function() {
self.touchActivity(); self.touchActivity();
try { try {
var finalColor = isFollowTheme ? "" : String(selectedColor || ""); var finalColor = isFollowTheme ? "" : String(selectedColor || "");

View File

@@ -54,8 +54,8 @@
"size": 21198 "size": 21198
}, },
"th_14_panels.js": { "th_14_panels.js": {
"sha256": "b2608e3cbedfb44a64480883ddb512deea19de778606277d382db04f18aa136b", "sha256": "7474fd1183106968094089ca7198d5f280524735ca5b9d72e2e9e32a438381e7",
"size": 252391 "size": 254684
}, },
"th_15_extra.js": { "th_15_extra.js": {
"sha256": "7db6431ad246c63e99c4c96dcf5903d38036efd6eed5c0da88bcfa0a0cd62ee0", "sha256": "7db6431ad246c63e99c4c96dcf5903d38036efd6eed5c0da88bcfa0a0cd62ee0",
@@ -68,5 +68,5 @@
}, },
"keyId": "toolhub-targets-2026-rsa3072", "keyId": "toolhub-targets-2026-rsa3072",
"schema": 2, "schema": 2,
"version": 20260518061951 "version": 20260518062836
} }

View File

@@ -1 +1 @@
SCSz9J3f9/Ip5QEZufhaJQ/HmBJe7Ljknk71sbbvPZlOUQ/sWJZ2PbdPKWYrM28yX5LMe83e5c9a1O1ew+28GqzkvRsHclx0Sm2rAjhgu+/074nkaB0eJ6WTAv6ikhD/aG5Gc8LgsJGwwzt6EZc2IuVLD0ODCXhyhsDkNUTVBSqQa1J6gix68ZoUduzfoJzoCqk0UFyXinP7mkAYRyBSquDLDwzpHNLY8iuP9bSboLIWye+2IQhB0yu8ZZq85PQLxzavzvyp976AovVcKD8ADZg/16rlaRllnyQMY3W1ess7byWj4t30hMJUjVpHrissfgiO07ic3cx0kYIiQscUsQe8cKL16uAiy5Br+eaBSvADE25T+Zl2u8tVMPKAshCebYl7pPnNa6jcj1vwq4OnVPVX4gtYrzos71pOpcleumZCNfR9YXG3HDQmFpVmE/nx8C2WD9X5hBXAFQlWHeY41YVEzWYpzijCQiKB5Yh9w7jAkyH0Yxj7Su7nvh/RuUo1 aUPEaBVu2Alkv5v7ppGNnytWLPktFvar7RD5OlD4VCy+QMIFv/ZRQ7sGLXWzQLa2qewCNbLsDKJKzoxflxW+5pW/VnQWv0S1HjWTCo6NDYrFmy9SuiM+Q1UfWSMhPlvmjYwQwZ/QjTqkFZb5K+ie76M7/3oBCOP0Sk1GIoSwg8vst7bkCJjTP00PypGOSFPCm1i3tPq2nvm6vBCo4Oj6L5KWqscVu6k7vp+q3j6upW0xuHtdZl/vzhBAc0Jh5018GRTQTYBUJFT+xMag0ADebOxazxylE54yiaBhG3RNcNRTKXgeQqeltxRHBXgF+PNVam4pNhv+Prrl0+cS55WzjL8LTHumc6SgJIhuLAeZUrUBSYdlLwpwB+3EgYKL9QROkcJoe5lRUvwlv854Y+nc6VV6ckb5y7OMbfrCbYXYI4Uh317mLMq4NweYbVG2kgei8Oc8VT7YY7QJtHxcEJZXF5BdR0K4C478w0c/43e6N+KNFMVIoZbHJ1YRc3xINMz+