But we did. :D
其实大家所看到的屏幕上的应用,都是一个个的可执行程序,他们都被存放在 /system/apps/tp/bin 下
目前,我们已经开放的触屏应用及组件有
- 万能 app 
custom,快速定制触屏应用 - 消息对话框组件 
messagebox - 图片查看器组件 
imageview 
我们尝试在命令行下执行它:
$ custom
得到的输出是:
(1959.710280)/mem/mochui-rom/mochui-sys/microwin/src/mochui/custom.c-309: Wrong arguments!
custom json_config_file
hmm... 有点意思。这个 json_config_file 又是什么呢?我们发现 /system/apps/tp/conf/custom.conf 这个文件,内容如下:
{
  "title" : "hdns",
  "content" : "hdns是一个啥啥啥啥blablabla...",
  "button1" : {
    "txt" : "启动",
    "cmd" : "/data/apps/hdns/sbin/hdns.sh start",
    "code" : {
      "0" : "执行成功",
      "1" : "执行错误1",
      "2" : "执行错误2"
    }
  },
  "button2" : {
    "txt" : "停止",
    "cmd" : "/data/apps/hdns/sbin/hdns.sh stop",
    "code" : {
      "0" : "服务已经停止",
      "1" : "执行错误1",
      "2" : "执行错误2"
    }
  },
  "button3" : {
    "txt" : "重启",
    "cmd" : "/data/apps/hdns/sbin/hdns.sh restart",
    "code" : {
      "0" : "已经重启",
      "1" : "执行错误1",
      "2" : "执行错误2"
    }
  }
}Bingo! 所以呢,我们尝试性地敲下:
$ custom /system/apps/tp/conf/custom.conf
结果呢屏幕上出现了什么??
这个时候再回头去看 /system/apps/tp/conf/custom.conf 的内容,大家明白了么? XD
6.22 版本后custom支持了些新的特性配置
- 新的脚本执行后返回字符串的方式。 可以在脚本执行的过程中产生输出文本到某一个文件中,然后让custom程序从这个文件中读取字符串,然后显示在屏幕上,替代之前用不同code值对应不同返回文本的方式,这种方式会更灵活。如果同时定义了code返回值和 out_file, out_file 的优先级会高于code.
 
{
  "title" : "hdns",
  "content" : "静态初始化文字",
  "dynmic-content" : {
    "cmd" : "ls",
    "code" : {
      "0" : "可以针对某个脚本的不同返回值返回不同的初始化文字",
      "1" : "text2",
      "2" : "text3"
     },
     "out_file" : "/tmp/out"
   },
   
  "button1" :   {
    "txt" : "启动",
    "cmd" : "/data/apps/hdns/sbin/hdns.sh start",
    "code" : {
      "0" : "执行成功",
      "1" : "执行错误1",
      "2" : "执行错误2"
    },
    "out_file" : "/tmp/out"
  }
}- 
支持配置文件reload接口。 在使用过程中,可以修改conf文件,然后给运行的custom进程发送SIGUSR1信号,custom进程就会重新载入配置文件,这种机制可以用来提供动态的界面变化,比如点击“打开”按钮后,这个按钮就会被替换为”关闭“,提供更友好的界面。
kill -SIGUSR1 pid
 
这些新的特性的使用可以参考 modou-samba-0.3应用,这些新特性也是应modou-samba-0.3的作者junjian要求而加。
在 shell 下执行:
$ messagebox
输出为:
(110177.570320)/mem/mochui-rom/mochui-sys/microwin/src/mochui/messagebox.c-189: Wrong arguments!
messagebox title content 1 ok_text ok_cmd
messagebox title content 2 no_text no_cmd yes_text yes_cmd
同样地,我们先尝试在 shell 下执行:
$ imageview
得到输出为:
(103230.240260)/mem/mochui-rom/mochui-sys/microwin/src/mochui/imageview.c-98: Wrong arguments
imageview path-to-image-file image-width image-height
执行 textview 会有提示输出
textview title content
textview title content loop-interval(ms) loop-count loop-cmd ret-file
这是textview的两种使用方式:
第一种是静态的显示方式,只需要指定标题和文字,点击界面左上角箭头可以退出应用。
第二种可以用来显示动态的问题,如倒计时的动态文字,参数解释如下
- title 标题
 - content 内容
 - loop-interval 以什么样的频率去循环执行脚本(单位毫秒)
 - loop-count 共循环执行脚本多少次(如果为0,表示无限次)
 - loop-cmd 执行的脚本名字,其中可以使用%LOOP_COUNT%关键字,表示当前的循环次数
 - ret-file 每次脚本执行结束后,textview会从这个文件中读取文本用来显示
 
