====== About the script ======
* Purpose : This script will fill any container with all of your apps, like an App Drawer
* Author : [[https://plus.google.com/+LukasMorawietz|LM13]]
* Current Version : 3.2
* Link: https://plus.google.com/115366157037831519359/posts/4F9TpMfz2fv
* Video: https://plus.google.com/+LukasMorawietz/posts/L8r6qKajirq
* Download available! (Check repository)
====== Changelog ======
* Version 1.0 (18/7/2014): initial release in wiki
* Version 1.1 (20/7/2014): added optional horizontal sorting
* Version 2.0 (23/7/2014): Removed autovalues, due to an unfixable bug, added item remove and add again
* Version 2.1 (28/8/2014): Sorting ignores Case
* Version 3.0 (21/3/2015): Doesn't rely on LLs drawer anymore, hiding items improved
* Version 3.1 (21/3/2015): Fix crash on pre-lollipop devices, added reload
* Version 3.2 (23/4/2015): Fix compatibility with latest Lightning Versions
====== How to use the script ======
* load the apk
====== Issues and Hints ======
* first load may take some time
* if you delete items in the normal way, it will cause an error
* Note: The setup script won't work outside of the APK
//please report all bugs in the g+ community!//
====== Scripts ======
var MY_PKG="net.pierrox.lightning_launcher.llscript.appdrawer";
var TAG = "appdrawer_lukas";
// install (or update) a script given its id in the package, and its clear name in the launcher data
function installScript(id,name){
// load the script (if any) among the existing ones
var script=LL.getScriptByName(name);
var script_text=LL.loadRawResource(MY_PKG,id);
if(script==null){
// script not found: install it
script=LL.createScript(name,script_text,0);
}else{
// the script already exists: update its text
script.setText(script_text);
}
return script;
}
var script=installScript("appdrawer","AppDrawer_main");
var menu= installScript("menu","AppDrawer_menu");
if(!confirm("Do you want to use this container as App Drawer?"))return;
var data={};
data.columns=prompt("How many columns do you want?","5");
if(data.columns == null) return;
data.rows=prompt("How many rows do you want? (0 for infinite)","0");
if(data.rows == null) return;
var c=LL.getEvent().getContainer();
c.setTag(TAG,JSON.stringify(data));
c.getProperties().edit().setEventHandler("resumed",EventHandler.RUN_SCRIPT,script.getId()).setEventHandler("bgLongTap",EventHandler.RUN_SCRIPT,menu.getId()).commit();
Android.makeNewToast("Enjoy your new Appdrawer!",true).show();
LL.bindClass("android.R");
LL.bindClass("java.util.ArrayList");
LL.bindClass("android.view.ViewTreeObserver");
LL.bindClass("android.widget.Button");
LL.bindClass("android.view.View");
LL.bindClass("android.os.Build");
var sourceItem = LL.getEvent().getItem();
var context = LL.getContext();
var pkg = context.getPackageName();
var rsrc = context.getResources();
var id = rsrc.getIdentifier("bubble_content", "id", pkg);
var menu =context.getWindow().getDecorView().findViewById(id);
var menuRoot = menu.getParent();
var version = Build.VERSION.SDK_INT;
var obs=menuRoot.getViewTreeObserver();
var l=new ViewTreeObserver.OnGlobalLayoutListener(){
onGlobalLayout:function(){
var list=menu;
var first=list.getChildAt(0);
list.removeAllViews();
var v = !(typeof invisible === 'undefined' || invisible);
add(v?"Hide Hidden":"Show Hidden",function(){
LL.runAction(EventHandler.LAUNCHER_MENU);
invisible = v;
LL.runScript("AppDrawer_main",v?"":"showHidden");
},first,list);
if(sourceItem!=null){
v = !JSON.parse(sourceItem.getTag("hide"));
add(v?"Hide":"Unhide",function(){
LL.runAction(EventHandler.LAUNCHER_MENU);
if(v)LL.getEvent().getContainer().setItemZIndex(sourceItem.getId(),0);
sourceItem.setVisibility(!v);
sourceItem.setTag("hide",v);
LL.runScript("AppDrawer_main","");
},first,list);
}
add("Reload",function(){
LL.runAction(EventHandler.LAUNCHER_MENU);
LL.runScript("AppDrawer_main","reload");
},first,list);
add("Lightning Menu",function(){
LL.runAction(EventHandler.LAUNCHER_MENU);
if(sourceItem==null) LL.runAction(EventHandler.LAUNCHER_MENU)
else LL.runAction(EventHandler.ITEM_MENU,sourceItem,null);
},first,list);
obs.removeOnGlobalLayoutListener(l);
return true;
}
};
obs.addOnGlobalLayoutListener(l);
LL.runAction(EventHandler.LAUNCHER_MENU);
function add(text,onClickFunction,first,list){
var t=new Button(LL.getContext());
if(version >= 16) t.setBackground(first.getBackground().mutate().getConstantState().newDrawable());
else t.setBackgroundDrawable(first.getBackground().mutate().newDrawable());
t.setTypeface(first.getTypeface());
if(version >= 14) t.setAllCaps(false);
t.setTextSize(0,first.getTextSize());
if(version >= 21) t.setFontFeatureSettings(first.getFontFeatureSettings());
t.setGravity(first.getGravity());
t.setText(text);
t.setOnClickListener(new View.OnClickListener(){
onClick:onClickFunction
});
list.addView(t);
}
var TAG = "appdrawer_lukas";
var e=LL.getEvent();
var c=e.getContainer();
var data=JSON.parse(c.getTag(TAG));
if(data == null)return;
var db=data.db || [];
var columns=data.columns;
var rows=data.rows;
var showHidden = (e.getData() == "showHidden");
sort();
var initialize = (db.length == 0 || e.getData() == "reload");
if(initialize){
db = [];
LL.bindClass("android.app.ProgressDialog");
var progress = new ProgressDialog(LL.getContext());
progress.setTitle("Initializing App Drawer")
progress.setMessage("Please wait...");
progress.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progress.show();
}
setTimeout(function(){
if(initialize){
var i=c.getItems();
for(var a = 0; a < i.length; a++) c.removeItem(i.getAt(a));
}
for(var a = 0; a < db.length; a++) db[a][2] = false;
var intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
var pm = LL.getContext().getPackageManager();
var apps = pm.queryIntentActivities(intent,0);
var x = 0;
var f = function(){
var app = apps.get(x);
var name = app.activityInfo.name;
var pkg = app.activityInfo.packageName;
for(var b = 0; b < db.length && db[b][1] != name; b++);
if(b == db.length) {
var i = new Intent(intent);
i.setClassName(pkg, name);
var item = c.addShortcut(app.loadLabel(pm),i,0,0);
item.setName(item.getLabel());
item.setTag("hide",false);
var bmp = pm.getActivityIcon(i).getBitmap();
var img = LL.createImage(bmp.getWidth(),bmp.getHeight());
img.draw().drawBitmap(bmp,0,0,null);
item.setDefaultIcon(img);
item.getProperties().edit().setEventHandler("i.longTap",EventHandler.RUN_SCRIPT,LL.getScriptByName("AppDrawer_menu").getId()).commit();
db[b] = [];
db[b][0] = item.getId();
db[b][1] = name;
}
db[b][2] = true;
x++;
if(xb.toLowerCase())return 1;
if(a.toLowerCase()