Update 14th Aug 2011: JesusFreke has released a new version of baksmali (v1.2.7) which seems to have fixed the bug above
You may download it from here http://blog.jesusfreke.com/2011/08/smalibaksmali-127.html - Thank you JesusFreke for a great tool and support
Please feel free to report any bugs or issues with this tool here or on his blog.
-------------
Good news to all modders out there - I finally found the bug for real this time - unfortunately, it's in baksmali.jar" .. The fault occurs when it attempts to build deodex framework.jarodex from into smali files
specifically this file "android/view/SurfaceView.smali"
I believe baksmali (v1.2.6) just fails to realize that the class variable it wants to access belongs to the super (parent) class .. instead it simply accesses the local class variable.
But I have a work-around fix to the bug (guranteed to work as long as the order of class fields mLeft and mTop are the same in android/view/SurfaceView.smali as android/webkit/WebViewCore$ShowRectData.smali)
The solution:
1. replace
Code:
.method private super_mLeft()I
.registers 2
.prologue
.line 911
iget v0, p0, Landroid/view/SurfaceView;->mLeft:I
return v0
.end method
with
Code:
.method private super_mLeft()I
.registers 2
.prologue
.line 911
iget v0, p0, [strike]Landroid/webkit/WebView;[/strike][COLOR="Red"]Landroid/view/View;[/COLOR]->mLeft:I
return v0
.end method
2. and this
Code:
.method private super_mTop()I
.registers 2
.prologue
.line 914
iget v0, p0, Landroid/view/SurfaceView;->mTop:I
return v0
.end method
with
Code:
.method private super_mTop()I
.registers 2
.prologue
.line 914
iget v0, p0, [strike]Landroid/webkit/WebView;[/strike][COLOR="Red"]Landroid/view/View;[/COLOR]->mTop:I
return v0
.end method
3. and
Code:
iget-object v0, v0, Landroid/view/SurfaceView;->mLocation:[I
move-object v5, v0
const/4 v6, 0x0
move-object/from16 v0, p0
iget v0, v0, Landroid/view/SurfaceView;->mLeft:I
move v7, v0
add-int v7, v7, p4
aput v7, v5, v6
with
Code:
iget-object v0, v0, Landroid/view/SurfaceView;->mLocation:[I
move-object v5, v0
const/4 v6, 0x0
move-object/from16 v0, p0
iget v0, v0, [strike]Landroid/webkit/WebView;[/strike][COLOR="Red"]Landroid/view/View;[/COLOR]->mLeft:I
move v7, v0
add-int v7, v7, p4
aput v7, v5, v6
4. and last peice
Code:
iget-object v0, v0, Landroid/view/SurfaceView;->mLocation:[I
move-object v5, v0
const/4 v6, 0x1
move-object/from16 v0, p0
iget v0, v0, Landroid/view/SurfaceView;->mTop:I
move v7, v0
add-int v7, v7, p5
aput v7, v5, v6
.line 439
with
Code:
iget-object v0, v0, Landroid/view/SurfaceView;->mLocation:[I
move-object v5, v0
const/4 v6, 0x1
move-object/from16 v0, p0
iget v0, v0, [strike]Landroid/webkit/WebView;[/strike][COLOR="Red"]Landroid/view/View;[/COLOR]->mTop:I
move v7, v0
add-int v7, v7, p5
aput v7, v5, v6
.line 439
*NOTE* please keep my nickname in references for this solution.
Happy Modding,
- Brightidea
Thanks
But how we change the code
Assuming you have a deodex'd rom, baksmali browser.apk make the listed change and re-smali the code.
If you asking how to bakssmali etc, thats more drawn out..
I cant wait to try this, later this evening
I m just wondering how, just this one line can fix the laggy browser?
But anyway if this realy works, i m happy.
Thank you for sharing your work.
I think these misguided
the problem is in the framework.jar
example:
if you use a rom with the folder system / framework ODEX
and system / app deodex
The browser deodex not lose acceleration
but if you, deodex framework.jar, lose acceleration
criskelo said:
I think these misguided
the problem is in the framework.jar
example:
if you use a rom with the folder system / framework ODEX
and system / app deodex
The browser deodex not lose acceleration
but if you, deodex framework.jar, lose acceleration
Click to expand...
Click to collapse
So if i understand u right, this mod makes no sense with deodexed ROM?
He's saying that the fix wont work. It isn't an issue in the smali code of the Browser but rather an issue in the deodexed framework.
Also, the OP edited the original post:
I have found out that this approach is not the "real" solution to the bug. So, I am back in the lab trying to figure it out. Meanwhile, you may still use it as to my knowledge it doesn't do any harm.
Click to expand...
Click to collapse
OMG
You are the MAN
It works ....works .....works
Thank you
Edit: it worked for 5 min's and now keep FC
criskelo said:
I think these misguided
the problem is in the framework.jar
example:
if you use a rom with the folder system / framework ODEX
and system / app deodex
The browser deodex not lose acceleration
but if you, deodex framework.jar, lose acceleration
Click to expand...
Click to collapse
You're partly right - I found problems in the deodexed Browser that I am going to share after I fix the bugs in framework.
I am currently digging it up - hope to find the glitch soon.
GanGs_KiD said:
OMG
You are the MAN
It works ....works .....works
Thank you
Edit: it worked for 5 min's and now keep FC
Click to expand...
Click to collapse
Sorry to disappoint - but I am still working on the fix.
- Brightidea.
brightidea said:
You're partly right - I found problems in the deodexed Browser that I am going to share after I fix the bugs in framework.
I am currently digging it up - hope to find the glitch soon.
Click to expand...
Click to collapse
Do not know if it was understood
I say look in framework.jar
The problem is framework.jar
criskelo said:
Do not know if it was understood
I say look in framework.jar
The problem is framework.jar
Click to expand...
Click to collapse
I found the bug for real this time - unfortunately, it's in smali.jar ..
and you were right. The fault occurs when it attempts to build framework.jar from smali files
specifically this file "android/view/SurfaceView.smali"
But I have a work-around (guranteed to work as long as the order of class fields mLeft and mTop are the same in android/view/SurfaceView.smali as android/webkit/WebViewCore$ShowRectData.smali)
Go to the first post in the thread to get the solution.
- Brightidea
HAHA you did it!!
Works like a charm!
Maybe would be interesting to report this issue to jesusfreeke
very good job.
why isn't thist threat in "Original Android development" subforum????
Wow ..
U R the man ;D
brightidea said:
I found the bug for real this time - unfortunately, it's in smali.jar ..
and you were right. The fault occurs when it attempts to build framework.jar from smali files
specifically this file "android/view/SurfaceView.smali"
But I have a work-around (guranteed to work as long as the order of class fields mLeft and mTop are the same in android/view/SurfaceView.smali as android/webkit/WebViewCore$ShowRectData.smali)
Go to the first post in the thread to get the solution.
- Brightidea
Click to expand...
Click to collapse
Well actually works
Perfect!
great job brightidea!
Wohoo! You're the man! Waiting for this to be incorporated in all the ROMs
Well done.
Hacre said:
Well done.
Click to expand...
Click to collapse
Hacre being nice...whoa. epic post.
Epic fix as well!
Sent from my 119.2 linpack SGS2
brightidea.. you're a genius ! thank you sir
Related
This is a simple mod for a very popular "feature." I think this approach is unique and may be beneficial as mms.apk is modified much more often than logsprovider. This is based on XWLA4 btw, Enjoy!
1. Decompile mms.apk with apk_manager or whatever.
2. Go to /smali/com/android/mms/transaction
3. Open MessagingNotification.smali and the two methods we are interested in are: updateHistoryForMms & updateHistoryForSms
These two functions basically build an sql query to insert the messaging entries into the log database.
4. Within both functions, we will simply comment out (place a # in front) the final insert. Here are the exact changes based on XWLA4:
(line 3669)
Code:
const-string v6, "content://logs/mms"
invoke-static {v6}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
move-result-object v6
[b]#[/b] invoke-virtual {v5, v6, v7}, Landroid/content/ContentResolver;->insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
.line 1348
add-int/lit8 p2, p2, 0x1
(line 4002)
Code:
const-string p1, "content://logs/sms"
invoke-static {p1}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
move-result-object p1
[b]#[/b] invoke-virtual {v1, p1, v9}, Landroid/content/ContentResolver;->insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
:try_end_1
.catchall {:try_start_1 .. :try_end_1} :catchall_0
5. And that's it, recompile, send to phone and reboot. Note that with this patch the log entries are never saved. So if someone gets a hold of your phone and tries to dig them up, you're fine!
Lastly, I haven't looked at the ICS code yet..I'm guessing it's pretty similar. I posted in themes because I don't have privileges to post in dev yet
Good work. I'll be waiting for the ICS version
This is awesome! Thank you. Ever since upgrading this has annoyed me. Will definitely try this when I get home!
This also works for the normal I9100.
Applied this to my Mms.apk from the Villain 3.0 ROM (Gingerbread).
The lines you're looking for are #3782 and #4142.
Anyone know if this holds true for the T-Mobile T989 Galaxy S2 as well?
I'm on ICScewD v2.1 and mine is different. So I searched for "Content://logs/mms" and this is what it looks like:
Code:
const-string v16, "content://logs/mms"
invoke-static/range {v16 .. v16}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
move-result-object v16
move-object v0, v5
move-object/from16 v1, v16
move-object v2, v7
invoke-virtual {v0, v1, v2}, Landroid/content/ContentResolver;->insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
.line 1319
const-string v7, "Mms/MessagingNotification"
Should I comment out
Code:
invoke-virtual {v0, v1, v2}, Landroid/content/ContentResolver;->insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
?
And this is what it looks like for the sms:
Code:
const-string v0, "content://logs/sms"
invoke-static {v0}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;
move-result-object v0
invoke-virtual {v1, v0, v9}, Landroid/content/ContentResolver;->insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
.line 1242
So it worked out well. I commented out the
Code:
invoke-virtual {v0, v1, v2}, Landroid/content/ContentResolver;->insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
for mms and
Code:
invoke-virtual {v1, v0, v9}, Landroid/content/ContentResolver;->insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
for sms. Thank you!
Nice work fanatic!
I went ahead and checked mms.apk from ICS 4.0.3 LPQ, and it's pretty much identical. You can just search for 'insert' and it will land you on the 2 lines to comment out. I haven't tried ICS yet, so someone let me know how it goes.
DriftorX said:
Anyone know if this holds true for the T-Mobile T989 Galaxy S2 as well?
Click to expand...
Click to collapse
Curious bout this also...
DriftorX said:
Anyone know if this holds true for the T-Mobile T989 Galaxy S2 as well?
Click to expand...
Click to collapse
crz6662 said:
Curious bout this also...
Click to expand...
Click to collapse
Likely. Definitely likely enough to try it. Or you can download Samsung Log Converter; I've heard it works if you're not into smali .
1. Decompile mms.apk with apk_manager or whatever.
2. Go to /smali/com/android/mms/transaction
3. Open MessagingNotification.smali and the two methods we are interested in are: updateHistoryForMms & updateHistoryForSms
These two functions basically build an sql query to insert the messaging entries into the log database.
4. Within both functions, we will simply comment out (place a # in front) the final insert. Here are the exact changes based on XWLA4:
Click to expand...
Click to collapse
Good day all ! Do I understand correctly that this will remove the logs sms and mms from logging calls? for firmware 2.2.1
Someone already tried? This method helps?
does it stop sms entry from showing up under favorites?
Hello guys.
First of all, I need to say something about the touchpad implementation:
there's many ways to implement the touchpad on the Xperia Play. Some of these ways works with CM9, and somes works only with the Sony's framework. This is a little obviously, as some games recognize the touchpad on CM9, and others don't.
I know about the fix we can make on the build.prop. But this will only work with the games that do a check on the device model and implements the touchpad in a compatible way with CM9.
FAQ
Why (programmatically) some games that uses touchpad does not work on CM9/CM10?
I can't say about all games, but some games uses the event onTouchEvent of the classes View or Activity to get the touchpad return. The CM9 does not support this return on this event. What Sony did on their framework is a way to activate the touchpad return over this event, that's not present on AOSP
What this fix does?
This fix change the CM9/CM10 framework.jar to, transparently, activate the touchpad return on the onTouchEvent. So, the games that uses this method to recognize the touchpad will begin to work.
How I use this fix?
FOR ICS USERS
FIRST: EDIT YOUR BUILD.PROP
First of all, you need to edit the build.prop because many games use some properties there to recognize the phone as a Xperia play! There's no a real rule, so, some games can look to one property, and others to another. Here you can take a look in what to do. Also, edit the build.prop can solve the circle button problem. here you can read why.
SECOND: FLASH THE ZIP
Do a nandroid backup and, then, flash the appropriated zip for your android version.
THIRD: INSTALL THE TOUCHPADACTIVATOR (FOR VERSION 0.6+)
Some games just can't activate the touchpads because some verifications that it did, like compare if the SDK Version é lesser than 13. Change this property and some others can cause many problems on the phone, so, I created an app to switch when the game need to activate the touchpad and when it's always activated. SOME APPS HAVE PROBLEMS TO DEAL WITH THE TOUCHPAD WHEN IT'S ALWAYS ACTIVATED, LIKE FPSE, so, with this app, you can switch the touchpad behavior as you need.
IMPORTANT:DO THE BACKUP OF YOUR FRAMEWORK.JAR, DO NOT DELETE IT, JUST IN CASE. If you want, you can do a nandroid backup to be more safe.
FOR JB USERS For now, you need to edit the ROM flashable zip. Extract the framework.jar from the JB fix and replace directly on the system/framework folder of the ROM zip. Then, extract the build.prop from the ROM zip, do the described changes, and put it back. After that, flashthe edited ROM zip and install the touchpad activator. The flashable zip is not working, idk why yet. For now, this is the only supported way until I can solve this.
The 'ALWAYS ACTIVATED' behavior that we can choose in the TouchpadActivator app can drain the battery life?
No. The battery life is not influenced by the chosen behavior. The term "ALWAYS ACTIVATED" just means that the touchpad events is always forwarded to the onTouchEvent, but the device is always listen to the touchpad doesn't matter what behavior you choose! (even without this fix)
What ROMs supports this fix?
It can works on CM9/CM10 based ROMs, you need to try to be sure. I tested it on CM10 FXP137 and CM9 FXP138, and maybe the creator of some custom ROM did changes on the framework for himself, and then this fix can be incompatible with his ROM, and it's very likely.
ROMs based on CM7 will not work with this fix because I'm using a new feature of the ICS.
Which games is fixed with this fix?
See post #3
This fix solve once for all the touchpad issues of CM9?
I can't say that. Maybe there's other way to get the touchpad return that is not compatible with CM9 already. Maybe Sony will do a update and change this rules. Only time will telll
My phone brick! What can I do now?
Restore your nandroid backup or rename back the old framework.jar. Just to be clear: I'm not responsible for any bricks or problems of your phone.
After apply the fix, some apps gives FC. Why?
Some games and apps gives FC if their data is downloaded before the fix. It's normal. Try the app a second time, it works on almost every time. If it's keeping FC, then clear the app data and try again. Remember that some games download the data in two steps (first part download, then the app is closed and you need to open it again to proceed). If even with this the app keeping FC, post a logcat on this thread, the ROM you're using, what app is giving those troubles and any other info that you think it's useful.
The touchpad is not recognizing at all. Why?
As I need to make many tests and reboot the phone... It's very likely that I let the gamepad slided down. But, after some pain I realize that when I didn't slide down the gamepad after the reboot, the touchpad doesn't work (That is, the gamepad was already slided down, so, I didn't do it after the reboot). So, if anyone experiencing this problem, just slide up and down the gamepad and test again. This is the only situation that something like that happened to me.
What is PointerID?
pointerID is just an identification for your finger when it is touching the touchpad. It's a way to the phone know what is each finger. On GB, this ID start at 1 (finger 1, finger 2, etc...). On ICS, it start at 0 (finger 0, finger 1...). Some games do some shameful validation based that the first id will always be 1 and then get problems on GB. This is why this option is included. As it is a new resource and I'm considering it experimental, when you reboot the phone the pointerID will allways be setted to start at 0.
The pointerid starting at 1 is working better than starting at 0. Can this be the default behavior?
Yes, you can set the pointerid starting at 1 as the default behavior. Just put on the build.prop this: mod.touchpad.startfrom1 = 1. You can do this by yourself if you feel that this new behavior is better than the default one. The idea is remove this switcher and let the pointerID permanently starting at 1 (as it is on GB), but I need to do some tests to make sure that all will work okay.
There's a GB version planned for the future?
No. I'll not make a GB version for this fix, for two reasons:
1 - It's a completely different fix. The concept of this fix is based on the onGenericMotionEvent, that exists since ICS. To make a GB version we need to analyse the stock GB support for touchpad entirely, not just the framework java code, and probably will be only possible to implement directly in the sources.
2 - I don't have interest. I think we have to look forward, and we have GB ROMs good enough for gaming. Also soon, with the V 3.0 of the turbo kernel, we can make a dual boot with GB and desired ROM and then use GB just for games.
Do I need to install the touchpad activator?
No. You don't need. Editing the build.prop and flashing the zip/replacing the framework probable will be enough to get good results. BUT some games need to be tricked to get the touchpad working. For example: Max Payne checks the SDK version to activate or not the touchpad. You can't change the SDK Version in the build.prop, otherwise you'll get big problems (like the data partition wiped) when you reboot the ROM. So, to avoid this problem, you need to set the touchpad behavior, in the touchpad activator, to ALWAYS ACTIVATED. The option to set the pointer ID s becoming obsolete, because every game should work with pointerID starting at 1. The next version of the activator will not have this property anymore and this option will be setted directly in the build.prop
IS VERY RECOMMENDED TO INCLUDE IN THE BUILD.PROP THE FOLLOWING LINE
Code:
mod.touchpad.startfrom1=1
This option doesn't affected any tested game and can improve the touchpad compability in anothers
DOWNLOAD
CM9 Version 1.1 (Flashable zip) for FXP 147 or later here
CM9 Version 1.1 (Flashable zip) for FXP 146 or less here
CM10 FXP149 or later Version 1.1 (not flashable zip! replace the file in the ROM zip) here
AOKP-ICS Version 1.0 here
AOKP-JB Version 1,1 (not flashable zip) here
Paranoid-ICS Version 1.0 here
TouchpadActivator V 1.3 (apk): here (Have test for app side activation and pointer ID switch)
TouchpadActivator V 1.1 (apk): here
TouchpadActivator V 1.3 (Source): here
TouchpadActivator V 1.1 (Source): here
FIX FOR Markphyton ROM This fix will add the ALWAYS ACTIVATED behavior. You need to replace the framework files with the ones on the zip (THIS IS NOT A FLASHABLE ZIP) and delete any .odex of the framework folder. Also, install the TouchpadActivator to change the touchpad behavior
THANKS TO:
CosmicDan, for the support and the help with Sony framework!
cj360 for the AOKP-ICS version 0.4
wedgess, for the help with the java edit instructions!
THANKS TO THE PEOPLE HELPING TO TEST THIS FIX (I tried to list all the ones that gave me some feedback. If I forgot someone, please, tell me )
abrahamt24, bamsbamx, benben972, chery2k, CosmicDan, Dany XP, gopin, hitman980206, jimmyvau, karma123, Lordomn, MilkyJoePD, olokos, solomon4400, thi3um, wuby
Instructions to change the framework.jar FOR DEVS
IF YOU WANT EQUIVALENT INSTRUCTIONS TO EDIT JAVA SOURCODE, TAKE A LOOK HERE
VERSION 1.1
CHANGES:
V 1.2 Now, the changes on the View.smali checks if the device is a Xperia PLAY. So, the framework edited can be used on other compatible devices without side effects
V 1.1 Added support to switch the initial pointerId for the touchpad
V 1.0 The implementation follow the Sony framework source code now, but probably we'll not feel any difference on the touchpad support (probably)
V0.6 Created support to the property mod.touchpad.activated to set when the touchpad is always activated and when the game need to activate it. Also, it's offer support to the app TouchpadActvation.apk
V0.5 Touchpad activation implemented
V0.4
The ViewRoot method is not static anymore and return void
The new class ViewRoot is now parent of ViewRootImpl.
The dispatchGenericMotionEvent had been modified on other classes, the verification of BIND_TOUCHPAD_ONTOUCH is removed
First, you need to decompile the framework, I'm using Virtuous Ten studio to do it. This IDE use the apktool to generate the code, so, to everyone using apktool too, the code will be the same.
Now, make the following steps:
INSTRUCTIONS
Copy the ViewRoot.smali from the attachment to the /android/view folder of the decompiled framework.
At the beginning of the ViewRootImpl.smali, insert the line in red:
Code:
# interfaces
.implements Landroid/view/ViewParent;
.implements Landroid/view/View$AttachInfo$Callbacks;
.implements Landroid/view/HardwareRenderer$HardwareDrawCallbacks;
[B][COLOR="Red"].implements Landroid/view/ViewRoot;[/COLOR][/B]
Then, still on ViewRootImpl.smali, insert this method at the end of the file
Code:
.method public setProcessPositionEvents(Z)V
.locals 1
iget-object v0, p0, Landroid/view/ViewRootImpl;->mView:Landroid/view/View;
if-eqz v0, :cond_9
iget-object v0, p0, Landroid/view/ViewRootImpl;->mView:Landroid/view/View;
invoke-virtual {v0, p1}, Landroid/view/View;->setProcessGenericMotionAsPointer(Z)V
:cond_9
return-void
.end method
Insert this method at the end of the View.smali:
Code:
.method public sendTreatAsTouchEvent(Landroid/view/MotionEvent;)I
.locals 6
.parameter "event"
.prologue
const/4 v3, 0x0
const/4 v2, 0x1
const/4 v1, 0x0
const/4 v0, 0x0
sget-object v4, Landroid/os/Build;->BRAND:Ljava/lang/String;
const-string v5, "SEMC"
invoke-virtual {v4, v5}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v4
if-eqz v4, :cond_3b
sget-object v4, Landroid/os/Build;->MODEL:Ljava/lang/String;
const-string v5, "R800"
invoke-virtual {v4, v5}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z
move-result v4
if-eqz v4, :cond_3b
invoke-virtual {p1}, Landroid/view/MotionEvent;->getSource()I
move-result v4
const v5, 0x100008
if-ne v4, v5, :cond_3c
move v0, v2
:goto_22
if-eqz v0, :cond_3b
iget-boolean v0, p0, Landroid/view/View;->mProcessGenericMotionAsPointer:Z
if-nez v0, :cond_32
const-string/jumbo v4, "mod.touchpad.activated"
invoke-static {v4, v3}, Landroid/os/SystemProperties;->getInt(Ljava/lang/String;I)I
move-result v4
if-ne v4, v2, :cond_3e
move v0, v2
:cond_32
:goto_32
if-eqz v0, :cond_3b
invoke-virtual {p0, p1}, Landroid/view/View;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z
move-result v3
if-eqz v3, :cond_40
move v1, v2
:cond_3b
:goto_3b
return v1
:cond_3c
move v0, v3
.line 17967
goto :goto_22
:cond_3e
move v0, v3
goto :goto_32
:cond_40
const/4 v1, 0x2
goto :goto_3b
.end method
.method setProcessGenericMotionAsPointer(Z)V
.locals 0
iput-boolean p1, p0, Landroid/view/View;->mProcessGenericMotionAsPointer:Z
return-void
.end method
Still on View.smali, insert the property in red:
Code:
.field private mPerformClick:Landroid/view/View$PerformClick;
[B][COLOR="red"].field private mProcessGenericMotionAsPointer:Z[/COLOR][/B]
.field mPrivateFlags:I
Finnally, insert this lines on the dispatchGenericMotionEvent (in red):
Code:
.method public dispatchGenericMotionEvent(Landroid/view/MotionEvent;)Z
.locals 5
.parameter "event"
.prologue
const/4 v3, 0x0
const/4 v2, 0x1
[B][COLOR="red"] invoke-virtual {p0, p1}, Landroid/view/View;->sendTreatAsTouchEvent(Landroid/view/MotionEvent;)I
move-result v1
.line 7184
if-eqz v1, :cond_g
sub-int v2, v1, v2
goto :goto_3b
[COLOR="SeaGreen"]<<<<< ATTENTION, THIS goto MUST BE EXACTLY THE SAME COMMAND OF THE LAST LINE OF THE METHOD[/COLOR]
:cond_g[/COLOR][/B]
.line 5597
iget-object v4, p0, Landroid/view/View;->mInputEventConsistencyVerifier:Landroid/view/InputEventConsistencyVerifier;
... ... ... (THE CODE OF THE METHOD) ... ... ...
.end method
FOR SWITCH THE START POINTER ID FOR THE TOUCHPAD
Add this methods to the end of the android/view/MotionEvent:
Code:
.method public addPointerId(I)I
.locals 2
.parameter "pointerId"
.prologue
move v0, p1
invoke-virtual {p0}, Landroid/view/MotionEvent;->pointerIdStartFrom1Plus()I
move-result v1
if-eqz v1, :cond_1
const/4 v1, 0x1
add-int/2addr v0, v1
:cond_1
return v0
.end method
.method public modPointerId(I)I
.locals 2
.parameter "pointerId"
.prologue
move v0, p1
invoke-virtual {p0}, Landroid/view/MotionEvent;->pointerIdStartFrom1Plus()I
move-result v1
if-eqz v1, :cond_1
const/4 v1, 0x1
invoke-virtual {p0}, Landroid/view/MotionEvent;->getPointerCount()I
move-result v1
if-lt v0, v1, :cond_1
const/4 v0, 0x0
:cond_1
return v0
.end method
.method public subPointerId(I)I
.locals 2
.parameter "pointerId"
.prologue
move v0, p1
if-eqz v0, :cond_1
invoke-virtual {p0}, Landroid/view/MotionEvent;->pointerIdStartFrom1Plus()I
move-result v1
if-eqz v1, :cond_1
const/4 v1, 0x1
sub-int/2addr v0, v1
:cond_1
return v0
.end method
.method public pointerIdStartFrom1Plus()I
.locals 3
.prologue
const/4 v2, 0x0
invoke-virtual {p0}, Landroid/view/MotionEvent;->pointerIdStartFrom1()I
move-result v0
if-eqz v0, :cond_1
sget v0, Landroid/view/InputDevice;->SOURCE_TOUCHPAD:I
invoke-virtual {p0}, Landroid/view/MotionEvent;->getSource()I
move-result v1
if-ne v0, v1, :cond_1
const/4 v2, 0x1
:cond_1
return v2
.end method
.method public pointerIdStartFrom1()I
.locals 2
.prologue
const/4 v0, 0x0
const-string/jumbo v1, "mod.touchpad.startfrom1"
invoke-static {v1, v0}, Landroid/os/SystemProperties;->getInt(Ljava/lang/String;I)I
move-result v0
return v0
.end method
Add (or change) the lines in red to the following methods:
Code:
.method public final getPointerId(I)I
.locals 2
.parameter "pointerIndex"
.prologue
.line 1927
iget v0, p0, Landroid/view/MotionEvent;->mNativePtr:I
invoke-static {v0, p1}, Landroid/view/MotionEvent;->nativeGetPointerId(II)I
move-result v0
[COLOR="red"] invoke-virtual {p0, v0}, Landroid/view/MotionEvent;->addPointerId(I)I
move-result v0[/COLOR]
return v0
.end method
... ... ...
.method public final getPointerIdBits()I
.locals 5
.prologue
.line 2786
const/4 v1, 0x0
.line 2787
.local v1, idBits:I
iget v3, p0, Landroid/view/MotionEvent;->mNativePtr:I
invoke-static {v3}, Landroid/view/MotionEvent;->nativeGetPointerCount(I)I
move-result v2
.line 2788
.local v2, pointerCount:I
const/4 v0, 0x0
.local v0, i:I
:goto_0
if-ge v0, v2, :cond_0
.line 2789
[COLOR="red"]
invoke-virtual {p0, v0}, Landroid/view/MotionEvent;->getPointerId(I)I
[/COLOR]
move-result v4
shl-int/2addr v3, v4
or-int/2addr v1, v3
.line 2788
add-int/lit8 v0, v0, 0x1
goto :goto_0
.line 2791
:cond_0
return v1
.end method
... ... ...
.method public final getX(I)F
[COLOR="red"] .locals 4[/COLOR]
.parameter "pointerIndex"
.prologue
.line 1974
[COLOR="red"]invoke-virtual {p0, p1}, Landroid/view/MotionEvent;->modPointerId(I)I
move-result v3[/COLOR]
iget v0, p0, Landroid/view/MotionEvent;->mNativePtr:I
const/4 v1, 0x0
const/high16 v2, -0x8000
invoke-static {v0, v1, [COLOR="red"]v3[/COLOR], v2}, Landroid/view/MotionEvent;->nativeGetAxisValue(IIII)F
move-result v0
return v0
.end method
... ... ...
.method public final getY(I)F
[COLOR="red"] .locals 4[/COLOR]
.parameter "pointerIndex"
.prologue
.line 1989
[COLOR="red"]invoke-virtual {p0, p1}, Landroid/view/MotionEvent;->modPointerId(I)I
move-result v3[/COLOR]
iget v0, p0, Landroid/view/MotionEvent;->mNativePtr:I
const/4 v1, 0x1
const/high16 v2, -0x8000
invoke-static {v0, v1, [COLOR="red"]v3[/COLOR], v2}, Landroid/view/MotionEvent;->nativeGetAxisValue(IIII)F
move-result v0
return v0
.end method
Now, you need to rename the method split to split2, and add this method:
Code:
.method public final split(I)Landroid/view/MotionEvent;
.locals 2
.parameter "idBits"
.prologue
move v1, p1
invoke-virtual {p0}, Landroid/view/MotionEvent;->pointerIdStartFrom1Plus()I
move-result v0
if-eqz v0, :cond_1
const v0, 0x1
shr-int/2addr v1, v0
:cond_1
invoke-virtual {p0, v1}, Landroid/view/MotionEvent;->split2(I)Landroid/view/MotionEvent;
move-result-object v0
return-object v0
.end method
IMPORTANT: If you're not using apktool or virtuous ten studio, the best is to decompile the jar and look to the smali changed to see how the code will looks like
We will try to describe any other problems with the games we found too. BUT, it's not means that the fix cause the problems. It'll be very appreciate if someone that read some non touchpad related problem here can confirm that happens without the fix too
SOME GAMES HAVE LAGS WHEN USING THE TOUCHPAD WITH CM10. It's not a issue of the fix, it's a issue we identify on CM10. You can try FPSe without the fix and use the touchpads to see for yourself. The games we identify with this problem we'll say.
TIP ABOUT GAME TESTING
if you tried any game optimized to xperia play using this fix and it works, please, tell us so we can update this list!
if you had some trouble with a xperia play optimized game, then, again, tell us so we can improve the fix
Finally, if you get FCs with some game when you tried, then send to us a logcat so we can look at the reason and search for a solution This is very important! This fix already brought a very improvement on the touchpad compability, but we is still working to improve it, and we need information and your help to it
Games where the touchpad is working (maybe some game was already working, I can't tell ):
9mm (ICS) Works but very laggy
Amazing spiderman (ICS)
Asphalt 7 (ICS)
Asphalt 6 (ICS) (JB) LAGS WHEN USING TOUCHPAD ON JB
Backstab (ICS) (JB)
brothers in arms 2 free+ (ICS) Works with some bugs when you use two fingers on the touchpad NEED POINTER ID STARTING FROM 1
Call of Duty - Zombies (ICS)
Cyberlords - Arcology (ICS)
Dead on arrival (ICS)
Dead Space (ICS) (JB) Touchpad works on version 1.1.33. Actually the game works perfectly with this version on ICS. But the current version on the play store is 1.1.39, and we have reports that in this version the touchpad is not recognized.
Dead Trigger (ICS) (JB)
Desert winds (ICS)
Dungeon Defenders (ICS) NEED POINTER ID STARTING FROM 1
Eternity warriors (ICS)
Fifa 10 (ICS) (JB) LAGS WHEN USING TOUCHPAD ON JB. On ICS, I didn't feel any lag but the sound is cutting while we touch the left touchpad
Fifa 12 (ICS) (JB)
Fight heroes (ICS)
FPse (ICS) (already was working). You need to let the touchpad activation for the app
GraviTire 3D (ICS)
GTA III (JB) Touch is used for changing the radio. LAGS WHEN USING TOUCHPAD ON JB
GTA Vice city (JB) This game doesn't use the touchpads. LAGS WHEN TOUCH THE TOUCHPADS ON JB
Guerilla bob (JB)
Gun bros (ICS) Sometimes (when a message appear, I think) You need to release the touchpad and press again... but I think it's a game implementation problem
Lara croft and the guardian of light (ICS) (JB) LAGS WHEN USING TOUCHPAD ON JB
Max payne (ICS) (JB) Need the touchpad always activated (you can switch it with V0.6+)
Minecraft Pocket edition (ICS) (JB) FREE OF JB LAG (already was working)
Modern combat 3 (ICS) (JB) LAGS WHEN USING TOUCHPAD ON JB
Modern combat 4 (ICS)
Mupen64plus (ICS) (JB) (already was working)
Need For Speed Most Wanted (JB) This game don't user triggers or touchpads. Actually, Touchpad is used for scroll the map, but probably because some misimplementation
Nova 3 (ICS) (JB) You need V 1.0.2 to get this working with the XPlay because Gameloft took off the support to our device
Rises of Glory (ICS) (JB)
Samurai vegeance II (ICS)
Shadow gun (ICS) (JB)
Six Guns (ICS)
Sonic 4 Ep.2 (ICS) This game does not use touchpads, but the gamepad is recognized with the fix (probably with the STEP 1)
Start Batallion (ICS) Works with some bugs when you use two fingers on the touchpad NEED POINTER ID STARTING FROM 1
The Bard's Tale (ICS) (JB) FREE OF JB LAG Apparently this game have native implementation of the touchpad, what means that it don't need the fix to work
The Dark Knight Rises (ICS)
USB/BT Joystick Center 6 (ICS) With this app you can map touchscreen areas to the gamepad and touchpad, making a non optmized game can be played with the xperia play buttons. You can see how to config it here. The result is good in some games and bad in another.
Wild Blood (ICS)
Games where the touchpad is not working
Galaxy on Fire II (ICS) (jb) FREE OF JB LAGTouchpad works and the screen button is gone, but the gamepad don't work. You need to push the area of the screen where the buttons mus be in if you want to play
Nova 2 (JB) touchpad non working + graphical bug at the menu ( not in the game) NEED A NEW TEST FOR V 0.3
OnLive (ICS) Last report: touchpad working gamepad don't. I'm waiting for more details (more details about how to get more details here)
Pewpew (ICS) -The touchpad of this game doesn't work well in the ICS, even without the fix, the touchpad is detected but it's messed up. You can use the cross to move and the buttons to shot. Each button shot in one direction, so, it's like a second cross in the gamepad.
THE KING OF FIGHTERS Android (ICS) This game doesn't use the touchpad, just the gamepad, but the gamepads isn't treated well on ICS... WORKD WELL ON MIUI AUSTRALIA. INVESTIGATING WHY
farenheith said:
OP updated. Please, guys! Do some tests so I can be more sure about this fix. I'll do it myself too.
Click to expand...
Click to collapse
I'm still debating on installing FXP 138 soon, and when I do I will definitely help test
johnnzey said:
I'm still debating on installing FXP 138 soon, and when I do I will definitely help test
Click to expand...
Click to collapse
What ROM are you using? if it's CM9 based, the fix must work, because the framework.jar did not changed since 2008 (at least this is the modified date of the original file ).
If your ROM is CM9 and you can make a test will be great, because I'll can update the OP with the info
Nice work! Was going to help bit you already did it, fantastic
I'll make a windows tool to patch an existing ROM on your phone with the patch. So people can plug in their phone and run the batch file and test it out.
Sent from Xperia Play (R800a) with Tapatalk
I tried to make a flashable zip but I don't know what I did wrong xD. When I was flashing the zip the framework.jar was not been replaced.
I lost like 3 hours because of this
So I give up and started to copy the file manually xD
farenheith said:
I tried to make a flashable zip but I don't know what I did wrong xD. When I was flashing the zip the framework.jar was not been replaced.
I lost like 3 hours because of this
So I give up and started to copy the file manually xD
Click to expand...
Click to collapse
Lol... did you tell the script to mount system?
Yeah I guess a patch tool for Windows is not really needed, but it may remove the need to update the framework for every new CM9/CM10 release.
yeah, actually is just used a default flashable zip that use sometimes. I just change de files on the system folder.
This is the commands of the script:
show_progress(0.0, 0);
mount("MTD", "system", "/system");
package_extract_dir("system", "/system");
show_progress(1.0, 1);
unmount("/system");
farenheith said:
yeah, actually is just used a default flashable zip that use sometimes. I just change de files on the system folder.
This is the commands of the script:
show_progress(0.0, 0);
mount("MTD", "system", "/system");
package_extract_dir("system", "/system");
show_progress(1.0, 1);
unmount("/system");
Click to expand...
Click to collapse
Yeah that looks fine, strange. Maybe it needs a dalvik-cache wipe too, even though I thought ICS and later can detect stale dalvik and regenerate it sometimes helps. But wait, you say the framework.jar isn't even replaced? Dunno!
EDIT: BTW, I have Asphalt 6 and Dungeon Defenders - both of which touchpads didnt work before. I am putting this mod into Turbo MIUI and will test and let you know!
EDIT2: Use the CM9/CM10 update-binary and use this mount line in your script:
Code:
mount("yaffs2", "MTD", "system", "/system");
Anyone knows if star battalion have touchpad support?
Great! were getting somewhere without Sony's help... when do you think you would fully release it?
x1rocket said:
Great! were getting somewhere without Sony's help... when do you think you would fully release it?
Click to expand...
Click to collapse
It's already out dude, just push/copy the framework.jar to /system/framework/ and try your games and report if any still don't work.
Exactly. Actually, I just put this fix as an Alpha release because, maybe , I need to implement some other trick if some game have a different method to access the touchpad. I just want to be more sure before of say something like "full touchpad support", If I don't have proofs yet.
Edit: BTW, CosmicDan. Your ROM Turbo MIUI is JB, right? When you test the games will be very good then! I wonder if using JB I can play something like GTA, without freeze the phone
farenheith said:
Exactly. Actually, I just put this fix as an Alpha release because, maybe , I need to implement some other trick if some game have a different method to access the touchpad. I just want to be more sure before of say something like "full touchpad support", If I don't have proofs yet.
Edit: BTW, CosmicDan. Your ROM Turbo MIUI is JB, right? When you test the games will be very good then! I wonder if using JB I can play something like GTA, without freeze the phone
Click to expand...
Click to collapse
I tested gta on jb and it didnt freeze the phone.
Sent from my R800i
CosmicDan said:
Yeah that looks fine, strange. Maybe it needs a dalvik-cache wipe too, even though I thought ICS and later can detect stale dalvik and regenerate it sometimes helps. But wait, you say the framework.jar isn't even replaced? Dunno!
EDIT: BTW, I have Asphalt 6 and Dungeon Defenders - both of which touchpads didnt work before. I am putting this mod into Turbo MIUI and will test and let you know!
EDIT2: Use the CM9/CM10 update-binary and use this mount line in your script:
Code:
mount("yaffs2", "MTD", "system", "/system");
Click to expand...
Click to collapse
Thanks to CosmicDan now I could create a flashable zip .
And I have released a new version. I made a change on the code of Activity.smali, but the way it was before it's fine too. It just a check to make sure that the only event that will be forward to the onTouchEvent is the TOUCHPAD ones.
i get bootloop with [ROM][AOKP][JB][BETA]KXP for PLAY[Build 2]
this is what i did
set permissions
push the framework.jar to /system/framework/
restart
stay in boot logo
karma123 said:
i get bootloop with [ROM][AOKP][JB][BETA]KXP for PLAY[Build 2]
this is what i did
set permissions
push the framework.jar to /system/framework/
restart
stay in boot logo
Click to expand...
Click to collapse
aokp needs to modded to work with this, I'll do it later if I can.
Sent from my Xperia Play using xda premium
that will be awsome thanks
karma123 said:
that will be awsome thanks
Click to expand...
Click to collapse
Just to be sure, what framework.jar did you pushed? If you pushed the CM9 one, you can try the CM10 one. If you pushed the CM10, then send me the original framework.jar of the AOKP. Probably they did some change on the framework. If you send me this file, I can do the changes described on the post #2 for you.
Alright well it looks like after we deodex the stock rom there's a problem that comes up with the camcorder force closing. After doing some research I came across a rom in the One X section that had the same issue and it was fixed making some changes to the framework.jar. After hours and hours of getting logcats and trying to cross comparing the two framework.jar files I finally fixed it. All credit goes to lyapota for the fix, I just applied it to our framework.
Instructions:
Step 1: Download
Step 2: Flash in Recovery
Step 3: Reboot (all files will update)
Step 4: Enjoy!
How To:
Decompile framework.jar \smali\android\media\MediaRecorder$1.smali
--------------------------------------------------------------------
replace
invoke-virtual {v1, v2}, Landroid/app/ContextImpl;->sendBroadcast(Landroid/content/IntentV
with
invoke-virtual {v1, v2}, Landroid/content/Context;->sendBroadcast(Landroid/content/IntentV
Thanks to dsb9938 for his flashable zip!
Thanks to lyapota for the fix!
First. Thanks so much! This was the only thing holding me back from flashing the rom.
x3demond3x said:
Alright well it looks like after we deodex the stock rom there's a problem that comes up with the camcorder force closing. After doing some research I came across a rom in the One X section that had the same issue and it was fixed making some changes to the framework.jar. After hours and hours of getting logcats and trying to cross comparing the two framework.jar files I finally fixed it. All credit goes to lyapota for the fix, I just applied it to our framework.
Instructions:
Step 1: Download
Step 2: Flash in Recovery
Step 3: Reboot (all files will update)
Step 4: Enjoy!
Thanks to dsb9938 for his flashable zip!
Thanks to lyapota for the fix!
Click to expand...
Click to collapse
Just did this and still force closes. I am sure it is because I have the One X camera mod. Anyone have a stock DNA cam zip that I can flash on my deodexed DNA?
CISGS said:
Just did this and still force closes. I am sure it is because I have the One X camera mod. Anyone have a stock DNA cam zip that I can flash on my deodexed DNA?
Click to expand...
Click to collapse
My bad, had the wrong file linked -_-. Try it again.
x3demond3x said:
My bad, had the wrong file linked -_-. Try it again.
Click to expand...
Click to collapse
Haha thanks bro. Works great. Good job.
Niiiiice work
Sent from my HTC6435LVW using xda premium
It worked great for me. Thanks for the fix.
Sent from my HTC6435LVW using Tapatalk 2
This also improved my battery life. Before gallery was highest usage after I deodexed.
Thanks for the fix!
Sent from my HTC6435LVW using xda premium
Now is this the fix for the camera app in this post?
http://forum.xda-developers.com/showthread.php?t=2022633
afipanic said:
Now is this the fix for the camera app in this post?
http://forum.xda-developers.com/showthread.php?t=2022633
Click to expand...
Click to collapse
Yes, this is a fix for basically all deodexed roms.
Re: [FIX] Camcorder Force Close After Deodexing
x3demond3x said:
Alright well it looks like after we deodex the stock rom there's a problem that comes up with the camcorder force closing. After doing some research I came across a rom in the One X section that had the same issue and it was fixed making some changes to the framework.jar. After hours and hours of getting logcats and trying to cross comparing the two framework.jar files I finally fixed it. All credit goes to lyapota for the fix, I just applied it to our framework.
Click to expand...
Click to collapse
Nice. I have this problem on my j butterfly and probably going to need to do what you did. I'll try this fix when I get home, but I don't think it will work.
If it doesn't work, what would I be looking for to change in my device's framework.jar?
Any help or consideration is appreciated. :thumbup:
Sent from my Nexus 7 using xda premium
SharpIS03 said:
Nice. I have this problem on my j butterfly and probably going to need to do what you did. I'll try this fix when I get home, but I don't think it will work.
If it doesn't work, what would I be looking for to change in my device's framework.jar?
Any help or consideration is appreciated. :thumbup:
Sent from my Nexus 7 using xda premium
Click to expand...
Click to collapse
If you can't get it to work. Just PM me and I'll help you out.
Re: [FIX] Camcorder Force Close After Deodexing
What files were edited for this fix? Need info to fix new ota build. Thanks
Sent from my HTC6435LVW using xda app-developers app
MicroMod777 said:
What files were edited for this fix? Need info to fix new ota build. Thanks
Sent from my HTC6435LVW using xda app-developers app
Click to expand...
Click to collapse
will this not work on the OTA then?
No, it does not work.
Please fix this file. Thanks.
Looking at the .smali it looks like it has the correct code already based on the OP.
Sent from my Droid DNA running ZoneDNA ROM..
Code:
.class Landroid/media/MediaRecorder$1;
.super Landroid/os/Handler;
.source "MediaRecorder.java"
# annotations
.annotation system Ldalvik/annotation/EnclosingMethod;
value = Landroid/media/MediaRecorder;->start_stop_notify(I)V
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
accessFlags = 0x0
name = null
.end annotation
# instance fields
.field final synthetic this$0:Landroid/media/MediaRecorder;
.field final synthetic val$act:I
# direct methods
.method constructor <init>(Landroid/media/MediaRecorder;Landroid/os/Looper;I)V
.registers 4
.parameter
.parameter "x0"
.parameter
.prologue
.line 1097
iput-object p1, p0, Landroid/media/MediaRecorder$1;->this$0:Landroid/media/MediaRecorder;
iput p3, p0, Landroid/media/MediaRecorder$1;->val$act:I
invoke-direct {p0, p2}, Landroid/os/Handler;-><init>(Landroid/os/Looper;)V
return-void
.end method
# virtual methods
.method public handleMessage(Landroid/os/Message;)V
.registers 7
.parameter "msg"
.prologue
.line 1099
invoke-static {}, Landroid/app/ActivityThread;->currentActivityThread()Landroid/app/ActivityThread;
move-result-object v0
.line 1101
.local v0, actThread:Landroid/app/ActivityThread;
if-nez v0, :cond_e
.line 1102
const-string v3, "HtcDeviceInfoManager"
const-string v4, "MediaRecorder.start_stop_notify, no activity thread!"
invoke-static {v3, v4}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
.line 1118
:goto_d
return-void
.line 1105
:cond_e
invoke-virtual {v0}, Landroid/app/ActivityThread;->getSystemContext()Landroid/app/ContextImpl;
move-result-object v1
.line 1106
.local v1, context:Landroid/content/Context;
if-nez v1, :cond_1c
.line 1107
const-string v3, "HtcDeviceInfoManager"
const-string v4, "MediaRecorder.start_stop_notify, no context!"
invoke-static {v3, v4}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
goto :goto_d
.line 1112
:cond_1c
new-instance v2, Landroid/content/Intent;
invoke-direct {v2}, Landroid/content/Intent;-><init>()V
.line 1113
.local v2, intent:Landroid/content/Intent;
const-string v3, "com.htc.HtcDeviceInfoManager.MediaReceiver"
invoke-virtual {v2, v3}, Landroid/content/Intent;->setAction(Ljava/lang/String;)Landroid/content/Intent;
.line 1114
const-string/jumbo v3, "type"
const/4 v4, 0x2
invoke-virtual {v2, v3, v4}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;
.line 1115
const-string v3, "act"
iget v4, p0, Landroid/media/MediaRecorder$1;->val$act:I
invoke-virtual {v2, v3, v4}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;
.line 1116
const-string/jumbo v3, "pid"
invoke-static {}, Landroid/os/Process;->myPid()I
move-result v4
invoke-virtual {v2, v3, v4}, Landroid/content/Intent;->putExtra(Ljava/lang/String;I)Landroid/content/Intent;
.line 1117
invoke-virtual {v1, v2}, Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;)V
goto :goto_d
.end method
Here's the fix for the new OTA thanks to OP info....
MicroMod777 said:
Here's the fix for the new OTA thanks to OP info....
Click to expand...
Click to collapse
Did he happen to tell you how he fixed it this time?
zone23 said:
Did he happen to tell you how he fixed it this time?
Click to expand...
Click to collapse
Yes, the code is on the 1st post.
Sent from my HTC6435LVW using Tapatalk 2
MicroMod777 said:
Yes, the code is on the 1st post.
Sent from my HTC6435LVW using Tapatalk 2
Click to expand...
Click to collapse
OK well I looked at and post the code and it looked ok to me thats why i asked. Thanks
First of All... Credit Goes to @digiblur - I used his guide to make this work for the Note3. Original Thread is Here!
Please give thanks/credit if you use this in your ROM - Donations are also appreciated!
This mod will remove the full battery notification. I wanted to start this thread for a discussion with a few of the other dev's input on how they did this one as well. When I implemented this a while back users stated it made the background go black and the system status bar was missing after a factory reset. I found this odd due to this change being almost impossible to cause the issue but I backed the change out temporarily. I haven't had time to investigate further. What have your results been?
Decompile SystemUI.apk
Edit SystemUI/smali/com/android/systemui/power/PowerUI$1.smali
Search for notifyFullBatteryNotification
Code:
iget-object v0, v0, Lcom/android/systemui/power/PowerUI$1;->this$0:Lcom/android/systemui/power/PowerUI;
move-object/from16 v22, v0
[COLOR="Red"] --invoke-virtual/range {v22 .. v22}, Lcom/android/systemui/power/PowerUI;->notifyFullBatteryNotification()V
[/COLOR]
.line 462
:cond_39e
:goto_39e
const/16 v22, 0x4
Search for notifyFullBatteryNotification - I don't believe this one is fully necessary as it only fires with the Locale has changed.
Code:
.line 611
move-object/from16 v0, p0
iget-object v0, v0, Lcom/android/systemui/power/PowerUI$1;->this$0:Lcom/android/systemui/power/PowerUI;
move-object/from16 v22, v0
[COLOR="red"] --invoke-virtual/range {v22 .. v22}, Lcom/android/systemui/power/PowerUI;->notifyFullBatteryNotification()V
[/COLOR]
.line 614
:cond_824
move-object/from16 v0, p0
I DONT PROVIDE FLASHABLES, AS MMY STUFF IS HEAVILY THEMED JELLYBOMB... THIS IS SIMPLY A GUIDE FOR DEVS, HENCE IN THE DEVELOPMENT SECTION!
reserved
reserved
:thumbup:::Sent from my SM-N900P using Tapatalk
Thread Closed, We Now have a Sticky for all GUIDES and HOW TO's.
That Thread is HERE!
So I've always been annoyed with how the HiFi volume only has 15 steps. For me, 5 is too low and 10 is too loud (cheap earbuds). With the release of the V30, I've learned that it has 75 steps for the HiFi volume, which prompted me to modify our system to get 75 steps as well.
Well, I didn't do that exactly, but I think this is better. I didn't manage to get the 75 steps on just the HiFi volume: I changed every slider, and it's customizable. By default, it's 1 step on the HiFi slider. This is about 1/2 of a step on the ringer volume I think. But if you don't like that, you can change what it uses.
The property is
Code:
volume_step_size
in Settings.Global.
You can set that using ADB. For instance, if you want to go back to the default step size for HiFi mode, you could use
Code:
adb shell settings put global volume_step_size 10
The default step size if 5, but for whatever reason, the system uses double the number you want. It's some weird scaling thing I think.
Attached is the modified services.jar. It goes in /system/framework/ with 0644 permissions.
Enjoy!
Do it Manually
This guide assumes you know how to decompile and recompile APKs/JARs or DEX files. I'm just going to tell you what code you need to edit to add this mod yourself.
- Decompile your services.jar. If you're on an odexed system, you'll either have to deodex the JAR or edit the DEX. That's beyond the scope of this though.
- Find these two files:
Code:
- /com/android/server/audio/AudioService.smali
- /com/android/server/audio/AudioService$VolumeStreamState.smali
- In AudioService, you need to add two new methods.
Code:
.method static synthetic -get49(Lcom/android/server/audio/AudioService;)Z
.locals 1
iget-boolean v0, p0, Lcom/android/server/audio/AudioService;->mHifiDacMode:Z
return v0
.end method
You'll want to make sure that -get49 isn't already used as a method name. My latest method was -get48, so the one I added I renamed to -get49.
Code:
.method private getCustomVolumeStepValue()I
.locals 3
const-string/jumbo v0, "volume_step_size"
const v1, 0x2
iget-object v2, p0, Lcom/android/server/audio/AudioService;->mContext:Landroid/content/Context;
invoke-virtual {v2}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver;
move-result-object v2
invoke-static {v2, v0, v1}, Landroid/provider/Settings$Global;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I
move-result v2
return v2
.end method
This is the method that grabs the current volume step set in Settings.Global. If there's no value found, it will use "2" by default.
- Now, go into AudioService$VolumeStreamState and find this method: "rescaleDeltaIndex(IIII)I." Comment the entire method out and paste this instead:
Code:
.method private rescaleDeltaIndex(IIII)I
.locals 3
.param p1, "deltaIndex" # I
.param p2, "flags" # I
.param p3, "streamType" # I
.param p4, "device" # I
.prologue
.line 4948
invoke-static {}, Lcom/android/server/audio/AudioService;->-get26()Z
move-result v2
if-eqz v2, :cond_4
const/high16 v2, 0x20000
and-int/2addr v2, p2
if-nez v2, :cond_4
const/4 v2, 0x3
if-ne p3, v2, :cond_4
.line 4950
iget-object v2, p0, Lcom/android/server/audio/AudioService$VolumeStreamState;->this$0:Lcom/android/server/audio/AudioService;
invoke-static {v2}, Lcom/android/server/audio/AudioService;->-get49(Lcom/android/server/audio/AudioService;)Z
move-result v2
if-eqz v2, :cond_0
and-int/lit16 v2, p2, 0x1000
if-nez v2, :cond_1
.line 4951
:cond_0
invoke-static {}, Lcom/android/server/audio/AudioService;->-get0()I
move-result v2
mul-int/2addr p1, v2
.line 4953
:cond_1
const/4 v1, 0x0
.line 4954
.local v1, "rescaledeltaIndex":I
invoke-virtual {p0, p4}, Lcom/android/server/audio/AudioService$VolumeStreamState;->getIndex(I)I
move-result v0
.line 4955
.local v0, "currentIndex":I
rem-int v2, v0, p1
if-eqz v2, :cond_3
.line 4956
if-gtz p1, :cond_2
.line 4957
rem-int v2, v0, p1
neg-int v1, v2
.line 4964
:goto_0
return v1
.line 4959
:cond_2
rem-int v2, v0, p1
sub-int v1, p1, v2
goto :goto_0
.line 4962
:cond_3
move v1, p1
goto :goto_0
.line 4966
.end local v0 # "currentIndex":I
.end local v1 # "rescaledeltaIndex":I
:cond_4
return p1
.end method
-get49 is the method you pasted earlier.
-get0 is the method that returns HIFI_MEDIA_VOLUME_OFFSET. Just make sure your -get0 is the same one as mine.
- Now, you need to actually get the custom method you pasted to be called. Find "adjustStreamVolume(IIILjava/lang/String;Ljava/lang/String;I)V" in AudioService and find the call to "rescaleIndex(III)I" inside it.
My call looks like this:
Code:
invoke-direct {v0, v6, v1, v13}, Lcom/android/server/audio/AudioService;->rescaleIndex(III)I
Change whatever you have to look like this:
Code:
invoke-direct {v0}, Lcom/android/server/audio/AudioService;->getCustomVolumeStepValue()I
- Rebuild and install!
Do I remove an old file first or just set this one in there
THANKS!!
The big step sizes have bothered me a lot!
If I want to use the adb command to set step sizes of 1, should I use 2?
Edit: File works for me!
Cheers
Emil
I've been looking for something like this. Thank you! ?
---------- Post added at 02:23 PM ---------- Previous post was at 02:22 PM ----------
shadavis08 said:
Do I remove an old file first or just set this one in there
Click to expand...
Click to collapse
I added .bak to the end of the original file so its still there in case I need it.
I changed the file and softrebooted. Not working.
Am I doing something wrong?
Salvaparalyzer said:
I changed the file and softrebooted. Not working.
Am I doing something wrong?
Click to expand...
Click to collapse
Did you change the permissions?
I would do a full reboot. A soft boot may not be enough.
Sent from my LG-H918 using Tapatalk
Salvaparalyzer said:
I changed the file and softrebooted. Not working.
Am I doing something wrong?
Click to expand...
Click to collapse
Are you sure it isn't working? Did you put it in the right place?
A little off-topic, but do you have any idea if something similar can be done for the brightness slider? Basically I would like to be able to set it to stick to increments of 5% or 10% when adjusting. Is there a similar setting I can change using ADB?
RichBordoni said:
A little off-topic, but do you have any idea if something similar can be done for the brightness slider? Basically I would like to be able to set it to stick to increments of 5% or 10% when adjusting. Is there a similar setting I can change using ADB?
Click to expand...
Click to collapse
Every time I fiddle with brightness something bootloops.
Zacharee1 said:
Are you sure it isn't working? Did you put it in the right place?
Click to expand...
Click to collapse
Permission are also correct I think
Update: Hmm, my phone soft restarts with incoming or out coming calls with this mod, fixed it by restoring my original file.
Just a heads up! Backup your old file.
H990DS V11i-GLOBAL-COM(flashed V10j Indonesia from V10g SEA)
3mL said:
Update: Hmm, my phone soft restarts with incoming or out coming calls with this mod, fixed it by restoring my original file.
Just a heads up! Backup your old file.
H990DS V11i-GLOBAL-COM(flashed V10j Indonesia from V10g SEA)
Click to expand...
Click to collapse
Weird, it doesn't happen here. The 990DS seems to always have problems with universal mods though.
Zacharee1 said:
Weird, it doesn't happen here. The 990DS seems to always have problems with universal mods though.
Click to expand...
Click to collapse
Yea, it's unfortunate.
Would you mind telling me what file you edited in the .dex file?
Perhaps it would work by editing my original file.
3mL said:
Yea, it's unfortunate.
Would you mind telling me what file you edited in the .dex file?
Perhaps it would work by editing my original file.
Click to expand...
Click to collapse
I'll write up a guide in a few hours. It involves editing Smali and all that.
Not only that. Phone reboots when trying to make a call with your file.
Restored the old file and the problem was gone.
H990ds here
3mL said:
Yea, it's unfortunate.
Would you mind telling me what file you edited in the .dex file?
Perhaps it would work by editing my original file.
Click to expand...
Click to collapse
Guide up.
Zacharee1 said:
Guide up.
Click to expand...
Click to collapse
Cheers! I'll have a look at it tomorrow.
Thanks Zach for the nice work.
I'm on OvrDrive's rom, h918, 10j. I believe it is odexed because the OP doesn't say anything about deodex.
I renamed the current services.jar, put yours in and set permissions. Rebooted and couldn't get past the LG logo.
Should your file work on this setup, or do I have to do it manually as you outlined?
androiddiego said:
Thanks Zach for the nice work.
I'm on OvrDrive's rom, h918, 10j. I believe it is odexed because the OP doesn't say anything about deodex.
I renamed the current services.jar, put yours in and set permissions. Rebooted and couldn't get past the LG logo.
Should your file work on this setup, or do I have to do it manually as you outlined?
Click to expand...
Click to collapse
I'm pretty sure this JAR is from OvrDriVE's 10J ROM so it should work fine.
Zacharee1 said:
I'm pretty sure this JAR is from OvrDriVE's 10J ROM so it should work fine.
Click to expand...
Click to collapse
Thanks! I'll try it again.