now browsing by tag

 
 

Hello

Hello,

On my emulator (Genymotion with KK 4.4.4) I made the following setup:

– Audio Glow LWP for system wallpaper

– Fully opaque image for desktop wallpaper, and set its color to 0x01000000

Picture shows how it looks like, and I’m totally satisfied with it.

But unfortunately, on my real device (KK 4.4.4), Audio Glow isn’t visible unless I remove desktop’s wallpaper.

I do all the same, but it looks like on my real device system and desktop wallpapers won’t combine, while in emulator, it works perfectly fine.

Any suggestions please?

]]>

Just curious if there exists any widget pack for use with LLX, that can have an external data source, i.e.

Just curious if there exists any widget pack for use with LLX, that can have an external data source, i.e. I would like to place some gauges bound to LLX variables I set from scripts. I mean like circular gauge as in speedometer, linear bars, and so on.

Have anyone seen anything like that?

]]>

The “lock screen desktop” feature seems lack one important thing on my mind.

The “lock screen desktop” feature seems lack one important thing on my mind.

When locked, I still have an access to the status bar.

Even if I set to hide it, I can swipe from top of screen and pull it.

This makes it impossible to make a secure lock screen, which can be unlocked only by interaction with controls on the screen – one can always bypass by pulling status bar and there’s multiple possibilities afterwards.

Maybe I missing something?

]]>

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

]]>

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!

]]>

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
]]>

Hello

Hello,

I have an advanced question about scripting.

Is it possible at all to communicate with a 3rd party remote service from a script? You know, Context.bindService() and all those things. Provided I have that service’s AIDL file.

I understand that AIDL is for generation of stub and proxy for “real” Java code. But maybe it can be done from JavaScript using bare Binder/Parcel classes?

I’m not as experienced developer to figure it out myself, sadly 🙁

What’s on my mind – is to communicate to famous Torque application, which provides API for plugins:

https://torque-bhp.com/forums/?wpforumaction=viewtopic&t=438.0

https://torque-bhp.com/ITorqueService.aidl

What I would like to call on this service is:

float getValueForPid(long pid, boolean triggersDataRefresh);

Thanks in advance for any clue 🙂

https://torque-bhp.com/ITorqueService.aidl
]]>

Hi, not sure is it a bug or feature.

Hi, not sure is it a bug or feature.

The setup:

A side panel is set for auto close when app from it is launched.

In that side panel, another internal panel is located.

Apps are located both in side panel itself and in that internal panel.

The effect:

The side panel closes on app launch for apps lying directly in it, but does not close for apps from internal panel.

Expectation:

As simple panels are containers without their own windows, I’d expect that items in panel close parent window if it set to be closed.

v12.9b3

]]>