diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b46f012..54dac14 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -4,8 +4,12 @@
     android:sharedUserId="android.uid.system">
 
     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
     <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
     <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
+    <uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" />
 
     <application
         android:allowBackup="true"
diff --git a/app/src/main/java/org/exthmui/game/services/GamingService.java b/app/src/main/java/org/exthmui/game/services/GamingService.java
index f4d663a..809bc8f 100644
--- a/app/src/main/java/org/exthmui/game/services/GamingService.java
+++ b/app/src/main/java/org/exthmui/game/services/GamingService.java
@@ -34,6 +34,11 @@
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.telecom.CallAudioState;
+import android.telecom.InCallService;
+import android.telecom.TelecomManager;
+import android.telephony.PhoneStateListener;
+import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.Log;
 import android.widget.Toast;
@@ -68,6 +73,10 @@
     private AudioManager mAudioManager;
     private IStatusBarService mStatusBarService;
     private LineageHardwareManager mLineageHardware;
+    private TelephonyManager mTelephonyManager;
+    private TelecomManager mTelecomManager;
+
+    private GamingPhoneStateListener mPhoneStateListener;
 
     private BroadcastReceiver mGamingModeOffReceiver = new BroadcastReceiver() {
         @Override
@@ -115,6 +124,8 @@
         checkNotificationListener();
 
         mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
+        mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
+        mTelecomManager = (TelecomManager) getSystemService(TELECOM_SERVICE);
         mStatusBarService = IStatusBarService.Stub.asInterface(ServiceManager.getService(Context.STATUS_BAR_SERVICE));
         try {
             mLineageHardware = LineageHardwareManager.getInstance(this);
@@ -125,6 +136,9 @@
         registerReceiver(mGamingModeOffReceiver, new IntentFilter(Constants.Broadcasts.SYS_BROADCAST_GAMING_MODE_OFF));
         LocalBroadcastManager.getInstance(this).registerReceiver(mGamingActionReceiver, new IntentFilter(Constants.Broadcasts.BROADCAST_GAMING_ACTION));
 
+        mPhoneStateListener = new GamingPhoneStateListener();
+        mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
+
         mOverlayServiceIntent = new Intent(this, OverlayService.class);
 
         PendingIntent stopGamingIntent = PendingIntent.getBroadcast(this, 0, new Intent(Constants.Broadcasts.SYS_BROADCAST_GAMING_MODE_OFF), 0);
@@ -142,7 +156,7 @@
 
     @Override
     public int onStartCommand(Intent intent, int flags, int startId) {
-        if (!TextUtils.equals(intent.getStringExtra("package"), mCurrentPackage)) {
+        if (intent != null && !TextUtils.equals(intent.getStringExtra("package"), mCurrentPackage)) {
             mCurrentPackage = intent.getStringExtra("package");
             updateConfig();
         }
@@ -289,6 +303,7 @@
     public void onDestroy() {
         unregisterReceiver(mGamingModeOffReceiver);
         stopServiceAsUser(mOverlayServiceIntent, UserHandle.CURRENT);
+        mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
         setDisableGesture(false);
         setDisableHwKeys(false, true);
         setDisableAutoBrightness(false, true);
@@ -329,4 +344,35 @@
         }
     }
 
+    private class GamingPhoneStateListener extends PhoneStateListener {
+        private int mPrevState = -1;
+        private int mPrevMode = AudioManager.MODE_NORMAL;
+        private AudioManager mAudioManager = getSystemService(AudioManager.class);
+
+        @Override
+        public void onCallStateChanged(int state, String phoneNumber) {
+            if (Settings.System.getInt(getContentResolver(), Settings.System.GAMING_MODE_AUTO_ANSWER_CALL, 0) != 0) {
+                switch (state) {
+                    case TelephonyManager.CALL_STATE_RINGING:
+                        mTelecomManager.acceptRingingCall();
+                        break;
+                    case TelephonyManager.CALL_STATE_OFFHOOK:
+                        if (mPrevState == TelephonyManager.CALL_STATE_RINGING) {
+                            mPrevMode = mAudioManager.getMode();
+                            mAudioManager.setMode(AudioManager.MODE_IN_CALL);
+                            mAudioManager.setSpeakerphoneOn(!mAudioManager.isWiredHeadsetOn());
+                        }
+                        break;
+                    case TelephonyManager.CALL_STATE_IDLE:
+                        if (mPrevState == TelephonyManager.CALL_STATE_OFFHOOK) {
+                            mAudioManager.setMode(mPrevMode);
+                        }
+                        break;
+                }
+            }
+            mPrevState = state;
+            super.onCallStateChanged(state, phoneNumber);
+        }
+    }
+
 }
