User Tools

Site Tools


sample_code:introspector

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
sample_code:introspector [2014/10/13 16:02]
stevegarman
sample_code:introspector [2015/03/29 05:06] (current)
Line 12: Line 12:
 ===== 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; 
-var ListView, menuView, FunctionView +var ListView, menuView, FunctionView 
-var main_header_txt, edtFilter, dlg, edtDlg; +var main_header_txt, edtFilter, dlg, edtDlg; 
-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(){ 
-    app.EnableBackKey( false ); +    app.EnableBackKey( false ); 
-     +     
-    //Create a layout with objects vertically centered+    //Create a layout with objects vertically centered
-    var lay = app.CreateLayout( "linear", "Vertical,FillXY" );   +    var lay = app.CreateLayout( "linear", "Vertical,FillXY" );   
-    add_top_bar( lay ); +    add_top_bar( lay ); 
-  +  
-/**** prepare page area ****/ +/**** prepare page area ****/ 
-    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.SetOnTouch(menuView_OnTouch); +    menuView = app.CreateList( control_list, -1,-1, 'fillxy'); 
-    PageArea.AddChild(menuView); +    menuView.SetOnTouch(menuView_OnTouch); 
-    menuView.SetVisibility('Hide'); +    PageArea.AddChild(menuView); 
- +    menuView.SetVisibility('Hide'); 
-    ListView = app.CreateList("", -1,-1, 'fillxy'); +  
-    prepareFunctionList(); +    ListView = app.CreateList("", -1,-1, 'fillxy'); 
- +    prepareFunctionList(); 
-    ListView.SetOnTouch(showAppFunction); +  
-    PageArea.AddChild(ListView); +    ListView.SetOnTouch(showAppFunction); 
- +    PageArea.AddChild(ListView); 
-  /**** prepare detail view ****/ +  
- +  /**** prepare detail view ****/ 
-    FunctionView = app.CreateTextEdit(''); +  
-    PageArea.AddChild(FunctionView); +    FunctionView = app.CreateTextEdit('',-1,-1); 
-    FunctionView.SetVisibility('Hide'); +//FunctionView = app.CreateTextEdit('',-1,-1,"nospell"); 
-     +    PageArea.AddChild(FunctionView); 
-    //Add layout to app    +    FunctionView.SetVisibility('Hide'); 
-    app.AddLayout( lay ); +     
-    showMenuView();+    //Add layout to app    
 +    app.AddLayout( lay ); 
 +    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, -); +  main_header_txt = app.CreateText( lastMenu , -1, -); 
