Kaynağa Gözat

完善悬浮窗库的代码

yangchong 4 yıl önce
ebeveyn
işleme
fc0c1382d7

+ 10 - 6
VideoView/src/main/java/com/yc/videoview/FloatLifecycle.java

@@ -12,6 +12,8 @@ import android.os.Handler;
 
 import androidx.annotation.RequiresApi;
 
+import com.yc.videoview.inter.ILifecycleListener;
+
 /**
  * 用于控制悬浮窗显示周期
  * 使用了三种方法针对返回桌面时隐藏悬浮按钮
@@ -26,22 +28,24 @@ public class FloatLifecycle extends BroadcastReceiver implements Application.Act
     private static final String SYSTEM_DIALOG_REASON_KEY = "reason";
     private static final String SYSTEM_DIALOG_REASON_HOME_KEY = "homekey";
     private static final long delay = 300;
-    private Handler mHandler;
-    private Class[] activities;
-    private boolean showFlag;
+    private final Handler mHandler;
+    private final Class[] activities;
+    private final boolean showFlag;
     private int startCount;
     private int resumeCount;
     private boolean appBackground;
-    private LifecycleListener mLifecycleListener;
+    private final ILifecycleListener mLifecycleListener;
 
 
-    FloatLifecycle(Context applicationContext, boolean showFlag, Class[] activities, LifecycleListener lifecycleListener) {
+    FloatLifecycle(Context applicationContext, boolean showFlag, Class[] activities,
+                   ILifecycleListener lifecycleListener) {
         this.showFlag = showFlag;
         this.activities = activities;
         mLifecycleListener = lifecycleListener;
         mHandler = new Handler();
         ((Application) applicationContext).registerActivityLifecycleCallbacks(this);
-        applicationContext.registerReceiver(this, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
+        IntentFilter intentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
+        applicationContext.registerReceiver(this, intentFilter);
     }
 
 

+ 14 - 7
VideoView/src/main/java/com/yc/videoview/FloatPhone.java

@@ -6,11 +6,18 @@ import android.os.Build;
 import android.view.View;
 import android.view.WindowManager;
 
+import com.yc.videoview.abs.AbsFloatView;
+
 /**
- * 7.1及以上需申请权限
+ * <pre>
+ *     @author yangchong
+ *     blog  : https://github.com/yangchong211
+ *     time  : 2017/10/21
+ *     desc  : 抽象view类的实现类
+ *     revise: 7.1及以上需申请权限
+ * </pre>
  */
