There's nothing much to it at the moment but I thought I'd share it in case it's some help to somebody.
I hope that one day it may become the basis of a tutorial but obviously there's quite a way to go.
So far, I've only tested it on a Tesco hudl tablet but I'm reasonably happy with it so far.
The spk with the minimal code I have at the moment is available at http://hudl.sgarman.net/public/spk/SJGexplorer_001.spk
In text form, it looks like this
//Simple file explorer by Steve Garman
var basePath = "/sdcard"
//Called when application is started.
function OnStart()
{
    //Create a layout with objects vertically centered.
    lay = app.CreateLayout( "linear", "Vertical,FillXY" );    
    //Create a text label and add it to layout.
    currPath = app.CreateText( basePath );
    lay.AddChild( currPath );
    //Get list of files in current path into an array
    filelist = app.ListFolder( currPath.GetText()).split(",");
    filelist.sort();
    //use array to populate detail list
    detail = app.CreateList( filelist );
    detail.SetOnTouch( detailTouch);
    lay.AddChild( detail );
   
    //Add layout to app.    
    app.AddLayout( lay );
    //make back key available for use
    app.EnableBackKey( false );
}
function populate_detail(){
  //called whenever current path changed
  filelist = app.ListFolder( currPath.GetText() ).split(",") ;
  filelist.sort();
  detail.SetList(filelist.join(","),",");
}
function detailTouch(name){
  //user has touched a name in detail list
  var fullPath = currPath.GetText() + "/" + name
  if( testFolder(fullPath) ){
    //it's a folder with files
    //show it
    currPath.SetText( fullPath );
    populate_detail();
  }
  else{
    deal_with_file( fullPath );
    
  }
}
function testFolder( fullPath ){
  //no proper test for folders
  //in this app, it's safe to treat an empty folder like a file
  var tst = app.ListFolder( fullPath );
  if( tst.length > 0 ) return true;
  else return false;
};
function deal_with_file( fullpath ){
  app.ShowPopup("No action defined for " + fullpath);
}
function OnBack(){
  //user pressed back key
  var tmp = currPath.GetText();
  if( tmp == basePath ) app.Exit();
  else {
    //not yet back at beginning
    //move up one level
    var tst = currPath.GetText().split("/");
    tmp = tst.pop();
    currPath.SetText( tst.join("/") );
    populate_detail();
  }
}
 
If you want to prove it's looking at the actual files, the following minor change to the deal_with_file function will attempt to display any .txt or .js file you select.
ReplyDeletefunction deal_with_file( fullpath ){
if( fullpath.indexOf(".js" ) >= 0 ||
fullpath.indexOf(".txt" ) >= 0 )
alert (app.ReadFile(fullpath));
else app.ShowPopup("No action defined for " + fullpath);
}