-  main_header_txt.SetTextSize( 24 ); +  main_header_txt.SetTextSize( 24 ); 
-  main_header_txt.SetPadding( 0.01, 0, 0.01, ); +  main_header_txt.SetPadding( 0.01, 0, 0.01, ); 
-  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); 
-  filterlabel.SetTextColor("#ff222222"); +  filterlabel.SetTextColor("#ff222222"); 
-  lay_bar.AddChild( filterlabel ); +  lay_bar.AddChild( filterlabel ); 
-  edtFilter = app.CreateTextEdit("",0.3); +  edtFilter = app.CreateTextEdit("",0.3); 
-  edtFilter.SetBackColor("#ff222222"); +  edtFilter.SetBackColor("#ff222222"); 
-  edtFilter.SetTextSize(18); +  edtFilter.SetTextSize(18); 
-  edtFilter.SetPadding( 0.01, 0, 0, 0.001 ); +  edtFilter.SetPadding( 0.01, 0, 0, 0.001 ); 
-  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 = app.CreateLayout( "linear" ) ; +        myobj = app.CreateLayout( "linear" ) ; 
-        break; +        break; 
-    case "Button": +    case  "BluetoothList": 
-        myobj = app.CreateButton("x"); +        myobj = app.CreateBluetoothList();         
-        break; +        break;     
-    case "Text": +    case  "BluetoothSerial": 
-        myobj main_header_txt+        myobj app.CreateBluetoothSerial()        
-        break; +        break;     
-    case "Image": +    case "Button": 
-        myobj = app.CreateImage( "/Sys/Img/Hello.png" ); +        myobj = app.CreateButton("x"); 
-        break; +        break; 
-    case "Notification": +    case "CameraView": 
-        myobj = app.CreateNotification() ; +        myobj = app.CreateCameraView0.8,0.8 ); 
-        break; +        break; 
-    case "CheckBox": +    case "CheckBox": 
-        myobj = app.CreateCheckBox( "x" ); +        myobj = app.CreateCheckBox( "x" ); 
-        break; +        break; 
-    case "Crypt": +    case "Crypt": 
-        myobj = app.CreateCrypt(); +        myobj = app.CreateCrypt(); 
-        break; +        break; 
-    case "Dialog": +    case "Database": 
-        myobj = app.CreateDialog(""); +        myobj = app.OpenDatabase("MyData"); 
-        break; +        break; 
-    case "ToggleButton": +    case "Dialog": 
-        myobj = app.CreateToggle( "x" ); +        myobj = app.CreateDialog(""); 
-        break; +        break; 
-    case "SeekBar": +    case "Email": 
-        myobj = app.CreateSeekBar( "x" ); +      myobj = app.CreateEmail( "mymail@gmail.com", "MyPass" ); 
-        break; +      break; 
-    case "List": +    case "Image": 
-        myobj = ListView; +        myobj = app.CreateImage( "/Sys/Img/Hello.png" ); 
-        break; +        break; 
-    case "TextEdit": +    case "List": 
-        myobj FunctionView+        myobj = ListView; 
-        break; +        break; 
-    case "WebView": +    case "Locator": 
-        myobj = app.CreateWebView0.8,0.); +       myobj app.CreateLocator( "GPS,Network" )
-        break; +       break; 
-    case "WebServer": +    case "Notification": 
-        myobj = app.CreateWebServer8080, "Upload,ListDir" ); +        myobj = app.CreateNotification() ; 
-        break; +        break; 
-    case "CameraView": +    case "NXT": 
-        myobj = app.CreateCameraView0.8,0.8 ); +        myobj = app.CreateNxt(); 
-        break; +        break;     
-    case "Sensor": +    case "NxtRemote": 
-       myobj = app.CreateSensor( "Accelerometer" ); +        myobj  =  app.CreateNxtRemote(); 
-       break; +        break;     
-    case "Email": +    case "Odroid": 
-      myobj = app.CreateEmail( "mymail@gmail.com", "MyPass" ); +        myobj   app.Odroid"a", "b""c" ); 
-      break; +        break;     
-    case "Locator": +    case "SeekBar": 
-       myobj = app.CreateLocator( "GPS,Network" ); +        myobj = app.CreateSeekBar"x" ); 
-       break; +        break; 
-    case "Spinner": +    case "Sensor": 
-       myobj= app.CreateSpinner("1,2"); +       myobj = app.CreateSensor( "Accelerometer" ); 
-       break; +       break; 
-    case "SMS": +    case "SMS": 
-       myobj = app.CreateSMS(); +       myobj = app.CreateSMS(); 
-       break; +       break; 
-    case "YesNoDialog": +    case "Spinner": 
-        myobj = app.CreateYesNoDialog(""); +       myobj= app.CreateSpinner("1,2"); 
-        break; +       break; 
-    case("Manually entered code"): +    case "Tabs": 
-        showEval(); +        myobj = app.CreateTabs( "tab1,tab2"); 
-        return; +        break; 
-    default: +    case "Text": 
-        myobj=app; +        myobj = main_header_txt; 
-        lastMenu = "app"; +        break; 
-       +    case "TextEdit": 
-  prepareFunctionList(); +        myobj = FunctionView; 
-  showOverview(); +        break; 
-  main_header_txt.SetText( lastMenu );+    case "ToggleButton": 
 +        myobj = app.CreateToggle( "x" ); 
 +        break; 
 +    case "WebView": 
 +        myobj = app.CreateWebView0.8,0.8 ); 
 +        break; 
 +    case "WebServer": 
 +        myobj = app.CreateWebServer( 8080, "Upload,ListDir" ); 
 +        break; 
 +    case "YesNoDialog": 
 +        myobj = app.CreateYesNoDialog(""); 
 +        break; 
 +    case("Manually entered code"): 
 +        showEval(); 
 +        return; 
 +    default: 
 +        myobj=app; 
 +        lastMenu = "app"; 
 +    
 +  prepareFunctionList(); 
 +  showOverview(); 
 +  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 = []; 
