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 8df2ff9..a27a1e0 100644
--- a/app/src/main/java/org/exthmui/game/services/GamingService.java
+++ b/app/src/main/java/org/exthmui/game/services/GamingService.java
@@ -87,8 +87,6 @@
 
     private GamingPhoneStateListener mPhoneStateListener;
     
-    private GamingModeStatusObserver mGamingModeStatusObserver;
-
     private BroadcastReceiver mGamingModeOffReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -159,7 +157,6 @@
         registerReceiver(mGamingModeOffReceiver, new IntentFilter(Constants.Broadcasts.SYS_BROADCAST_GAMING_MODE_OFF));
         LocalBroadcastManager.getInstance(this).registerReceiver(mCallControlReceiver, new IntentFilter(Constants.Broadcasts.BROADCAST_CALL_CONTROL));
         LocalBroadcastManager.getInstance(this).registerReceiver(mGamingActionReceiver, new IntentFilter(Constants.Broadcasts.BROADCAST_GAMING_ACTION));
-        mGamingModeStatusObserver = new GamingModeStatusObserver(this, new Handler(Looper.getMainLooper()));
 
         mPhoneStateListener = new GamingPhoneStateListener();
         mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
@@ -434,30 +431,4 @@
         }
     }
 
-    private static class GamingModeStatusObserver extends ContentObserver {
-
-        private static Uri mUriForIsGaming = Settings.System.getUriFor(Settings.System.GAMING_MODE_ACTIVE);
-
-        private Service mService;
-        private ContentResolver mResolver;
-
-        public GamingModeStatusObserver(Service service, Handler handler) {
-            super(handler);
-            mService = service;
-            mResolver = service.getContentResolver();
-            mResolver.registerContentObserver(mUriForIsGaming, false, this);
-
-        }
-
-        @Override
-        public void onChange(boolean selfChange, Uri uri) {
-            super.onChange(selfChange, uri);
-            if (mUriForIsGaming.equals(uri)) {
-                if (Settings.System.getInt(mResolver, Settings.System.GAMING_MODE_ACTIVE, 0) == 0) {
-                    mResolver.unregisterContentObserver(this);
-                    mService.stopSelf();
-                }
-            }
-        }
-    }
 }
diff --git a/app/src/main/java/org/exthmui/game/ui/QuickStartAppView.java b/app/src/main/java/org/exthmui/game/ui/QuickStartAppView.java
index c669078..d16db52 100644
--- a/app/src/main/java/org/exthmui/game/ui/QuickStartAppView.java
+++ b/app/src/main/java/org/exthmui/game/ui/QuickStartAppView.java
@@ -101,16 +101,16 @@
         int width, height;
         if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
             // 竖屏
-            width = m.widthPixels - 200;
+            width = m.widthPixels - 100;
             height = width * 4 / 3;
         } else {
             // 横屏
-            height = m.heightPixels - 200;
-            width = height * 4 / 3;
+            height = m.heightPixels - 100;
+            width = height * 3 / 4;
         }
-        int left = 100;
+        int left = 50;
         int right = left + width;
-        int top = 100;
+        int top = 50;
         int bottom = top + height;
         mActivityOptions.setLaunchBounds(new Rect(left, top, right, bottom));
 