-
-public class FloatPhone extends FloatView {
+public class FloatPhone extends AbsFloatView {
 
     private final Context mContext;
     private final WindowManager mWindowManager;
@@ -91,25 +98,25 @@ public class FloatPhone extends FloatView {
     }
 
     @Override
-    void updateX(int x) {
+    public void updateX(int x) {
         mLayoutParams.x = mX = x;
         mWindowManager.updateViewLayout(mView, mLayoutParams);
 
     }
 
     @Override
-    void updateY(int y) {
+    public void updateY(int y) {
         mLayoutParams.y = mY = y;
         mWindowManager.updateViewLayout(mView, mLayoutParams);
     }
 
     @Override
-    int getX() {
+    public int getX() {
         return mX;
     }
 
     @Override
-    int getY() {
+    public int getY() {
         return mY;
     }
 }

+ 12 - 5
VideoView/src/main/java/com/yc/videoview/FloatToast.java

@@ -5,17 +5,24 @@ import android.view.View;
 import android.view.WindowManager;
 import android.widget.Toast;
 
+import com.yc.videoview.abs.AbsFloatView;
+
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 
+
 /**
- * 自定义 toast 方式,无需申请权限
+ * <pre>
+ *     @author yangchong
+ *     blog  : https://github.com/yangchong211
+ *     time  : 2017/10/21
+ *     desc  : 自定义 toast 方式,无需申请权限
+ *     revise:
+ * </pre>
  */
+public class FloatToast extends AbsFloatView {
 
-public class FloatToast extends FloatView {
-
-
-    private Toast toast;
+    private final Toast toast;
     private Object mTN;
     private Method show;
     private Method hide;

+ 0 - 31
VideoView/src/main/java/com/yc/videoview/FloatView.java

@@ -1,31 +0,0 @@
-package com.yc.videoview;
-
-import android.view.View;
-
-
-public abstract class FloatView {
-
-    abstract void setSize(int width, int height);
-
-    abstract void setView(View view);
-
-    abstract void setGravity(int gravity, int xOffset, int yOffset);
-
-    abstract void init();
-
-    abstract void dismiss();
-
-    void updateXY(int x, int y) {}
-
-    void updateX(int x) {}
-
-    void updateY(int y) {}
-
-    int getX() {
-        return 0;
-    }
-
-    int getY() {
-        return 0;
-    }
-}

+ 2 - 0
VideoView/src/main/java/com/yc/videoview/FloatWindow.java

@@ -12,6 +12,8 @@ import androidx.annotation.MainThread;
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
+import com.yc.videoview.inter.IFloatWindow;
+
 import java.util.HashMap;
 import java.util.Map;
 

+ 0 - 27
VideoView/src/main/java/com/yc/videoview/IFloatWindow.java

@@ -1,27 +0,0 @@
-package com.yc.videoview;
-
-import android.view.View;
-
-
-public abstract class IFloatWindow {
-
-    public abstract void show();
-
-    public abstract void hide();
-
-    public abstract int getX();
-
-    public abstract int getY();
-
-    public abstract void updateX(int x);
-
-    public abstract void updateX(@WindowScreen.screenType int screenType, float ratio);
-
-    public abstract void updateY(int y);
-
-    public abstract void updateY(@WindowScreen.screenType int screenType, float ratio);
-
-    public abstract View getView();
-
-    abstract void dismiss();
-}

+ 16 - 4
VideoView/src/main/java/com/yc/videoview/IFloatWindowImpl.java

@@ -11,12 +11,24 @@ import android.view.MotionEvent;
 import android.view.View;
 import android.view.animation.DecelerateInterpolator;
 
+import com.yc.videoview.abs.AbsFloatView;
+import com.yc.videoview.inter.IFloatWindow;
+import com.yc.videoview.inter.ILifecycleListener;
 
-public class IFloatWindowImpl extends IFloatWindow {
+/**
+ * <pre>
+ *     @author yangchong
+ *     blog  : https://github.com/yangchong211
+ *     time  : 2017/10/21
+ *     desc  : 定义悬浮Window接口类的具体实现类
+ *     revise:
+ * </pre>
+ */
+public class IFloatWindowImpl implements IFloatWindow {
 
 
     private FloatWindow.Builder mB;
-    private FloatView mFloatView;
+    private AbsFloatView mFloatView;
     private FloatLifecycle mFloatLifecycle;
     private boolean isShow;
     private boolean once = true;
@@ -43,7 +55,7 @@ public class IFloatWindowImpl extends IFloatWindow {
         mFloatView.setSize(mB.mWidth, mB.mHeight);
         mFloatView.setGravity(mB.gravity, mB.xOffset, mB.yOffset);
         mFloatView.setView(mB.mView);
-        mFloatLifecycle = new FloatLifecycle(mB.mApplicationContext, mB.mShow, mB.mActivities, new LifecycleListener() {
+        mFloatLifecycle = new FloatLifecycle(mB.mApplicationContext, mB.mShow, mB.mActivities, new ILifecycleListener() {
             @Override
             public void onShow() {
                 show();
@@ -84,7 +96,7 @@ public class IFloatWindowImpl extends IFloatWindow {
     }
 
     @Override
-    void dismiss() {
+    public void dismiss() {
         mFloatView.dismiss();
         isShow = false;
     }

+ 0 - 11
VideoView/src/main/java/com/yc/videoview/LifecycleListener.java

@@ -1,11 +0,0 @@
-package com.yc.videoview;
-
-
-interface LifecycleListener {
-
-    void onShow();
-
-    void onHide();
-
-    void onPostHide();
-}

+ 4 - 1
VideoView/src/main/java/com/yc/videoview/MoveType.java

@@ -16,5 +16,8 @@ public class MoveType {
 
     @IntDef({fixed, free, active, slide, back})
     @Retention(RetentionPolicy.SOURCE)
-    @interface MOVE_TYPE {}
+    public @interface MOVE_TYPE {
+
+    }
+
 }

+ 3 - 3
VideoView/src/main/java/com/yc/videoview/SmallWindowTouch.java

@@ -18,10 +18,10 @@ import android.widget.FrameLayout;
 public class SmallWindowTouch implements View.OnTouchListener {
 
     private int mDownX, mDownY;
-    private int mMarginLeft, mMarginTop;
+    private final int mMarginLeft;
+    private final int mMarginTop;
     private int _xDelta, _yDelta;
-    private View mView;
-
+    private final View mView;
 
     public SmallWindowTouch(View view, int marginLeft, int marginTop) {
         super();

+ 1 - 1
VideoView/src/main/java/com/yc/videoview/WindowScreen.java

@@ -13,5 +13,5 @@ public class WindowScreen {
 
     @IntDef({WIDTH, HEIGHT})
     @Retention(RetentionPolicy.SOURCE)
-    @interface screenType {}
+    public @interface screenType {}
 }

+ 39 - 0
VideoView/src/main/java/com/yc/videoview/abs/AbsFloatView.java

@@ -0,0 +1,39 @@
+package com.yc.videoview.abs;
+
+import android.view.View;
+
+/**
+ * <pre>
+ *     @author yangchong
+ *     blog  : https://github.com/yangchong211
+ *     time  : 2017/10/21
+ *     desc  : 抽象view类
+ *     revise: 定义抽象方法和普通方法
+ * </pre>
+ */
+public abstract class AbsFloatView {
+
+    public abstract void setSize(int width, int height);
+
+    public abstract void setView(View view);
+
+    public abstract void setGravity(int gravity, int xOffset, int yOffset);
+
+    public abstract void init();
+
+    public abstract void dismiss();
+
+    public void updateXY(int x, int y) {}
+
+    public void updateX(int x) {}
+
+    public void updateY(int y) {}
+
+    public int getX() {
+        return 0;
+    }
+
+    public int getY() {
+        return 0;
+    }
+}

+ 37 - 0
VideoView/src/main/java/com/yc/videoview/inter/IFloatWindow.java

@@ -0,0 +1,37 @@
+package com.yc.videoview.inter;
+
+import android.view.View;
+
+import com.yc.videoview.WindowScreen;
+
+/**
+ * <pre>
+ *     @author yangchong
+ *     blog  : https://github.com/yangchong211
+ *     time  : 2017/10/21
+ *     desc  : 定义悬浮Window接口类
+ *     revise:
+ * </pre>
+ */
+public interface IFloatWindow {
+
+    void show();
+
+    void hide();
+
+    int getX();
+
+    int getY();
+
+    void updateX(int x);
+
+    void updateX(@WindowScreen.screenType int screenType, float ratio);
+
+    void updateY(int y);
+
+    void updateY(@WindowScreen.screenType int screenType, float ratio);
+
+    View getView();
+
+    void dismiss();
+}

+ 19 - 0
VideoView/src/main/java/com/yc/videoview/inter/ILifecycleListener.java

@@ -0,0 +1,19 @@
+package com.yc.videoview.inter;
+
+/**
+ * <pre>
+ *     @author yangchong
+ *     blog  : https://github.com/yangchong211
+ *     time  : 2017/10/21
+ *     desc  : 定义生命周期接口类
+ *     revise:
+ * </pre>
+ */
+public interface ILifecycleListener {
+
+    void onShow();
+
+    void onHide();
+
+    void onPostHide();
+}