-    var filter = edtFilter.GetText().trim().toLowerCase() +    var filter = edtFilter.GetText().trim().toLowerCase() 
-    for (var Key in myobj) { +    for (var Key in myobj) { 
-      var keyword= Key.toLowerCase() +      var keyword= Key.toLowerCase() 
-      if ((filter == "") || (keyword.indexOf(filter) > -1)){ +      if ((filter == "") || (keyword.indexOf(filter) > -1)){ 
-        if (myobj.hasOwnProperty(Key) && (typeof myobj[Key] === 'function')) { +        if (myobj.hasOwnProperty(Key) && (typeof myobj[Key] === 'function')) { 
-          objFunctionList.push(Key); +          objFunctionList.push(Key); 
-        }; +        }; 
-      +      
-    }; +    }; 
-    objFunctionList.sort(); +    objFunctionList.sort(); 
-    ListView.SetList( objFunctionList.join(','), ","+    ListView.SetList( objFunctionList.join(','), ","
-    if(filter != "" ) filter = "Filtered [" + filter + "]\n"; +    if(filter != ""filter = "Filtered [" + filter + "]\n"; 
-    pasteable filter lastMenu + "."; +    pasteable filter lastMenu + "."; 
-    var copyDelim = "\n" + lastMenu + "."; +    var copyDelim = "\n"lastMenu + "."; 
-    pasteable += objFunctionList.join( copyDelim +    pasteable += objFunctionList.join( copyDelim 
-    docfile docfold + "/" + lastMenu + ".txt"; +    docfile docfold + "/"lastMenu + ".txt"; 
-  }//prepareFunctionList +  }//prepareFunctionList 
-  function showMenuView(){ +  function showMenuView(){ 
-    ListView.SetVisibility('hide'); +    ListView.SetVisibility('hide'); 
-    FunctionView.SetVisibility('hide'); +    FunctionView.SetVisibility('hide'); 
-    menuView.SetVisibility('show'); +    menuView.SetVisibility('show'); 
-    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])); 
-    main_header_txt.SetText( lastMenu + "." + Name ); +    main_header_txt.SetText( lastMenu + "."Name ); 
-    ListView.SetVisibility('hide'); +    ListView.SetVisibility('hide'); 
-    menuView.SetVisibility('hide'); +    menuView.SetVisibility('hide'); 
-    FunctionView.SetVisibility('show'); +    FunctionView.SetVisibility('show'); 
-  }//showAppFunction +  }//showAppFunction 
- +  
-  function showOverview () { +  function showOverview () { 
-    ListView.SetVisibility('show'); +    ListView.SetVisibility('show'); 
-    FunctionView.SetVisibility('hide'); +    FunctionView.SetVisibility('hide'); 
-    menuView.SetVisibility('hide'); +    menuView.SetVisibility('hide'); 
-    main_header_txt.SetText( lastMenu ); +    main_header_txt.SetText( lastMenu ); 
-  }//showOverview +  }//showOverview 
-  function edtFilterOnChange(){ +  function edtFilterOnChange(){ 
-    if( ListView.GetVisibility() == "Show" ){ +    if( ListView.GetVisibility() == "Show" ){ 
-      prepareFunctionList();  +      prepareFunctionList();  
-    +    
-  }//edtFilterOnChange +  }//edtFilterOnChange 
- +  
-  function OnBack(){ +  function OnBack(){ 
-    if (menuView.GetVisibility() == "Show") { +    if (menuView.GetVisibility() == "Show") { 
-      var pasteOnExit = app.CreateYesNoDialog( "Copy to clipboard and create text file?" ); +      var pasteOnExit = app.CreateYesNoDialog( "Copy to clipboard and create text file?" ); 
-      pasteOnExit.SetOnTouch( pasteOnExit_OnTouch ); +      pasteOnExit.SetOnTouch( pasteOnExit_OnTouch ); 
-    +    
-    else if( ListView.GetVisibility() == "Show" ) showMenuView(); +    else if( ListView.GetVisibility() == "Show" ) showMenuView(); 
-    else showOverview(); +    else showOverview(); 
-  }//OnBack +  }//OnBack 
- +  
-  function pasteOnExit_OnTouchresult ){ +  function pasteOnExit_OnTouchresult ){ 
-    if( result=="Yes" ){ +    if( result=="Yes" ){ 
-      app.SetClipboardText( pasteable ); +      app.SetClipboardText( pasteable ); 
-      if( ! app.FolderExists( docfold ) ) +      if( ! app.FolderExists( docfold ) ) 
-        app.MakeFolder docfold ); +        app.MakeFolder docfold ); 
-      app.WriteFile( docfile, pasteable ); +      app.WriteFile( docfile, pasteable ); 
-    +    
-    app.Exit();  +    app.Exit();  
-  }//pasteOnExit +  }//pasteOnExit 
-function showEval(){ +function showEval(){ 
-    dlg = app.CreateDialog("eval use with care"); +    dlg = app.CreateDialog("eval use with care"); 
-    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); 
-    dlg.AddLayout( layDlg ); +    dlg.AddLayout( layDlg ); 
-    var horiz = app.CreateLayout("linear", "horizontal,fillxy"); +    var horiz = app.CreateLayout("linear", "horizontal,fillxy"); 
-    horiz.SetPadding( 0.02, 0.02, 0.02, ); +    horiz.SetPadding( 0.02, 0.02, 0.02, ); 
-    var btn = app.CreateButton("Ok", 0.2); +    var btn = app.CreateButton("Ok", 0.2); 
-    btn.SetOnTouch(dlg_ok); +    btn.SetOnTouch(dlg_ok); 
-    horiz.AddChild(btn); +    horiz.AddChild(btn); 
-    btn = app.CreateButton("Cancel",0.2); +    btn = app.CreateButton("Cancel",0.2); 
-    btn.SetOnTouch(dlg_canc); +    btn.SetOnTouch(dlg_canc); 
-    horiz.AddChild(btn); +    horiz.AddChild(btn); 
-    layDlg.AddChild(horiz); +    layDlg.AddChild(horiz); 
-    dlg.Show();+    dlg.Show();
 }//showEval }//showEval
-function dlg_ok(){ +function dlg_ok(){ 
-    app.HideKeyboard(); +    app.HideKeyboard(); 
-    dlg.Dismiss(); +    dlg.Dismiss(); 
-    myobj = eval(edtDlg.GetText()); +    myobj = eval(edtDlg.GetText()); 
-    prepareFunctionList(); +    if ((myobj != null) && (myobj.hasOwnProperty("GetType"))){ 
-    showOverview(); +      lastMenu = myobj.GetType(); 
-    if ((myobj != null) && (myobj.hasOwnProperty("GetType"))) +      app.WriteFile(evalsfile, edtDlg.GetText()+"\n","append"); 
-      lastMenu = myobj.GetType(); +    } 
-    else +    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(){ 
-    app.HideKeyboard(); +    app.HideKeyboard(); 
-    dlg.Dismiss();+    dlg.Dismiss();
 }//dlg_canc }//dlg_canc
  
Line 274: Line 300:
 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. 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://androidscript.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.+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.1413216122.txt.gz · Last modified: 2014/10/14 00:02 (external edit)