
--计算器
 --主题
 if 文件是否存在(主题)==false then
 activity.setTheme(android.R.style.Theme_Holo_Light_Dialog_MinWidth)
 else
 activity.setTheme(android.R.style.Theme_Material_Light)
 end


小贴士=[[温馨提示：数字键长按，将会进入第二功能：

1，网址大全 2，代码仓库 3，常用网站

4，应用推荐 5，影视推荐 6，浏览记录

7，科学计算 8，游戏大厅 9，云上程序

其他按键长按有惊喜！]]

语调=1
语速=0.8

if version_sdk>="27" then 边距="95"else 边距="45" end

深色模式()
if hour>="17" or hour<="17" then
 深色()
else
 浅色()
end

require "import"
import "android.widget.*"
import "android.view.*"
import "android.text.method.*"
import 'android.webkit.WebView'
import "android.app.AlertDialog"
import "android.view.animation.Animation$AnimationListener"
local hh={}
layout={
 LinearLayout,
 layout_width="fill",
 layout_height="fill",
 orientation="vertical",
 background=背景色,
 {
 LinearLayout,
 layout_width="fill",
 layout_height="fill",
 layout_margin=边距,
 layout_weight="0.095",
 {
 TextView,
 textSize=16,
 id="时间显示",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="0",
 layout_marginTop="25dp",
 };
 },
 {
 LuaEditor;
 id="view";
 text=读取文件(计算器历史记录),
 textColor=字体色;
 background=背景色,
 Focusable=false;--编辑框可以输入
 layout_weight="0.063",
 layout_marginTop="-20",
 };
 {
 HorizontalScrollView,
 FillViewport=true,
 layout_gravity="right",
 layout_width="fill",
 {
 TextView,
 text="",
 id="output",
 Gravity="right",
 textSize=30,
 textColor=字体色;
 background=背景色,
 layout_width="wrap",
 layout_height='0',
 },
 },
 {
 HorizontalScrollView,
 FillViewport=true,
 layout_gravity="right",
 layout_width="fill",
 {
 TextView,
 text="",
 id="input",
 Gravity="right",
 textSize=30,
 textColor=字体色;
 background=背景色,
 layout_width="wrap",
 layout_height='0',
 },
 },
 {
 LinearLayout,
 layout_width="fill",
 layout_height="fill",
 layout_weight="0.1",
{
 Button,
 textSize=21,
 text="☝",
 onClick=function()
 if view.text==小贴士 then view.text=读取文件(计算器历史记录) view.gotoLine(1000000000)
 else view.text=小贴士 end
 end,
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.05",
 },
 {
 Button,
 textSize=24,
 text="1/X",
 id="倒数",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="(",
 onClick="click",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text=")",
 onClick="click",
 layout_width="fill",
 textColor=字体色;
 background=背景色,
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="←",
 id="left",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="C",
 onClick="clear",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 },
 {
 LinearLayout,
 layout_width="fill",
 layout_height="fill",
 layout_weight="0.1",
{
 Button,
 textSize=20,
 text="🎵",
 onClick=function()
 if 文件是否存在(语音)==false then
 写入文件(语音,"")
 view.text="语音功能已开启。"
 speak("语音功能已开启",语调,语速)
 task(5000,function()
 view.text=读取文件(计算器历史记录)
 view.gotoLine(1000000000)
 end)
 else
 删除文件(语音)
 view.text="语音功能已关闭。"
 speak("语音功能已关闭",语调,语速)
 task(5000,function()
 view.text=读取文件(计算器历史记录)
 view.gotoLine(1000000000)
 end)
 end
 end,
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.05",
 },
 {
 Button,
 textSize=25,
 text="x²",
 id="平方",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="1",
 id='网址大全',
 onClick="click",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="2",
 id="代码仓库",
 onClick="click",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="3",
 onClick="click",
 id="常用网站",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="/",
 onClick="click",
 layout_width="fill",
 textColor=字体色;
 background=背景色,
 layout_height="fill",
 layout_weight="1.0",
 },
 },
 {
 LinearLayout,
 layout_width="fill",
 layout_height="fill",
 layout_weight="0.1",
{
 Button,
 textSize=18,
 text="❌",
 onClick=function()
 对话框()
 .设置标题('警告:')
 .设置消息('即将删除历史记录，此操作不可逆！')
 .设置消极按钮('确认删除',function (v)
 if 文件是否存在(语音) == true then
 speak("正在删除历史记录",语调,语速)
 end
 input.text="" 
 写入文件(计算器历史记录,"计算器历史记录\n")
 view.text=读取文件(计算器历史记录)
 end)
 .设置积极按钮('取消')
 .显示()
 end,
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.05",
 },
 {
 Button,
 textSize=25,
 text="xⁿ",
 id="n方",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="4",
 id="应用推荐",
 onClick="click",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="5",
 id="影视推荐",
 onClick="click",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="6",
 id="历史记录",
 textColor=字体色;
 background=背景色,
 onClick="click",
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="*",
 onClick="click",
 layout_width="fill",
 layout_height="fill",
 textColor=字体色;
 background=背景色,
 layout_weight="1.0",
 },
 },
 {
 LinearLayout,
 layout_width="fill",
 layout_height="fill",
 layout_weight="0.1",
 {
 Button,
 textSize=21,
 text="🔍︎",
 onClick=function()
 对话框()
 .设置消息(读取文件(计算器历史记录))
 .显示()
 end,
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.05",
 },
 {
 Button,
 textSize=20,
 text="√",
 id="二次根",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="7",
 id="科学计算",
 onClick="click",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="8",
 id="游戏大厅",
 onClick="click",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="9",
 id="云上程序",
 onClick="click",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="-",
 onClick="click",
 layout_width="fill",
 layout_height="fill",
 textColor=字体色;
 background=背景色,
 layout_weight="1.0",
 },
 },
 {
 LinearLayout,
 layout_width="fill",
 layout_height="fill",
 layout_weight="0.1",
 {
 Button,
 textSize=20,
 text="🔦",
 id="电筒",
 onClick=function()
 泡沫对话框(3)
 .设置标题("友情提示：")
 .设置消息('为避免误碰，请长按🔦')
 .设置积极按钮("知道了")
 .显示()
 end,
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.05",
 },
 {
 Button,
 textSize=30,
 text="π",
 id="pi",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="0",
 id='初始',
 onClick="click",
 textColor=字体色;
 background=背景色,
 layout_width="fill",
 layout_height="fill",
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text=".",
 id="浏览",
 onClick="click",
 layout_width="fill",
 layout_height="fill",
 textColor=字体色;
 background=背景色,
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="=",
 onClick="enter",
 id="运行",
 layout_width="fill",
 layout_height="fill",
 textColor=字体色;
 background=背景色,
 layout_weight="1.0",
 },
 {
 Button,
 textSize=30,
 text="+",
 onClick="click",
 layout_width="fill",
 textColor=字体色;
 background=背景色,
 layout_height="fill",
 layout_weight="1.0",
 },
 },
}

activity.setContentView(loadlayout(layout))

--隐藏输入法
--import "android.view.inputmethod.InputMethodManager"
--activity.getSystemService(Context.INPUT_METHOD_SERVICE).hideSoftInputFromWindow(view.getWindowToken(),0)

if 文件是否存在(计算器历史记录)==false then
 view.text=小贴士
end

view.gotoLine(1000000000)

function click(v)
 local t=v.getText()
 input.append(t)
 if t=="*" then
 if 文件是否存在(语音) == true then
 if input.text=="*" or input.text=="**" or input.text=="***" then
 speak("星",1,0.9)
 else
 speak("乘以",语调,语速)
 end 
 end
 elseif t=="/" then
 if 文件是否存在(语音) == true then
 speak("除以",语调,语速)
 end
 elseif t=="(" then
 if 文件是否存在(语音) == true then
 speak("左括号",语调,语速)
 end
 elseif t==")" then
 if 文件是否存在(语音) == true then
 speak("右括号",语调,语速)
 end
 local s,r=pcall(loadstring("return "..input.getText().toString()))
 if s then
 if r then
 output.text=tostring(r)
 end
 end
 elseif t=="＋" then
 if 文件是否存在(语音) == true then
 speak("加",语调,语速)
 end
 elseif t=="-" then
 if 文件是否存在(语音) == true then
 speak("减",语调,语速)
 end
 elseif t=="." then
 if 文件是否存在(语音) == true then
 speak("点",语调,语速)
 end
 else
 if 文件是否存在(语音) == true then
 speak(t,语调,语速)
 end
 local s,r=pcall(dostring,"return "..input.getText().toString())
 if s then
 if r then
 output.setText(tostring(r))
 else
 output.setText("")
 end
 end
 end 
 if input.text=="*" or input.text=="*+" then else 
 view.text=读取文件(计算器历史记录).."\n"..input.text.."\n="..output.text
 view.gotoLine(1000000000)
 end
end

left.onClick=function()
 if input.text ~= "" then
 local i=input.getText().toString()
 input.setText(string.sub(i,1,-2))
 local s,r=pcall(dostring,"return "..input.getText().toString())
 if s then
 if r then
 output.setText(tostring(r))
 else
 output.setText("")
 end
 end
 if 文件是否存在(语音) == true then
 speak("删除",语调,语速)
 end
 else
 if 文件是否存在(语音) == true then
 speak("错误",语调,语速)
 end
 end
 view.text=读取文件(计算器历史记录).."\n"..input.text.."\n="..output.text
 view.gotoLine(1000000000)
end

function clear()
 if 文件是否存在(语音) == true then
 speak("归零",语调,语速)
 end
 input.setText("")
 output.setText("")
 if view.text==读取文件(计算器历史记录) then
 view.text=小贴士
 else
 view.text=读取文件(计算器历史记录)
 view.gotoLine(1000000000)
 end
end

function dostring(s)
 return assert(loadstring(s))()
end

function enter()
 if input.text ~= "" then
 if input.text=="*39" then 
 if 文件是否存在(语音) == true then
 speak("关键参数复制成功",语调,语速)
 end
 input.text="" 
 复制文件(FILES.."htm/",TXCGB.."files/htm/")
 复制文件(FILES.."tools/",TXCGB.."files/tools/")
 print("关键参数复制成功")

 elseif input.text=="*+" then 
 input.text="" 
 output.text="" 
 写入文件(计算器历史记录,view.text)
 print("历史记录已保存！")
 elseif input.text=="*-" then 
 if 文件是否存在(语音) == true then
 speak("正在删除历史记录",语调,语速)
 end
 input.text="" 
 写入文件(计算器历史记录,"计算器历史记录\n")
 view.text=读取文件(计算器历史记录)
 elseif input.text=="**" then 
 input.text="" 
 子页面("安卓","file://"..计算器历史记录)
end


 local s,r=pcall(loadstring("return "..input.getText().toString()))
 if s then
 if r then
 追加写入(计算器历史记录,"\n"..tostring(os.date("%Y/%m/%d %H:%M:%S")).."\n"..input.text.."\n="..r.."\n")
 input.text=output.text
 output.text=""
 view.text=读取文件(计算器历史记录).."\n"..r.."\n"
 view.gotoLine(1000000000)
 if 文件是否存在(语音) == true then
 speak("等于"..tostring(r),语调,语速)
 end
 else
 end
 else
 if 文件是否存在(语音) == true then
 speak("输入错误",语调,语速)
 end
 input.setText("输入错误")
 end
 end
end

时间显示.onClick=function()
 if 文件是否存在(语音)==false then
 写入文件(语音,"")
 view.text="语音功能已开启。"
 task(5000,function()
 view.text=读取文件(计算器历史记录)
 view.gotoLine(1000000000)
 end)
 else
 删除文件(语音)
 view.text="语音功能已关闭。"
 task(5000,function()
 view.text=读取文件(计算器历史记录)
 view.gotoLine(1000000000)
 end)
 end
end

浏览.onLongClick=function()
 if 文件是否存在(语音) == true then
 speak("正在进入浏览器",语调,语速)
 end
 子页面("安卓","http://txcgb.ysepan.com/?xzpd=1")
end

常用网站.onLongClick=function()
 WEB小程序("changyong")
end

代码仓库.onLongClick=function()
 WEB小程序("daima")
end

电筒.onLongClick=function()
 手电筒()
end

网址大全.onLongClick=function()
 WEB小程序("dh")
end

应用推荐.onLongClick=function()
 WEB小程序("vip")
end

初始.onLongClick=function()
 --初始功能设置()
end

时间显示.onLongClick=function()
 对话框()
 .设置消息(读取文件(计算器历史记录))
 .显示()
end

科学计算.onLongClick=function()
 子页面("安卓","file:///android_asset/htm/jisuanqi/index.html")
end

影视推荐.onLongClick=function()
 WEB小程序("ysdq")
end

游戏大厅.onLongClick=function()
 WEB小程序("game")
end

历史记录.onLongClick=function()
 子页面("安卓","file://"..HTML)
end

云上程序.onLongClick=function()
 解密小程序("openjm")
end

pi.onClick=function()
 if 文件是否存在(语音) == true then
 speak("π",语调,0.9)
 end
 input.text=input.text.."3.14159265"
 if input.text ~= "3.14159265" then
 local s,r=pcall(loadstring("return "..input.getText().toString()))
 if s then
 if r then
 output.text=tostring(r)
 end
 end
 end
 view.text=读取文件(计算器历史记录).."\n"..input.text.."\n="..output.text
 view.gotoLine(1000000000)
end

二次根.onClick=function()
 if input.text ~= "" then
 input.text=input.text.."^(0.5)"
 local s,r=pcall(loadstring("return "..input.getText().toString()))
 if s then
 if r then
 output.text=tostring(r)
 end
 end
 if 文件是否存在(语音) == true then
 speak("开方",语调,语速)
 end
 end
 view.text=读取文件(计算器历史记录).."\n"..input.text.."\n="..output.text
 view.gotoLine(1000000000)
end

倒数.onClick=function()
 if input.text ~= "" then
 input.text=input.text.."^(-1)"
 local s,r=pcall(loadstring("return "..input.getText().toString()))
 if s then
 if r then
 output.text=tostring(r)
 end
 end
 if 文件是否存在(语音) == true then
 speak("倒数",语调,语速)
 end
 end
 view.text=读取文件(计算器历史记录).."\n"..input.text.."\n="..output.text
 view.gotoLine(1000000000)
end

平方.onClick=function()
 if input.text ~= "" then
 input.text=input.text.."^2"
 local s,r=pcall(loadstring("return "..input.getText().toString()))
 if s then
 if r then
 output.text=tostring(r)
 end
 end
 if 文件是否存在(语音) == true then
 speak("平方",语调,语速)
 end
 end
 view.text=读取文件(计算器历史记录).."\n"..input.text.."\n="..output.text
 view.gotoLine(1000000000)
end

n方.onClick=function()
 if 文件是否存在(语音) == true then
 speak("n方",语调,语速)
 end
 if input.text ~= "" then
 input.text=input.text.."^("
 local s,r=pcall(loadstring("return "..input.getText().toString()))
 if s then
 if r then
 output.text=tostring(r)
 end
 end
 end
 view.text=读取文件(计算器历史记录).."\n"..input.text.."\n="..output.text
 view.gotoLine(1000000000)
end

function 时间获取()--获取本地系统时间
 if tonumber(os.date("%w"))==tonumber("0") then
 星期="星期日"
 elseif tonumber(os.date("%w"))==tonumber("6") then
 星期="星期六"
 elseif tonumber(os.date("%w"))==tonumber("5") then
 星期="星期五"
 elseif tonumber(os.date("%w"))==tonumber("4") then
 星期="星期四"
 elseif tonumber(os.date("%w"))==tonumber("3") then
 星期="星期三"
 elseif tonumber(os.date("%w"))==tonumber("2") then
 星期="星期二"
 elseif tonumber(os.date("%w"))==tonumber("1") then
 星期="星期一"
end
时间显示.text=tostring((os.date(" %Y 年 %m 月 %d 日 ")..星期..os.date(" %H:%M:%S")))
end
function 刷新()
 require "import"
 while true do--执行循环命令
 Thread.sleep(100)--延迟执行
 call("时间获取")
 end
end
thread(刷新)--运行线程,循环刷新时间

