[Sprint Samsung Galaxy S III] moonknightus:
This guide was written based on the Sprint Samsung Galaxy S3 ND8 KitKat stock ROM but with the proper modifications may work for other KitKat ROMs. Please don't ask me to modify this to work with ROM xyz or to compile this for you into a ROM. I won't do it.

Background Info

This guide is based on work orignally written by havocgb here. His code was written for the Sony Xperia Mini and had to be somewhat modified for use on our phones so make sure to drop a thank you over in that thread.

Requirements

apktool 2.0 beta 9 and the knowledge of how to use it. There are various guides on how to use apktool on XDA. Find one and read it. Make sure to read the information on the apktool site as well since some of the options in 2.0 may be different from the guides you find.

A text editor that supports Unix-style text files. I recommend Notepad++.

Files

You'll be working with SystemUI.apk

SystemUI.apk

Decompile SystemUI.apk using apktool.

Open smali\com\android\systemui\statusbar\phone\PhoneStatusBar.smali in your preferred text editor.

Find # instance fields and add .field private mTouchRight:Z on a new line somewhere before # direct methods.

Find # virtual methods and add the following methods ABOVE it:

.method private interceptOneFingerStatusBarRightTap(Landroid/view/MotionEvent;)V
.locals 4
.param p1, "event" # Landroid/view/MotionEvent;

.prologue
iget-boolean v1, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mExpandedVisible:Z

if-nez v1, :cond_1

iget-object v0, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mDisplay:Landroid/view/Display;

invoke-virtual {v0}, Landroid/view/Display;->getRotation()I

move-result v1

const v0, 0x1

if-eq v0, v1, :cond_2

const v0, 0x3

if-eq v0, v1, :cond_2

const/high16 v1, 0x44070000

:goto_0
invoke-virtual {p1}, Landroid/view/MotionEvent;->getX()F

move-result v0

cmpl-float v0, v0, v1

if-ltz v0, :cond_0

const/4 v1, 0x1

iput-boolean v1, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mTouchRight:Z

goto :goto_1

:cond_0
const/4 v1, 0x0

iput-boolean v1, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mTouchRight:Z

:cond_1
:goto_1
return-void

:cond_2
const/high16 v1, 0x44480000

goto :goto_0
.end method

.method private oneFingerStatusBarRightTapFlipToQuickPanel()V
.locals 1

.prologue
iget-boolean v0, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mTouchRight:Z

if-eqz v0, :cond_0

invoke-virtual {p0}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->flipToSettings()V

:goto_0
return-void

:cond_0
invoke-virtual {p0}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->flipToNotifications()V

goto :goto_0
.end method

Take note that the line const/high16 v1, 0x44070000 is a floating-point hexadecimal value that controls the starting point of the quick pulldown zone in pixels when in portrait orientation (in this case, the start point is set at approximately 540 pixels from the left side of the status bar) while the line const/high16 v1, 0x44480000 controls the start point of the pulldown zone when in landscape orientation (this value is approximately 800 pixels from the left side of the status bar). For larger screens or to change the size of the drag zone, you'll want to re-calculate these using a floating-point to hexadecimal conversion.

Locate the portion of code that looks like the following:

.method public flipToNotifications()V
.locals 10

.prologue
const/high16 v9, 0x3f800000

const/4 v8, 0x0

const-wide/16 v6, 0xc8

const/4 v5, 0x1

const/4 v4, 0x0

On a new line under const/4 v4, 0x0, add iput-boolean v4, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mTouchRight:Z

Locate the portion of code that looks like the following:

.method public flipToSettings()V
.locals 11

.prologue
const-wide/16 v9, 0x15e

const/4 v8, 0x4

const/4 v7, 0x1

const/4 v6, 0x0

const/4 v5, 0x0

On a new line under const/4 v5, 0x0, add iput-boolean v7, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mTouchRight:Z

Locate the section of code that looks like the following:

.method public interceptTouchEvent(Landroid/view/MotionEvent;)Z
.locals 5
.param p1, "event" # Landroid/view/MotionEvent;

.prologue
const/4 v1, 0x0

const/4 v2, 0x1

.line 2973
iget v3, p0, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->mStatusBarWindowState:I

if-nez v3, :cond_1

.line 2974
invoke-virtual {p1}, Landroid/view/MotionEvent;->getAction()I

On a newline above ABOVE the line invoke-virtual {p1}, Landroid/view/MotionEvent;->getAction()I, add invoke-direct {p0, p1}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->interceptOneFingerStatusBarRightTap(Landroid/view/MotionEvent;)V

Locate the method .method public updateExpandedViewPos(I)V and locate the line return-void inside of the method. On a new line above return-void, add invoke-direct {p0}, Lcom/android/systemui/statusbar/phone/PhoneStatusBar;->oneFingerStatusBarRightTapFlipToQuickPanel()V.

Save the file and recompile SystemUI using apktool. Don't forget to re-sign the APK (either use an APK signer if you have a ROM that has 3rd-party system app signatures enabled or copy the AndroidManifest.xml file and META-INF folder from the original to the new APK).

Install to your phone using your preferred method. You should already know this but I'll say it anyway, THIS CANNOT BE INSTALLED LIKE NORMAL SIDE-LOADED APKs. I prefer to reboot to recovery and use ADB to push the file to the system, but you can use whatever method is easiest for you (ie. Aroma file manager, flashable zip, etc.).