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);
}