Attend XDA's Second Annual Developer Conference, XDA:DevCon 2014!
5,813,628 Members 38,910 Now Online
XDA Developers Android and Mobile Development Forum

[MOD][Guide] Internet Browser Edge Zoom Enabler for JB ROMs

Tip us?
 
majdinj
Old
#1  
majdinj's Avatar
Recognized Contributor / Themer - OP
Thanks Meter 2,970
Posts: 980
Join Date: Nov 2006
Location: AlAhsa
Phone [MOD][Guide] Internet Browser Edge Zoom Enabler for JB ROMs

<<This mod will make you able to zoom in and out in internet browser by scrolling down and up respectively from the right or left screen edge>>


The mods:
Pre-made mods (base JB 4.1.2 LT6):
I have made 2 flashable files, one for deodexed ROMs and one for odexed ROM (e.g, stock ROMs)..
Please download from attachment and install according to your ROM..!!


The Guide:
Needed tools:
1) Backsmali/Smali program (Check the utility I made for that here for windows users)
2) Notepad ++ from here.

The procedure:
Quote:
Credits to @ shoman94; with very little change to his way in order to work in Galaxy Note I
- Baksmali framework.jar
- Navigate to classout\android\view\ folder and open ScaleGestureDetector.smali
- Search for this method ".method public onTouchEvent(Landroid/view/MotionEvent;)Z" and change the entire method to:
Code:
.method public onTouchEvent(Landroid/view/MotionEvent;)Z
    .registers 28
    .param p1, "event"    # Landroid/view/MotionEvent;

    .prologue
    .line 207
    move-object/from16 v0, p0

    iget-object v0, v0, Landroid/view/ScaleGestureDetector;->mInputEventConsistencyVerifier:Landroid/view/InputEventConsistencyVerifier;

    move-object/from16 v24, v0

    if-eqz v24, :cond_19

    .line 208
    move-object/from16 v0, p0

    iget-object v0, v0, Landroid/view/ScaleGestureDetector;->mInputEventConsistencyVerifier:Landroid/view/InputEventConsistencyVerifier;

    move-object/from16 v24, v0

    const/16 v25, 0x0

    move-object/from16 v0, v24

    move-object/from16 v1, p1

    move/from16 v2, v25

    invoke-virtual {v0, v1, v2}, Landroid/view/InputEventConsistencyVerifier;->onTouchEvent(Landroid/view/MotionEvent;I)V


    .line 211
    :cond_19
    move-object/from16 v0, p0

    iget-boolean v0, v0, Landroid/view/ScaleGestureDetector;->mValidPackage:Z

    move/from16 v24, v0

    if-eqz v24, :cond_2a

    invoke-direct/range {p0 .. p1}, Landroid/view/ScaleGestureDetector;->onEdgeTouchEvent(Landroid/view/MotionEvent;)Z

    move-result v24

    if-eqz v24, :cond_2a

    const/16 v24, 0x1

    .line 310
    :goto_29
    return v24

    .line 213
    :cond_2a
    invoke-virtual/range {p1 .. p1}, Landroid/view/MotionEvent;->getActionMasked()I

    move-result v3

    .line 215
    .local v3, "action":I
    const/16 v24, 0x1

    move/from16 v0, v24

    if-eq v3, v0, :cond_3a

    const/16 v24, 0x3

    move/from16 v0, v24

    if-ne v3, v0, :cond_6a

    :cond_3a
    const/16 v19, 0x1

    .line 217
    .local v19, "streamComplete":Z
    :goto_3c
    if-eqz v3, :cond_40

    if-eqz v19, :cond_6d

    .line 221
    :cond_40
    move-object/from16 v0, p0

    iget-boolean v0, v0, Landroid/view/ScaleGestureDetector;->mInProgress:Z

    move/from16 v24, v0

    if-eqz v24, :cond_65

    .line 222
    move-object/from16 v0, p0

    iget-object v0, v0, Landroid/view/ScaleGestureDetector;->mListener:Landroid/view/ScaleGestureDetector$OnScaleGestureListener;

    move-object/from16 v24, v0

    move-object/from16 v0, v24

    move-object/from16 v1, p0

    invoke-interface {v0, v1}, Landroid/view/ScaleGestureDetector$OnScaleGestureListener;->onScaleEnd(Landroid/view/ScaleGestureDetector;)V

    .line 223
    const/16 v24, 0x0

    move/from16 v0, v24

    move-object/from16 v1, p0

    iput-boolean v0, v1, Landroid/view/ScaleGestureDetector;->mInProgress:Z

    .line 224
    const/16 v24, 0x0

    move/from16 v0, v24

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mInitialSpan:F

    .line 227
    :cond_65
    if-eqz v19, :cond_6d

    .line 228
    const/16 v24, 0x1


    goto :goto_29


    .line 215
    .end local v19    # "streamComplete":Z
    :cond_6a
    const/16 v19, 0x0

    goto :goto_3c

    .line 232
    .restart local v19    # "streamComplete":Z
    :cond_6d
    const/16 v24, 0x6

    move/from16 v0, v24

    if-eq v3, v0, :cond_79

    const/16 v24, 0x5

    move/from16 v0, v24

    if-ne v3, v0, :cond_97

    :cond_79
    const/4 v4, 0x1

    .line 235
    .local v4, "configChanged":Z
    :goto_7a
    const/16 v24, 0x6

    move/from16 v0, v24

    if-ne v3, v0, :cond_99

    const/4 v14, 0x1

    .line 236
    .local v14, "pointerUp":Z
    :goto_81
    if-eqz v14, :cond_9b

    invoke-virtual/range {p1 .. p1}, Landroid/view/MotionEvent;->getActionIndex()I

    move-result v15

    .line 239
    .local v15, "skipIndex":I
    :goto_87
    const/16 v20, 0x0

    .local v20, "sumX":F
    const/16 v21, 0x0

    .line 240
    .local v21, "sumY":F
    invoke-virtual/range {p1 .. p1}, Landroid/view/MotionEvent;->getPointerCount()I

    move-result v5

    .line 241
    .local v5, "count":I
    const/4 v13, 0x0

    .local v13, "i":I
    :goto_90
    if-ge v13, v5, :cond_ae

    .line 242
    if-ne v15, v13, :cond_9d

    .line 241
    :goto_94
    add-int/lit8 v13, v13, 0x1

    goto :goto_90

    .line 232
    .end local v4    # "configChanged":Z
    .end local v5    # "count":I
    .end local v13    # "i":I
    .end local v14    # "pointerUp":Z
    .end local v15    # "skipIndex":I
    .end local v20    # "sumX":F
    .end local v21    # "sumY":F
    :cond_97
    const/4 v4, 0x0

    goto :goto_7a

    .line 235
    .restart local v4    # "configChanged":Z
    :cond_99
    const/4 v14, 0x0

    goto :goto_81

    .line 236
    .restart local v14    # "pointerUp":Z
    :cond_9b
    const/4 v15, -0x1

    goto :goto_87

    .line 243
    .restart local v5    # "count":I
    .restart local v13    # "i":I
    .restart local v15    # "skipIndex":I
    .restart local v20    # "sumX":F
    .restart local v21    # "sumY":F

    :cond_9d
    move-object/from16 v0, p1

    invoke-virtual {v0, v13}, Landroid/view/MotionEvent;->getX(I)F

    move-result v24

    add-float v20, v20, v24

    .line 244
    move-object/from16 v0, p1

    invoke-virtual {v0, v13}, Landroid/view/MotionEvent;->getY(I)F

    move-result v24

    add-float v21, v21, v24

    goto :goto_94

    .line 246

    :cond_ae
    if-eqz v14, :cond_c6

    add-int/lit8 v10, v5, -0x1

    .line 247
    .local v10, "div":I

    :goto_b2
    int-to-float v0, v10

    move/from16 v24, v0

    div-float v11, v20, v24

    .line 248
    .local v11, "focusX":F
    int-to-float v0, v10

    move/from16 v24, v0

    div-float v12, v21, v24

    .line 251
    .local v12, "focusY":F
    const/4 v6, 0x0

    .local v6, "devSumX":F
    const/4 v7, 0x0

    .line 252
    .local v7, "devSumY":F
    const/4 v13, 0x0

    :goto_bf
    if-ge v13, v5, :cond_e5

    .line 253
    if-ne v15, v13, :cond_c8

    .line 252

    :goto_c3
    add-int/lit8 v13, v13, 0x1

    goto :goto_bf

    .end local v6    # "devSumX":F
    .end local v7    # "devSumY":F
    .end local v10    # "div":I
    .end local v11    # "focusX":F
    .end local v12    # "focusY":F
    :cond_c6
    move v10, v5

    .line 246

    goto :goto_b2

    .line 254
    .restart local v6    # "devSumX":F
    .restart local v7    # "devSumY":F
    .restart local v10    # "div":I
    .restart local v11    # "focusX":F
    .restart local v12    # "focusY":F
    :cond_c8
    move-object/from16 v0, p1

    invoke-virtual {v0, v13}, Landroid/view/MotionEvent;->getX(I)F

    move-result v24

    sub-float v24, v24, v11

    invoke-static/range {v24 .. v24}, Ljava/lang/Math;->abs(F)F

    move-result v24

    add-float v6, v6, v24

    .line 255
    move-object/from16 v0, p1

    invoke-virtual {v0, v13}, Landroid/view/MotionEvent;->getY(I)F

    move-result v24

    sub-float v24, v24, v12

    invoke-static/range {v24 .. v24}, Ljava/lang/Math;->abs(F)F

    move-result v24

    add-float v7, v7, v24


    goto :goto_c3

    .line 257
    :cond_e5
    int-to-float v0, v10

    move/from16 v24, v0

    div-float v8, v6, v24

    .line 258
    .local v8, "devX":F
    int-to-float v0, v10

    move/from16 v24, v0

    div-float v9, v7, v24

    .line 263
    .local v9, "devY":F
    const/high16 v24, 0x40000000

    mul-float v17, v8, v24

    .line 264
    .local v17, "spanX":F
    const/high16 v24, 0x40000000

    mul-float v18, v9, v24

    .line 265
    .local v18, "spanY":F
    mul-float v24, v17, v17

    mul-float v25, v18, v18

    add-float v24, v24, v25

    invoke-static/range {v24 .. v24}, Landroid/util/FloatMath;->sqrt(F)F

    move-result v16

    .line 270
    .local v16, "span":F
    move-object/from16 v0, p0

    iget-boolean v0, v0, Landroid/view/ScaleGestureDetector;->mInProgress:Z

    move/from16 v23, v0

    .line 271
    .local v23, "wasInProgress":Z
    move-object/from16 v0, p0

    iput v11, v0, Landroid/view/ScaleGestureDetector;->mFocusX:F

    .line 272
    move-object/from16 v0, p0

    iput v12, v0, Landroid/view/ScaleGestureDetector;->mFocusY:F

    .line 273
    move-object/from16 v0, p0

    iget-boolean v0, v0, Landroid/view/ScaleGestureDetector;->mInProgress:Z

    move/from16 v24, v0

    if-eqz v24, :cond_13a

    const/16 v24, 0x0

    cmpl-float v24, v16, v24

    if-eqz v24, :cond_11f

    if-eqz v4, :cond_13a

    .line 274
    :cond_11f
    move-object/from16 v0, p0

    iget-object v0, v0, Landroid/view/ScaleGestureDetector;->mListener:Landroid/view/ScaleGestureDetector$OnScaleGestureListener;

    move-object/from16 v24, v0

    move-object/from16 v0, v24

    move-object/from16 v1, p0

    invoke-interface {v0, v1}, Landroid/view/ScaleGestureDetector$OnScaleGestureListener;->onScaleEnd(Landroid/view/ScaleGestureDetector;)V

    .line 275
    const/16 v24, 0x0

    move/from16 v0, v24

    move-object/from16 v1, p0

    iput-boolean v0, v1, Landroid/view/ScaleGestureDetector;->mInProgress:Z

    .line 276
    move/from16 v0, v16

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mInitialSpan:F

    .line 278
    :cond_13a
    if-eqz v4, :cond_166

    .line 279
    move/from16 v0, v17

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpanX:F

    move/from16 v0, v17

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpanX:F

    .line 280
    move/from16 v0, v18

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpanY:F

    move/from16 v0, v18

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpanY:F

    .line 281
    move/from16 v0, v16

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpan:F

    move/from16 v0, v16

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpan:F

    move/from16 v0, v16

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mInitialSpan:F

    .line 283
    :cond_166
    move-object/from16 v0, p0

    iget-boolean v0, v0, Landroid/view/ScaleGestureDetector;->mInProgress:Z

    move/from16 v24, v0

    if-nez v24, :cond_1d0

    const/16 v24, 0x0

    cmpl-float v24, v16, v24

    if-eqz v24, :cond_1d0

    if-nez v23, :cond_191

    move-object/from16 v0, p0

    iget v0, v0, Landroid/view/ScaleGestureDetector;->mInitialSpan:F

    move/from16 v24, v0

    sub-float v24, v16, v24

    invoke-static/range {v24 .. v24}, Ljava/lang/Math;->abs(F)F

    move-result v24

    move-object/from16 v0, p0

    iget v0, v0, Landroid/view/ScaleGestureDetector;->mSpanSlop:I

    move/from16 v25, v0

    move/from16 v0, v25

    int-to-float v0, v0

    move/from16 v25, v0

    cmpl-float v24, v24, v25

    if-lez v24, :cond_1d0

    .line 285
    :cond_191
    move/from16 v0, v17

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpanX:F

    move/from16 v0, v17

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpanX:F

    .line 286
    move/from16 v0, v18

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpanY:F

    move/from16 v0, v18

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpanY:F

    .line 287
    move/from16 v0, v16

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpan:F

    move/from16 v0, v16

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpan:F

    .line 288
    move-object/from16 v0, p0

    iget-object v0, v0, Landroid/view/ScaleGestureDetector;->mListener:Landroid/view/ScaleGestureDetector$OnScaleGestureListener;

    move-object/from16 v24, v0

    move-object/from16 v0, v24

    move-object/from16 v1, p0

    invoke-interface {v0, v1}, Landroid/view/ScaleGestureDetector$OnScaleGestureListener;->onScaleBegin(Landroid/view/ScaleGestureDetector;)Z

    move-result v24

    move/from16 v0, v24

    move-object/from16 v1, p0

    iput-boolean v0, v1, Landroid/view/ScaleGestureDetector;->mInProgress:Z

    .line 289
    const-string v24, "ScaleGestureDetector"

    const-string v25, "SGD"

    invoke-static/range {v24 .. v25}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I

    .line 293
    :cond_1d0
    const/16 v24, 0x2

    move/from16 v0, v24

    if-ne v3, v0, :cond_226

    .line 294
    move/from16 v0, v17

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpanX:F

    .line 295
    move/from16 v0, v18

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpanY:F

    .line 296
    move/from16 v0, v16

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mCurrSpan:F

    .line 298
    const/16 v22, 0x1

    .line 299
    .local v22, "updatePrev":Z
    move-object/from16 v0, p0

    iget-boolean v0, v0, Landroid/view/ScaleGestureDetector;->mInProgress:Z

    move/from16 v24, v0

    if-eqz v24, :cond_200

    .line 300
    move-object/from16 v0, p0

    iget-object v0, v0, Landroid/view/ScaleGestureDetector;->mListener:Landroid/view/ScaleGestureDetector$OnScaleGestureListener;

    move-object/from16 v24, v0

    move-object/from16 v0, v24

    move-object/from16 v1, p0

    invoke-interface {v0, v1}, Landroid/view/ScaleGestureDetector$OnScaleGestureListener;->onScale(Landroid/view/ScaleGestureDetector;)Z

    move-result v22

    .line 303
    :cond_200
    if-eqz v22, :cond_226

    .line 304
    move-object/from16 v0, p0

    iget v0, v0, Landroid/view/ScaleGestureDetector;->mCurrSpanX:F

    move/from16 v24, v0

    move/from16 v0, v24

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpanX:F

    .line 305
    move-object/from16 v0, p0

    iget v0, v0, Landroid/view/ScaleGestureDetector;->mCurrSpanY:F

    move/from16 v24, v0

    move/from16 v0, v24

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpanY:F

    .line 306
    move-object/from16 v0, p0

    iget v0, v0, Landroid/view/ScaleGestureDetector;->mCurrSpan:F

    move/from16 v24, v0

    move/from16 v0, v24

    move-object/from16 v1, p0

    iput v0, v1, Landroid/view/ScaleGestureDetector;->mPrevSpan:F

    .line 310
    .end local v22    # "updatePrev":Z
    :cond_226
    const/16 v24, 0x1

    goto/16 :goto_29
