Optimization

all hooks : Reload pref instead of creating new instance
movable : remove useless casting
resizable : remove commented code
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 65cb202..ffc6e69 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2,7 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.zst.xposed.halo.floatingwindow"
     android:versionCode="124"
-    android:versionName="1.24 Beta" >
+    android:versionName="1.25 Beta 1" >
 
     <uses-sdk
         android:minSdkVersion="14"
diff --git a/src/com/zst/xposed/halo/floatingwindow/HaloFlagInject.java b/src/com/zst/xposed/halo/floatingwindow/HaloFlagInject.java
index 819fa7e..7c857a5 100644
--- a/src/com/zst/xposed/halo/floatingwindow/HaloFlagInject.java
+++ b/src/com/zst/xposed/halo/floatingwindow/HaloFlagInject.java
@@ -13,25 +13,33 @@
 import android.content.pm.ActivityInfo;
 import android.view.Window;
 import de.robv.android.xposed.IXposedHookLoadPackage;
+import de.robv.android.xposed.IXposedHookZygoteInit;
 import de.robv.android.xposed.XC_MethodHook;
 import de.robv.android.xposed.XC_MethodReplacement;
 import de.robv.android.xposed.XSharedPreferences;
 import de.robv.android.xposed.XposedBridge;
+import de.robv.android.xposed.IXposedHookZygoteInit.StartupParam;
 import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
 import de.robv.android.xposed.callbacks.XCallback;
 
 
