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.
Have anyone seen anything like that?
]]>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 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
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
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 —
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
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
]]>