[CLOSED][APP][XPOSED][6.0+] Use Xposed without developing a module - Xposed Framework Modules

{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
XPrivacyLua custom hook definitions
By using XPrivacyLua you can define Xposed hooks and apply them to any app at run time (so, rebooting your device is not necessary). You can write hook code on your device in Lua, which is quite easy to learn.
See the documentation about how to define hooks.
Although XPrivacyLua has 'privacy' in its name, new hooks don't need to be privacy related at all. Disabling the built in privacy related hooks is a matter of selecting another collection of hooks.
This XDA thread is meant to discuss defining hooks, with the restriction that hook definitions must serve a legally allowed purpose. This XDA thread is not meant to make you a developer, so at least some development experience is expected, which means that you'll need to be able to figure out where to hook yourself and that you'll need to be able to write Lua scripts yourself.
XDA:DevDB Information
XPrivacyLua hook definitions, Xposed for all devices (see above for details)
Contributors
M66B
Xposed Package Name:
Version Information
Status: Beta
Created 2018-01-28
Last Updated 2018-04-01

Could there be a generic "always return true" lua script?
And when building a definition, what does it mean to be in a group and collection? Do I just put anything there or do I have to call them something particular?
Well, I'm trying but I'm lost. Just trying to setAnalyticsCollectionEnabled
https://firebase.google.com/support/guides/disable-analytics
Code:
public void setAnalyticsCollectionEnabled (boolean enabled) = false
supposedly disables Firebase Analytics (which apparently 67% of the top 200 apps use).
My definition looks like
Collection: privacy
Group: firebase
Name: firebase.analytics
author: whatever
class: com.google.firebase.analytics
method:setAnalyticsCollectionEnabled
parameter type: void
return type: boolean
min/max sdk: 1/999
lua script: @generic_false_value I suppose I can use this?
Even if this looks valid, it feels like maybe this wouldn't fire unless certain other things happen first? Looking at your hooks.json for google analytics it looks like you had to maybe set a chain of events to occur to get to the point of controlling the method you intend to make changes?

jawz101 said:
Could there be a generic "always return true" lua script?
And when building a definition, what does it mean to be in a group and collection? Do I just put anything there or do I have to call them something particular?
Well, I'm trying but I'm lost. Just trying to setAnalyticsCollectionEnabled
https://firebase.google.com/support/guides/disable-analytics
Code:
public void setAnalyticsCollectionEnabled (boolean enabled) = false
supposedly disables Firebase Analytics (which apparently 67% of the top 200 apps use).
My definition looks like
Collection: privacy
Group: firebase
Name: firebase.analytics
author: whatever
class: com.google.firebase.analytics
method:setAnalyticsCollectionEnabled
parameter type: void
return type: boolean
min/max sdk: 1/999
lua script: @generic_false_value I suppose I can use this?
Even if this looks valid, it feels like maybe this wouldn't fire unless certain other things happen first? Looking at your hooks.json for google analytics it looks like you had to maybe set a chain of events to occur to get to the point of controlling the method you intend to make changes?
Click to expand...
Click to collapse
The built-in scripts are not meant for general use because they might change over time breaking stuff that depends on them. Therefore imported definitions are not linked against the built-in scripts. If needed, you can simply copy and paste the Lua script from another (built in) definition. Copying guarantees your definition will keep working, even when the built-in scripts are changed or even removed.
Calling setAnalyticsCollectionEnabled requires access to an instance of FirebaseAnalytics, which apps needs to get by calling getInstance. So, hook getInstance to call setAnalyticsCollectionEnabled(false) and hook setAnalyticsCollectionEnabled to prevent an app from turning analytics on again.
Restricting Google Analytics (available in the next release of XPrivacyLua) works similar:
https://github.com/M66B/XPrivacyLua/blob/master/app/src/main/assets/ga_getinstance.lua
https://github.com/M66B/XPrivacyLua/blob/master/app/src/main/assets/ga_setdryrun.lua
You can also wait until I have added this ...

But firebase isn't necessarily the same thing, right?

jawz101 said:
But firebase isn't necessarily the same thing, right?
Click to expand...
Click to collapse
No, Google Analytics and Firebase Analytics are not the same and need different definitions.

Restricting Firebase Analytics works properly with these hook definitions:
https://github.com/M66B/XPrivacyLua/commit/1708fc6e4a15cef85cb973f5c08286d90d3ca806

jawz101 said:
And when building a definition, what does it mean to be in a group and collection? Do I just put anything there or do I have to call them something particular?
Click to expand...
Click to collapse
With the latest version of XPrivacyLua / companion app you can change the collection of hooks to use in XPrivacyLua. The default is to use the collection 'Privacy'. You can define your own collection by definition hooks with a new collection name. There can only be one collection active at one time, so if you want to add your own definitions to the built-in privacy collection you'll have to use the collection 'Privacy'. Basically collections exists to allow using XPrivacyLua for things other than privacy.
Groups are listed in the XPrivacyLua app and make it easy to apply a group of hooks to one or more apps. XPrivacyLua cannot and will not handle applying individual hooks to keep things simple, but I might add this to the pro companion app in the near feature. For now you can rename a group of an existing hook definition to be able to apply it separately in XPrivacyLua.
Edit: this has been clarified in the documentation too now: https://github.com/M66B/XPrivacyLua/blob/master/DEFINE.md

I still have some questions on when,where,how etc.... but I will wait until I can dedicate more time to playing with this.
I do have a feature request.
could there be a sort of drop down box that queries all valid entries for each item when creating a custom definition.
for example...
when creating a custom definition, when taping on the line for group, you would just type a new group (as it is now) but if there was a drop down arrow at the end of the line that could give a list of currently used groups and then the user could just click the listed group instead of typing and it would auto-fill that field.
maybe even more useful would be for the other items like Name,Class, Method etc...
where it could show possible entries. That would help a lot.

... I turned on notifications for your new Firebase rules. I would think a bunch of apps I have use Firebase Analytics. @M66B Have you seen any apps trigger it yet?
Even if the app imported Firebase Analytics library and gathers Firebase Analytics but never uses the setAnalyticsCollectionEnabled() method in its own code would it mean this hook will never trigger?
With the latest version of XPrivacyLua / companion app you can change the collection of hooks to use in XPrivacyLua. The default is to use the collection 'Privacy'. You can define your own collection by definition hooks with a new collection name. There can only be one collection active at one time, so if you want to add your own definitions to the built-in privacy collection you'll have to use the collection 'Privacy'. Basically collections exists to allow using XPrivacyLua for things other than privacy.
Click to expand...
Click to collapse
Thanks:highfive:.
This is just a suggestion but if this was my app I would break these 2 elements out to separate screens from the definition builder. You would define collections and groups in a separate spot, and then when building rules the collections and groups would pull in as a selectable dropdown. Avoids typos and helps to explain how there can be only one active collection for XPrivacyLua.

mnjm9b said:
I still have some questions on when,where,how etc.... but I will wait until I can dedicate more time to playing with this.
I do have a feature request.
could there be a sort of drop down box that queries all valid entries for each item when creating a custom definition.
for example...
when creating a custom definition, when taping on the line for group, you would just type a new group (as it is now) but if there was a drop down arrow at the end of the line that could give a list of currently used groups and then the user could just click the listed group instead of typing and it would auto-fill that field.
maybe even more useful would be for the other items like Name,Class, Method etc...
where it could show possible entries. That would help a lot.
Click to expand...
Click to collapse
I will see what I can do for collection and group, but all the other fields are flexible and depend on the hook.

jawz101 said:
... I turned on notifications for your new Firebase rules. I would think a bunch of apps I have use Firebase Analytics. @M66B Have you seen any apps trigger it yet?
Even if the app imported Firebase Analytics library and gathers Firebase Analytics but never uses the setAnalyticsCollectionEnabled() method in its own code would it mean this hook will never trigger?
Click to expand...
Click to collapse
An app will normally not disable/enable analytics given the default is enabled and the user has mostly no choice in this. So see this hook as a safeguard to prevent an app enabling analytics again after we disabled it in another hook

M66B said:
An app will normally not disable/enable analytics given the default is enabled and the user has mostly no choice in this. So see this hook as a safeguard to prevent an app enabling analytics again after we disabled it in another hook
Click to expand...
Click to collapse
Would there be a way to introduce the app to calling it? Or maybe that's what you're implying. Also, have you noticed that system and google apps seem to gray out the read identifiers permission? Ex: set read identifiers as restricted on Android Webview or Google Photos/Maps/Google TTS. Turns pink Get out of XPrivacyLua and open it again. Read Identifiers is gray. (I'm on LineageOS if that matters)

jawz101 said:
Would there be a way to introduce the app to calling it? Or maybe that's what you're implying. Also, have you noticed that system and google apps seem to gray out the read identifiers permission? Ex: set read identifiers as restricted on Android Webview or Google Photos/Maps/Google TTS. Turns pink Get out of XPrivacyLua and open it again. Read Identifiers is gray. (I'm on LineageOS if that matters)
Click to expand...
Click to collapse
Normally an apps doesn't call the function. Maybe if the user can choose to opt in or opt out, but this is rarely the case.
The other thing should go into the XPrivacyLua XDA thread, but I will look into it anyway.

M66B said:
I will see what I can do for collection and group, but all the other fields are flexible and depend on the hook.
Click to expand...
Click to collapse
Thanks, That's a good start.
Maybe if the "PRO" app takes off enough for you to bother you could charge extra for the expanded feature of having the drop lists change depending on the choices made?
I did have a moment to look over a definition I was playing with for "TIME"
it serves no real purpose so I gave up early but if I could get a better understanding on why it doesn't work it could help with actual ones.
using the FINGERPRINT example I made several other entries that all worked fine but this one caused issue.
I assumed it was because according to https://developer.android.com/reference/android/os/Build.html the type for TIME wasn't "String" but "Long"
this is the last one I tried...
Code:
{
"collection": "Privacy",
"group": "Read.Device",
"name": "Build.TIME",
"author": "M66B",
"className": "android.os.Build",
"methodName": "#TIME",
"parameterTypes": [],
"returnType": "long",
"minSdk": 1,
"maxSdk": 999,
"enabled": true,
"optional": false,
"usage": true,
"notify": false,
"luaScript": "function after(hook, param)\n param:setResult("unknown")\n return true\nend\n"
}
I was also playing with "SUPPORTED_ABIS" which also didn't work and the type was "Sting []" instead of just "String" so I was thinking that was the problem also.

@mnjm9b You are returning a string (series of characters) as a long (number). Try returning just a number (without the quotes).
String[] is an array (mulitple strings), so you need to return an array as well. But I don't know how to do that in Lua right now

Namnodorel said:
@mnjm9b You are returning a string (series of characters) as a long (number). Try returning just a number (without the quotes).
String[] is an array (mulitple strings), so you need to return an array as well. But I don't know how to do that in Lua right now
Click to expand...
Click to collapse
You are 100% right.
Returning a string array is not trivial. Look at 'generic_empty_string_array.lua' about how to do this.

Namnodorel said:
@mnjm9b You are returning a string (series of characters) as a long (number). Try returning just a number (without the quotes).
String[] is an array (mulitple strings), so you need to return an array as well. But I don't know how to do that in Lua right now
Click to expand...
Click to collapse
so in my example the returnType instead of "long" should be a number like 0 without quotes?
I tried that and it still doesn't work.
---------- Post added at 08:55 PM ---------- Previous post was at 08:54 PM ----------
M66B said:
You are 100% right.
Returning a string array is not trivial. Look at 'generic_empty_string_array.lua' about how to do this.
Click to expand...
Click to collapse
thanks for this, I guess I am in WAY over my head.

mnjm9b said:
so in my example the returnType instead of "long" should be a number like 0 without quotes?
I tried that and it still doesn't work.
Click to expand...
Click to collapse
No. the return type was correct. That specifies what type of object you are expected to return. What you need to change is what you then actually return, which is
Code:
param:setResult("unknown")
to
Code:
param:setResult(12345678)

@M66B
Thank you for your work, if i understand right, you provide us an programmable interface that will execute command lines written in Lua language without having to create a complete module in JAVA for XPosed?
From what i understood in your initial post, you indicate that we must install your module "XPrivacyLua", then that one disposes there after of the possibility to apply for the applications which one wishes, lines of codes written in Lua language and which do not necessarily have to relate to the logic of rights of access concerning privacy?
If yes then we must necessarily install XPrivacyLua even if in view of all your work provided on it the basic functions do not interest me forcibly?
All this seems to be promising however :good:

Rom said:
@M66B
Thank you for your work, if i understand right, you provide us an programmable interface that will execute command lines written in Lua language without having to create a complete module in JAVA for XPosed?
Click to expand...
Click to collapse
Yes.
Rom said:
From what i understood in your initial post, you indicate that we must install your module "XPrivacyLua", then that one disposes there after of the possibility to apply for the applications which one wishes, lines of codes written in Lua language and which do not necessarily have to relate to the logic of rights of access concerning privacy?
Click to expand...
Click to collapse
Yes.
Rom said:
If yes then we must necessarily install XPrivacyLua even if in view of all your work provided on it the basic functions do not interest me forcibly?
All this seems to be promising however :good:
Click to expand...
Click to collapse
You'll need XPrivacyLua to install and run defined Xposed hooks written in Lua, but you don't need to use the built in privacy related hooks.
The companion app allows you to switch to another collection of hooks you've written, in effect disabling the built-in privacy related hooks.
Try it and I will help you when needed and in the process I will update the documentation where needed.

Related

[Q] Changing Input Method on Rooted Device

Hi!
In order to automatically switch to Wifi Keyboard as my current input method when plugging my phone (Atrix, Android 2.2.2) into my computer, I am looking to circumvent the security restrictions preventing that. Normally, applications are not given the permission to change input methods due to them being in control of the system, possibly with malicious intent.
Now, my phone is rooted, and root shall be your god, so this must be possible. To further complicate matters, I am trying to acieve this through Tasker (which does not know about root), as it already provides the several other tasks I want to achieve and can trigger them in any context imaginable. It is, however, able to run scripts - so if there is a way to do this by script, I'm set.
Google gave me a link to the developer.android.com reference to InputMethodManager (which I am not allowed to post here yet...), which says, among other things, the following:
The input method manager as expressed by this class is the central point of the system that manages interaction between all other parts. It is expressed as the client-side API here which exists in each application context and communicates with a global system service that manages the interaction across all processes.
An input method (IME) implements a particular interaction model allowing the user to generate text. The system binds to the current input method that is use, causing it to be created and run, and tells it when to hide and show its UI. Only one IME is running at a time.
Multiple client applications arbitrate with the input method manager for input focus and control over the state of the IME. Only one such client is ever active (working with the IME) at a time.
Click to expand...
Click to collapse
Only the system is allowed to directly access an IME's InputMethod interface, via the BIND_INPUT_METHOD permission. This is enforced in the system by not binding to an input method service that does not require this permission, so the system can guarantee no other untrusted clients are accessing the current input method outside of its control.
Click to expand...
Click to collapse
A client application can ask that the system let the user pick a new IME, but can not programmatically switch to one itself. This avoids malicious applications from switching the user to their own IME, which remains running when the user navigates away to another application. An IME, on the other hand, is allowed to programmatically switch the system to another IME, since it already has full control of user input.
Click to expand...
Click to collapse
The identification of the current IME is represented by this:
IBinder imeToken Supplies the identifying token given to an input method when it was started, which allows it to perform this operation on itself.
Click to expand...
Click to collapse
I take from this that I either have to
a) gimme that BIND_INPUT_METHOD permission,
b) remove that whole restriction at least temporarily,
c) impersonate being the currently active IME by taking the imeToken away or
d) tell the IME that it should switch to another one.
Unfortunately, my programming experience is limited to C (on microcontrollers...), Python and PHP, and I have no greater experience with fitting my scripts into lager-scale frameworks, only in small ones for personal or limited use. So, well, I have no idea how to achieve any of these goals.
Could someone tell me if what I want to do is even possible, and if so, how? I don't need the full code, if there is much to it, but rather some directions, altough I certainly would not mind it
Thanks a bunch for any advice in advance!
V
PS: I hope it is not rude for me to ask this in here, but well, it's kinda-sorta dev stuff, and neither Google nor the Forum search turned up anything even close to an answer.
Use "Secure Settings". It will allow you to switch keyboard input using Tasker. It also lets you turn gps on and off as well as some other things.
Sent from my MB860 using xda premium

