I add new sidebar to desktop. Now I see icon – white folder. This folder is empty.

I add new sidebar to desktop. Now I see icon – white folder. This folder is empty.

I set for this sidebar image folder (red Cross for example). And now is on desktop this sidebar, but with different icon.

]]>

In app drawer/item/long tap on item we have option: Toggle hidden.

In app drawer/item/long tap on item we have option: Toggle hidden.

My idea…

not in app drawer (in some container) / edit mode enable set directly visibility for items. Right now user must set visibiliti in text and icons… or set by bindings.

]]>

I have made another script listening directly to Location API.

I have made another script listening directly to Location API.

I use it in my car’s head unit for GPS speedometer.

Although GPS speed can be obtained with my other script that takes data from Torque, this one makes it unnecessary to use Torque, and may get data updates just a little bit sooner.

The variables set by script are:

gps_live – boolean – indicates that location API is ready (i.e. enabled and ready)

gps_speed – float – the speed in m/s (must be multiplied by 3.6 to get km/h)

To use, make text with binding like follows:

($gps_speed * 3.6).toFixed(0)

Also, text display can be bound to $gps_live

The script requires a permission which is missing in LLX:

android.permission.ACCESS_FINE_LOCATION

To make it work, either wait for developers to add a permission APK for that, or use this xposed module by Lukas Morawietz (if you are using xposed framework): https://play.google.com/store/apps/details?id=com.faendir.lightning_launcher.permission_manager

— cut —

LL.bindClass(“android.location.LocationManager”);

LL.bindClass(“android.location.LocationProvider”);

LL.bindClass(“android.location.LocationListener”);

LL.getVariables()

.edit()

.setBoolean(“gps_live”, true)

.setFloat(“gps_speed”, 0)

.commit();

var locationManager = LL.getContext().getSystemService(Context.LOCATION_SERVICE);

var locationListener = new LocationListener({

onLocationChanged: function(location) {

if(!location.hasSpeed()) return;

var speed = location.getSpeed();

LL.getVariables()

.edit()

.setFloat(“gps_speed”, speed)

.commit();

},

onProviderDisabled: function(provider) {

LL.getVariables()

.edit()

.setBoolean(“gps_live”, false)

.commit();

},

onProviderEnabled: function(provider) {

LL.getVariables()

.edit()

.setBoolean(“gps_live”, true)

.commit();

},

onStatusChanged: function(provider, status, extras) {

LL.getVariables()

.edit()

.setBoolean(“gps_live”, status == LocationProvider.AVAILABLE)

.commit();

}

});

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locationListener);

— cut

]]>

Lukas Morawietz​​

Lukas Morawietz​​

So I confirm the colors

Red when not applied and black when applied

On system theme here

V1.6 before Apply and After

]]>

Dmitry Avsioukov​

Dmitry Avsioukov​

]]>

Developers, please create new permission package with

Developers, please create new permission package with

android.permisssion.ACCESS_FINE_LOCATION

and maybe it is also worth adding

android.permisssion.ACCESS_COARSE_LOCATION

Thanks!

]]>

My LLx at the moment

My LLx at the moment

I love it

Just Pierre Hébert​ could you check why I can’t use scripts on resumed event of the widgets

]]>

I am a new user for this launcher and couldn’t find how to put “unread count” on icons I want such as messaging…

I am a new user for this launcher and couldn’t find how to put “unread count” on icons I want such as messaging Gmail e-mail and phone app. Help pls 😞

Someone asked for this its not exactly the same but its close enough enjoy.

Someone asked for this its not exactly the same but its close enough enjoy.

http://www27.zippyshare.com/v/QjNZvp3q/file.html

]]>

I would like to share my script for users of Torque https://play.google.com/store/apps/details?id=org.prowl.torque

I would like to share my script for users of Torque https://play.google.com/store/apps/details?id=org.prowl.torque

This script allows reading any PIDs from Torque service, for latter use in bindings.

Set it to be run on desktop load.

It will set the following variables:

tq_live – boolean – whether we are connected to Torque service

tq_ecu – boolean – whether Torque is connected to Engine ECU

tq_version – integer – the version of Torque

tq_xxx – float – the value of pid, where xxx is a name of pid as configured at the top of script, you may configure multiple PIDs; see below

— cut —

var refreshInterval = 200;

var pids = [

{pid: 0xff1001, name: “gps_speed”},

{pid: 0xff123A, name: “gps_locked”},

{pid: 0x0c, name: “rpm”},

{pid: 0x42, name: “voltage”}

];

LL.bindClass(“android.os.Parcel”);

LL.bindClass(“android.content.ServiceConnection”);

var binder = null;

var timer = null;

function callSvc(code, fp, fr, def) {

if (binder == null) return def;

var p = Parcel.obtain();

var r = Parcel.obtain();

try {

p.writeInterfaceToken(“org.prowl.torque.remote.ITorqueService”);

if (fp != null) fp(p);

binder.transact(code, p, r, 0);

return r.readExceptionCode() == 0 && (fr != null) ? fr(r) : def;

}

catch (err) {

return def;

}

finally {

r.recycle();

p.recycle();

}

}

// int getVersion()

function getVersion() { return callSvc(

1,

null,

function(r) { return r.readInt(); },

0

); }

// float getValueForPid(long pid, boolean triggersDataRefresh);

function getValueForPid(pid, refresh) { return callSvc(

2,

function(p) { p.writeLong(pid); p.writeByte(refresh ? 1 : 0); },

function(r) { return r.readFloat(); },

0

); }

// boolean isConnectedToECU();

function isConnectedToECU() { return callSvc(

15,

null,

function(r) { return r.readByte() != 0; },

false

); }

function reset() {

var v = LL.getVariables().edit();

v.setBoolean(“tq_live”, false);

v.setBoolean(“tq_ecu”, false);

v.setInteger(“tq_version”, 0);

for(var i = 0; i < pids.length; i++)

v.setFloat(“tq_” + pids[i].name, 0);

v.commit();

}

function refresh() {

if (binder == null) return;

var v = LL.getVariables().edit();

v.setBoolean(“tq_ecu”, isConnectedToECU());

for(var i = 0; i < pids.length; i++)

v.setFloat(“tq_” + pids[i].name, getValueForPid(pids[i].pid, true));

v.commit();

timer = setTimeout(refresh, refreshInterval);

}

var conn = new ServiceConnection({

onServiceConnected: function (n, b) {

binder = b;

var v = LL.getVariables().edit();

v.setBoolean(“tq_live”, true);

v.setInteger(“tq_version”, getVersion());

v.commit();

refresh();

},

onServiceDisconnected: function(n) {

binder = null;

reset();

}

});

reset();

var intent = new Intent();

intent.setClassName(“org.prowl.torque”, “org.prowl.torque.remote.TorqueService”);

var success = LL.getContext().bindService(intent, conn, 1);

— cut —

https://play.google.com/store/apps/details?id=org.prowl.torque
]]>