这个控件略显复杂,下面给出一个示例 textview WPS连接 "" 1000 31 "/data/loop.sh %LOOP-COUNT% >/tmp/out" /tmp/out
loop.sh 的内容
#!/bin/sh
var=`expr 31 - $1`
echo 请在 $var 秒内按下设备上的wps键,如果已经连接成功,可以选择退出
这样每隔一秒中都会执行一次loop.sh,每次传入的参数就是当前的循环次数,最后动态的文字都会被输出到/tmp/out,然后textview动态读入/tmp/out,这样就实现了文字的动态显示(动态的倒计时文字)
在shell里执行input-text,会有提示 inputtext default-text prompt-text write-to-file min-lin max-len
- default-text 输入法界面出现的时候,默认已经输入的文字
 - prompt-text 输入法界面的提示文字
 - write-to-file 输入成功后将输入文字写入到这个文件中
 - min-lin 输入文字的最小长度限制
 - max-len 输入文字的最大长度限制
 
textview2是textview的升级版,可以按照特定的对齐格式显示文本,当文本超过一屏幕高度时,会自动出现竖直滚动条。 在shell中输入textview2,会有提示 usage : textview -t title -m content-h [(hori align)l:r:m] -v [(vert align)t:m:b]-b btn_text -s btn_cmd-f finish_flag_file -d finish_cmd
- title 应用的标题
 - content 要显示的文字
 - hori align 水平方向上的对齐方式 left right middle
 - vert align 竖直方向上的对齐方式 top middle bottom
 - btn_text 标题栏右上角上显示的BUTTON的文字
 - btn_cmd 右上角按钮被按下时的执行脚本
 
progress被设计用来动态显示一个进度条. 通过设置一个每秒触发一次的timer,轮循地执行一个loop_cmd,然后由这个脚本向两个设定的文件输出进度数字和提示内容,最后由progress不停从这两个文件中获取内容,并将其显示出来,从而达到动态更新进度和文字的效果。 在shell中输入progress,会有提示 progress -t title -h [(hori align)l:r:m] -v [(vert align)t:m:b] -b btn_text -s btn_cmd -j loop_cmd -x dynamic_text_file -p dynamic_percent_file
- title 应用的标题
 - hori align 水平方向上的对齐方式 left right middle
 - vert align 竖直方向上的对齐方式 top middle bottom
 - btn_text 标题栏右上角上显示的BUTTON的文字
 - btn_cmd 右上角按钮被按下时的执行脚本
 - loop_cmd 被循环执行的脚本
 - dynamic_text_file 被循环执行的脚本将要显示的动态文字内容输出到这个文件中
 - dynamic_percent_file 被循环执行的脚本将要显示的动态进度数字(1-100)输出到这个文件中
 
列表控件用于显示一个列表,外观可参考魔豆触屏launcher右上角的三条杠按钮触发出来的界面. 点击其中的每个元素时,都可以触发对应的命令。
usage : list -t title -s selected_item -c config_file -w working_dir (json-file items[{name,cmd},..,]-w working_directory")
其中
- title 应用的标题
 - selected 默认选中的表项(被选中的表项右边会有“*”符号)
 - config_file list配置文件(其中定义了list中有那些项,以及每项被点击后执行什么操作) 格式可参考背光设置APP的配置文件
 
{
    "items":[
    { "name" : "3分钟后屏幕休眠",
      "cmd" : "./init set_strategy 180"
    },
    { "name" : "10分钟后屏幕休眠",
      "cmd" : "./init set_strategy 600"
    },
    { "name" : "30分钟后屏幕休眠",
      "cmd" : "./init set_strategy 1800"
    },
    { "name" : "从不休眠",
      "cmd" : "./init set_strategy 0"
    } 
 ]
}- working_dir 指定执行config_file中指定的命令时的工作目录.
 