Making "Stock" Custom ROMs Defunct (XposedFramework) - Tweaks for any ROM Version

Making "Stock" Custom ROMs Defunct (XposedFramework) - Tweaks for any ROM Version
Introduction
Recently it has dismayed me how, across the Android Community, people seem to feel that it's necessary to run a "Custom ROM" in order to get improvements and changes to your ROM. Of course, some of you know it's possible to modify the APK files directly to change things, but these changes need to be done every time your base ROM is updated. Once Samsung starts leaking out updates to 4.2 like a sieve, you guys will be all over them, needing to update your patches and tweaks every time.
Anyway, seeing this displeases me, as it encourages people to see "Custom ROMs" as a commodity, and something you consume. In essence, users were getting their "fix" of tweaks from their "chef", but not learning how to do it themselves, nor realising their beloved chef isn't doing anything magical. In fact, their chef is likely decompiling the applications, and using baksmali/apktool to take apart the app, hard-code in their changes, then rebuild it. This method has worked well for 3 years, but it's been in need of an update for some time.
The Enlightenment
Then I saw this thread by rovo89. That man deserves a beer for every Android user there is, for his work on the Xposed Framework! His and Tungstwenty's work on this has made it possible to modify the core Android system, without doing any actual modifying of applications.
OK... Why are you telling me this?
This invention seems to have pretty much gone unnoticed by the world. The reasons this is vastly superior to any other way of making modifications to apps and the system are:
Your modifications are not tied into a single version of the APK or app or framework. If the ROM is updated, the patch should still work perfectly on the new version of the app (this doesn't necessarily apply across major updates like 4.1 to 4.2, but should be fine across 4.1.0 to 4.1.2 style changes).
You are not actually modifying any files on the phone! If something goes wrong, you can just disable the support for the framework, and the tweaks will do nothing. As such, it's easier to get a working phone if something dies - in fact there is a ZIP placed on your SD for this very purpose. Just flash it in CWM and it will disable the framework.
As no actual files are being modified, it doesn't matter if your ROM is odexed, deodexed, or a bit of both (ie. certain apps deodexed, but frameworks odexed). With this, there is no reason to run a deodexed ROM, since you can change pretty much everything you want to without touching the raw files. So leave them as odex files and you'll not have any problems. Bear in mind we deodex to allow easier customisation, odexed is actually slightly faster, and removes the majority of the dexopt process on first boot.
No application signatures are modified, as the apps are not touched, so if you were to use this to modify an app like Maps or Gmail, you won't get issues when trying to update to a new version of the app via the market.
The only way this can succeed is for you to try it. I usually run a "custom ROM" on my phone. For the first time ever, I've been using a stock ROM for a significant period of time. On the Note2 in particular, Samsung is really getting good at this. But they're not perfect. And as such, I started to look at using this to perfect their work.
When you run a custom ROM, look at what you're getting, and ask yourself why it doesn't use this method. I've only made one little modification so far, but it's one that annoys me hugely! The blooming SMS -> MMS conversion when you try to write any form of prose in a text message. I cannot stand the limitation of SMS to 160 characters, so the ability to chain together messages is a godsend to me. Unfortunately though, Google and Samsung seem to like to restrict you to 3 SMS messages worth of text before converting to an MMS message. Which is wonderful, except when you have totally unlimited SMS, but pay for MMS. As such, I was finding my ability to communicate in my usual verbose way somewhat hindered by the messaging app.
Alas that is no longer an issue. If you want to get started, here's how.
OK... How do I use this?
Download and install the APK file from this post - http://forum.xda-developers.com/showthread.php?t=1574401. I have tested it on the N7100, it works fine. Run it, install the framework, grant it root (yes, this requires root!), and reboot. I have mirrored the APK below just in case of issues.
Download and install the APK modification you want from http://www.villainrom.co.uk/forum/microdownloads/
When you get a notification about enabling the modification (after the APK is installed), tap that notification, and enable the plugin by ticking the box.
Reboot your phone
Go test your modification
If you have any issues with this, please paste the contents of /data/xposed/debug.log on a pastebin site or in
Code:
tags.
[SIZE="5"][B]How can I make my own modifications like this?[/B][/SIZE]
Will post this a bit later, along with the source of this plugin.
[SIZE="5"][B]References[/B][/SIZE]
[url]http://forum.xda-developers.com/showthread.php?t=1574401[/url]
[url=http://forum.xda-developers.com/member.php?u=4322181]Tungstwenty[/url]
[url=http://forum.xda-developers.com/member.php?u=4419114]Robo89[/url]
[SIZE="5"][B]Sources[/B][/SIZE]
You can find the sources for Xposed Framework at [url]https://github.com/rovo89[/url]
You can find the sources for all Xposed modifications I have made so far on Github:
[url=https://github.com/pulser/xposedSMStoMMS]Disable SMS -> MMS Conversion[/url]
[url=https://github.com/pulser/xposedDisableBatteryFullAlert]Disable 100% Battery Notification[/url]
[url=https://github.com/pulser/xposedEnableCallRecording]Enable Call Recording[/url]
[url=https://github.com/pulser/xposedScrollingLauncherWallpaper]Enable scrolling wallpaper in stock launcher[/url]
[url=https://github.com/pulser/xposedEmailTextColour]Make text in email app message list clearer to read (lighter) on the black background[/url]
Install the Xposed Framework from this thread: http://forum.xda-developers.com/showthread.php?t=1574401
Modifications
OK so a few people suggested an addon repository... I have got one sorted
Downloads
http://www.villainrom.co.uk/forum/microdownloads/
I've added some of mine so far, but I won't add other people's - they can add them themselves, and maintain them
This system is vastly superior to a stickied forum thread, as you can update your own modification (as a developer), and as a user, receive notifications if a modification is updated.
Developers
Register for an account (Free, easy, no spam etc)
Go to http://www.villainrom.co.uk/forum/account/join-user-groups
Tick the option for Xposed Uploader, and hit Save. A request will be sent to me for your application. I'll approve it when I see it (should be quite fast, it gives me a popup)
Head back to http://www.villainrom.co.uk/forum/microdownloads/ and click the Upload button at the top right.
Use a general title that describes what your modification does. Put in a version string too. I tend to use the format 1.0, 1.1, 1.2 etc, but this is up to you. You can add Alpha or Beta or other designations if you wish.
For author, pop in your name or username. And enter a brief description of what the modification does (which will appear in the index)
Click Categories/Agreements, and select which category the modification falls under. If you think there's a category which should be added, let me know.
Under Full Description, you can enter a detailed description of your modification. Finally, under File Options, use File to Upload to select your APK file. You can optionally add an Image to Upload. The Use File URL should be set to no, and the File URL box left blank.
Users
There is no need to register an account to download files from the repository. If you wish to receive notifications of updates, you can register an account - just hit the red "Log in or Sign up" button - you can use a Twitter or Google account if you want, or just make a plain account. It makes no difference.
Head across to http://www.villainrom.co.uk/forum/microdownloads/ and have a look at the modifications you want.
Click watch file (at the bottom right) if you want notifications about updates to a modification
Click Report to report a modification for being malicious or problematic.
Click "add comment" to discuss or comment on the modification, or leave a "review" or feedback
Click on the stars under (0 votes) to leave a star rating on the modification, which will help generate most popular lists on the main page.
Click to see licence details of mine:
Feel free to use these as you wish, for non-commercial purposes. You may share these for personal use. Note that distribution in any kind of "package" or "custom ROM" is not personal use. Sending a friend a copy is personal use, feel free to do that and share the love.
Feel free to make changes to the source code of the modifications if you think you can improve them, provided you make your changes available in a similar manner. If you fix a bug or error, please send a pull request.
If you wish to use these commercially, please contact me. This includes in any "distribution package", be it a ROM, app, store, marketplace or other package. That's not in the spirit of this project, so get in touch with me and we'll discuss it.
Tl;dr:
End users, have fun, use these, enjoy them, share them, tweak them, just be sure to share your source changes and/or send a pull request if you improve something!
"Custom ROM" Developers, and anyone wanting to try to use these for commercial purposes: Don't. These are to encourage people to learn about these changes, so contact me if you want to do something else with them. Commercial use, including distribution in "Custom ROMs" is not permitted.
How to make your own such modification
This information is NOT complete. This example only uses 1 of about 10 different types of modification. I have spoken to rovo89 and he has said it would probably be possible to document this further. This example covers ONE usage case - I am going to override an entire method.
1. Create a new empty Android project in Eclipse.
2. Within the "application" section of your AndroidManifest.xml, add the following metadata:
Code:
<meta-data android:name="xposedmodule" android:value="true"/>
<meta-data android:name="xposedminversion" android:value="2.0rc1.*" />
3. Within the assets folder of the project, add a plain text file, "xposed_init". Within this, I have put
Code:
uk.co.villainrom.pulser.allowlongsms.AllowLongSMS
uk.co.villainrom.pulser.allowlongsms is the PACKAGE name of my Java package. AllowLongSMS is my class name. The purpose of this is to tell the Xposed Framework what to run.
4. Within AllowLongSMS.java (ie. the class name, with .java on the end), I put the following code:
PHP:
package uk.co.villainrom.pulser.allowlongsms; //this sets the package for our project, this is the first part of the value in xposed_init file in assets.
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
//above includes all the required parts of the xposed framework that we need here
public class AllowLongSMS implements IXposedHookLoadPackage { //here we declare the class AllowLongSMS. We say it implements IXposedHookLoadPackage, as we want to make use of the hook-in on package load. Other options are available here for working with native libs etc, and resources, but I'm not using these right now.
public static final String MY_PACKAGE_NAME = AllowLongSMS.class.getPackage()
.getName(); //this doesn't do anything, I just left it here for if I needed to write logs and wanted to have the package name easily accessible.
public static final String TAG = "PulserMmsTweak"; //same here, this doesn't do anything.
@Override //we are going to override the method handleLoadPackage, if it exists further up the hierarchy
public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
//this method is called every time a package is loaded. We have a parameter that we're going to call lpparam, that is passed in, that relates to what package was loaded
if (lpparam.packageName.equals("com.android.mms")) { //if the package that has just been loaded is called "com.android.mms" then
ClassLoader classLoader = lpparam.classLoader; //create a classloader object that we can now use
XC_MethodReplacement methodreplacer = new XC_MethodReplacement() { //create a method replacer object, as we are going to REPLACE an entire method within the mms app.
protected Object replaceHookedMethod( //we make an object here, that passes in the parameters of what to actually change
XC_MethodHook.MethodHookParam paramAnonymousMethodHookParam)
throws Throwable {
return Integer.valueOf(255);
/* THIS IS THE IMPORTANT LINE
* This line returns the value 255. Why this happens won't make sense yet, but THIS is where you put your "new method" code.
*
*/
}
};
XposedHelpers.findAndHookMethod("com.android.mms.MmsConfig", //here we say that we want to find and hook into the method "getSMSToMmsTextThreshold" which is part of the class com.android.mms.MmsConfig. We then say that we're passing this to methodreplacer, which we defined earlier
classLoader, "getSmsToMmsTextThreshold", methodreplacer);
}
//if the package wasn't com.android.mms, do nothing.
}
}
Awesome work mate. Wish I had a Note 2 to check this on.
EDIT: Wait.. I can use this on any device! Rock on. Thanks!
Wow this is great post. While reading this it makes me learn something like what is going on in background.
Sent from my GT-N7100 using Tapatalk 2
Thanks for continuing that amazing project pulser!!
I think i'm going to create some small apks for some stuff very soon (and release them of course).
Cool stuff as always pulser, keep it up
simone201 said:
Thanks for continuing that amazing project pulser!!
I think i'm going to create some small apks for some stuff very soon (and release them of course).
Cool stuff as always pulser, keep it up
Click to expand...
Click to collapse
The original guys are not gone, was talking to them recently
There's scarce documentation so far on this, but I will see what else I can do with it... I might make post 2 a repository of these APKs for now...
chaitanya87 said:
Wow this is great post. While reading this it makes me learn something like what is going on in background.
Sent from my GT-N7100 using Tapatalk 2
Click to expand...
Click to collapse
That's the intention Glad it worked! This is about learning, and not just "using".
Sure, you can download the APK and use it, but that's no better than just downloading some zipkang ROM that claims it does everything including making your morning coffee... This is about taking a look at HOW it works too That way people can make their own tweaks and share them!
pulser_g2 said:
The original guys are not gone, was talking to them recently
There's scarce documentation so far on this, but I will see what else I can do with it... I might make post 2 a repository of these APKs for now...
Click to expand...
Click to collapse
A small repo for APKs would be really cool and useful for users....
tell me if i can contribute in some ways (i'm an app dev mainly also)
simone201 said:
A small repo for APKs would be really cool and useful for users....
tell me if i can contribute in some ways (i'm an app dev mainly also)
Click to expand...
Click to collapse
I will work something out (I can easily make a repository if this kicks off, so people can upload them and they appear).
TBH right now it's more a case of thinking up some ideas. For now, I can add anything people send into the second post (though I think it would be reasonable that we request source for all such modifications, just given the sheer ability to modify anything that this has...)
I can't think of enough things to tweak, we just need to work out WHAT people will like to modify, and implement it
I'll be a good example and put mine onto git shortly
My own notepad of things I need...
http://forum.xda-developers.com/showthread.php?t=1965801
http://forum.xda-developers.com/showthread.php?t=1924905
call record:
http://forum.xda-developers.com/showthread.php?t=1938808
http://forum.xda-developers.com/showthread.php?t=1871525
Hey folks,
I'm happy to see some new interest on Xposed.
I've been using it since rovo89 came up with this brilliant idea, and have to admit I was kind of sad to see not many saw its great potential.
Personally, I'm using a couple of hacks for my individual use, but if the community starts to be interested in the HOWs rather than merely nagging about the apks I guess I can try to make an effort to clean and share the code.
Please do ask away stuff, I'm eager to seeing this being used to its full potential
For now, please check the Tweakbox sources. While the code itself might no longer 100% apply to the most recent S2 stock roms, it's still a nice example of how the hacks can be done.
this sounds great! like an universal (almost!) patching system. I hope more chef will write mods for this. man...wish i had taken some lessons in coding.
for a start, how about some of the often repeated annoyance in stock samsung that drives many to use custom roms just to get these functions:-
1) disable the scrolling quick setting panel when you open notification
2) 15 toggles as implement by guys like Wanam.
3) call recording (ok we got this already)
4) 4 way reboot menu
5) some kind of user definable custom battery graphics.
sunwee said:
this sounds great! like an universal (almost!) patching system. I hope more chef will write mods for this. man...wish i had taken some lessons in coding.
for a start, how about some of the often repeated annoyance in stock samsung that drives many to use custom roms just to get these functions:-
1) disable the scrolling quick setting panel when you open notification
2) 15 toggles as implement by guys like Wanam.
3) call recording (ok we got this already)
4) 4 way reboot menu
5) some kind of user definable custom battery graphics.
Click to expand...
Click to collapse
Yeah this is pretty universal. I'd even remove the word "almost" tbh...
For 1, do you mean to disable the scroll animation so that it shows the leftmost icon (wifi) first?
2 is possible, I know samsung has done it on 4.2, is the custom implementation better?
3 is done like you said.
4 should be more than possible.
5 is definitely possible, at least via flashing the modification for the battery style you want...
Thank for the ideas
i flash custom rom just because i need below few things
1.Call-Record. (done)
2.15 toggle, or maybe add NFC, S Beam, Multiwindow, Smart Stay as well
3.Louder Volume Speaker.
4.CRT Lock and Unlock Screen.
5.4 Way Reboot.
6.Unlimited Multi-Window
thanks for the good work and sharing.
Hi. So glad to see that this amazing framework didn't "die"
I would have one question about the mods...
Ok its likely that for the same device they work on different bases of the rom like DLJ5, ELK4 am I right?
But does a mod that was made for lets say the Note 2 work on a SGS3 or must it be adapted?
Thanks !
DirkStorck said:
Hi. So glad to see that this amazing framework didn't "die"
I would have one question about the mods...
Ok its likely that for the same device they work on different bases of the rom like DLJ5, ELK4 am I right?
But does a mod that was made for lets say the Note 2 work on a SGS3 or must it be adapted?
Thanks !
Click to expand...
Click to collapse
If it's touchwiz then it should work - samsung seems to have unified a lot of it.
Jerdog used the SMS to mms patch fine on his s3.
It really just depends on the modification itself tbh...
If I would like to start writing my own mods is there somewhere a guide how to debugg the mod I write?
Thanks!
one more
can you add:
*:laugh:skip music track with volume button