.end method
- Save changes and smali your framework.jar and push it to device.


Cheers
Attached Files
File Type: zip [deodex]_EdgeZoom.zip - [Click for QR Code] (4.44 MB, 151 views)
File Type: zip [odex]_EdgeZoom.zip - [Click for QR Code] (4.76 MB, 55 views)
The Following 13 Users Say Thank You to majdinj For This Useful Post: [ Click to Expand ]
 
Darktrooper
Old
(Last edited by Darktrooper; 2nd July 2013 at 04:23 PM.)
#2  
Darktrooper's Avatar
Member
Thanks Meter 82
Posts: 69
Join Date: Feb 2012
Location: NRW
Thanks for this mod.
But i have an Error when i Compile the framework.jar

Code:
D:\APK>java -jar apktool.jar b framework.jar.out
I: Checking whether sources has changed...
I: Smaling...
[1264,4] Error for input '.param': Invalid directive
[1264,11] mismatched input 'p1' expecting END_METHOD_DIRECTIVE
Exception in thread "main" brut.androlib.AndrolibException: Could not smali file
: D:\APK\framework.jar.out\smali\android\view\ScaleGestureDetector.smali
        at brut.androlib.src.DexFileBuilder.addSmaliFile(DexFileBuilder.java:45)
OK. My mistake..... Works fine with the Baksmali tool
 
