I used this a fair bit, so I stole the main bit of the code and expanded the app a bit so that I can look at various control types.
For anyone who wants to play with it, there's an spk at http://hudl.sgarman.net/public/spk/SJGinspect.spk
The code is a bit ropey as it was intended only for home use. It looks like this:
// Introspection lite tool for home use by Steve Garman // Main code stolen from AppInspector by Andreas Rozek var myobj = app; var ListView; var lastMenu = "app"; //Called when application is started. function OnStart() { app.EnableBackKey( false ); //Create a layout with objects vertically centered. lay = app.CreateLayout( "linear", "Vertical,FillXY" ); add_top_bar( lay ); /**** prepare page area ****/ var PageArea = app.CreateLayout('frame','fillxy'); lay.AddChild(PageArea); control_list = "app,layout,Button,Text,Image"+ ",CheckBox,ToggleButton,SeekBar,List"+ ",TextEdit,WebView,CameraView,Sensor"; menuView = app.CreateList( control_list, -1,-1, 'fillxy'); menuView.SetOnTouch(menuView_OnTouch); PageArea.AddChild(menuView); menuView.SetVisibility('Hide'); ListView = app.CreateList("", -1,-1, 'fillxy'); prepareFunctionList(); ListView.SetOnTouch(showAppFunction); PageArea.AddChild(ListView); /**** prepare detail view ****/ FunctionView = app.CreateTextEdit(''); PageArea.AddChild(FunctionView); FunctionView.SetVisibility('Hide'); //Add layout to app. app.AddLayout( lay ); showMenuView(); } function add_top_bar (lyout, opts){ //basic top bar layout lay_bar = app.CreateLayout( "Linear", "Horizontal,Left, FillX" ); lay_bar.SetBackGradient( "#444444", "#888888", "#cccccc" ); //add app name if required - stolen for object/function name in this app app_name_txt = app.CreateText( lastMenu , -1, -1 ); app_name_txt.SetTextSize( 24 ); app_name_txt.SetPadding( 0.01, 0, 0.01, 0 ); lay_bar.AddChild( app_name_txt ); lyout.AddChild( lay_bar ); } function menuView_OnTouch(name){ lastMenu = name; switch(name) { case "layout": myobj = lay; break; case "Button": myobj = app.CreateButton("x"); break; case "Text": myobj = app_name_txt; break; case "Image": myobj = app.CreateImage( "/Sys/Img/Hello.png" ); break; case "CheckBox": myobj = app.CreateCheckBox( "x" ); break; case "ToggleButton": myobj = app.CreateToggle( "x" ); break; case "SeekBar": myobj = app.CreateSeekBar( "x" ); break; case "List": myobj = ListView; break; case "TextEdit": myobj = FunctionView; break; case "WebView": myobj = app.CreateWebView( 0.8,0.8 ); break; case "CameraView": myobj = app.CreateCameraView( 0.8,0.8 ); break; case "Sensor": myobj = app.CreateSensor( "Accelerometer" ); break default: myobj=app; lastMenu = "app"; } prepareFunctionList(); showOverview(); app_name_txt.SetText( lastMenu ); } function prepareFunctionList(){ /**** prepare list view ****/ var objFunctionList; objFunctionList = []; for (var Key in myobj) { if (myobj.hasOwnProperty(Key) && (typeof myobj[Key] === 'function')) { objFunctionList.push(Key); }; }; objFunctionList.sort(); ListView.SetList( objFunctionList.join(','), ",") } function showMenuView(){ ListView.SetVisibility('hide'); FunctionView.SetVisibility('hide'); menuView.SetVisibility('show'); app_name_txt.SetText( "Choose Control" ); } function showAppFunction (Name) { FunctionView.SetText(String(myobj[Name])); app_name_txt.SetText( lastMenu + "." + Name ); ListView.SetVisibility('hide'); menuView.SetVisibility('hide'); FunctionView.SetVisibility('show'); } function showOverview () { ListView.SetVisibility('show'); FunctionView.SetVisibility('hide'); menuView.SetVisibility('hide'); app_name_txt.SetText( lastMenu ); } function OnBack(){ if (menuView.GetVisibility() == "Show") app.Exit(); else if( ListView.GetVisibility() == "Show" ) showMenuView(); else showOverview(); }
I made a couple more amendments so I could output a text file for each control, listing its available functions.
ReplyDeleteI put copies of the text files at http://androidscript.sgarman.net/sjgDocs/androidscript/
I have also updated the spk to show the version I used to create the files.
ReplyDeleteI haven't changed the text of the blog post, though.
The full amended code can be seen at http://androidscript.sgarman.net/sjgDocs/androidscript/SJGinspect.js.txt
Delete