User Tools

Site Tools


sample_code:introspector

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
sample_code:introspector [2014/10/08 18:31]
stevegarman created
sample_code:introspector [2015/03/29 05:06] (current)
Line 1: Line 1:
 ====== Method finder ====== ====== Method finder ======
 This is a tool that I use at home to enable me to look at what methods are available in most of the controls I use. This is a tool that I use at home to enable me to look at what methods are available in most of the controls I use.
 +
 It is incomplete as it does not drill down far enough but it is much better than nothing. It is incomplete as it does not drill down far enough but it is much better than nothing.
 ===== Warnings ===== ===== Warnings =====
-Please be aware that using undocumented functions is not recommended by the AndroidScript developers and you do so at your own risk.\\+Please be aware that using undocumented functions is not recommended by the DroidScript developers and you do so at your own risk.\\
 Please also be aware that the **"Manually entered code"** option can be very dangerous. Please also be aware that the **"Manually entered code"** option can be very dangerous.
-===== Acknowledgement ===== +===== Acknowledgements ===== 
-Andreas Rozek would recognize much oif the code as the heart of it is stolen from his post at [[https://groups.google.com/forum/#!topic/androidscript/o_RCNR5ozAE]]+Andreas Rozek would recognize much of the code as the heart of it is stolen from his post at [[https://groups.google.com/forum/#!topic/androidscript/o_RCNR5ozAE]] 
 + 
 +Thanks also to Salvatore Fusto for finding a bug in the app.
 ===== The code ===== ===== The code =====
 <code javascript introspector.js> <code javascript introspector.js>
 // Introspection lite tool for home use by Steve Garman // Introspection lite tool for home use by Steve Garman
 // Main code stolen from AppInspector by Andreas Rozek  // Main code stolen from AppInspector by Andreas Rozek 
 + 
 //Global variables //Global variables
 var myobj = app; var myobj = app;
Line 18: Line 21:
 var lastMenu = "app"; var lastMenu = "app";
 var pasteable = "null"; var pasteable = "null";
-var vers = Math.floor((app.GetVersion() +var vers = Math.floor((app.GetVersion()+.0005) * 100);
-      +.0005) * 100);+
 var docfold = "/sdcard/sjgDocs/androidscript/"+vers; var docfold = "/sdcard/sjgDocs/androidscript/"+vers;
 var docfile = docfold + "/null.txt"; var docfile = docfold + "/null.txt";
 +var evalsfile = docfold + "/evals.txt" 
 + 
 //Called when application is started. //Called when application is started.
 function OnStart(){ function OnStart(){
Line 34: Line 37:
     var PageArea = app.CreateLayout('frame','fillxy');     var PageArea = app.CreateLayout('frame','fillxy');
     lay.AddChild(PageArea);     lay.AddChild(PageArea);
- +  
-    var control_list = "app,layout,Manually entered code,Button,CameraView,CheckBox" +    var control_list = "app,layout,Manually entered code,BluetoothList,BluetoothSerial,Button,CameraView,CheckBox" 
-      +",Crypt,Dialog,Email,Image,List,Locator,Notification,SeekBar" +      +",Crypt,Database,Dialog,Email,Image,List,Locator,Notification,NXT,NxtRemote,Odroid,SeekBar" 
-      +",Sensor,SMS,Spinner,Text,TextEdit,ToggleButton" +      +",Sensor,SMS,Spinner,Tabs,Text,TextEdit,ToggleButton"  
-      +",WebServer,WebView,YesNoDialog"+      +",WebView,WebServer,YesNoDialog"
 +      
     menuView = app.CreateList( control_list, -1,-1, 'fillxy');     menuView = app.CreateList( control_list, -1,-1, 'fillxy');
     menuView.SetOnTouch(menuView_OnTouch);     menuView.SetOnTouch(menuView_OnTouch);
     PageArea.AddChild(menuView);     PageArea.AddChild(menuView);
     menuView.SetVisibility('Hide');     menuView.SetVisibility('Hide');
 + 
     ListView = app.CreateList("", -1,-1, 'fillxy');     ListView = app.CreateList("", -1,-1, 'fillxy');
     prepareFunctionList();     prepareFunctionList();
 + 
     ListView.SetOnTouch(showAppFunction);     ListView.SetOnTouch(showAppFunction);
     PageArea.AddChild(ListView);     PageArea.AddChild(ListView);
 + 
   /**** prepare detail view ****/   /**** prepare detail view ****/
- +  
-    FunctionView = app.CreateTextEdit('');+    FunctionView = app.CreateTextEdit('',-1,-1); 
 +//FunctionView = app.CreateTextEdit('',-1,-1,"nospell");
     PageArea.AddChild(FunctionView);     PageArea.AddChild(FunctionView);
     FunctionView.SetVisibility('Hide');     FunctionView.SetVisibility('Hide');
Line 60: Line 65:
     showMenuView();     showMenuView();
 }//OnStart }//OnStart
 + 
 function add_top_bar (lyout, opts){ function add_top_bar (lyout, opts){
   //basic top bar layout   //basic top bar layout
   var lay_bar = app.CreateLayout( "Linear", "Horizontal,Left, FillX" );   var lay_bar = app.CreateLayout( "Linear", "Horizontal,Left, FillX" );
   lay_bar.SetBackGradient( "#444444", "#888888" );   lay_bar.SetBackGradient( "#444444", "#888888" );
 + 
   //add app name if required - stolen for object/function name in this app   //add app name if required - stolen for object/function name in this app
   main_header_txt = app.CreateText( lastMenu , -1, -1 );   main_header_txt = app.CreateText( lastMenu , -1, -1 );
Line 71: Line 76:
   main_header_txt.SetPadding( 0.01, 0, 0.01, 0 );   main_header_txt.SetPadding( 0.01, 0, 0.01, 0 );
   lay_bar.AddChild( main_header_txt );   lay_bar.AddChild( main_header_txt );
 + 
   var filterlabel = app.CreateText("Func filter:");   var filterlabel = app.CreateText("Func filter:");
   filterlabel.SetTextSize(18);   filterlabel.SetTextSize(18);
Line 82: Line 87:
   edtFilter.SetOnChange(edtFilterOnChange);   edtFilter.SetOnChange(edtFilterOnChange);
   lay_bar.AddChild(edtFilter);   lay_bar.AddChild(edtFilter);
 + 
   lyout.AddChild( lay_bar );   lyout.AddChild( lay_bar );
 }//add_top_bar }//add_top_bar
 + 
 function menuView_OnTouch(name){ function menuView_OnTouch(name){
   lastMenu = name;   lastMenu = name;
   switch(name) {   switch(name) {
     case "layout":     case "layout":
-        myobj = lay;+        myobj = app.CreateLayout( "linear";
         break;         break;
 +    case  "BluetoothList":
 +        myobj = app.CreateBluetoothList();        
 +        break;    
 +    case  "BluetoothSerial":
 +        myobj = app.CreateBluetoothSerial();        
 +        break;    
     case "Button":     case "Button":
         myobj = app.CreateButton("x");         myobj = app.CreateButton("x");
         break;         break;
-    case "Text": +    case "CameraView": 
-        myobj = main_header_txt; +        myobj = app.CreateCameraView0.8,0.);
-        break; +
-    case "Image": +
-        myobj = app.CreateImage"/Sys/Img/Hello.png" ); +
-        break; +
-    case "Notification": +
-        myobj = app.CreateNotification() ;+
         break;         break;
     case "CheckBox":     case "CheckBox":
Line 109: Line 114:
     case "Crypt":     case "Crypt":
         myobj = app.CreateCrypt();         myobj = app.CreateCrypt();
 +        break;
 +    case "Database":
 +        myobj = app.OpenDatabase("MyData");
         break;         break;
     case "Dialog":     case "Dialog":
         myobj = app.CreateDialog("");         myobj = app.CreateDialog("");
         break;         break;
-    case "ToggleButton": +    case "Email": 
-        myobj = app.CreateToggle( "x" );+      myobj = app.CreateEmail( "mymail@gmail.com", "MyPass" ); 
 +      break; 
 +    case "Image": 
 +        myobj = app.CreateImage( "/Sys/Img/Hello.png); 
 +        break; 
 +    case "List": 
 +        myobj = ListView; 
 +        break; 
 +    case "Locator": 
 +       myobj = app.CreateLocator( "GPS,Network" ); 
 +       break; 
 +    case "Notification": 
 +        myobj = app.CreateNotification() ;
         break;         break;
 +    case "NXT":
 +        myobj = app.CreateNxt();
 +        break;    
 +    case "NxtRemote":
 +        myobj  =  app.CreateNxtRemote();
 +        break;    
 +    case "Odroid":
 +        myobj  =  app.Odroid( "a", "b", "c" );
 +        break;    
     case "SeekBar":     case "SeekBar":
         myobj = app.CreateSeekBar( "x" );         myobj = app.CreateSeekBar( "x" );
         break;         break;
-    case "List": +    case "Sensor": 
-        myobj = ListView;+       myobj = app.CreateSensor( "Accelerometer" ); 
 +       break; 
 +    case "SMS": 
 +       myobj = app.CreateSMS(); 
 +       break; 
 +    case "Spinner": 
 +       myobj= app.CreateSpinner("1,2"); 
 +       break; 
 +    case "Tabs": 
 +        myobj = app.CreateTabs( "tab1,tab2"); 
 +        break; 
 +    case "Text": 
 +        myobj = main_header_txt;
         break;         break;
     case "TextEdit":     case "TextEdit":
         myobj = FunctionView;         myobj = FunctionView;
 +        break;
 +    case "ToggleButton":
 +        myobj = app.CreateToggle( "x" );
         break;         break;
     case "WebView":     case "WebView":
Line 131: Line 175:
         myobj = app.CreateWebServer( 8080, "Upload,ListDir" );         myobj = app.CreateWebServer( 8080, "Upload,ListDir" );
         break;         break;
-    case "CameraView": 
-        myobj = app.CreateCameraView( 0.8,0.8 ); 
-        break; 
-    case "Sensor": 
-       myobj = app.CreateSensor( "Accelerometer" ); 
-       break; 
-    case "Email": 
-      myobj = app.CreateEmail( "mymail@gmail.com", "MyPass" ); 
-      break; 
-    case "Locator": 
-       myobj = app.CreateLocator( "GPS,Network" ); 
-       break; 
-    case "Spinner": 
-       myobj= app.CreateSpinner("1,2"); 
-       break; 
-    case "SMS": 
-       myobj = app.CreateSMS(); 
-       break; 
     case "YesNoDialog":     case "YesNoDialog":
         myobj = app.CreateYesNoDialog("");         myobj = app.CreateYesNoDialog("");
Line 158: Line 184:
         myobj=app;         myobj=app;
         lastMenu = "app";         lastMenu = "app";
-    }   +    }
   prepareFunctionList();   prepareFunctionList();
   showOverview();   showOverview();
   main_header_txt.SetText( lastMenu );   main_header_txt.SetText( lastMenu );
 }//menuView_OnTouch }//menuView_OnTouch
 + 
   function prepareFunctionList(){   function prepareFunctionList(){
 /**** prepare list view ****/ /**** prepare list view ****/
 + 
     var objFunctionList;     var objFunctionList;
     objFunctionList = [];     objFunctionList = [];
Line 192: Line 218:
     main_header_txt.SetText( "Choose Control" );     main_header_txt.SetText( "Choose Control" );
   }//showMenuView   }//showMenuView
 + 
   function showAppFunction (Name) {   function showAppFunction (Name) {
     FunctionView.SetText(String(myobj[Name]));     FunctionView.SetText(String(myobj[Name]));
Line 200: Line 226:
     FunctionView.SetVisibility('show');     FunctionView.SetVisibility('show');
   }//showAppFunction   }//showAppFunction
 + 
   function showOverview () {   function showOverview () {
     ListView.SetVisibility('show');     ListView.SetVisibility('show');
Line 212: Line 238:
     }     }
   }//edtFilterOnChange   }//edtFilterOnChange
 + 
   function OnBack(){   function OnBack(){
     if (menuView.GetVisibility() == "Show") {     if (menuView.GetVisibility() == "Show") {
Line 221: Line 247:
     else showOverview();     else showOverview();
   }//OnBack   }//OnBack
 + 
   function pasteOnExit_OnTouch( result ){   function pasteOnExit_OnTouch( result ){
     if( result=="Yes" ){     if( result=="Yes" ){
Line 235: Line 261:
     var layDlg = app.CreateLayout( "linear", "vertical,fillxy,left" );     var layDlg = app.CreateLayout( "linear", "vertical,fillxy,left" );
     layDlg.SetPadding( 0.02, 0, 0.02, 0.02 );     layDlg.SetPadding( 0.02, 0, 0.02, 0.02 );
-    edtDlg = app.CreateTextEdit('app.CreateText( "Hello" )');+    edtDlg = app.CreateTextEdit('app.CreateText( "Hello" )',-1,-1,'NoSpell');
     edtDlg.SetCursorPos(edtDlg.GetText().length);     edtDlg.SetCursorPos(edtDlg.GetText().length);
     layDlg.AddChild(edtDlg);     layDlg.AddChild(edtDlg);
Line 254: Line 280:
     dlg.Dismiss();     dlg.Dismiss();
     myobj = eval(edtDlg.GetText());     myobj = eval(edtDlg.GetText());
-    prepareFunctionList(); +    if ((myobj != null) && (myobj.hasOwnProperty("GetType"))){
-    showOverview(); +
-    if ((myobj != null) && (myobj.hasOwnProperty("GetType")))+
       lastMenu = myobj.GetType();       lastMenu = myobj.GetType();
-    else+      app.WriteFile(evalsfile, edtDlg.GetText()+"\n","append"); 
 +    } 
 +    else{
       lastMenu = "Eval";       lastMenu = "Eval";
 +    }
     main_header_txt.SetText( lastMenu );     main_header_txt.SetText( lastMenu );
 +    prepareFunctionList();
 +    showOverview();
 }//dlg_ok }//dlg_ok
 function dlg_canc(){ function dlg_canc(){
Line 268: Line 297:
  
 </code> </code>
 +
 +I have placed an spk of this app at [[http://hudl.sgarman.net/public/spk/SJGinspect.spk]] which should create a project in the DroidScript IDE for you.
 +
 +And for the sake of completeness, there is an apk at [[http://droidscript.sgarman.net/apk/SJGinspect.apk]] which you could download and install if your device is set up to allow apks that don't come from Google Play.
sample_code/introspector.1412793067.txt.gz · Last modified: 2014/10/09 02:31 (external edit)