-public class HaloFlagInject implements  IXposedHookLoadPackage{
+public class HaloFlagInject implements  IXposedHookLoadPackage, IXposedHookZygoteInit{
 	public static final int FLAG_FLOATING_WINDOW = 0x00002000;
 	public static XSharedPreferences pref;
 	    static boolean newTask;
 	    static boolean floatingWindow;
 		 static String previousPkg = Res.NULL;
+		 
+	@Override
+	public void initZygote(StartupParam startupParam) throws Throwable {
+		 pref = new XSharedPreferences(Res.MY_PACKAGE_NAME,Res.MY_PACKAGE_NAME);
+	}
+		 
 	@Override
 	public void handleLoadPackage(LoadPackageParam l) throws Throwable {
-		pref = new XSharedPreferences(Res.MY_PACKAGE_NAME,Res.MY_PACKAGE_NAME);
+		pref.reload();
 		inject_ActivityRecord_ActivityRecord(l);
-		inject_ActivityStack(l);
+		inject_ActivityStack(l,pref);
 		inject_WindowManagerService_setAppStartingWindow(l);
 		inject_Activity(pref);
 		inject_DecorView_generateLayout(l);
@@ -122,12 +130,11 @@
 		}
 	}
 	static Object previous = null;
-	public static void inject_ActivityStack(final LoadPackageParam lpparam) {
+	public static void inject_ActivityStack(final LoadPackageParam lpparam, final XSharedPreferences pref) {
 		Class<?> hookClass = findClass("com.android.server.am.ActivityStack", lpparam.classLoader);
 			XposedBridge.hookAllMethods(hookClass, "resumeTopActivityLocked", new XC_MethodHook() { 
 				
 				protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
-		    	    pref = new XSharedPreferences(Res.MY_PACKAGE_NAME,Res.MY_PACKAGE_NAME);
 		    		boolean b = pref.getBoolean(Res.KEY_APP_PAUSE, Res.DEFAULT_APP_PAUSE);
 		    		if (!b) return;
 					if (!floatingWindow) return;
@@ -142,7 +149,6 @@
 					}	
 				}
 				protected void afterHookedMethod(MethodHookParam param) throws Throwable {
-					pref = new XSharedPreferences(Res.MY_PACKAGE_NAME,Res.MY_PACKAGE_NAME);
 		    		boolean b = pref.getBoolean(Res.KEY_APP_PAUSE, Res.DEFAULT_APP_PAUSE);
 		    		if (!b) return;
 					if (!floatingWindow) return;
diff --git a/src/com/zst/xposed/halo/floatingwindow/LayoutScaling.java b/src/com/zst/xposed/halo/floatingwindow/LayoutScaling.java
index f8d8183..6bdcedc 100644
--- a/src/com/zst/xposed/halo/floatingwindow/LayoutScaling.java
+++ b/src/com/zst/xposed/halo/floatingwindow/LayoutScaling.java
@@ -42,7 +42,8 @@
 		appleFloating( context ,  mWindow);
 	}
 	public static void appleFloating(Context context , Window mWindow){
-	    pref = new XSharedPreferences(Res.MY_PACKAGE_NAME,Res.MY_PACKAGE_NAME);
+	    pref = HaloFlagInject.pref;
+	    pref.reload();
 	    boolean isMovable = pref.getBoolean(Res.KEY_MOVABLE_WINDOW, Res.DEFAULT_MOVABLE_WINDOW);
 	    if(!isMovable){
 	            mWindow.setCloseOnTouchOutsideIfNotSet(true);
@@ -71,7 +72,8 @@
 			metrics = new DisplayMetrics();
 			metrics = dm;
 		}
-	    pref = new XSharedPreferences(Res.MY_PACKAGE_NAME,Res.MY_PACKAGE_NAME);
+		pref = HaloFlagInject.pref;
+	    pref.reload();
         if (metrics.heightPixels > metrics.widthPixels) { // portrait 
         	Float width_portrait = pref.getFloat(Res.KEY_PORTRAIT_WIDTH, Res.DEFAULT_PORTRAIT_WIDTH);
     		Float height__portrait = pref.getFloat(Res.KEY_PORTRAIT_HEIGHT, Res.DEFAULT_PORTRAIT_HEIGHT);
diff --git a/src/com/zst/xposed/halo/floatingwindow/MovableWindow.java b/src/com/zst/xposed/halo/floatingwindow/MovableWindow.java
index 06f9cc6..2e47f46 100644
--- a/src/com/zst/xposed/halo/floatingwindow/MovableWindow.java
+++ b/src/com/zst/xposed/halo/floatingwindow/MovableWindow.java
@@ -62,6 +62,7 @@
 	static ImageView triangle;
 	static View overlayView;
 	private static String MODULE_PATH = null;
+	private static XSharedPreferences pref;
 	
 	@Override
 	public void handleInitPackageResources(InitPackageResourcesParam resparam) throws Throwable {
@@ -71,11 +72,12 @@
 	@Override
 	public void initZygote(StartupParam startupParam) throws Throwable {
 		MODULE_PATH = startupParam.modulePath;		
+		pref = new XSharedPreferences(Res.MY_PACKAGE_NAME,Res.MY_PACKAGE_NAME);
 	}
 	
 	@Override
 	public void handleLoadPackage(LoadPackageParam l) throws Throwable {
-		XSharedPreferences pref = new XSharedPreferences(Res.MY_PACKAGE_NAME,Res.MY_PACKAGE_NAME);
+		pref.reload();
 		if (!pref.getBoolean(Res.KEY_MOVABLE_WINDOW, Res.DEFAULT_MOVABLE_WINDOW)) return;
 		focusChangeContextFinder(l);
 		onCreateHook();
diff --git a/src/com/zst/xposed/halo/floatingwindow/movable/Movable.java b/src/com/zst/xposed/halo/floatingwindow/movable/Movable.java
index 6d1cc95..8cf8734 100644
--- a/src/com/zst/xposed/halo/floatingwindow/movable/Movable.java
+++ b/src/com/zst/xposed/halo/floatingwindow/movable/Movable.java
@@ -47,6 +47,6 @@
         private void updateView(Window mWindow, float x , float y){
     		param.x = (int)x;	
     		param.y = (int)y;
-    		mWindow.setAttributes((android.view.WindowManager.LayoutParams) param);
+    		mWindow.setAttributes(param);
     	}
 }
diff --git a/src/com/zst/xposed/halo/floatingwindow/movable/Resizable.java b/src/com/zst/xposed/halo/floatingwindow/movable/Resizable.java
index 9adad18..c4b5855 100644
--- a/src/com/zst/xposed/halo/floatingwindow/movable/Resizable.java
+++ b/src/com/zst/xposed/halo/floatingwindow/movable/Resizable.java
@@ -73,42 +73,3 @@
         	}
         }
 }
-        /*
-        @Override
-        public boolean onTouch(View v, MotionEvent event) {
-        	switch (event.getAction()){
-        	case MotionEvent.ACTION_DOWN:
-        		window.setGravity(Gravity.LEFT | Gravity.TOP);
-        		param = window.getAttributes();
-        		oldX = (int)event.getRawX();
-        		oldY = (int)event.getRawY();
-                oldW = param.width;
-                oldH = param.height;
-                distance_from_top = param.y;
-                return false;
-                
-        	case MotionEvent.ACTION_MOVE:
-        		int newX = (int)event.getRawX();
-        		int newY = (int)event.getRawY();
-        		
-        		int calculatedW = oldW + (oldX - newX);
-        		int calculatedH = newY - distance_from_top;
-
-        		if (calculatedW > minSize && calculatedH > minSize){
-        			param.x = newX;
-            		param.y = distance_from_top;
-            		param.width = calculatedW;
-            		param.height = calculatedH;
-            		window.setAttributes(param);
-        		}
-        		return false;
-        	case MotionEvent.ACTION_UP:
-        		break;
-        	}
-        	return false;
-        }
-        
-        private int dp(int dp){ //Convert dp to px
-        	return MovableWindow.dp(dp, context);
-        }
-}*/