// https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels var allBuilds = JSON.parse('{' + '"1":{"level":1,"codename":"(no code name)","version":"1.0"}, ' + '"2":{"level":2,"codename":"(no code name)","version":"1.1"} , ' + '"3":{"level":3,"codename":"Cupcake","version":"1.5"}, ' + '"4":{"level":4,"codename":"Donut","version":"1.6"}, ' + '"5":{"level":5,"codename":"Eclair","version":"2.0"}, ' + '"6":{"level":6,"codename":"Eclair","version":"2.0.1"}, ' + '"7":{"level":7,"codename":"Eclair","version":"2.1"}, ' + ' "8":{"level":8,"codename":"Froyo","version":"2.2.x"}, ' + ' "9":{"level":9,"codename":"Gingerbread","version":"2.3 - 2.3.2"}, ' + ' "10":{"level":10,"codename":"Gingerbread","version":"2.3.3 - 2.3.7"}, ' + ' "11":{"level":11,"codename":"Honeycomb","version":"3.0"}, ' + ' "12":{"level":12,"codename":"Honeycomb","version":"3.1"}, ' + ' "13":{"level":13,"codename":"Honeycomb","version":"3.2.x"}, ' + ' "14":{"level":14,"codename":"Ice Cream Sandwich","version":"4.0.1 - 4.0.2"}, ' + ' "15":{"level":15,"codename":"Ice Cream Sandwich","version":"4.0.3 - 4.0.4"}, ' + ' "16":{"level":16,"codename":"Jelly Bean","version":"4.1.x"}, ' + ' "17":{"level":17,"codename":"Jelly Bean","version":"4.2.x"}, ' + ' "18":{"level":18,"codename":"Jelly Bean","version":"4.3.x"}, ' + ' "19":{"level":19,"codename":"KitKat","version":"4.4 - 4.4.4"}, ' + ' "20":{"level":20,"codename":"K or L","version":"4 or 5"}, ' + ' "21":{"level":21,"codename":"Lollipop","version":"5.0"}, ' + ' "22":{"level":22,"codename":"Lollipop","version":"5.1"}, ' + ' "23":{"level":23,"codename":"MarshMallow","version":"6.0"}, ' + ' "24":{"level":24,"codename":"Nougat","version":"7.0"}, ' + ' "25":{"level":25,"codename":"Nougat","version":"7.1"}, ' + ' "26":{"level":26,"codename":"Oreo","version":"8.0"}, ' + ' "27":{"level":27,"codename":"Oreo","version":"8.1"}, ' + ' "28":{"level":28,"codename":"Pie","version":"9"}, ' + ' "29":{"level":29,"codename":"Q","version":"10"}, ' + ' "30":{"level":30,"codename":"R","version":"11"}, ' + ' "31":{"level":31,"codename":"S","version":"12"}, ' + ' "32":{"level":32,"codename":"S_V2","version":"12"} ' + ' }'); var osObj = allBuilds[app.GetOSVersion()] try { var osInfo = "Android " + osObj.version + " (" + osObj.codename + ") API level " + osObj.level } catch(err){var osInfo = app.GetOSVersion();} var lay, txt, scroller //Called when application is started. function OnStart() { /* if(! app.GetNotifyId()) { var notify = app.CreateNotification( ); notify.SetSmallImage( "Img/getDeviceSpecs.png" ); notify.SetLargeImage( "Img/getDeviceSpecs.png" ); notify.SetMessage( "",app.GetAppName(),"" ); notify.Notify( app.GetAppName() ); } */ //Create a layout with objects vertically centered. lay = app.CreateLayout("linear", "VCenter,FillXY"); // create viewr for specs scroller = app.CreateScroller(1, 0.8); var specs = getDeviceSpecs(); txt = app.CreateText(specs, 1, 0.8, "left,multiLine"); txt.SetPadding(0.02, 0.01, 0.02, 0.01); //txt.SetTextColor("#ff446666"); scroller.AddChild(txt); lay.AddChild(scroller); //Create a button and add it to layout. var btn = app.CreateButton("[fa-copy]", -1, -1, "fontAwesome"); btn.SetTextSize( 32 ) //btn.SetTextColor("#ffddffff"); //btn.SetStyle("#4285F4", "#2265d4", 2, "#999999", 0, 1, "#ff9000"); btn.SetOnTouch(btn_OnTouch); lay.AddChild(btn); //Add layout to app. app.AddLayout(lay); OnConfig() } function btn_OnTouch() { app.SetClipboardText(txt.GetText( ) ); app.ShowPopup("Copied to clipboard") } function getBuilderVersion() { var msg = "Apk Builder plugin not installed"; var path = app.GetPrivateFolder("Plugins") + "/apkbuilder/Version.txt" if(app.FileExists(path)) { msg = "Apk Builder version " + app.ReadFile( path ) } else if(app.IsAPK()) { msg = "APK built with " + app.GetDSVersion().toFixed(2); } return msg } function getDeviceSpecs() { var os = app.GetOSVersion(); var model = app.GetModel(); var tablet = app.IsTablet(); var fromapk = app.IsAPK(); var isChrome = app.IsChrome(); var isPrem = app.IsPremium() var isTV = app.IsTV(); var dsversion = app.GetDSVersion().toFixed(2); //Get screen dimensions. var sw = app.GetScreenWidth(); var sh = app.GetScreenHeight(); var dens = app.GetScreenDensity(); //Get display dimensions. var dw = app.GetDisplayWidth(); var dh = app.GetDisplayHeight(); //Get drive details var intfld = app.GetInternalFolder(); var extfld = app.GetExternalFolder(); var intspace = app.GetFreeSpace("internal"); var extspace = app.GetFreeSpace("external"); var mem = app.GetMemoryInfo().total.toLocaleString("en-US"); //specs are formatted as a comment so we can paste //them somewhere convenient try { os = osInfo; } catch(err) {} var s = "/*\n" + "os=" + os + "\n" + getBuilderVersion() + "\n" + "tablet=" + tablet + "\n" + "model=" + model + "\n" + "isChrome=" + isChrome + "\n" + "isTV=" + isTV +"\n" + "DroidScript=" + dsversion + "\n" + "Storage access=" + storageScoped() + "\n" + "screen width=" + sw + "\n" + "screen height=" + sh + "\n" + "screen density=" + dens + "\n" + "display width=" + dw + "\n" + "display height=" + dh + "\n" + "internal folder=" + intfld + "\n" + "external folder=" + extfld + "\n" + "int free space=" + intspace + "\n" + "ext free space=" + extspace + "\n" + "memory=" + mem +"\n" + "premium=" + isPrem +"\n" + "country code=" + app.GetCountryCode() + "\n" + "country=" + app.GetCountry() + "\n" + "language code=" + app.GetLanguageCode() + "\n" + "language=" + app.GetLanguage() + "\n" + "wifi=" + app.GetIPAddress() + "\n" + "userAgent='" + navigator.userAgent + "'\n" + "*/"; return(s); } function storageScoped() { return app.IsScoped()?"Scoped":"Traditional" } function OnConfig() { //called when screen rotates //also called at startup to fix Chromebook display size anomaly var fixwid=lay.GetAbsWidth()/app.GetDisplayWidth() var fixhigh=lay.GetAbsHeight()/app.GetDisplayHeight() var wid=1, high=0.8 if(fixwid<1) wid *= fixwid // chromebook not using full width if(fixhigh<1) high *= fixhigh // or height scroller.SetSize( wid,high ) txt.SetSize( wid, high ) }