Confused about how to evolve from (very) basic Android Development

Hello.
I followed all the New Boston Android videos, did everything, understood everything.
I tried to create a basic RSS feed reader, in order to better incorporate some concepts I learned in the New Boston videos (http processing, xml processing, adapting the content to lists, custom lists, etc). When I got to pass the information from the http processed data to xml parser and the list, that's when I got too much confused and knew I didn't have enough knowledge.
Then I tried to do some "Shopping List Manager" (just like OI Shopping, a bit adapted more to my taste), in order to learn.
However, again, when I neededto pass information to other objects in other classes or something like that, I get confused and don't know what to do.
So I bought CommonsWare book, "The Busy Coder's Guide to Android", which I have the latest version (5.1) and I'm reading, but I don't like to advance when I don't fully understand something. This time I'm stuck on the Action Bar part, more precisely this one:
Code:
private void configureActionItem(Menu menu) {
EditText add=
(EditText)menu.findItem(R.id.add).getActionView()
.findViewById(R.id.title);
add.setOnEditorActionListener(this);
}
I know this will seem very basic to many of you, but I get really confused on all this calls, returning results and more calls.
I don't have a background on OOP, except when I worked with PHP frameworks like Symfony, I work usually with direct task programming (scripting, automation, etc), as I am a Linux System Administrator, so my code is mainly scripting and web interface building (Python, Shell Script, PHP, Javascript, etc).
Can anybody explain what can I do to better understand this? It's just lack of practice and in time I'll understand better? Is it OOP lack of knowledge/practice? Or is it Java lack of knowledge/practice?
Thanks a lot for all your help.
Maybe the best approach is to get some face time with a person who is more experienced and have him explain to you the concept you have trouble with while focusing on the parts you don't grasp. A real human has this flexibility to do a "targeted strike" unlike a tutorial or a book that has no idea where in particular the student may get confused.
For this particular issue, the issue can be summarized as follows. Let's say you have an object call a function:
Code:
orange.peel();
This should be relatively straightforward. The next level of complexity is the fact that obj is just a variable representing an object, and in fact we can substitute anything else that evaluates to an object (i.e.: after it runs, you end up with an object). For example these all are legal ways to call the method as long as types match:
Code:
(new Orange()).peel();
(shouldEatSmallerOrange ? smallerOrange : largerOrange).peel();
retrieveOrangeFromBox().peel();
The last line illustrates calling some other function that returns the object, which is then used to call a second function. The final step from here is to recognize that instead of a single retrieveOrangeFromBox() we can have a chain of functions, each of which returns an object that is used to call the next function in line. For example:
Code:
findCar().accessCarTrunk().unloadBoxFromTrunk().retrieveOrangeFromBox().peel();
The names are unnecessarily verbose to illustrate how functions and their results relate to each other.
OOP + Android system
You're not that clear as to exactly what you are having a problem with, but in general, it sounds like you need to get a java book and learn the basic concepts of classes and interfaces. Since you say you have a background in PHP you could probably go pretty far just by following the Java tutorials on the Sun website. I say java because that's the target language here, any book on OOP in any language would be adequate but learning java would give you the added ability to read other people's android code examples more easily.
After that, you can learn the Android framework. You develop in the Java language but you work within the android framework. What that means is that here, for example, the action bar is provided to you by the android system, and this callback is called by the system, so it is all set up for you. But to understand what is happening, you need to understand when the system calls this method and what it does. That is the framework.
So more specifically, how can you understand this code? This method is called from another method, onCreateOptionsMenu(). OnCreateOptionsMenu() is a method in the Activity class that is called automatically by the system at a specific time. You need to read about the Activity class and the Activity lifecycle on the android developers site. If you want your activity to provide an options menu, you create it in OnCreateOptionsMenu and return it, the system will handle it from there. So back to configureActionItem(Menu menu), here you are passing in the menu object, which contains MenuItem objects, which the system uses to populate the menu (either on the action bar, or when you hit the menu button, depending on the android version). Each MenuItem object has a view that is associated with it (usually created in an XML file).
One thing that may be hard to understand is that all these calls are chained, so if you don't know what they are returning you don't know where to look for help. It's easier if you separate the calls out. Here, the documentation is your friend. If you look at the Menu class on the android dev site, you see that findItem() returns a MenuItem. So then you look up MenuItem, and you see that getActionView() returns a View. Look at the View class, and you can see findViewById() returns another view (a sub-view that is contained within this view). so when you look at it all together, unchained:
Code:
private void configureActionItem(Menu menu) {
MenuItem mi = menu.findItem(R.id.add);
View parentView = mi.getActionView();
EditText add = (EditText)parentView.findViewById(R.id.title);
}
findViewById returns a View, but you know that the view known by the id R.id.title is an EditText view, and you want to use it as an EditText, so you have to cast the View to an EditText (which is a subclass of View) so that the compiler knows that it is an EditText type of view. That's what the (EditText) is doing in front of the findViewById call. To understand that you need to read about subclassing and strongly-typed programming languages. PHP is weakly-typed, so that might be new to you.
finally, you call setOnEditActionListener on the EditText. OnEditActionListener is an interface that you have implemented in this class. An interface defines a common set of methods that are guaranteed to be present in whichever class has implemented it. So when you set the OnEditActionListener to this, (this means the current instance of this class), the EditText will hold on to the "this" object and it knows that it can call a certain set of methods on it. What are those methods? look up the OnEditActionListener interface in the docs:
it only has one method,
Code:
public abstract boolean onEditorAction (TextView v, int actionId, KeyEvent event);
so somewhere in this class, you will have this method defined and this is where you put code that you want to run when the EditText triggers this action. I assume this get called when the user touches the EditText.
It's really not going to be easy to work with android if you don't have a basic knowledge of OOP, specifically classes, inheritance, and interfaces. Also, knowing how java implements these concepts will help a lot. Then you can use your book to learn the Android framework.
GreenTuxer said:
Hello.
I followed all the New Boston Android videos, did everything, understood everything.
I tried to create a basic RSS feed reader, in order to better incorporate some concepts I learned in the New Boston videos (http processing, xml processing, adapting the content to lists, custom lists, etc). When I got to pass the information from the http processed data to xml parser and the list, that's when I got too much confused and knew I didn't have enough knowledge.
Then I tried to do some "Shopping List Manager" (just like OI Shopping, a bit adapted more to my taste), in order to learn.
However, again, when I neededto pass information to other objects in other classes or something like that, I get confused and don't know what to do.
So I bought CommonsWare book, "The Busy Coder's Guide to Android", which I have the latest version (5.1) and I'm reading, but I don't like to advance when I don't fully understand something. This time I'm stuck on the Action Bar part, more precisely this one:
Code:
private void configureActionItem(Menu menu) {
EditText add=
(EditText)menu.findItem(R.id.add).getActionView()
.findViewById(R.id.title);
add.setOnEditorActionListener(this);
}
I know this will seem very basic to many of you, but I get really confused on all this calls, returning results and more calls.
I don't have a background on OOP, except when I worked with PHP frameworks like Symfony, I work usually with direct task programming (scripting, automation, etc), as I am a Linux System Administrator, so my code is mainly scripting and web interface building (Python, Shell Script, PHP, Javascript, etc).
Can anybody explain what can I do to better understand this? It's just lack of practice and in time I'll understand better? Is it OOP lack of knowledge/practice? Or is it Java lack of knowledge/practice?
Thanks a lot for all your help.
Click to expand...
Click to collapse
Thanks a lot for your help. I also think my issue is with OOP, but I needed the opinion of people with more knowledge.
I understand very well what you said about onCreateOptionsMenu(), why and when is called, Activity class, lifecycle, etc.
Those things I understand without any problem. I also understand the basics of OOP, but I don't know almost nothing about Interfaces and I don't have almost any experience with inheritance, although I understand it.
I think I'm just confused because I haven't worked very long with OOP. I just don't know if I should invest in something like reading and testing something like Thinking in Java, or just practice more and more Android Development.