maskerwsk
Old
#3  
maskerwsk's Avatar
Senior Member
Thanks Meter 1,481
Posts: 1,248
Join Date: Dec 2011
Location: Sheffield

 
DONATE TO ME
Hey maj
Im not sure what part you edited for n7000 but it wasnt needed. I followed this tut last month without any changes and works great

GalactusMOD + Galactus Shortcuts and ROM Control

https://www.paypal.com/cgi-bin/websc...=KRRF69SYRRNDJ
If you like my work and would like to buy me a beer
 
alvinhaw
Old
#4  
Senior Member
Thanks Meter 53
Posts: 256
Join Date: Oct 2012
Thanks for the pre made MOD !
Working fine on internet browser n Dolphin browser !
well done !
 
majdinj
Old
#5  
majdinj's Avatar
Recognized Contributor / Themer - OP
Thanks Meter 2,970
Posts: 980
Join Date: Nov 2006
Location: AlAhsa
Quote:
Originally Posted by maskerwsk View Post
Hey maj
Im not sure what part you edited for n7000 but it wasnt needed. I followed this tut last month without any changes and works great
The only thing changed is .registers for local register and parameter register..
 
eybee1970
Old
#6  
eybee1970's Avatar
Recognized Contributor
Thanks Meter 13,285
Posts: 4,920
Join Date: Jan 2010
great Mod! Can you tell me, what I have to do (if possible) to make Edge Zoom running on a Sony Xperia? There seems to be more to add in other smalis, but I am lst for now...thx in advance, mate
I don't need money for my work!!
Donate to Medicins sans Frontieres
http://www.msf.org/msf/donations/donations_home.cfm
 
