User Tools

Site Tools


script_multitool

====== 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
script_multitool [2014/11/04 19:35]
lm13
script_multitool [2016/02/09 08:08] (current)
st1d
Line 2: Line 2:
   * Purpose : This script is a multifunctional tool to do or show a lot of stuff   * Purpose : This script is a multifunctional tool to do or show a lot of stuff
   * Author : [[https://​plus.google.com/​+LukasMorawietz|LM13]]   * Author : [[https://​plus.google.com/​+LukasMorawietz|LM13]]
-  * Current Version : 2.2 
   * Link : https://​plus.google.com/​115366157037831519359/​posts/​fQwfu5AUj5m   * Link : https://​plus.google.com/​115366157037831519359/​posts/​fQwfu5AUj5m
-  * Download ​avialable! (Check repository) +  * Download ​available! (Check repository)
- +
-====== Changelog ======  +
-  * Version 1.0 (20/​7/​2014):​ initial release in wiki +
-  * Version 1.1 (21/​7/​2014):​ replaced move item script with trianguloY'​s solution.  +
-  * Version 1.2 (25/​7/​2014):​ replaced change home page with move pages to extend functionality,​ sorted choices on script-side +
-  * Version 1.2.1 (26/​7/​2014):​ added Intent to Item details  +
-  * Version 1.3 (28/​7/​2014):​ fix: no touch data in swipe event, add resize, add save, add containers ID +
-  * Version 1.3.1 (31/​8/​2014):​ fix: Intent also for folders +
-  * Version 2.0 (14/​9/​2014):​ new UI, added comments, removed the easteregg, because it's not reachable through the new UI +
-  * Version 2.1 (24/​9/​2014):​ UI updated again, now selection is sorted into categorys, added import, export and autoformat scripts +
-  * Version 2.2 (4/​10/​2014):​ Abilility to  View and Reset all tags, not only the default one. +
-  * Version 2.3 (4/​11/​2014):​ Added Icon and Background image view, added progress to autoformat to show the user what gets done+
  
 ====== How to use the script ====== ====== How to use the script ======
-  * enable the script in any menu or event you want to run it+  * see App
  
 ====== Current functionality ====== ====== Current functionality ======
Line 26: Line 13:
   * Show Item related parameters   * Show Item related parameters
   * Show Icons and images for an item   * Show Icons and images for an item
-  * Show play store page of an shortcut 
   * Attach/​Detach all Items   * Attach/​Detach all Items
   * Resize all detached items   * Resize all detached items
Line 34: Line 20:
   * Import Script   * Import Script
   * Autoformat Script   * Autoformat Script
 +  * Search in Scripts
   * Reset Tags   * Reset Tags
   * Reset Tool © by trianguloY   * Reset Tool © by trianguloY
   * save all Layout changes   * save all Layout changes
 +  * Reset the recent apps list
  
  
 //please report all bugs in the g+ community// //please report all bugs in the g+ community//
  
-====== Script ====== +<​spoiler|Script (won't work without the apk)> 
-<sxh javascript;> +<sxh javascript;>//​Created by Lukas Morawietz in collaboration with TrianguloY 
-</sxh>+ 
 +//import java classes 
 +LL.bindClass("​android.app.AlertDialog"​);​ 
 +LL.bindClass("​android.app.ProgressDialog"​);​ 
 +LL.bindClass("​android.content.DialogInterface"​);​ 
 +LL.bindClass("​android.os.Environment"​);​ 
 +LL.bindClass("​android.R"​);​ 
 +LL.bindClass("​android.widget.ExpandableListView"​);​ 
 +LL.bindClass("​android.widget.ImageView"​);​ 
 +LL.bindClass("​android.widget.LinearLayout"​);​ 
 +LL.bindClass("​android.widget.ListView"​);​ 
 +LL.bindClass("​android.widget.NumberPicker"​);​ 
 +LL.bindClass("​android.widget.SimpleAdapter"​);​ 
 +LL.bindClass("​android.widget.SimpleExpandableListAdapter"​);​ 
 +LL.bindClass("​android.widget.ScrollView"​);​ 
 +LL.bindClass("​android.widget.TextView"​);​ 
 +LL.bindClass("​java.io.File"​);​ 
 +LL.bindClass("​java.io.BufferedReader"​);​ 
 +LL.bindClass("​java.io.FileReader"​);​ 
 +LL.bindClass("​java.io.FileWriter"​);​ 
 +LL.bindClass("​java.util.HashMap"​);​ 
 +LL.bindClass("​java.util.ArrayList"​);​ 
 + 
 + 
 +var hasItem=(LL.getEvent().getItem()!=null); 
 + 
 +//define Strings to display 
 +var title="What do you want to do?";​ 
 +var items=[] 
 +var info=["​Information",​[]];​ 
 +info[1].push("​Event"​);​ 
 +info[1].push("​Container"​) 
 +if(hasItem){ 
 +    info[1].push("​Item"​);​ 
 +    info[1].push("​Intent"​);​ 
 +    info[1].push("​Icon"​);​ 
 +
 +var itemUtils=["Item Utilities",​[]];​ 
 +itemUtils[1].push("​Attach/​Detach all Items"​);​ 
 +itemUtils[1].push("​Resize all detached Items"​);​ 
 +itemUtils[1].push("​Delete all Items"​);​ 
 +itemUtils[1].push("​Move Pages"​);​ 
 +var scriptUtils=["​Script ​Tools",​[]];​ 
 +scriptUtils[1].push("​Export Scripts (Backup)"​);​ 
 +scriptUtils[1].push("​Import Script"​);​ 
 +scriptUtils[1].push("​Autoformat Scripts"​);​ 
 +scriptUtils[1].push("​Search in Scripts"​);​ 
 +var other ["​Other",​[]];​ 
 +other[1].push("​Reset Tag"​);​ 
 +other[1].push("​Reset Tool"​);​ 
 +other[1].push("​Save changes"​);​ 
 +other[1].push("​Delete recent app history"​);​ 
 +items.push(info);​ 
 +items.push(itemUtils);​ 
 +items.push(scriptUtils);​ 
 +items.push(other);​ 
 + 
 + 
 +//normal run 
 +if(typeof resultCode==='​undefined'​) expandableList(items,​mainOnClick,​title);​ 
 +//user has selected a file to import 
 +else import_handleInput();​ 
 + 
 +//handle user selection 
 +function mainOnClick(groupPosition,​childPosition){ 
 + switch(groupPosition){ 
 + case 0://​Information 
 + switch(childPosition){ 
 + case 0://Event related 
 +     eventData();​ 
 + break;​ 
 + case 1://​container related 
 +     containerData() 
 + break;​ 
 + case 2://item related 
 +     itemData();​ 
 + break;​ 
 + case 3://​intent 
 +     intentData();​ 
 + break;​ 
 + case 4://icon 
 +     iconData();​ 
 + break;​ 
 +
 + break; 
 + case 1://item utilities 
 + switch(childPosition){ 
 + case 0://​Attach/​Detach all items 
 +     attachDetachAll();​ 
 + break;​ 
 + case 1://resize detached items 
 +     resizeAllDetached();​ 
 + break;​ 
 + case 2://delete items 
 +     deleteAll();​ 
 + break;​ 
 + case 3://move pages 
 +     movePages();​ 
 + break;​ 
 +
 + break; 
 + case 2://Script Tools 
 + switch(childPosition){ 
 + case 0://​export 
 +     exportScripts();​ 
 + break;​ 
 + case 1://​import 
 +     import_askForInput();​ 
 + break;​ 
 + case 2://​autoformat 
 +     autoFormat();​ 
 + break;​ 
 +     case 3://serach in scripts 
 +         searchScripts();​ 
 +         break; 
 +
 + break; 
 + case 3://other 
 + switch(childPosition){ 
 + case 0://reset Tag 
 +     resetTags();​ 
 + break;​ 
 + case 1://reset tool by trianguloY, ask him how it works :D 
 +     resetTool();​ 
 + break;​ 
 + case 2: 
 +     saveLayout();​ 
 + break;​ 
 + case 3: 
 +     resetRecents();​ 
 +     break; 
 +
 + break; 
 +
 +
 + 
 + 
 +function eventData(){ 
 + var e=LL.getEvent();​ 
 + try{ //test if event contains touch data 
 + e.getTouchScreenX();​ 
 + var ok=true; 
 +
 + catch(Exception){ 
 + var ok=false; 
 +    } 
 + text("​Source:​ "​+e.getSource()+"​\nDate:​ "​+e.getDate()+"​\nContainer:​ "​+e.getContainer()+"​\nItem:​ "​+e.getItem()+(ok?​("​\nTouch:​ "​+e.getTouchX()+","​+e.getTouchY()+"​\nTouch (Screen): "​+e.getTouchScreenX()+","​+e.getTouchScreenY()):""​),"​Event Information"​);​ 
 +
 + 
 +function containerData(){ 
 + var c=LL.getEvent().getContainer();​ 
 + var t=c.getType();//​Differentiate between Desktop and other containers 
 + 
 + //read Tags from launcher file 
 + var s=read(LL.getContext().getFilesDir().getPath()+"/​pages/"​+c.getId()+"/​conf"​);​ 
 + var data=JSON.parse(s);​ 
 + var tags="​Default:​ "​+c.getTag();​ 
 + for(property in data.tags) 
 + tags+="​\n"​+property+":​ "​+data.tags[property];​ 
 +    text("​Type:​ "​+t+"​\nName/​Label:​ "​+(t=="​Desktop"?​c.getName():​c.getOpener().getLabel())+"​\nID:​ "​+c.getId()+"​\nSize:​ "​+c.getWidth()+","​+c.getHeight()+"​\nBoundingbox:​ "​+c.getBoundingBox()+"​\nCell Size: "​+c.getCellWidth()+","​+c.getCellHeight()+"​\nCurrent Position: "​+c.getPositionX()+","​+c.getPositionY()+"​\nCurrent Scale: "​+c.getPositionScale()+"​\nTags:​ "​+tags+"​\nItems:​ "​+c.getItems(),"​Container Information"​);​ 
 +
 + 
 +function itemData(){ 
 + var i=LL.getEvent().getItem();​if(i==null)//​check if event contains item 
 + text("​no item found","​Error 5"); 
 + 
 + //read tags from launcher file 
 + var s=read(LL.getContext().getFilesDir().getPath()+"/​pages/"​+LL.getEvent().getContainer().getId()+"/​items"​);​ 
 + var all=JSON.parse(s).i;​ 
 + var x; 
 + var item; 
 + for(x=0;x<all.length;x++){ 
 + item=all[x];​ 
 + if(item.b==i.getId())break;​ 
 +
 + if(x==all.length){ 
 + text("​Can'​t find Tags","​Error 6"); 
 + return; 
 +
 + var tags="​Default:​ "​+i.getTag();​ 
 + for(property in item.an){ 
 + if(property=="​_"​)continue;​ 
 + tags+="​\n"​+property+":​ "​+item.an[property];​ 
 +
 +    text("​Label:​ "​+i.getLabel()+"​\nType:​ "​+i.getType()+"​\nID:​ "​+i.getId()+"​\nSize:​ "​+i.getWidth()+","​+i.getHeight()+"​\nPosition:​ "​+i.getPositionX()+","​+i.getPositionY()+"​\nScale:​ "​+i.getScaleX()+","​+i.getScaleY()+"​\nAngle:​ "​+i.getRotation()+"​\nCenter:​ "​+center(i)+((i.getType()=="​Shortcut"​||i.getType()=="​Folder"​)?"​\nIntent:"​+i.getIntent():""​)+"​\nTags:​ "​+tags,"​Item Information"​);​ 
 +
 + 
 +function intentData(){ 
 +    it=LL.getEvent().getItem();​ 
 + if(it==null)text("​No Intent found.","​Error 1"); 
 + else text("​Intent:​ "​+it.getIntent()+"​\nExtras:​ "​+it.getIntent().getExtras(),"​Intent Information"​);​ 
 +
 + 
 +function iconData(){ 
 + it=LL.getEvent().getItem();​ 
 + //create view structure 
 + var root=new LinearLayout(LL.getContext());​ 
 + root.setOrientation(LinearLayout.VERTICAL);​ 
 + 
 + //check for all kinds of images in this item and add them to the view if there are any 
 + addImageIfNotNull(root,​it.getBoxBackground("​n"​),"​Normal Box Background"​);​ 
 + addImageIfNotNull(root,​it.getBoxBackground("​s"​),"​Selected Box Background"​);​ 
 + addImageIfNotNull(root,​it.getBoxBackground("​f"​),"​Focused Box Background"​);​ 
 + if(it.getType()=="​Shortcut"​){ 
 + addImageIfNotNull(root,​image=it.getDefaultIcon(),"​Default Icon"​);​ 
 + addImageIfNotNull(root,​image=it.getCustomIcon(),"​Custom Icon"​);​ 
 +
 + if(root.getChildCount()>0){ //at least one image found 
 +     var scroll=new ScrollView(LL.getContext());​ 
 + scroll.addView(root);​ 
 + customDialog(scroll,"​Icon"​);​ 
 +
 + else Android.makeNewToast("​No Image Data available",​true).show();​ //no image found 
 +
 + 
 +function attachDetachAll(){ 
 + var items=LL.getEvent().getContainer().getItems();​ 
 + var attachDetach = function(toGrid){ 
 +     for(x=0;x<items.length;​x++) 
 +     { 
 +     var i=items.getAt(x);​ 
 +        i.getProperties().edit().setBoolean("​i.onGrid",​toGrid).commit();​ 
 +     } 
 +     Android.makeNewToast("​Done!",​true).show();​ 
 +
 + var attach = function(){attachDetach(true);​} 
 + var detach = function(){attachDetach(false);​} 
 + chooser([function(){},​attach,​detach],​["​Cancel","​Attach","​Detach"​],"​Do you want to attach or detach all items?","​MultiTool"​);​ 
 +
 + 
 +function resizeAllDetached(){ 
 +    var linearLayout = new LinearLayout(LL.getContext());​ 
 +    var c = LL.getEvent().getContainer();​ 
 +    linearLayout.setOrientation(LinearLayout.VERTICAL);​ 
 +    var widthText = new TextView(LL.getContext());​ 
 +    widthText.setText("​Width:​ "); 
 +    linearLayout.addView(widthText);​ 
 +    var widthPicker = new NumberPicker(LL.getContext());​ 
 +    widthPicker.setMinValue(1);​ 
 +    widthPicker.setMaxValue(9999);​ 
 +    widthPicker.setValue(c.getCellWidth());​ 
 +    linearLayout.addView(widthPicker);​ 
 +    var heightText = new TextView(LL.getContext());​ 
 +    heightText.setText("​Height:​ "); 
 +    linearLayout.addView(heightText);​ 
 +    var heightPicker = new NumberPicker(LL.getContext());​ 
 +    heightPicker.setMinValue(1);​ 
 +    heightPicker.setMaxValue(9999);​ 
 +    heightPicker.setValue(c.getCellHeight());​ 
 +    linearLayout.addView(heightPicker);​ 
 +    var onClick = function(){ 
 +        var s=[widthPicker.getValue(),​heightPicker.getValue()];​ 
 + var items=c.getItems();​ 
 + for(var a=0;​a<​items.length;​a++) 
 + items.getAt(a).setSize(s[0],​s[1]);​ 
 +    } 
 +    customConfirmDialog(linearLayout,"​To which size?",​onClick);​ 
 +
 + 
 +function deleteAll(){ 
 +    var f = function(){ 
 + var c=LL.getEvent().getContainer();​ 
 + var i=c.getItems();​ 
 + for(a=0;​a<​i.length;​a++) 
 +     c.removeItem(i.getAt(a));​ 
 +
 + chooser([function(){},​f],​["​No","​Yes"​],"​Are you sure?","​Delete all items"​);​ 
 +
 + 
 +function movePages(){ 
 + var cont=LL.getEvent().getContainer();​ 
 + var items=cont.getItems();​ 
 + var cWidth=cont.getWidth();​ 
 + var cHeight=cont.getHeight();​ 
 + var cellsFloatX=cWidth/cont.getCellWidth();​ 
 + var cellsFloatY=cHeight/​cont.getCellHeight();​ 
 + var cellsX=Math.round(cellsFloatX);​ 
 + var cellsY=Math.round(cellsFloatY);​ 
 + var f=function(){ 
 +        try{ 
 +            //page(s) selection 
 +            var s=prompt("​Which page do you want to move? (* for all) input has to be x,y (e.g. *,* for all pages)",""​).split(","​);​ 
 +            var move=JSON.parse("​[\""​+s[0]+"​\",​\""​+s[1]+"​\"​]"​);​ 
 +            var done=true;​ 
 +        } 
 +        catch(Exception){ 
 +            var done=false;​ 
 +        } 
 +        //check for valid input 
 +        if(!done||move==null||move[0]==null||(move[0]!="​*"&&​isNaN(parseInt(move[0])))||move[1]==null||(move[1]!=
script_multitool.1415129733.txt.gz · Last modified: 2014/11/04 19:35 by lm13