[MOD][Xposed] Google Search / Now API

Requires Xposed Framework!
This module adds an API to the Google Search app, commonly referred to as Google Now.
This allows developers to make plugins that react to searches done in Google Search.
As of right now, the developers cannot interact with the cards UI, not sure how feasible that is, if it is, it'll be in future versions.
(I showed this on reddit some days ago: http://www.reddit.com/r/Android/comments/1rmvxs/heres_a_preview_of_my_google_search_now_api/)
Screenshots:
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Demos:
Lyrics fetching: https://www.youtube.com/watch?v=OsNCHo5JZuA
Song recognition outside US with Shazam: https://www.youtube.com/watch?v=ThbW5glU7zM
AutoVoice: http://www.youtube.com/watch?v=usjqq5hwlSE
Compatibility:
Any 4.1+ device that can run Xposed Framework. ICS not supported at the moment, not sure how recent the Google Search port is.
Download:
Please note that this is a 1.0 release, it may or may not have bugs.
http://repo.xposed.info/module/com.mohammadag.googlesearchapi
Source:
This is open source, you're free to contribute to the source, but you're in now way allowed to release this anywhere else.
https://github.com/MohammadAG/Google-Search-API
Plugins:
This doesn't do anything without plugins, which needs developer support. More on that below. Here are some fully working examples:
Music Controls: Control music playback. Supported commands: "play/pause/resume music", "play songs by <artist>", "play song <title>", "next/previous track/song", "volume up/down/max", "what song is this" opens in Shazam, requires Shazam, no idea what happens without it.
Voice Toggles: Turn on/off Wi-Fi, Mobile Data, or Bluetooth.
AZLyrics Viewer: Shows lyrics for songs from AZLyrics.com. Supported commands: "show lyrics for <song> by <artist>", exact syntax required here, artist is not optional.
Autovoice, by @joaomgcd, run Tasker commands from Google Search.
Plugin sources:
Music Controls: https://github.com/MohammadAG/GNAPI-MusicControls
Voice Toggles: https://github.com/MohammadAG/GNAPI-VoiceToggles
AZLyrics Viewer: https://github.com/MohammadAG/Android-AZLyricsViewer
Developers:
Implementing plugins is as easy as copying one file to your source, and implementing a BroadcastReceiver that listens for the search queries (sent as text). If you're implementing a UI, implement TextToSpeech for voice feedback, if not, use GoogleNowApi.speak for voice replies.
All this is demonstrated in the examples above.
You'll also need to add a permission to AndroidManifest.xml: "com.mohammadag.googlesearchapi.permission.ACCESS_GGOGLE_SEARCH_API"
Remember that any package needs one activity to be started to work, see the music controls example for a way around that.
Of course, you're free to make your plugins free/paid/whatever.
What are the two checkboxes for?
If you're using GEL, you basically need to have the first checkbox checked. This is because GEL uses an overlay for the first part of the search, then opens the usual search app without the transitions. This means that if a developer already started an activity, it'll be sent to the background cause search was started after it.
Second checkbox prevents duplicate searches, this can be useful (you'll see how), and not so useful (when you do two volume ups/downs). Experiment as needed.
Support development
This took quite a lot of research, Google Search's code is huge, if you found this useful, please consider a donation.
Downloading and trying on note 3 asap
Sent from my SM-N900T
Any way this could be made to support Tasker out of the box? Basically if it sent a broadcast intent without the need for a permission and such.
Cptnodegard said:
Any way this could be made to support Tasker out of the box? Basically if it sent a broadcast intent without the need for a permission and such.
Click to expand...
Click to collapse
It needs a permission right now, but I plan to make a Tasker plugin.
Hi MohammadAG.
What do you think about unlock Remote API? I tried to do this, but I have very limited time.
The problem is reconstruction of the API. Reverse engineering, reverse, reverse
Code:
<service android:name="com.google.android.sidekick.main.remoteservice.GoogleNowRemoteService" android:permission="com.google.android.apps.now.REMOTE_ACCESS" android:process=":search">
<intent-filter>
<action android:name="com.google.android.sidekick.shared.remoteapi.IGoogleNowRemoteService" />
</intent-filter>
</service>
In latest version require signature (after upload my module Google change it)
Code:
<permission android:label="@string/permission_remote_access_label" android:name="com.google.android.apps.now.REMOTE_ACCESS" android:protectionLevel="signature" android:description="@string/permission_remote_access_desc" />
but in android:versionCode="300207090" android:versionName="2.7.9.789824.arm" only hook function:
Code:
<permission android:label="@string/permission_remote_access_label" android:name="com.google.android.apps.now.REMOTE_ACCESS" android:protectionLevel=">>>normal<<<<" android:description="@string/permission_remote_access_desc" />
Code:
checkForValidSignature(int paramAnonymousInt)
API function is very interesting: ht tp:/ /wk le j.to/g38qK
To prevent spam on the XDA forums, ALL new users prevented from posting outside links in their messages. After approximately 10 posts, you will be able to post outside links. Thank you for understanding!
Click to expand...
Click to collapse
It requires changing the settings in teamdog "section", which makes my module. Latest version of the module in the repo does not support latest Google Search. I did fix, but not yet released. Do want it it?
Dzakus said:
Hi MohammadAG.
What do you think about unlock Remote API? I tried to do this, but I have very limited time.
The problem is reconstruction of the API. Reverse engineering, reverse, reverse
<snip>
API function is very interesting: http://wklej.to/g38qK
It requires changing the settings in teamdog "section", which makes my module. Latest version of the module in the repo does not support latest Google Search. I did fix, but not yet released. Do want it it?
Click to expand...
Click to collapse
That's actually interesting... I didn't notice that part, mainly cause I thought sidekick was the name of some Motorola device.
The fun part is CardResponse implements Parceable, so this could probably be used to do card UI responses.
PM me your module, I'll have a look at this.
The signature shouldn't be a problem, PackageManager can be hooked I guess.
2242683
MohammadAG said:
That's actually interesting... I didn't notice that part, mainly cause I thought sidekick was the name of some Motorola device.
The fun part is CardResponse implements Parceable, so this could probably be used to do card UI responses.
PM me your module, I'll have a look at this.
The signature shouldn't be a problem, PackageManager can be hooked I guess.
Click to expand...
Click to collapse
@MohammadAG, dumped from device, so signed debug key APK: http:/ /w w w12.zipp yshare. com/ v/6439333/file.html
I can not find the source code, but I still look for it tomorrow.
byte[] is for protobuf data :-/
MohammadAG said:
It needs a permission right now, but I plan to make a Tasker plugin.
Click to expand...
Click to collapse
I'm totally implementing this in AutoVoice tomorrow so no need for you to go through the trouble if you don't want to. haven't tried it but looks great!
joaomgcd said:
I'm totally implementing this in AutoVoice tomorrow so no need for you to go through the trouble if you don't want to. haven't tried it but looks great!
Click to expand...
Click to collapse
Awesome, you'd be the first dev to implement this!
If you have any comments on the API, do tell, it's the first time I've written an almost solid API.
(I image a library that can be imported would be better than copying the .java file, if that's a comment)
MohammadAG said:
Awesome, you'd be the first dev to implement this!
If you have any comments on the API, do tell, it's the first time I've written an almost solid API.
(I image a library that can be imported would be better than copying the .java file, if that's a comment)
Click to expand...
Click to collapse
Ok, here it is!
(oops, can't post a link to the youtube video... Look up my channel on youtube: joaomgcd. If you would be so kind as to post the link to the video it would be cool)
AutoVoice integration couldn't be simpler! Thank you very much for creating this!
About the API, it's fine as it is! I personally much prefer a java file like that specially since it's such a simple one. I wouldn't want to import a jar just to get access to a constant.
Of course the API could grow, but I actually like having the java file like that.
Congrats on the great API, I hope you don't mind that I linked to it in the YouTube video and in the description.
joaomgcd said:
Ok, here it is!
(oops, can't post a link to the youtube video... Look up my channel on youtube: joaomgcd. If you would be so kind as to post the link to the video it would be cool)
AutoVoice integration couldn't be simpler! Thank you very much for creating this!
About the API, it's fine as it is! I personally much prefer a java file like that specially since it's such a simple one. I wouldn't want to import a jar just to get access to a constant.
Of course the API could grow, but I actually like having the java file like that.
Congrats on the great API, I hope you don't mind that I linked to it in the YouTube video and in the description.
Click to expand...
Click to collapse
Added to first post with a link to the video, thanks!
Glad you found the API useful as is, I'll keep it as a java file till I implement card responses, then you'd probably need to use a library to create cards
joaomgcd said:
Ok, here it is!
(oops, can't post a link to the youtube video... Look up my channel on youtube: joaomgcd. If you would be so kind as to post the link to the video it would be cool)
AutoVoice integration couldn't be simpler! Thank you very much for creating this!
About the API, it's fine as it is! I personally much prefer a java file like that specially since it's such a simple one. I wouldn't want to import a jar just to get access to a constant.
Of course the API could grow, but I actually like having the java file like that.
Congrats on the great API, I hope you don't mind that I linked to it in the YouTube video and in the description.
Click to expand...
Click to collapse
Sweet! How can we do this if we don't have your rom?
And have you looked at Utter! At all? Either of you....
Anyway to integrate this?
Sent from my GT-I9505G using Tapatalk
Are supported apps supposed to show in the plugin list in the Search API app? Can't get Autovoice to work despite it being the correct version with integration enabled, the xposed plugin is also up and running. The plugin list doesnt show Autovoice however.
Cptnodegard said:
Are supported apps supposed to show in the plugin list in the Search API app? Can't get Autovoice to work despite it being the correct version with integration enabled, the xposed plugin is also up and running. The plugin list doesnt show Autovoice however.
Click to expand...
Click to collapse
it shows for me in the plugins section of google search api. what version of autovoice you have? did you reboot?
spyros.giotakis said:
it shows for me in the plugins section of google search api. what version of autovoice you have? did you reboot?
Click to expand...
Click to collapse
Yes I rebooted.
I backed up and reinstalled AutoVoice using TB, then Google Search API crashed, and then it showed up and now works
Cptnodegard said:
Yes I rebooted.
I backed up and reinstalled AutoVoice using TB, then Google Search API crashed, and then it showed up and now works
Click to expand...
Click to collapse
Lol, its great now that I dont have to use the autovoice widget anymore on my nexus 5!
Sc4ryB3ar said:
Sweet! How can we do this if we don't have your rom?
And have you looked at Utter! At all? Either of you....
Anyway to integrate this?
Sent from my GT-I9505G using Tapatalk
Click to expand...
Click to collapse
This is not ROM dependent. Simply install AutoVoice and Tasker and you're good to go.
Stupid question: is it limited to English or should it work for other languages?
MohammadAG said:
Added to first post with a link to the video, thanks!
Glad you found the API useful as is, I'll keep it as a java file till I implement card responses, then you'd probably need to use a library to create cards
Click to expand...
Click to collapse
Thanks again!
By the way, can you differentiate between text and voice searches? That would be a useful extra to have in the intent from the broadcast.
neFAST said:
Stupid question: is it limited to English or should it work for other languages?
Click to expand...
Click to collapse
Whatever Google Search recognizes is good. Yes, you can use this to implement voice commands in other languages.
joaomgcd said:
Thanks again!
By the way, can you differentiate between text and voice searches? That would be a useful extra to have in the intent from the broadcast.
Click to expand...
Click to collapse
It's already there. Boolean extra, the key is in the Java file, look at AZLyricsViewer for an example.

[CLOSED][APP][XPOSED][6.0+] XPrivacyLua - Android privacy manager [UNSUPPORTED]

XPrivacyLua
{
"lightbox_close": "Close",
"lightbox_next": "Next",
"lightbox_previous": "Previous",
"lightbox_error": "The requested content cannot be loaded. Please try again later.",
"lightbox_start_slideshow": "Start slideshow",
"lightbox_stop_slideshow": "Stop slideshow",
"lightbox_full_screen": "Full screen",
"lightbox_thumbnails": "Thumbnails",
"lightbox_download": "Download",
"lightbox_share": "Share",
"lightbox_zoom": "Zoom",
"lightbox_new_window": "New window",
"lightbox_toggle_sidebar": "Toggle sidebar"
}
Really simple to use privacy manager for Android 6.0 Marshmallow and later (successor of XPrivacy).
Revoking Android permissions from apps often let apps crash or malfunction. XPrivacyLua solves this by feeding apps fake data instead of real data.
Features:
Simple to use
Manage any user or system app
Extensible
Multi-user support
Free and open source
See here for all details, including installation instructions and download link.
Please read the frequently asked questions before asking a question.
This XDA thread is about using the latest version of XPrivacyLua. Off topic comments are allowed as long they are related to XPrivacyLua and are in the general interest of the followers of this thread, but anything not related to privacy is not allowed.
If XPrivacyLua doesn't work and/or when "module not running or updated" is shown, this is almost always caused by an Xposed problem.
Discussions about purchases are not allowed here, please contact me via here instead.
XPrivacyLua is being maintained and community supported, but new features won't be added anymore.
Custom hook definitions will always be part of XPrivacyLua, but there will be community support only. This means that I won't respond to questions about defining custom hooks anymore. See this thread for the reasons.
If you value your privacy, please consider to support this project with a donation or by purchasing pro features.
M66B said:
XPrivacyLua is not a permission manager, but a privacy manager. XPrivacyLua doesn't block things and doesn't revoke permissions, but does replace real data by fake data. This means you can grant Android permissions to an app and still let XPrivacyLua prevent the app from seeing privacy sensitive data. Revoking permissions can result in an app refusing to work and/or to crash. However, replacing real by fake data generally doesn't let an app crash.
Currently restrictions are quite crude because they mostly replace real data by no data. For example restricting the contacts app from getting contacts will result in an empty contact list. In the near future it might be made possible to select the data an app may see, for example just one group of contacts.
Click to expand...
Click to collapse
About feature requests and bug reports:
M66B said:
The goal is to have a tool that can properly protect the privacy of many in the near future. However, it isn't paid work, so I do whatever I like whenever I like it.
You can request features in this XDA forum. I will read them, but I will not respond to them and they might or might not be implemented. If I know for sure something will not be implemented, I will let you know.
You can report any problem you have here. There will be no issue tracker on GitHub.
Click to expand...
Click to collapse
M66B said:
For now I have decided to not implement restrictions that are useful to prevent tracking only. There are simply too many data items that can be used for tracking and it would take too much time to develop restrictions for all these data items.
The basic idea is to restrict only things that 'define' you, so which contacts you have, where you are, which apps you use, etc.
Click to expand...
Click to collapse
Namnodorel said:
Maybe we can widen the definition of things that the core of XPL covers to "What defines you, and what can be used to spie on you"? This would include camera/audio, but not tracking.
Click to expand...
Click to collapse
M66B said:
XPrivacyLua is pretty feature complete and will be maintained and supported and when there is a need new hook definitions will be added to better protect your privacy. For the rest this FAQ applies:
https://github.com/M66B/XPrivacyLua/blob/master/FAQ.md#FAQ4
As said before, development will also depend on Xposed development, which is just minimal unfortunately.
Click to expand...
Click to collapse
XDA thanks and donations are appreciated.
XPrivacyLua is supported with Xposed only. There is no support for VirtualXposed and TaiChi.
Even if old Xprivacy isn't supported on nougat, is it possible to keep it with new Lua too until Lua grow up? Or it is not recommended ?
Thank you
Orphee said:
Even if old Xprivacy isn't supported on nougat, is it possible to keep it with new Lua too until Lua grow up? Or it is not recommended ?
Thank you
Click to expand...
Click to collapse
Noooo! First post and it is asking about using Xprivacy on Nougat? That must be demotivating to the dev! It has been told too many times in the xprivacy thread that it is not recommended to use it on Nougat and above all IT IS NOT SUPPORTED!
Sorry for using capitals but let's hope everyone sees it and this thread stays on new Lua topic.
Greetings.
Wow, I was just scrolling through some stuff, stumbled into your repo for XPrivacy/Lua and couldn't believe what I saw! M66B is developing a new app as a replacement for XPrivacy... Thank you so much, you've totally made my day and pobably quite some time into the future as well! I'll definetely also buy/donate for this version as soon as I get to use it.
Just some technical questions:
Looks like you are going more modular with this new app, and you mentioned something about downloading additional (user-made) hooks. You also said you'd keep it much more simple this time to avoid high maintenance etc. Could these external hooks then allow to get the complexity back? I totally understand your motivation, but in-depth restricting of app permissions was something I really liked about the old XPrivacy, and if some user-made hooks would make that possible I'd use them. But they'd also need the ability to add new UI elements, and not just "This hook is about the method XY, execute this code before/after to block it and this code to enable it" for that to be possible.
Orphee said:
Even if old Xprivacy isn't supported on nougat, is it possible to keep it with new Lua too until Lua grow up? Or it is not recommended ?
Click to expand...
Click to collapse
I have just added a FAQ that answers this question:
https://github.com/M66B/XPrivacyLua/blob/master/FAQ.md
m66b said:
i have just added a faq that answers this question:
https://github.com/m66b/xprivacylua/blob/master/faq.md
Click to expand...
Click to collapse
5vp4096549363413x
Namnodorel said:
Wow, I was just scrolling through some stuff, stumbled into your repo for XPrivacy/Lua and couldn't believe what I saw! M66B is developing a new app as a replacement for XPrivacy... Thank you so much, you've totally made my day and pobably quite some time into the future as well! I'll definetely also buy/donate for this version as soon as I get to use it.
Just some technical questions:
Looks like you are going more modular with this new app, and you mentioned something about downloading additional (user-made) hooks. You also said you'd keep it much more simple this time to avoid high maintenance etc. Could these external hooks then allow to get the complexity back? I totally understand your motivation, but in-depth restricting of app permissions was something I really liked about the old XPrivacy, and if some user-made hooks would make that possible I'd use them. But they'd also need the ability to add new UI elements, and not just "This hook is about the method XY, execute this code before/after to block it and this code to enable it" for that to be possible.
Click to expand...
Click to collapse
For now I will concentrate on fixing bugs and building restrictions, which is of course the most important of all. Restrictions are indeed defined and written in Lua. Currently all restrictions are built-in, but later I might add a manager, so you can manage your own definitions. There might even be a repository, which could even contain definition for things not privacy related.
You can find the current definitions here (hooks.json contains the definitions).
Just donated. More to follow along the way. Thank you!!
blackhawk_LA said:
Noooo! First post and it is asking about using Xprivacy on Nougat? That must be demotivating to the dev! It has been told too many times in the xprivacy thread that it is not recommended to use it on Nougat and above all IT IS NOT SUPPORTED!
Sorry for using capitals but let's hope everyone sees it and this thread stays on new Lua topic.
Greetings.
Click to expand...
Click to collapse
"XPrivacyLua is supported on Android 6 Marshmallow and later" you're either lying or it's a misstatement on the repo.
Also can somehow explain to me (I just switched to Android), what Lua is (if not a programming language)?
OgreTactic said:
"XPrivacyLua is supported on Android 6 Marshmallow and later" you're either lying or it's a misstatement on the repo.
Click to expand...
Click to collapse
I don't see why that is a lie or misstatement, so, could you please explain why you think it is?
Edit: I have changed the wording of the opening post a bit, so it is clearer that "Android 6 Marshmallow and later" applies to XPrivacyLua and not to XPrivacy, assuming this is what you meant.
OgreTactic said:
Also can somehow explain to me (I just switched to Android), what Lua is (if not a programming language)?
Click to expand...
Click to collapse
See this comment.
OgreTactic said:
"XPrivacyLua is supported on Android 6 Marshmallow and later" you're either lying or it's a misstatement on the repo.
Also can somehow explain to me (I just switched to Android), what Lua is (if not a programming language)?
Click to expand...
Click to collapse
Some people...
Glad to see Xposed Module development is still alive!
Thx a lot for building and developing this app.
After I've selected some apps I get an error:
XLua.Main:android.os.DeadObjectException:Transaction failed on small parcel; remote process probably died
Things that I would appreciate in future releases:
- More restriction-types like: Network connection, Telephone number/sim-operator, Serialnumber, installed apps/services, accounts
- Is it possible to hide disabled apps from the list?
- Is it possible to decide when an app will request for example the location to allow or deny the request?
th4_c0r3 said:
Thx a lot for building and developing this app.
After I've selected some apps I get an error:
XLua.Main:android.os.DeadObjectException:Transaction failed on small parcel; remote process probably died
Click to expand...
Click to collapse
Can you please capture a logcat? If not, the problem might be visible in the Xposed log as well.
Edit: where exactly do you see this error?
th4_c0r3 said:
Things that I would appreciate in future releases:
- More restriction-types like: Network connection, Telephone number/sim-operator, Serialnumber, installed apps/services, accounts
- Is it possible to hide disabled apps from the list?
- Is it possible to decide when an app will request for example the location to allow or deny the request?
Click to expand...
Click to collapse
Disabled apps are hidden from the list by default.
First: thanks for the release and minimal UI of this app.
Just one request if it is possible. Would it be possible when you start ironing out the features to include a randomisation to some privacy information. Like my main coordinates for GPS are 33N 112W. If the app could randomise the rest so the app knows my general location but not accurately as 1m?
Edit: a good reason for this is for apps like speedtest.net. it grabs GPS to find a close server. When I restrict, closes server is in NY. I don't mind if it knows I live in AZ, heck, XDA knows I live here, but knowing my exact location is bothering.
M66B said:
Can you please capture a logcat? If not, the problem might be visible in the Xposed log as well.
Edit: where exactly do you see this error?
Click to expand...
Click to collapse
The error occurs every second time I open the app and it's shown in the bottom of the app. In the Xposed log there isn't a XLua-Error.
I've sent you the logcat via email.
M66B said:
For now I will concentrate on fixing bugs and building restrictions, which is of course the most important of all. Restrictions are indeed defined and written in Lua. Currently all restrictions are built-in, but later I might add a manager, so you can manage your own definitions. There might even be a repository, which could even contain definition for things not privacy related.
Click to expand...
Click to collapse
Thank you for your answer, but I'm still kinda missing what I wanted to know: Could hooks potentially add custom UI and/or save data? I'd imagine something like saving a list of contacts and when an app requests the contact list selecting this specific list to be returned.
Namnodorel said:
Thank you for your answer, but I'm still kinda missing what I wanted to know: Could hooks potentially add custom UI and/or save data? I'd imagine something like saving a list of contacts and when an app requests the contact list selecting this specific list to be returned.
Click to expand...
Click to collapse
Yes, that would be possible. When there is a need, I will add APIs that can be used in Lua to save data in a structured way into the XPrivacyLua database, so anyone wanting to develop a new hook definition doesn't have to worry about how to do this. In fact this has already been prepared.
M66B said:
I don't see why that is a lie or misstatement, so, could you please explain why you think it is?
Edit: I have changed the wording of the opening post a bit, so it is clearer that "Android 6 Marshmallow and later" applies to XPrivacyLua and not to XPrivacy, assuming this is what you meant.
See this comment.
Click to expand...
Click to collapse
Oh okay, thanks. So I can't use the current XPrivacy (on the PlayStore) on Nougat S8? I hope I can if not, I'll wait for the XPrivacy L.
It's crazy that Android forces privacy breaching (violation is an accurate word use) "services", processes and apps at it's core. If I were to learn to use Android enough is it possible to prevent it, like it's the case on iPhone, well in appareances because when you jailbreak it you can see all the processes, but it's clearly not in completely forcing this violation of your data, be it just with the permission management that NO apps can require or force on you to run, which to me absolutely crazy that it's the case on Android.
OgreTactic said:
Oh okay, thanks. So I can't use the current XPrivacy (on the PlayStore) on Nougat S8? I hope I can if not, I'll wait for the XPrivacy L.
It's crazy that Android forces privacy breaching (violation is an accurate word use) "services", processes and apps at it's core. If I were to learn to use Android enough is it possible to prevent it, like it's the case on iPhone, well in appareances because when you jailbreak it you can see all the processes, but it's clearly not in completely forcing this violation of your data, be it just with the permission management that NO apps can require or force on you to run, which to me absolutely crazy that it's the case on Android.
Click to expand...
Click to collapse
As M66B said in the Xprivacy Thread:
M66B said:
An absolute privacy fix is turning your device off. XPrivacy is an best effort attempt to fix the most important privacy problems, like exposing your location and contacts.
Click to expand...
Click to collapse
What you could do, at least that's what I do, is to disable services (look for DisableService in PlayStore) and/or restrict as much as possible via the privacy settings (depending on ROM). For example I deny Google services the location rights and only switch them on when needed.
Also there are possibilities to run your phone without any Google services at all. Search for MicroG.
But you have to understand, that using an Android device is going to violate privacy in one form or another. Same goes with Windows and Apple devices...
I don't like it at all but that's just what the world has become. If you want to use Google Services you kinda have to accept that you can't (at least not with simple fixes) protect your whole privacy. It sucks, but that's just what it is...

Categories

Resources