majdinj
Old
#7  
majdinj's Avatar
Recognized Contributor / Themer - OP
Thanks Meter 2,970
Posts: 980
Join Date: Nov 2006
Location: AlAhsa
Quote:
Originally Posted by eybee1970 View Post
great Mod! Can you tell me, what I have to do (if possible) to make Edge Zoom running on a Sony Xperia? There seems to be more to add in other smalis, but I am lst for now...thx in advance, mate
Hi eybee,,
tbh, I only able to port mods if I have the device, so I can have several trials of failure then success,, I am not sure about sony xperia,, but this smali needs only one extra smali to have the mod to work properly which is ScaleGestureDetector$OnScaleGestureListener.smali beside the changes here.
The Following User Says Thank You to majdinj For This Useful Post: [ Click to Expand ]
 
Bonumy
Old
#8  
Member
Thanks Meter 5
Posts: 69
Join Date: Aug 2012
Thanks for this mod. Work well on firefox. On stock browser just in mode desktop. On Opera does not work for me.
 
majdinj
Old
#9  
majdinj's Avatar
Recognized Contributor / Themer - OP
Thanks Meter 2,970
Posts: 980
Join Date: Nov 2006
Location: AlAhsa
Quote:
Originally Posted by Bonumy View Post
Thanks for this mod. Work well on firefox. On stock browser just in mode desktop. On Opera does not work for me.
yup,, it is directed mainly to the stock browser,, but some browsers like dolphin can have the feature as well if you apply the mod,,
 
ezaechiel
Old
(Last edited by ezaechiel; 4th July 2013 at 10:42 AM.)
#10  
ezaechiel's Avatar
Senior Member
Thanks Meter 704
Posts: 630
Join Date: Mar 2013
Location: Issou

 
DONATE TO ME
Works great and compilation worked with new smali/backsmali ^^.

Each guide you write make my custom rom better and better.

Thanks majdinj
Samsung Galaxy Note 3 running tkari4 Multix rom:

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes


Android M Mentions Spotted in Android Code Review

While we are still waiting for Android L to be officially released, the first mentions of … more

Create a Simple Custom Launcher from Scratch

When you are starting your journey intoany sort of development, it’s never easy at the … more

MediaTek Continues Steps Towards Being Developer-Friendly

Not too long ago MediaTek was very closed off towards the mobile developer … more