diff --git a/build.gradle b/build.gradle index ad164cd02eda1a7a7a92ca958de6cfb70f4eed8c..6796aad624ba566ab12cf4291e7ad083fc128e87 100644 --- a/build.gradle +++ b/build.gradle @@ -19,8 +19,8 @@ buildscript { jcenter() } dependencies { - classpath 'com.huawei.ohos:hap:2.4.4.2' - classpath 'com.huawei.ohos:decctest:1.0.0.6' + classpath 'com.huawei.ohos:hap:2.4.5.0' + classpath 'com.huawei.ohos:decctest:1.2.4.1' } } diff --git a/entry/src/main/java/com/wordplat/quickstart/adapter/TextAdapter.java b/entry/src/main/java/com/wordplat/quickstart/adapter/TextAdapter.java index 8e071d0fbf36e4c4ac5ac017fd5fa299583df164..05354d58968b62fb2eb15aead26214b376e952f0 100644 --- a/entry/src/main/java/com/wordplat/quickstart/adapter/TextAdapter.java +++ b/entry/src/main/java/com/wordplat/quickstart/adapter/TextAdapter.java @@ -41,7 +41,7 @@ import java.util.List; * @since 2021-05-08 */ public class TextAdapter extends BaseItemProvider { - private static List textList = new ArrayList<>(); + private static final List textList = new ArrayList<>(); private static final int NUM_0 = 0; private static final int NUM_1 = 1; private static final int NUM_2 = 2; @@ -65,7 +65,7 @@ public class TextAdapter extends BaseItemProvider { textList.add("简单分时图"); } - private AbilitySlice mAbilitySlice; + private final AbilitySlice mAbilitySlice; /** * TextAdapter diff --git a/entry/src/main/java/com/wordplat/quickstart/app/AppRuntime.java b/entry/src/main/java/com/wordplat/quickstart/app/AppRuntime.java index 354f71269fb1fc9cdd510069e81ef0c3cc612d45..8fb7a4a82601f6582baee2251a84d2a2851b0fd7 100644 --- a/entry/src/main/java/com/wordplat/quickstart/app/AppRuntime.java +++ b/entry/src/main/java/com/wordplat/quickstart/app/AppRuntime.java @@ -29,21 +29,61 @@ public class AppRuntime { /** * 静态类型的 Context,你懂的 */ - public static Context sContext; + private static Context sContext; /** * 查找当前的 Activity 栈用的 */ - public static LinkedList sActivities = new LinkedList<>(); + private static LinkedList sActivities = new LinkedList<>(); /** * 快速查找位于栈顶的 Ability 用的 */ - public static WeakReference sActivityStops = new WeakReference<>(null); + private static WeakReference sActivityStops = new WeakReference<>(null); /** * 与服务器通信接口版本号。本值会自动读取到 gradle.properties 文件中定义的,不需要手动修改 */ - public static String serverVersion = "1.0"; + private static String serverVersion = "1.0"; /** * 本APP的版本号。本值会自动读取到文件中定义的,不需要手动修改 */ - public static String appVersion = "1.0.0"; + private static String appVersion = "1.0.0"; + + public static Context getsContext() { + return sContext; + } + + public static void setsContext(Context sContext) { + AppRuntime.sContext = sContext; + } + + public static LinkedList getsActivities() { + return sActivities; + } + + public static void setsActivities(LinkedList sActivities) { + AppRuntime.sActivities = sActivities; + } + + public static WeakReference getsActivityStops() { + return sActivityStops; + } + + public static void setsActivityStops(WeakReference sActivityStops) { + AppRuntime.sActivityStops = sActivityStops; + } + + public static String getServerVersion() { + return serverVersion; + } + + public static void setServerVersion(String serverVersion) { + AppRuntime.serverVersion = serverVersion; + } + + public static String getAppVersion() { + return appVersion; + } + + public static void setAppVersion(String appVersion) { + AppRuntime.appVersion = appVersion; + } } diff --git a/entry/src/main/java/com/wordplat/quickstart/app/DeviceRuntime.java b/entry/src/main/java/com/wordplat/quickstart/app/DeviceRuntime.java index b2bd23c5697b2d81cb65f2196c49c0765f7698d8..36e1d1a010029dad04f4fa76d659bc6c213802de 100644 --- a/entry/src/main/java/com/wordplat/quickstart/app/DeviceRuntime.java +++ b/entry/src/main/java/com/wordplat/quickstart/app/DeviceRuntime.java @@ -16,7 +16,7 @@ public class DeviceRuntime { /** * PULL_START */ - public static String PULL_START = "PULL_START"; + public static final String PULL_START = "PULL_START"; /** * PULL_END */ diff --git a/entry/src/main/java/com/wordplat/quickstart/base/MyApplication.java b/entry/src/main/java/com/wordplat/quickstart/base/MyApplication.java index 00916b1934bf993c2b4524aaa14122977003f833..73d4cafd6c5efe530a7d1f8664b9f7893edecd22 100644 --- a/entry/src/main/java/com/wordplat/quickstart/base/MyApplication.java +++ b/entry/src/main/java/com/wordplat/quickstart/base/MyApplication.java @@ -28,6 +28,6 @@ public class MyApplication extends AbilityPackage { @Override public void onInitialize() { super.onInitialize(); - AppRuntime.sContext = this; + AppRuntime.setsContext(this); } } diff --git a/entry/src/main/java/com/wordplat/quickstart/json/JSON.java b/entry/src/main/java/com/wordplat/quickstart/json/JSON.java index 7fccc96d9e7227f9baa3bda6cea2061185960bff..fd11c9a9693b4b6a75aa95ce5983078416eee924 100644 --- a/entry/src/main/java/com/wordplat/quickstart/json/JSON.java +++ b/entry/src/main/java/com/wordplat/quickstart/json/JSON.java @@ -43,7 +43,7 @@ class JSON { return false; } } - return null; + return false; } static Double toDouble(Object value) { diff --git a/entry/src/main/java/com/wordplat/quickstart/json/JSONObject.java b/entry/src/main/java/com/wordplat/quickstart/json/JSONObject.java index 29040e3a56f315777eed2d144c57800fffb274fc..6b43f079d256df39de70589e3982568500ef546f 100644 --- a/entry/src/main/java/com/wordplat/quickstart/json/JSONObject.java +++ b/entry/src/main/java/com/wordplat/quickstart/json/JSONObject.java @@ -89,7 +89,10 @@ public class JSONObject { public static final Object NULL = new Object() { @Override public boolean equals(Object o) { - return o == this || o == null; // API specifies this broken equals implementation + if (o.equals(this) || o == null) { + return true; + } + return false; // API specifies this broken equals implementation } @Override diff --git a/entry/src/main/java/com/wordplat/quickstart/json/JSONTokener.java b/entry/src/main/java/com/wordplat/quickstart/json/JSONTokener.java index 5070b95216b6ece578237a35e7ee384ff6ce773f..a4f115f3872180ac857050c549cc3aa4f8fdeb11 100644 --- a/entry/src/main/java/com/wordplat/quickstart/json/JSONTokener.java +++ b/entry/src/main/java/com/wordplat/quickstart/json/JSONTokener.java @@ -196,7 +196,7 @@ public class JSONTokener { if (c == quote) { if (builder == null) { // a new string avoids leaking memory - return new String(in.substring(start, pos - 1)); + return in.substring(start, pos - 1); } else { builder.append(in, start, pos - 1); return builder.toString(); @@ -302,7 +302,7 @@ public class JSONTokener { } /* ... finally give up. We have an unquoted string */ - return new String(literal); // a new string avoids leaking memory + return literal; // a new string avoids leaking memory } private String nextToInternal(String excluded) { diff --git a/entry/src/main/java/com/wordplat/quickstart/mvp/BasePresenter.java b/entry/src/main/java/com/wordplat/quickstart/mvp/BasePresenter.java index f1f81036cee90e9edd25ea88351f27830cc0658a..8a8e1948b9a9a87a202ee6a0eb6001dab7bf7a50 100644 --- a/entry/src/main/java/com/wordplat/quickstart/mvp/BasePresenter.java +++ b/entry/src/main/java/com/wordplat/quickstart/mvp/BasePresenter.java @@ -85,10 +85,7 @@ public abstract class BasePresenter { * @return boolean */ public boolean isEmpty(TextField editText) { - if (editText == null || editText.getText() == null || TextUtils.isEmpty(editText.getText().toString())) { - return true; - } - return false; + return editText == null || editText.getText() == null || TextUtils.isEmpty(editText.getText()); } /** @@ -99,8 +96,8 @@ public abstract class BasePresenter { */ public String getString(int stringResId) { if (stringResId != 0) { - if (AppRuntime.sContext != null) { - return AppRuntime.sContext.getString(stringResId); + if (AppRuntime.getsContext() != null) { + return AppRuntime.getsContext().getString(stringResId); } } diff --git a/entry/src/main/java/com/wordplat/quickstart/mvp/BaseViewListener.java b/entry/src/main/java/com/wordplat/quickstart/mvp/BaseViewListener.java index 65174a6e017ee3aef9183459bd27318bdb29e534..de7278f7f74ff3c62c62166b96080f88a28b76bf 100644 --- a/entry/src/main/java/com/wordplat/quickstart/mvp/BaseViewListener.java +++ b/entry/src/main/java/com/wordplat/quickstart/mvp/BaseViewListener.java @@ -15,13 +15,13 @@ import com.wordplat.quickstart.xutils.common.util.TextUtils; public class BaseViewListener implements BaseView { @Override public void onNoNetworkError(int requestCode) { - ToastViewDialog.toast(AppRuntime.sContext, AppRuntime.sContext.getString( + ToastViewDialog.toast(AppRuntime.getsContext(), AppRuntime.getsContext().getString( ResourceTable.String_Warning_No_Network)); } @Override public void onNetworkTimeOutError(int requestCode) { - ToastViewDialog.toast(AppRuntime.sContext, AppRuntime.sContext.getString( + ToastViewDialog.toast(AppRuntime.getsContext(), AppRuntime.getsContext().getString( ResourceTable.String_Warning_Network_Timeout)); } @@ -38,7 +38,7 @@ public class BaseViewListener implements BaseView { @Override public void onResultFailed(int requestCode, int errCode, String errMessage) { if (!TextUtils.isEmpty(errMessage)) { - ToastViewDialog.toast(AppRuntime.sContext, errMessage); + ToastViewDialog.toast(AppRuntime.getsContext(), errMessage); } } @@ -49,6 +49,6 @@ public class BaseViewListener implements BaseView { @Override public void onShowWarning(int requestCode, int errMessageResId) { - ToastViewDialog.toast(AppRuntime.sContext, AppRuntime.sContext.getString(errMessageResId)); + ToastViewDialog.toast(AppRuntime.getsContext(), AppRuntime.getsContext().getString(errMessageResId)); } } diff --git a/entry/src/main/java/com/wordplat/quickstart/mvp/exception/ResultFailedException.java b/entry/src/main/java/com/wordplat/quickstart/mvp/exception/ResultFailedException.java index 55684d26fc22db20c9491cb5b7471cc7bbe149b4..98a4faa04dee51922f114e453fe72fc0929dec8e 100644 --- a/entry/src/main/java/com/wordplat/quickstart/mvp/exception/ResultFailedException.java +++ b/entry/src/main/java/com/wordplat/quickstart/mvp/exception/ResultFailedException.java @@ -9,9 +9,9 @@ package com.wordplat.quickstart.mvp.exception; */ public class ResultFailedException extends Exception { - private int errCode; + private final int errCode; - private String errMessage; + private final String errMessage; /** * ResultFailedException diff --git a/entry/src/main/java/com/wordplat/quickstart/slice/Enable_Left_And_Right_Refresh_Slice.java b/entry/src/main/java/com/wordplat/quickstart/slice/Enable_Left_And_Right_Refresh_Slice.java index adc7985040cf9e3e4b2445a28d37f28174c6bc6e..e6dd858a5dc73fec72a89c5fbd0dbb5534095051 100644 --- a/entry/src/main/java/com/wordplat/quickstart/slice/Enable_Left_And_Right_Refresh_Slice.java +++ b/entry/src/main/java/com/wordplat/quickstart/slice/Enable_Left_And_Right_Refresh_Slice.java @@ -37,6 +37,7 @@ import ohos.global.resource.ResourceManager; import ohos.multimodalinput.event.TouchEvent; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -62,7 +63,7 @@ public class Enable_Left_And_Right_Refresh_Slice extends BaseAbilitySlice { private EntrySet entrySet; private int loadStartPos = 5500; private int loadEndPos = 6000; - private int loadCount = 100; + private final int loadCount = 100; /** * 动画效果 mAnimator */ @@ -102,7 +103,6 @@ public class Enable_Left_And_Right_Refresh_Slice extends BaseAbilitySlice { kLineLayout.setKLineHandler(new KLineHandler() { @Override public void onHighlight(Entry entry, int entryIndex, float x, float y) { - final SizeColor sizeColor = kLineLayout.getKLineView().getRender().getSizeColor(); String maString = null; String volumeString = null; String str = null; @@ -247,7 +247,7 @@ public class Enable_Left_And_Right_Refresh_Slice extends BaseAbilitySlice { resource = rawFileEntry.openRawFile(); byte[] buffer = new byte[resource.available()]; resource.read(buffer); - kLineData = new String(buffer, "UTF-8"); + kLineData = new String(buffer, StandardCharsets.UTF_8); } catch (IOException e) { String ee = e.toString(); } diff --git a/entry/src/main/java/com/wordplat/quickstart/slice/MACD_RSI_KDJ_Show_Together_Slice.java b/entry/src/main/java/com/wordplat/quickstart/slice/MACD_RSI_KDJ_Show_Together_Slice.java index e54ae46c71f949a9536d426e1313d4a38f73a178..1609758aa172a3b17af7e8311e18a93041446d9c 100644 --- a/entry/src/main/java/com/wordplat/quickstart/slice/MACD_RSI_KDJ_Show_Together_Slice.java +++ b/entry/src/main/java/com/wordplat/quickstart/slice/MACD_RSI_KDJ_Show_Together_Slice.java @@ -32,6 +32,7 @@ import ohos.global.resource.Resource; import ohos.global.resource.ResourceManager; import java.io.IOException; +import java.nio.charset.StandardCharsets; public class MACD_RSI_KDJ_Show_Together_Slice extends BaseAbilitySlice { private InteractiveKLineView kLineView; @@ -113,7 +114,7 @@ public class MACD_RSI_KDJ_Show_Together_Slice extends BaseAbilitySlice { resource = rawFileEntry.openRawFile(); byte[] buffer = new byte[resource.available()]; resource.read(buffer); - kLineData = new String(buffer, "UTF-8"); + kLineData = new String(buffer, StandardCharsets.UTF_8); } catch (IOException e) { String ss = e.toString(); } diff --git a/entry/src/main/java/com/wordplat/quickstart/slice/Simple_TimeLine_Example_Slice.java b/entry/src/main/java/com/wordplat/quickstart/slice/Simple_TimeLine_Example_Slice.java index 3d15af1262c6196834f61db754eb35f5d5f221fb..07d8c00faac3695a668e30b1c935ec11c6eb19f3 100644 --- a/entry/src/main/java/com/wordplat/quickstart/slice/Simple_TimeLine_Example_Slice.java +++ b/entry/src/main/java/com/wordplat/quickstart/slice/Simple_TimeLine_Example_Slice.java @@ -24,9 +24,9 @@ public class Simple_TimeLine_Example_Slice extends BaseAbilitySlice { private static final int NUM_0 = 0; private static final int NUM_2 = 2; private static final int NUM_4 = 4; - private HiLogLabel label = new HiLogLabel(0, 0, "Simple_TimeLine_Example_Slice"); + private final HiLogLabel label = new HiLogLabel(0, 0, "Simple_TimeLine_Example_Slice"); private InteractiveKLineView timeLineView = null; - private LoadingViewListener btcChinaListener = new LoadingViewListener() { + private final LoadingViewListener btcChinaListener = new LoadingViewListener() { @Override public void onStartRequest(int requestCode) { debug("onStartRequest"); diff --git a/entry/src/main/java/com/wordplat/quickstart/slice/With_Fragment_And_TabLayout_Switcher_Example_Slice.java b/entry/src/main/java/com/wordplat/quickstart/slice/With_Fragment_And_TabLayout_Switcher_Example_Slice.java index fcf2e27b8cfa6ffa35345b3cc023ad47449e738f..b5fe2195ac3a3c209bef1eb4a110b10828d6c4df 100644 --- a/entry/src/main/java/com/wordplat/quickstart/slice/With_Fragment_And_TabLayout_Switcher_Example_Slice.java +++ b/entry/src/main/java/com/wordplat/quickstart/slice/With_Fragment_And_TabLayout_Switcher_Example_Slice.java @@ -36,7 +36,7 @@ import java.util.ArrayList; public class With_Fragment_And_TabLayout_Switcher_Example_Slice extends BaseAbilitySlice { private BottomNavigation mTabLayout; private RefreshComponent refreshComponent; - private ArrayList bottomNavigationItems = new ArrayList<>(); + private final ArrayList bottomNavigationItems = new ArrayList<>(); private PageSlider mkLineContent; private PagerProvider dayKLinePager; private PagerProvider weekKLinePager; diff --git a/entry/src/main/java/com/wordplat/quickstart/slice/With_Pull_To_Refresh_Example_Slice.java b/entry/src/main/java/com/wordplat/quickstart/slice/With_Pull_To_Refresh_Example_Slice.java index 3767d89fa1289edd358351d26dc47d24b18316ca..c8d52f3d5c30274d30529876d1ad25b288060276 100644 --- a/entry/src/main/java/com/wordplat/quickstart/slice/With_Pull_To_Refresh_Example_Slice.java +++ b/entry/src/main/java/com/wordplat/quickstart/slice/With_Pull_To_Refresh_Example_Slice.java @@ -43,6 +43,7 @@ import ohos.global.resource.ResourceManager; import ohos.multimodalinput.event.TouchEvent; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; @@ -68,7 +69,7 @@ public class With_Pull_To_Refresh_Example_Slice extends BaseAbilitySlice { private EntrySet entrySet; private int loadStartPos = 5500; private int loadEndPos = 6000; - private int loadCount = 100; + private final int loadCount = 100; /** * 动画效果 mAnimator @@ -154,7 +155,6 @@ public class With_Pull_To_Refresh_Example_Slice extends BaseAbilitySlice { kLineLayout.setKLineHandler(new KLineHandler() { @Override public void onHighlight(Entry entry, int entryIndex, float x, float y) { - final SizeColor sizeColor = kLineLayout.getKLineView().getRender().getSizeColor(); String maString = null; String volumeString = null; String str = null; @@ -299,7 +299,7 @@ public class With_Pull_To_Refresh_Example_Slice extends BaseAbilitySlice { resource = rawFileEntry.openRawFile(); byte[] buffer = new byte[resource.available()]; resource.read(buffer); - kLineData = new String(buffer, "UTF-8"); + kLineData = new String(buffer, StandardCharsets.UTF_8); } catch (IOException e) { e.printStackTrace(); } diff --git a/entry/src/main/java/com/wordplat/quickstart/slider/PagerProvider.java b/entry/src/main/java/com/wordplat/quickstart/slider/PagerProvider.java index dafaacd2c0641ff9b5759aa2c91b66ae1b7251d9..4b6ae9e78994573512676ac7b6037b221579c149 100644 --- a/entry/src/main/java/com/wordplat/quickstart/slider/PagerProvider.java +++ b/entry/src/main/java/com/wordplat/quickstart/slider/PagerProvider.java @@ -72,17 +72,17 @@ public class PagerProvider extends PageSliderProvider { private RadioButton KDJ_But; private RadioButton BOLL_But; - private int loadStartPos = 5500; - private int loadEndPos = 6000; - private int loadCount = 100; + private static final int loadStartPos = 5500; + private static final int loadEndPos = 6000; + private static final int loadCount = 100; - private StockPresenter.KLineType kLineType; - private EntrySet entrySet = new EntrySet(); + private final StockPresenter.KLineType kLineType; + private final EntrySet entrySet = new EntrySet(); private final StockPresenter presenter = new StockPresenter(); private AnimatorProperty mAnimator; - private LoadingViewListener viewListener = new LoadingViewListener() { + private final LoadingViewListener viewListener = new LoadingViewListener() { @Override public void onStartRequest(int requestCode) { switch (requestCode) { @@ -287,7 +287,6 @@ public class PagerProvider extends PageSliderProvider { kLineLayout.setKLineHandler(new KLineHandler() { @Override public void onHighlight(Entry entry, int entryIndex, float x, float y) { - final SizeColor sizeColor = kLineLayout.getKLineView().getRender().getSizeColor(); String maString = null; String volumeString = null; String str = null; diff --git a/entry/src/main/java/com/wordplat/quickstart/utils/ToastUtil.java b/entry/src/main/java/com/wordplat/quickstart/utils/ToastUtil.java index 00d681808bb655c9101925fd96d63803ac807720..25a99213917ac5fd1565885016b86f15a344272f 100644 --- a/entry/src/main/java/com/wordplat/quickstart/utils/ToastUtil.java +++ b/entry/src/main/java/com/wordplat/quickstart/utils/ToastUtil.java @@ -65,7 +65,7 @@ public class ToastUtil { * @param layout */ public static void toastCtx(Context ctx, Component layout) { - Component customToastLayout = (Component) LayoutScatter.getInstance(ctx).parse(layout.getId(), null, false); + Component customToastLayout = LayoutScatter.getInstance(ctx).parse(layout.getId(), null, false); ToastDialog toastDialog = new ToastDialog(ctx); toastDialog.setComponent(customToastLayout); toastDialog.setCornerRadius(RADIOUS); diff --git a/entry/src/main/java/com/wordplat/quickstart/utils/ToastViewDialog.java b/entry/src/main/java/com/wordplat/quickstart/utils/ToastViewDialog.java index 4eeede168c31ed36127c864fad679a8571861ec9..e06819ccd949938784c10e4e659b3cb5b5741c8b 100644 --- a/entry/src/main/java/com/wordplat/quickstart/utils/ToastViewDialog.java +++ b/entry/src/main/java/com/wordplat/quickstart/utils/ToastViewDialog.java @@ -57,7 +57,7 @@ public class ToastViewDialog { * @param layout */ public static void toast(Context context, Component layout) { - Component customToastLayout = (Component) LayoutScatter.getInstance(context).parse(layout.getId(), null, false); + Component customToastLayout = LayoutScatter.getInstance(context).parse(layout.getId(), null, false); ToastDialog toastDialog = new ToastDialog(context); toastDialog.setComponent(customToastLayout); toastDialog.setSize(DirectionalLayout.LayoutConfig.MATCH_CONTENT, DirectionalLayout.LayoutConfig.MATCH_CONTENT); diff --git a/entry/src/main/java/com/wordplat/quickstart/wight/PullLayout/pulllistview/HeadDefaultComponent.java b/entry/src/main/java/com/wordplat/quickstart/wight/PullLayout/pulllistview/HeadDefaultComponent.java index fca20e66eafd32c213cbaa0d5b1e9b175fb4d165..1a799eaaa4e4bf0ec8d29798bc9ea09cdb6375f5 100644 --- a/entry/src/main/java/com/wordplat/quickstart/wight/PullLayout/pulllistview/HeadDefaultComponent.java +++ b/entry/src/main/java/com/wordplat/quickstart/wight/PullLayout/pulllistview/HeadDefaultComponent.java @@ -27,10 +27,7 @@ import ohos.app.Context; * @since 2021-04-22 */ public class HeadDefaultComponent extends HeadBaseComponent { - private DirectionalLayout directionalLayout; private Image mImage; - private Text mTextTitle; - private Text mTextTime; private AnimatorProperty mAnimator; /** @@ -66,10 +63,7 @@ public class HeadDefaultComponent extends HeadBaseComponent { @Override public void init() { LayoutScatter.getInstance(getContext()).parse(ResourceTable.Layout_head_default_layout, this, true); - directionalLayout = (DirectionalLayout) findComponentById(ResourceTable.Id_dl_default_all); - mTextTitle = (Text) findComponentById(ResourceTable.Id_text_head_title); mImage = (Image) findComponentById(ResourceTable.Id_img_head_default); - mTextTime = (Text) findComponentById(ResourceTable.Id_text_default_value); } @Override diff --git a/entry/src/main/java/com/wordplat/quickstart/wight/navigation/BottomNavigation.java b/entry/src/main/java/com/wordplat/quickstart/wight/navigation/BottomNavigation.java index 5eff9a8d51f9ed9da26ae7c6861dc3b3061e435e..a0db10d5dbe0833d8eb5968dcf0be8309ff8cb49 100644 --- a/entry/src/main/java/com/wordplat/quickstart/wight/navigation/BottomNavigation.java +++ b/entry/src/main/java/com/wordplat/quickstart/wight/navigation/BottomNavigation.java @@ -44,7 +44,7 @@ public class BottomNavigation extends Component implements Component.DrawTask, C private OnTabSelectedListener tabSelectedListener; private OnNavigationPositionListener navigationPositionListener; - private ArrayList items = new ArrayList<>(); + private final ArrayList items = new ArrayList<>(); private int defaultBackgroundColor = Color.WHITE.getValue(); @@ -62,13 +62,13 @@ public class BottomNavigation extends Component implements Component.DrawTask, C private boolean forceTint = true; private TitleState titleState = TitleState.SHOW_WHEN_ACTIVE; - private Boolean[] itemsEnabledStates = {true, true, true, true, true}; + private final Boolean[] itemsEnabledStates = {true, true, true, true, true}; private boolean colored = false; private boolean selectedBackgroundVisible = false; - private List notifications = Notification.generateEmptyList(MAX_ITEMS); + private final List notifications = Notification.generateEmptyList(MAX_ITEMS); private int notificationMarginLeft; private int notificationMarginTop; @@ -84,13 +84,13 @@ public class BottomNavigation extends Component implements Component.DrawTask, C private boolean selectHideNotification = false; - private Paint mPaint = new Paint(); - private Paint elevationPaint = new Paint(); - private Paint selectBackgroundPaint = new Paint(); - private Paint mOverPaint = new Paint(); - private Paint mTextPaint = new Paint(); - private Paint notificationBackgroundPaint = new Paint(); - private Paint notificationTextPaint = new Paint(); + private final Paint mPaint = new Paint(); + private final Paint elevationPaint = new Paint(); + private final Paint selectBackgroundPaint = new Paint(); + private final Paint mOverPaint = new Paint(); + private final Paint mTextPaint = new Paint(); + private final Paint notificationBackgroundPaint = new Paint(); + private final Paint notificationTextPaint = new Paint(); private int lastPosition; private int mPosition; @@ -101,30 +101,30 @@ public class BottomNavigation extends Component implements Component.DrawTask, C private float changePose = 1; private float overPose = 1; - private int mAnimationDuration = DEFAULT_ANIMATION_DURATION; - private int mRippleAnimationDuration = (int) (DEFAULT_ANIMATION_DURATION * 2.5); + private static final int mAnimationDuration = DEFAULT_ANIMATION_DURATION; + private static final int mRippleAnimationDuration = (int) (DEFAULT_ANIMATION_DURATION * 2.5); private AnimatorValue showAnimatorValue; private int showBottom = 0; - private long showDurationTime = 300; + private static final long showDurationTime = 300; - private int iconSize = dp2px(24); + private final int iconSize = dp2px(24); - private int alwaysHideTop = dp2px(16); - private int alwaysShowTopActive = dp2px(6); - private int alwaysShowTopInactive = dp2px(8); - private int showWhenActiveForceTopActive = dp2px(6); - private int showWhenActiveForceTopInactive = dp2px(16); + private final int alwaysHideTop = dp2px(16); + private final int alwaysShowTopActive = dp2px(6); + private final int alwaysShowTopInactive = dp2px(8); + private final int showWhenActiveForceTopActive = dp2px(6); + private final int showWhenActiveForceTopInactive = dp2px(16); private int titleActiveTextSize = 0; private int titleInactiveTextSize = 0; - private int defaultTitleActiveTextSize = dp2px(14); - private int defaultTitleInactiveTextSize = dp2px(12); - private int defaultTitleActiveSmallTextSize = dp2px(11); - private int defaultTitleInactiveSmallTextSize = dp2px(10); + private final int defaultTitleActiveTextSize = dp2px(14); + private final int defaultTitleInactiveTextSize = dp2px(12); + private final int defaultTitleActiveSmallTextSize = dp2px(11); + private final int defaultTitleInactiveSmallTextSize = dp2px(10); - private int textCenterY = dp2px(20); + private final int textCenterY = dp2px(20); private boolean touchEffect; @@ -220,9 +220,9 @@ public class BottomNavigation extends Component implements Component.DrawTask, C selectBackgroundPaint.setColor(new Color(0x17000000)); canvas.drawRect( new RectFloat( - getCurrentCenterX(mPosition, mPosition) - selectedItemWidth / 2, + (float) ((double) getCurrentCenterX(mPosition, mPosition) - (double) selectedItemWidth / (double) 2), 0, - getCurrentCenterX(mPosition, mPosition) + selectedItemWidth / 2, + (float) ((double) getCurrentCenterX(mPosition, mPosition) + (double) selectedItemWidth / (double) 2), bottomNavigationHeight), selectBackgroundPaint); } @@ -237,37 +237,37 @@ public class BottomNavigation extends Component implements Component.DrawTask, C topOff = alwaysShowTopInactive; } else if (i == mPosition) { topOff = - alwaysShowTopInactive - + (alwaysShowTopActive - alwaysShowTopInactive) * changePose; + (float) ((double) alwaysShowTopInactive + + ((double) alwaysShowTopActive - (double) alwaysShowTopInactive) * (double) changePose); } else if (i == lastPosition) { topOff = - alwaysShowTopActive - + (alwaysShowTopInactive - alwaysShowTopActive) * changePose; + (float) ((double) alwaysShowTopActive + + ((double) alwaysShowTopInactive - (double) alwaysShowTopActive) * (double) changePose); } } else { if (i != lastPosition && i != mPosition) { topOff = showWhenActiveForceTopInactive; } else if (i == mPosition) { topOff = - showWhenActiveForceTopInactive - + (showWhenActiveForceTopActive - showWhenActiveForceTopInactive) - * changePose; + (float) ((double) showWhenActiveForceTopInactive + + ((double) showWhenActiveForceTopActive - (double) showWhenActiveForceTopInactive) + * (double) changePose); } else if (i == lastPosition) { topOff = - showWhenActiveForceTopActive - + (showWhenActiveForceTopInactive - showWhenActiveForceTopActive) - * changePose; + (float) ((double) showWhenActiveForceTopActive + + ((double) showWhenActiveForceTopInactive - (double) showWhenActiveForceTopActive) + * (double) changePose); } } PixelMap pixelMap = bottomNavigationItem.getOrgPixelMap(); float centerX = - getCurrentCenterX(i, lastPosition) + (float) (getCurrentCenterX(i, lastPosition) + (getCurrentCenterX(i, mPosition) - getCurrentCenterX(i, lastPosition)) - * changePose; + * (double) changePose); if (touchEffect && i == downPosition) { mPaint.setColor(new Color(0x20000000)); canvas.drawCircle( - centerX, bottomNavigationHeight / 2, notSelectedItemWidth * 0.6f, mPaint); + centerX, bottomNavigationHeight / 2, (float) ((double) notSelectedItemWidth * (double) 0.6f), mPaint); } if (forceTint) { @@ -299,18 +299,18 @@ public class BottomNavigation extends Component implements Component.DrawTask, C if (pixelMap != null) { RectFloat rectFloat = new RectFloat(); rectFloat.left = - getCurrentCenterX(i, lastPosition) + (float) (getCurrentCenterX(i, lastPosition) + (getCurrentCenterX(i, mPosition) - getCurrentCenterX(i, lastPosition)) - * changePose - - iconSize / 2; + * (double) changePose + - (double) iconSize / 2); rectFloat.right = - getCurrentCenterX(i, lastPosition) + (float) (getCurrentCenterX(i, lastPosition) + (getCurrentCenterX(i, mPosition) - getCurrentCenterX(i, lastPosition)) - * changePose - + iconSize / 2; + * (double) changePose + + (double) iconSize / 2); rectFloat.top = topOff; - rectFloat.bottom = topOff + iconSize; + rectFloat.bottom = (float) ((double) topOff + (double) iconSize); mPaint.setColor(new Color(0xffffffff)); canvas.drawPixelMapHolderRect( new PixelMapHolder(pixelMap), @@ -342,9 +342,9 @@ public class BottomNavigation extends Component implements Component.DrawTask, C if (i != lastPosition && i != mPosition) { textSize = inactiveSize; } else if (i == mPosition) { - textSize = inactiveSize + (activeSize - inactiveSize) * changePose; + textSize = (float) ((double) inactiveSize + ((double) activeSize - (double) inactiveSize) * (double) changePose); } else if (i == lastPosition) { - textSize = activeSize + (inactiveSize - activeSize) * changePose; + textSize = (float) ((double) activeSize + ((double) inactiveSize - (double) activeSize) * (double) changePose); } } else { textSize = activeSize; @@ -353,19 +353,19 @@ public class BottomNavigation extends Component implements Component.DrawTask, C } else if (i == mPosition) { alpha = changePose * alpha; } else if (i == lastPosition) { - alpha = (1 - changePose) * alpha; + alpha = (float) ((1 - (double) changePose) * (double) alpha); } } if (alpha != 0) { mTextPaint.setAlpha(alpha); mTextPaint.setTextSize((int) textSize); float textWidth = mTextPaint.measureText(bottomNavigationItem.getTitle()); - float textHeight = mTextPaint.descent() - mTextPaint.ascent(); + float textHeight = (float) ((double) mTextPaint.descent() - (double) mTextPaint.ascent()); canvas.drawText( mTextPaint, bottomNavigationItem.getTitle(), - centerX - textWidth / 2, - textCenterY + textHeight / 4); + (float) ((double) centerX - (double) (textWidth / 2)), + (float) ((double) textCenterY + (double) textHeight / (double) 4)); } } @@ -385,26 +385,26 @@ public class BottomNavigation extends Component implements Component.DrawTask, C if (!notification.isEmpty()) { float textWidth = notificationTextPaint.measureText(notification.getText()); - float textHeight = notificationTextPaint.descent() - notificationTextPaint.ascent(); + float textHeight = (float) ((double) notificationTextPaint.descent() - (double) notificationTextPaint.ascent()); float notificationCenterX = centerX; - float marginTop = topOff + notificationMarginTop; - notificationCenterX = centerX + notificationMarginLeft; + float marginTop = (float) ((double) topOff + (double) notificationMarginTop); + notificationCenterX = (float) ((double) centerX + (double) notificationMarginLeft); RectFloat rectFloat = new RectFloat(); if (textWidth > textHeight) { - rectFloat.left = notificationCenterX - textWidth / 2 - dp2px(1); - rectFloat.right = notificationCenterX + textWidth / 2 + dp2px(1); + rectFloat.left = (float) ((double) notificationCenterX - (double) textWidth / (double) 2 - (double) dp2px(1)); + rectFloat.right = (float) ((double) notificationCenterX + (double) textWidth / (double) 2 + (double) dp2px(1)); } else { - rectFloat.left = notificationCenterX - textHeight / 2 - dp2px(1); - rectFloat.right = notificationCenterX + textHeight / 2 + dp2px(1); + rectFloat.left = (float) ((double) notificationCenterX - (double) textHeight / (double) 2 - (double) dp2px(1)); + rectFloat.right = (float) ((double) notificationCenterX + (double) textHeight / (double) 2 + (double) dp2px(1)); } - rectFloat.top = marginTop - dp2px(1); - rectFloat.bottom = marginTop + textHeight + dp2px(1); + rectFloat.top = (float) ((double) marginTop - (double) dp2px(1)); + rectFloat.bottom = (float) ((double) marginTop + (double) textHeight + (double) dp2px(1)); canvas.drawRoundRect(rectFloat, dp2px(8), dp2px(8), notificationBackgroundPaint); canvas.drawText( notificationTextPaint, notification.getText(), - notificationCenterX - textWidth / 2, - marginTop + textHeight * 3 / 4); + (float) ((double) notificationCenterX - (double) textWidth / (double) 2), + (float) ((double) marginTop + (double) textHeight * (double) 3 / (double) 4)); } } } @@ -415,7 +415,6 @@ public class BottomNavigation extends Component implements Component.DrawTask, C public boolean onTouchEvent(Component component, TouchEvent touchEvent) { if (touchEvent.getAction() == TouchEvent.PRIMARY_POINT_DOWN) { float touchX = getTouchX(touchEvent, 0); - float touchY = getTouchY(touchEvent, 0); if (items != null && items.size() > 0) { int position = getPostionFromX(touchX); if (position < itemsEnabledStates.length && itemsEnabledStates[position]) { @@ -503,7 +502,7 @@ public class BottomNavigation extends Component implements Component.DrawTask, C mOverPaint); canvas.drawCircle( getCurrentCenterX(mPosition, mPosition), - bottomNavigationHeight / 2, + (float) ((double) bottomNavigationHeight / 2), getWidth() * overPose, mOverPaint); canvas.restore(); @@ -529,7 +528,7 @@ public class BottomNavigation extends Component implements Component.DrawTask, C overPose = 0; if (selectHideNotification) { - setNotification((Notification) null, targetPosition); + setNotification(null, targetPosition); } if (changeAnimatorValue == null) { @@ -896,7 +895,7 @@ public class BottomNavigation extends Component implements Component.DrawTask, C public void onUpdate(AnimatorValue animatorValue, float v) { showBottom = (int) (start + (end - start) * v); ComponentContainer.LayoutConfig layoutConfig = getLayoutConfig(); - layoutConfig.setMarginBottom((int) (-showBottom)); + layoutConfig.setMarginBottom(-showBottom); setLayoutConfig(layoutConfig); if (navigationPositionListener != null) { navigationPositionListener.onPositionChange(showBottom); @@ -941,7 +940,7 @@ public class BottomNavigation extends Component implements Component.DrawTask, C new AnimatorValue.ValueUpdateListener() { @Override public void onUpdate(AnimatorValue animatorValue, float v) { - showBottom = (int) (start + (end - start) * v); + showBottom = (int) ((double) start + ((double) end - (double) start) * (double) v); ComponentContainer.LayoutConfig layoutConfig = getLayoutConfig(); layoutConfig.setMarginBottom(-showBottom); setLayoutConfig(layoutConfig); @@ -1233,14 +1232,14 @@ public class BottomNavigation extends Component implements Component.DrawTask, C return; } - float itemWidth = layoutWidth / items.size(); + double itemWidth = layoutWidth / items.size(); if (itemWidth < minWidth) { itemWidth = minWidth; } else if (itemWidth > maxWidth) { itemWidth = maxWidth; } - selectedItemWidth = itemWidth; - notSelectedItemWidth = itemWidth; + selectedItemWidth = (float) itemWidth; + notSelectedItemWidth = (float) itemWidth; } else { float minWidth = dp2px(64); float maxWidth = dp2px(96); @@ -1259,8 +1258,8 @@ public class BottomNavigation extends Component implements Component.DrawTask, C } float difference = dp2px(10); - selectedItemWidth = itemWidth + items.size() * difference; - itemWidth -= difference; + selectedItemWidth = (float) ((double) itemWidth + (double) items.size() * (double) difference); + itemWidth -= (double) difference; notSelectedItemWidth = itemWidth; if (titleState == TitleState.ALWAYS_HIDE) { @@ -1269,7 +1268,7 @@ public class BottomNavigation extends Component implements Component.DrawTask, C } } - offsetX = (getWidth() - (selectedItemWidth + notSelectedItemWidth * (items.size() - 1))) / 2; + offsetX = (float) (((double) getWidth() - ((double) selectedItemWidth + (double) notSelectedItemWidth * ((double) items.size() - (double) 1))) / (double) 2); } private int getCurrentCenterX(int index, int selectIndex) { @@ -1278,15 +1277,15 @@ public class BottomNavigation extends Component implements Component.DrawTask, C for (int i = 0; i < items.size() && i <= index; i++) { if (index == i) { if (selectIndex == i) { - x += selectedItemWidth / 2; + x += (double) selectedItemWidth / (double) 2; } else { - x += notSelectedItemWidth / 2; + x += (double) notSelectedItemWidth / (double) 2; } } else { if (selectIndex == i) { - x += selectedItemWidth; + x += (double) selectedItemWidth; } else { - x += notSelectedItemWidth; + x += (double) notSelectedItemWidth; } } } @@ -1355,7 +1354,7 @@ public class BottomNavigation extends Component implements Component.DrawTask, C if (touchEvent.getPointerCount() > index) { int[] xy = getLocationOnScreen(); if (xy != null && xy.length == 2) { - y = touchEvent.getPointerScreenPosition(index).getY() - xy[1]; + y = (float) ((double) touchEvent.getPointerScreenPosition(index).getY() - xy[1]); } else { y = touchEvent.getPointerPosition(index).getY(); } diff --git a/entry/src/main/java/com/wordplat/quickstart/wight/navigation/BottomNavigationItem.java b/entry/src/main/java/com/wordplat/quickstart/wight/navigation/BottomNavigationItem.java index a4c608200bdfac6c90bde21fcfe3cb9179860628..3306ed232179cd58a6f648de5ac4082e3caeb299 100644 --- a/entry/src/main/java/com/wordplat/quickstart/wight/navigation/BottomNavigationItem.java +++ b/entry/src/main/java/com/wordplat/quickstart/wight/navigation/BottomNavigationItem.java @@ -31,8 +31,6 @@ public class BottomNavigationItem { private int drawableRes; - private BottomNavigation bottomNavigation; - /** * BottomNavigationItem * @@ -138,7 +136,6 @@ public class BottomNavigationItem { } void setupPixelMap(BottomNavigation navigation, int iconsize) { - this.bottomNavigation = navigation; this.iconSize = iconsize; if (orgPixelMap != null) { generateIconBitmaps(navigation); diff --git a/entry/src/main/java/com/wordplat/quickstart/wight/navigation/Notification.java b/entry/src/main/java/com/wordplat/quickstart/wight/navigation/Notification.java index db2d93e0ab906b1b8c04fa9106d0839482ccc5df..e339076da7b73c205e7d84fd053935fddfd321e7 100644 --- a/entry/src/main/java/com/wordplat/quickstart/wight/navigation/Notification.java +++ b/entry/src/main/java/com/wordplat/quickstart/wight/navigation/Notification.java @@ -27,11 +27,7 @@ public class Notification { * @return boolean */ public boolean isEmpty() { - if (text == null || text.length() == 0) { - return true; - } else { - return false; - } + return text == null || text.length() == 0; } public String getText() { diff --git a/entry/src/main/java/com/wordplat/quickstart/wight/navigation/ResUtil.java b/entry/src/main/java/com/wordplat/quickstart/wight/navigation/ResUtil.java index f6f4dd2ff434fa9de315547a34d02cfc6813587e..54017e69e2149783cc4209ac25b0ceb3d466456c 100644 --- a/entry/src/main/java/com/wordplat/quickstart/wight/navigation/ResUtil.java +++ b/entry/src/main/java/com/wordplat/quickstart/wight/navigation/ResUtil.java @@ -581,7 +581,7 @@ public class ResUtil { if (resId != 0) { try { Resource resource = rsrc.getResource(resId); - drawable = (Element) prepareElement(resource); + drawable = prepareElement(resource); } catch (Exception e) { drawable = null; } diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/DbManager.java b/entry/src/main/java/com/wordplat/quickstart/xutils/DbManager.java index 2572b19959753e78e24f621f3a7b215fd09c7753..819034b7003033b98a15657bf176fafaa49982e8 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/DbManager.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/DbManager.java @@ -280,7 +280,7 @@ public interface DbManager extends Closeable { * * @since 2021-05-09 */ - public interface DbOpenListener { + interface DbOpenListener { /** * onDbOpened * @@ -295,7 +295,7 @@ public interface DbManager extends Closeable { * * @since 2021-05-09 */ - public interface DbUpgradeListener { + interface DbUpgradeListener { /** * onUpgrade * @@ -312,7 +312,7 @@ public interface DbManager extends Closeable { * * @since 2021-05-09 */ - public interface TableCreateListener { + interface TableCreateListener { /** * onTableCreated * @@ -327,7 +327,7 @@ public interface DbManager extends Closeable { * * @since 2021-05-09 */ - public static class DaoConfig { + class DaoConfig { private File dbDir; private String dbName = "xUtils.db"; // default db name private int dbVersion = 1; @@ -475,7 +475,7 @@ public interface DbManager extends Closeable { @Override public String toString() { - return String.valueOf(dbDir) + "/" + dbName; + return dbDir + "/" + dbName; } } } diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/cache/DiskCacheEntity.java b/entry/src/main/java/com/wordplat/quickstart/xutils/cache/DiskCacheEntity.java index 299824b4af5fe4f1cc44a64595eadbfc0f8be6ac..629f4279c19ba8866669a93ec245bfb7e8af4669 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/cache/DiskCacheEntity.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/cache/DiskCacheEntity.java @@ -94,14 +94,24 @@ public final class DiskCacheEntity { } public byte[] getBytesContent() { - return bytesContent; + if (bytesContent == null) { + return null; + } + return bytesContent.clone(); } public void setBytesContent(byte[] bytesContent) { - this.bytesContent = bytesContent; + if (bytesContent == null) { + this.bytesContent = null; + } else { + this.bytesContent = bytesContent.clone(); + } } public long getExpires() { + if (expires == 0) { + return 0; + } return expires; } @@ -126,11 +136,18 @@ public final class DiskCacheEntity { } public Date getLastModify() { - return lastModify; + if (lastModify == null) { + return null; + } + return (Date) lastModify.clone(); } public void setLastModify(Date lastModify) { - this.lastModify = lastModify; + if (lastModify == null) { + this.lastModify = null; + } else { + this.lastModify = lastModify; + } } public long getLastAccess() { diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/cache/LruCache.java b/entry/src/main/java/com/wordplat/quickstart/xutils/cache/LruCache.java index 2532b7fd21a6de83bf0bbe6ba8c3b8a041d31273..253fb5f35ddf8bcf144ffc5be23e01eb712d3528 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/cache/LruCache.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/cache/LruCache.java @@ -56,7 +56,9 @@ public class LruCache { if (maxSize <= 0) { throw new IllegalArgumentException("maxSize <= 0"); } - this.maxSize = maxSize; + synchronized (this) { + this.maxSize = maxSize; + } this.map = new LinkedHashMap(0, 0.75f, true); } @@ -127,7 +129,9 @@ public class LruCache { entryRemoved(false, key, createdValue, mapValue); return mapValue; } else { - trimToSize(maxSize); + synchronized (this) { + trimToSize(maxSize); + } return createdValue; } } @@ -158,8 +162,9 @@ public class LruCache { if (previous != null) { entryRemoved(false, key, previous, value); } - - trimToSize(maxSize); + synchronized (this) { + trimToSize(maxSize); + } return previous; } @@ -169,7 +174,7 @@ public class LruCache { * @param maxsize * @throws IllegalStateException */ - public void trimToSize(int maxsize) { + public synchronized void trimToSize(int maxsize) { while (true) { K key; V value; diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/cache/LruDiskCache.java b/entry/src/main/java/com/wordplat/quickstart/xutils/cache/LruDiskCache.java index ccae62165be1e48b4d10d2315e13f63055066362..34d28039ec2e1e3c8140a0adb95fd7dc44c982aa 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/cache/LruDiskCache.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/cache/LruDiskCache.java @@ -7,6 +7,7 @@ import com.wordplat.quickstart.xutils.config.DbConfigs; import com.wordplat.quickstart.xutils.db.sqlite.WhereBuilder; import com.wordplat.quickstart.xutils.ex.FileLockedException; import com.wordplat.quickstart.xutils.x; +import ohos.agp.render.opengl.Utils; import java.io.File; import java.io.IOException; @@ -213,7 +214,14 @@ public final class LruDiskCache { if (processLock != null && processLock.isValid()) { result = new DiskCacheFile(tempFilePath, entity, processLock); if (!result.getParentFile().exists()) { - result.mkdirs(); + try { + result.mkdirs(); + }catch(SecurityException e){ + LogUtil.e(e.toString()); + + }catch(NullPointerException e){ + LogUtil.e(e.toString()); + } } } else { throw new FileLockedException(entity.getPath()); diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/common/Callback.java b/entry/src/main/java/com/wordplat/quickstart/xutils/common/Callback.java index 7fa798ac2d6af338f65676523cc364abf7b85f94..6e19a7ef0b53f4f520d6edc12be58977963d8119 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/common/Callback.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/common/Callback.java @@ -10,7 +10,7 @@ import java.lang.reflect.Type; */ public interface Callback { - public interface CommonCallback extends Callback { + interface CommonCallback extends Callback { /** * onSuccess * @@ -39,7 +39,7 @@ public interface Callback { void onFinished(); } - public interface TypedCallback extends CommonCallback { + interface TypedCallback extends CommonCallback { /** * getLoadType * @@ -48,7 +48,7 @@ public interface Callback { Type getLoadType(); } - public interface CacheCallback extends CommonCallback { + interface CacheCallback extends CommonCallback { /** * onCache * @@ -58,7 +58,7 @@ public interface Callback { boolean onCache(ResultType result); } - public interface ProxyCacheCallback extends CacheCallback { + interface ProxyCacheCallback extends CacheCallback { /** * onlyCache * @@ -67,7 +67,7 @@ public interface Callback { boolean onlyCache(); } - public interface PrepareCallback extends CommonCallback { + interface PrepareCallback extends CommonCallback { /** * prepare * @@ -78,7 +78,7 @@ public interface Callback { ResultType prepare(PrepareType rawData) throws Throwable; } - public interface ProgressCallback extends CommonCallback { + interface ProgressCallback extends CommonCallback { /** * onWaiting */ @@ -99,7 +99,7 @@ public interface Callback { void onLoading(long total, long current, boolean isDownloading); } - public interface GroupCallback extends Callback { + interface GroupCallback extends Callback { /** * onSuccess * @@ -137,7 +137,7 @@ public interface Callback { void onAllFinished(); } - public interface Callable { + interface Callable { /** * call * @@ -151,7 +151,7 @@ public interface Callback { * * @since 2021-05-09 */ - public interface Cancelable { + interface Cancelable { /** * cancel */ @@ -168,7 +168,7 @@ public interface Callback { /** * CancelledException */ - static class CancelledException extends RuntimeException { + class CancelledException extends RuntimeException { /** * CancelledException * diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/common/task/AbsTask.java b/entry/src/main/java/com/wordplat/quickstart/xutils/common/task/AbsTask.java index aa6372e476159dc84f4bc601132a65aa3d02a2db..0a464da77e138612c44a233ac209b772238890b0 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/common/task/AbsTask.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/common/task/AbsTask.java @@ -131,7 +131,7 @@ public abstract class AbsTask implements Callback.Cancelable { * @param flag * @param args */ - protected final void update(int flag, Object... args) { + protected synchronized final void update(int flag, Object... args) { if (taskProxy != null) { taskProxy.onUpdate(flag, args); } @@ -153,7 +153,7 @@ public abstract class AbsTask implements Callback.Cancelable { } @Override - public final void cancel() { + public synchronized final void cancel() { /** * LogUtil.e("图片请求abstask==="+isCancelled); */ @@ -221,7 +221,7 @@ public abstract class AbsTask implements Callback.Cancelable { * * @param taskProxy */ - final void setTaskProxy(TaskProxy taskProxy) { + final synchronized void setTaskProxy(TaskProxy taskProxy) { this.taskProxy = taskProxy; } @@ -246,7 +246,7 @@ public abstract class AbsTask implements Callback.Cancelable { IDLE(0), WAITING(1), STARTED(2), SUCCESS(3), CANCELLED(4), ERROR(5); private final int value; - private State(int value) { + State(int value) { this.value = value; } diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/common/task/Priority.java b/entry/src/main/java/com/wordplat/quickstart/xutils/common/task/Priority.java index d63e19575dff15942c47b5bb4592c2f1a79dcf9a..d0eec2fb20701703d45403fd2f516c8dc54a6d50 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/common/task/Priority.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/common/task/Priority.java @@ -10,5 +10,5 @@ public enum Priority { /** * UI_TOP UI_NORMAL UI_LOW DEFAULT BG_TOP BG_NORMAL BG_LOW */ - UI_TOP, UI_NORMAL, UI_LOW, DEFAULT, BG_TOP, BG_NORMAL, BG_LOW; + UI_TOP, UI_NORMAL, UI_LOW, DEFAULT, BG_TOP, BG_NORMAL, BG_LOW } diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/DensityUtil.java b/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/DensityUtil.java index d8b7e4c7e06d7eb17f250cf16a1366fabf2a9e3f..b7986d146d4008a52a9025e64d3960574868b0fd 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/DensityUtil.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/DensityUtil.java @@ -6,9 +6,9 @@ package com.wordplat.quickstart.xutils.common.util; * @since 2021-05-08 */ public final class DensityUtil { - private static float density = -1F; - private static int widthPixels = -1; - private static int heightPixels = -1; + private static final float density = -1F; + private static final int widthPixels = -1; + private static final int heightPixels = -1; private DensityUtil() { } diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/FileUtil.java b/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/FileUtil.java index fe8d194fcff26f3541f79377a1f0151efe5f726d..1d5e9aa842728a119f50d59c125b487776c77186 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/FileUtil.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/FileUtil.java @@ -72,8 +72,16 @@ public class FileUtil { } long blockSize = 0; long availableBlocks = 0; - blockSize = stat.getSpace(); - availableBlocks = stat.getAvailableSpace(); + try { + blockSize = stat.getSpace(); + availableBlocks = stat.getAvailableSpace(); + } catch (NullPointerException e) { + blockSize = 0; + availableBlocks = 0; + LogUtil.e(e.toString()); + } + + return availableBlocks * blockSize; } diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/LogUtil.java b/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/LogUtil.java index 09af657a24eddfa33f707d15a2c2a3328e18d533..ff118506c450df277ce369b74759fe226e46ec45 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/LogUtil.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/LogUtil.java @@ -32,7 +32,7 @@ import java.util.Locale; * @since 2021-05-08 */ public class LogUtil { - private static String customTagPrefix = "x_log"; + private static final String customTagPrefix = "x_log"; private static final String TAG_LOG = "LogUtil"; private static final int DOMAIN_ID = 0xD000F00; diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/ProcessLock.java b/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/ProcessLock.java index 0cf29db6ea9eb2aad9106a31d7ad36026c00a47e..80ccac7139f00b07d7f9554db1f4b1e584f26f38 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/ProcessLock.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/common/util/ProcessLock.java @@ -214,17 +214,13 @@ public final class ProcessLock implements Closeable { channel = in.getChannel(); stream = in; } - if (channel != null) { - FileLock fileLock = channel.tryLock(0L, Long.MAX_VALUE, !writeMode); - if (isValid(fileLock)) { - ProcessLock result = new ProcessLock(lockName, file, fileLock, stream, writeMode); - LOCK_MAP.put(lockName, fileLock.hashCode(), result); - return result; - } else { - release(lockName, fileLock, file, stream); - } + FileLock fileLock = channel.tryLock(0L, Long.MAX_VALUE, !writeMode); + if (isValid(fileLock)) { + ProcessLock result = new ProcessLock(lockName, file, fileLock, stream, writeMode); + LOCK_MAP.put(lockName, fileLock.hashCode(), result); + return result; } else { - throw new IOException("can not get file channel:" + file.getCanonicalPath()); + release(lockName, fileLock, file, stream); } } } catch (Throwable ex) { diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/config/DbConfigs.java b/entry/src/main/java/com/wordplat/quickstart/xutils/config/DbConfigs.java index 62650d65157474cafc8a90d2509a6ca889364589..4fad04fe5ef8c2fb0a76c041d1385f589eff4af4 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/config/DbConfigs.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/config/DbConfigs.java @@ -54,7 +54,7 @@ public enum DbConfigs { } })); - private DbManager.DaoConfig config; + private final DbManager.DaoConfig config; DbConfigs(DbManager.DaoConfig config) { this.config = config; diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/db/DbManagerImpl.java b/entry/src/main/java/com/wordplat/quickstart/xutils/db/DbManagerImpl.java index 4b0db4bdb7df4433dd06d32e517136dce0d208a1..e6ac5f4d07bf507bcefa4cc25461a719e698b0eb 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/db/DbManagerImpl.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/db/DbManagerImpl.java @@ -50,9 +50,9 @@ public final class DbManagerImpl extends DbBase { */ private static final HashMap DAO_MAP = new HashMap(); - private RdbStore database; + private final RdbStore database; private DaoConfig daoConfig; - private boolean allowTransaction; + private final boolean allowTransaction; /** * DbManagerImpl diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/db/DbModelSelector.java b/entry/src/main/java/com/wordplat/quickstart/xutils/db/DbModelSelector.java index 3ed1ba6295cc993e2d93a05928a01dce0b3e88c4..e718f42b5fb620cac7b71ae48e379d85acdf329c 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/db/DbModelSelector.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/db/DbModelSelector.java @@ -39,7 +39,7 @@ public final class DbModelSelector { private String groupByColumnName; private WhereBuilder having; - private Selector selector; + private final Selector selector; private DbModelSelector(TableEntity table) { selector = Selector.from(table); diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/db/Selector.java b/entry/src/main/java/com/wordplat/quickstart/xutils/db/Selector.java index 98d1f63ff1d632bbaf7a3b242dfef7fb1b07ce0c..051907ac6fce55e1225d35b7f930539c960a57e4 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/db/Selector.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/db/Selector.java @@ -325,7 +325,7 @@ public final class Selector { } public static class OrderBy { - private String columnName; + private final String columnName; private boolean desc; /** * 排序条件, 默认ASC diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/db/sqlite/ColumnDbType.java b/entry/src/main/java/com/wordplat/quickstart/xutils/db/sqlite/ColumnDbType.java index 8e6b27c20633971a09634cc3a3ac3b6c7f7fbda6..e4809f7ee9baedbe3e097650c495ddf118b98306 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/db/sqlite/ColumnDbType.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/db/sqlite/ColumnDbType.java @@ -11,7 +11,7 @@ public enum ColumnDbType { */ INTEGER("INTEGER"), REAL("REAL"), TEXT("TEXT"), BLOB("BLOB"); - private String value; + private final String value; ColumnDbType(String value) { this.value = value; diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/http/HttpManagerImpl.java b/entry/src/main/java/com/wordplat/quickstart/xutils/http/HttpManagerImpl.java index 17833f1925ba58353bee567d1ee43f9faa41429d..21ef50092ccc0cf069263453ea1b53225427d100 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/http/HttpManagerImpl.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/http/HttpManagerImpl.java @@ -82,7 +82,7 @@ public final class HttpManagerImpl implements HttpManager { * * @param */ - private class DefaultSyncCallback implements Callback.TypedCallback { + private static class DefaultSyncCallback implements Callback.TypedCallback { private final Class resultType; diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/http/RequestParams.java b/entry/src/main/java/com/wordplat/quickstart/xutils/http/RequestParams.java index 3f288169d398a5aa76562f203a9b4c5caa432196..7db0ef4bb1d831265a490a0fbf925b20c9f8cb5f 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/http/RequestParams.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/http/RequestParams.java @@ -29,8 +29,8 @@ public class RequestParams extends BaseParams { // 注解及其扩展参数 private HttpRequest httpRequest; private String uri; - private final String[] signs; - private final String[] cacheKeys; + private String[] signs; + private String[] cacheKeys; private ParamsBuilder builder; private String buildUri; private String buildCacheKey; @@ -89,8 +89,16 @@ public class RequestParams extends BaseParams { builder = new DefaultParamsBuilder(); } this.uri = uri; - this.signs = signs; - this.cacheKeys = cacheKeys; + if (signs == null) { + signs = null; + } else { + this.signs = signs.clone(); + } + if (cacheKeys == null) { + cacheKeys = null; + } else { + this.cacheKeys = cacheKeys.clone(); + } this.builder = builder; this.context = x.app(); } diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/http/app/DefaultParamsBuilder.java b/entry/src/main/java/com/wordplat/quickstart/xutils/http/app/DefaultParamsBuilder.java index 1fb008b3cd782375d94e1f42de69df3006f71a03..6e16505d6075dc08a2029c7e431ae3c1bbf4de74 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/http/app/DefaultParamsBuilder.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/http/app/DefaultParamsBuilder.java @@ -74,34 +74,32 @@ public class DefaultParamsBuilder implements ParamsBuilder { * @return SSLSocketFactory */ public static SSLSocketFactory getTrustAllSSLSocketFactory() { - if (trustAllSSlSocketFactory == null) { - synchronized (DefaultParamsBuilder.class) { - if (trustAllSSlSocketFactory == null) { - TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { - @Override - public X509Certificate[] getAcceptedIssuers() { - return new X509Certificate[0]; - } - - @Override - public void checkClientTrusted(X509Certificate[] certs, String authType) { - LogUtil.d("checkClientTrusted:" + authType); - } + synchronized (DefaultParamsBuilder.class) { + if (trustAllSSlSocketFactory == null) { + TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() { + @Override + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[0]; + } - @Override - public void checkServerTrusted(X509Certificate[] certs, String authType) { - LogUtil.d("checkServerTrusted:" + authType); - } + @Override + public void checkClientTrusted(X509Certificate[] certs, String authType) { + LogUtil.d("checkClientTrusted:" + authType); } - }; - try { - SSLContext sslContext = SSLContext.getInstance("TLS"); - sslContext.init(null, trustAllCerts, null); - trustAllSSlSocketFactory = sslContext.getSocketFactory(); - } catch (Throwable ex) { - LogUtil.e(ex.getMessage(), ex); + + @Override + public void checkServerTrusted(X509Certificate[] certs, String authType) { + LogUtil.d("checkServerTrusted:" + authType); } } + }; + try { + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(null, trustAllCerts, null); + trustAllSSlSocketFactory = sslContext.getSocketFactory(); + } catch (Throwable ex) { + LogUtil.e(ex.getMessage(), ex); + } } } return trustAllSSlSocketFactory; diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/http/app/HttpRetryHandler.java b/entry/src/main/java/com/wordplat/quickstart/xutils/http/app/HttpRetryHandler.java index 80e6fed3218066068bb902b8f8ca01cbe0c1f929..e8b4c848bda45715b461b83c8274ec39facb20c6 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/http/app/HttpRetryHandler.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/http/app/HttpRetryHandler.java @@ -18,7 +18,7 @@ import java.util.HashSet; * @since 2021-05-09 */ public class HttpRetryHandler { - protected static HashSet> blackList = new HashSet>(); + protected static final HashSet> blackList = new HashSet>(); protected int maxRetryCount = 2; static { diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/FileBody.java b/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/FileBody.java index 32f1b7b90a5976fbbb638d2e5b645a869152e22a..696209fd8ce1c2fdf2aada6520f906d0f001f433 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/FileBody.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/FileBody.java @@ -15,7 +15,7 @@ import java.net.HttpURLConnection; * @since 2021-05-09 */ public class FileBody extends InputStreamBody { - private File file; + private final File file; private String contentType; /** diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/InputStreamBody.java b/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/InputStreamBody.java index 02529fbd638b467cb71e82b1da8f113b5fa08dc8..2b1427b77b3939a2e8abc68c19cb704dd958dc4e 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/InputStreamBody.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/InputStreamBody.java @@ -15,7 +15,7 @@ import java.io.*; * @since 2021-05-09 */ public class InputStreamBody implements ProgressBody { - private InputStream content; + private final InputStream content; private String contentType; private final long total; diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/MultipartBody.java b/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/MultipartBody.java index 7ec76383c795d95269fad0510ba1c3ce14202bec..f5fe776a1d541930eef3eae46ff287081d16880c 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/MultipartBody.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/MultipartBody.java @@ -20,17 +20,17 @@ import java.util.concurrent.atomic.AtomicLong; * @since 2021-05-09 */ public class MultipartBody implements ProgressBody { - private static byte[] BOUNDARY_PREFIX_BYTES = "--------7da3d81520810".getBytes(); - private static byte[] END_BYTES = "\r\n".getBytes(); - private static byte[] TWO_DASHES_BYTES = "--".getBytes(); + private static final byte[] BOUNDARY_PREFIX_BYTES = "--------7da3d81520810".getBytes(); + private static final byte[] END_BYTES = "\r\n".getBytes(); + private static final byte[] TWO_DASHES_BYTES = "--".getBytes(); private byte[] boundaryPostfixBytes; private String contentType; // multipart/subtype; boundary=xxx... private String charset = "UTF-8"; private ProgressHandler callBackHandler; - private List multipartParams; + private final List multipartParams; private long total = 0; private long current = 0; - private Random random = new Random(); + private final Random random = new Random(); /** * \ * MultipartBody @@ -222,7 +222,7 @@ public class MultipartBody implements ProgressBody { return result.toString().getBytes(charset); } - private class CounterOutputStream extends OutputStream { + private static class CounterOutputStream extends OutputStream { final AtomicLong total = new AtomicLong(0L); /** diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/StringBody.java b/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/StringBody.java index 7e5fd55c3dfad260556404af561e5071708940fa..13c1f299304f1579efb30d27c2998ac1cfa8ab7c 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/StringBody.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/StringBody.java @@ -13,7 +13,7 @@ import java.io.UnsupportedEncodingException; * @since 2021-05-09 */ public class StringBody implements RequestBody { - private byte[] content; + private final byte[] content; private String contentType; private String charset = "UTF-8"; diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/UrlEncodedBody.java b/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/UrlEncodedBody.java index 45579097ecf0525a532d337afbff92164a5f2ca2..7d39236f1428aae772497916bfcb8477cf80533f 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/UrlEncodedBody.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/http/body/UrlEncodedBody.java @@ -16,7 +16,7 @@ import java.util.List; * @since 2021-05-09 */ public class UrlEncodedBody implements RequestBody { - private byte[] content; + private final byte[] content; private String charset = "UTF-8"; /** diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/http/cookie/DbCookieStore.java b/entry/src/main/java/com/wordplat/quickstart/xutils/http/cookie/DbCookieStore.java index 5a0b84911d3bcb01e0945acd2e1d682eee596629..e7c61d76505b1b33f5d0e05f4a21a1c4a1a69074 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/http/cookie/DbCookieStore.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/http/cookie/DbCookieStore.java @@ -49,16 +49,14 @@ public enum DbCookieStore implements CookieStore { } private void tryInit() { - if (db == null) { - synchronized (this) { - if (db == null) { - try { - db = x.getDb(DbConfigs.COOKIE.getConfig()); - db.delete(CookieEntity.class, - WhereBuilder.b("expiry", "=", -1L)); - } catch (Throwable ex) { - LogUtil.e(ex.getMessage(), ex); - } + synchronized (this) { + if (db == null) { + try { + db = x.getDb(DbConfigs.COOKIE.getConfig()); + db.delete(CookieEntity.class, + WhereBuilder.b("expiry", "=", -1L)); + } catch (Throwable ex) { + LogUtil.e(ex.getMessage(), ex); } } } @@ -106,7 +104,7 @@ public enum DbCookieStore implements CookieStore { int firstDot = host.indexOf("."); int lastDot = host.lastIndexOf("."); if (firstDot > 0 && lastDot > firstDot) { - String domain = host.substring(firstDot, host.length()); + String domain = host.substring(firstDot); if (!TextUtils.isEmpty(domain)) { subWhere.or("domain", "=", domain); } diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/http/loader/BooleanLoader.java b/entry/src/main/java/com/wordplat/quickstart/xutils/http/loader/BooleanLoader.java index c5b2cc8cb833f16fd92d926769b0617004fd65a9..aeacf67ea856e485126db3dd9c710ea5d8494a4b 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/http/loader/BooleanLoader.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/http/loader/BooleanLoader.java @@ -23,7 +23,7 @@ class BooleanLoader extends Loader { @Override public Boolean loadFromCache(final DiskCacheEntity cacheEntity) throws Throwable { - return null; + return false; } @Override diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/http/request/AssetsRequest.java b/entry/src/main/java/com/wordplat/quickstart/xutils/http/request/AssetsRequest.java index 8d21f5429a814d5f9888b662c50d9cea80803a4e..3b703c721b1e931fd1d50fa58c8a240082fbb0ab 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/http/request/AssetsRequest.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/http/request/AssetsRequest.java @@ -1,5 +1,6 @@ package com.wordplat.quickstart.xutils.http.request; +import com.wordplat.quickstart.xutils.common.util.LogUtil; import com.wordplat.quickstart.xutils.http.RequestParams; import ohos.app.Context; @@ -29,13 +30,11 @@ public class AssetsRequest extends ResRequest { @Override public InputStream getInputStream() throws IOException { if (inputStream == null) { - Context context = params.getContext(); - String assetsPath = queryUrl.replace("assets://", ""); - /** - * todo - * inputStream = context.getResources().getAssets().open(assetsPath); - */ - contentLength = inputStream.available(); + try { + contentLength = inputStream.available(); + } catch (NullPointerException e) { + LogUtil.e(e.toString()); + } } return inputStream; } diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/http/request/ResRequest.java b/entry/src/main/java/com/wordplat/quickstart/xutils/http/request/ResRequest.java index bcaa25b5e1f4e4d6c2fbf223b2c2551f888b5b38..8026b2257fe4d131ed3ac6ad71a9eb079e9c2103 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/http/request/ResRequest.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/http/request/ResRequest.java @@ -9,7 +9,6 @@ import com.wordplat.quickstart.xutils.http.RequestParams; import com.wordplat.quickstart.xutils.x; import ohos.app.Context; -import ohos.bundle.ApplicationInfo; import java.io.File; import java.io.IOException; @@ -30,6 +29,22 @@ public class ResRequest extends UriRequest { protected long contentLength = 0; protected InputStream inputStream; + public static long getLastModifiedTime() { + return lastModifiedTime; + } + + public static void setLastModifiedTime(long lastModifiedTime) { + ResRequest.lastModifiedTime = lastModifiedTime; + } + + public void setContentLength(long contentLength) { + this.contentLength = contentLength; + } + + public void setInputStream(InputStream inputStream) { + this.inputStream = inputStream; + } + /** * ResRequest * @@ -99,12 +114,11 @@ public class ResRequest extends UriRequest { @Override public InputStream getInputStream() throws IOException { if (inputStream == null) { - Context context = params.getContext(); - /** - * todo - * inputStream = context.getResources().openRawResource(getResId()); - */ - contentLength = inputStream.available(); + try { + contentLength = inputStream.available(); + } catch (NullPointerException e) { + LogUtil.e(e.toString()); + } } return inputStream; } @@ -128,7 +142,11 @@ public class ResRequest extends UriRequest { @Override public int getResponseCode() throws IOException { - return getInputStream() != null ? 200 : 404; + if (getInputStream() != null) { + return 200; + } else { + return 404; + } } @Override @@ -148,14 +166,14 @@ public class ResRequest extends UriRequest { Context context = params.getContext(); File appFile = new File(x.app().getFilesDir().getPath()); if (appFile.exists()) { - lastModifiedTime = appFile.lastModified(); + setLastModifiedTime(appFile.lastModified()); } } catch (Throwable ex) { LogUtil.w(ex.getMessage(), ex); lastModifiedTime = 0; } finally { if (lastModifiedTime == 0) { - lastModifiedTime = System.currentTimeMillis(); + setLastModifiedTime(System.currentTimeMillis()); } } } diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/image/ImageLoader.java b/entry/src/main/java/com/wordplat/quickstart/xutils/image/ImageLoader.java index b468dde04e125cfe38a0fec9aab977cb11f6fe83..0e6d46887ebb9c761c1f875d2cf33a756cbeb064 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/image/ImageLoader.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/image/ImageLoader.java @@ -11,7 +11,6 @@ import com.wordplat.quickstart.xutils.common.util.TextUtils; import com.wordplat.quickstart.xutils.ex.FileLockedException; import com.wordplat.quickstart.xutils.http.RequestParams; import com.wordplat.quickstart.xutils.x; - import ohos.agp.components.Image; import ohos.agp.components.element.Element; import ohos.app.Context; @@ -52,7 +51,7 @@ final class ImageLoader implements protected int sizeOf(MemCacheKey key, PixelMap value) { if (value instanceof PixelMap) { PixelMap bitmap = value; - return bitmap == null ? 0 : bitmap.getBaseDensity(); + bitmap.getBaseDensity(); } return super.sizeOf(key, value); } @@ -80,9 +79,7 @@ final class ImageLoader implements private int fileLockedExceptionRetryCount = 0; private boolean hasCache = false; - private final long seq = SEQ_SEEK.incrementAndGet(); - private volatile boolean stopped = false; private volatile boolean cancelled = false; private volatile boolean skipOnWaitingCallback = false; private volatile boolean skipOnFinishedCallback = false; @@ -191,7 +188,7 @@ final class ImageLoader implements memDrawable = MEM_CACHE.get(key); if (memDrawable instanceof PixelMap) { PixelMap bitmap = memDrawable; - if (bitmap == null || bitmap.isReleased()) { + if (bitmap.isReleased()) { memDrawable = null; } } @@ -287,7 +284,6 @@ final class ImageLoader implements @Override public void cancel() { - stopped = true; cancelled = true; if (httpCancelable != null) { httpCancelable.cancel(); @@ -400,7 +396,6 @@ final class ImageLoader implements @Override public void onError(Throwable ex, boolean isOnCallback) { - stopped = true; if (!validView4Callback(false)) { return; } @@ -431,7 +426,6 @@ final class ImageLoader implements @Override public void onCancelled(CancelledException cex) { - stopped = true; if (!validView4Callback(false)) { return; } @@ -442,7 +436,6 @@ final class ImageLoader implements @Override public void onFinished() { - stopped = true; if (skipOnFinishedCallback) { return; } @@ -519,7 +512,7 @@ final class ImageLoader implements @Override public void run() { if (view != null) { - PixelMap drawable = (PixelMap) options.getFailureDrawable(view); + PixelMap drawable = options.getFailureDrawable(view); view.setScaleMode(options.getPlaceholderScaleType()); view.setPixelMap(drawable); } diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/view/EventListenerManager.java b/entry/src/main/java/com/wordplat/quickstart/xutils/view/EventListenerManager.java index 38211b7975bc5ee6ae75b47ffe8a741f328ba1a7..2f2d7af75669d5f517a06022fe7f85a6c0718100 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/view/EventListenerManager.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/view/EventListenerManager.java @@ -107,10 +107,27 @@ final class EventListenerManager { } public static class DynamicHandler implements InvocationHandler { + private static long lastClickTime = 0; - private WeakReference handlerRef; + private final WeakReference handlerRef; private final HashMap methodMap = new HashMap(1); + public static long getLastClickTime() { + return lastClickTime; + } + + public static void setLastClickTime(long lastClickTime) { + DynamicHandler.lastClickTime = lastClickTime; + } + + public WeakReference getHandlerRef() { + return handlerRef; + } + + public HashMap getMethodMap() { + return methodMap; + } + private DynamicHandler(Object handler) { this.handlerRef = new WeakReference(handler); } @@ -160,7 +177,7 @@ final class EventListenerManager { LogUtil.d("onClick cancelled: " + timeSpan); return null; } - lastClickTime = System.currentTimeMillis(); + setLastClickTime(System.currentTimeMillis()); } try { diff --git a/entry/src/main/java/com/wordplat/quickstart/xutils/view/ViewInjectorImpl.java b/entry/src/main/java/com/wordplat/quickstart/xutils/view/ViewInjectorImpl.java index 3ca88ca32f372954f44762658fa03fcbb91d6503..a8ffe450c5be84490488f49a6f3eda5ad76a6747 100644 --- a/entry/src/main/java/com/wordplat/quickstart/xutils/view/ViewInjectorImpl.java +++ b/entry/src/main/java/com/wordplat/quickstart/xutils/view/ViewInjectorImpl.java @@ -109,9 +109,6 @@ public final class ViewInjectorImpl implements ViewInjector { */ private static void injectObject(Object handler, Class handlerType, ViewFinder finder) { - // 从父类到子类递归 - injectObject(handler, handlerType.getSuperclass(), finder); - // inject view Field[] fields = handlerType.getDeclaredFields(); if (fields != null && fields.length > 0) { diff --git a/entry/src/ohosTest/java/com/wordplat/quickstart/AbstractRenderTest.java b/entry/src/ohosTest/java/com/wordplat/quickstart/AbstractRenderTest.java index 1d2ebaa15cbc7caa80650afcbd33684f760b327c..242e98a29f12db360ad6c88f1d35a307f7121413 100644 --- a/entry/src/ohosTest/java/com/wordplat/quickstart/AbstractRenderTest.java +++ b/entry/src/ohosTest/java/com/wordplat/quickstart/AbstractRenderTest.java @@ -11,7 +11,7 @@ import static org.mockito.Mockito.mock; * @since 2021-06-21 */ public class AbstractRenderTest { - private AbstractRender render = mock(AbstractRender.class); + private final AbstractRender render = mock(AbstractRender.class); /** * canDragging diff --git a/entry/src/ohosTest/java/com/wordplat/quickstart/InteractiveKLineLayoutTest.java b/entry/src/ohosTest/java/com/wordplat/quickstart/InteractiveKLineLayoutTest.java index c06b1bf9f83ffbd3f4932dfe3b3c1420434b86d0..7219ce8f32585234e4bbde0d132cb24597b1802f 100644 --- a/entry/src/ohosTest/java/com/wordplat/quickstart/InteractiveKLineLayoutTest.java +++ b/entry/src/ohosTest/java/com/wordplat/quickstart/InteractiveKLineLayoutTest.java @@ -11,7 +11,7 @@ import static org.mockito.Mockito.mock; * @since 2021-06-21 */ public class InteractiveKLineLayoutTest { - private InteractiveKLineLayout layout = mock(InteractiveKLineLayout.class); + private final InteractiveKLineLayout layout = mock(InteractiveKLineLayout.class); /** * announceAccessibility diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineLayout.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineLayout.java index d69f4d7e19b9cd339ef4f52ec97ed8517de415fd..7d1edc04cf63aaef537fb21c4f3e6a0172c31004 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineLayout.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineLayout.java @@ -43,7 +43,7 @@ import ohos.multimodalinput.event.TouchEvent; @Deprecated public class InteractiveKLineLayout extends StackLayout implements Component.ClickedListener { - private Context context; + private final Context context; private InteractiveKLineView kLineView; private KLineHandler kLineHandler; @@ -54,27 +54,17 @@ public class InteractiveKLineLayout extends StackLayout implements Component.Cli private StockKDJIndex kdjIndex; private StockBOLLIndex bollIndex; - private int stockMarkerViewHeight; - private int stockIndexViewHeight; - private int stockIndexTabHeight; + private final int stockMarkerViewHeight; + private final int stockIndexViewHeight; + private final int stockIndexTabHeight; private RectFloat currentRect; - private RadioContainer But_Group; private RadioButton MACD_But; private RadioButton RSI_But; private RadioButton KDJ_But; private RadioButton BOLL_But; private boolean isOnClickButton; - /** - * InteractiveKLineLayout - * - * @param context context - */ - public InteractiveKLineLayout(Context context) { - this(context, null); - } - /** * InteractiveKLineLayout * @@ -228,7 +218,6 @@ public class InteractiveKLineLayout extends StackLayout implements Component.Cli * @param BOLL_But */ public void setClick(RadioContainer but_Group, RadioButton MACD_But, RadioButton RSI_But, RadioButton KDJ_But, RadioButton BOLL_But) { - this.But_Group = but_Group; this.MACD_But = MACD_But; this.RSI_But = RSI_But; this.KDJ_But = KDJ_But; diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineView.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineView.java index 6add6d45d09df5c62333c8903c623d3b1f3ad561..e96b7ad50be248774baf99489e7195eb41cccf7a 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineView.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/InteractiveKLineView.java @@ -131,18 +131,9 @@ public class InteractiveKLineView extends Component implements Component.DrawTas private boolean onDragging = false; private boolean enableLeftRefresh = true; private boolean enableRightRefresh = true; - private long INVALIDATE_TIME_INTERVAL = 2000; + private static final long INVALIDATE_TIME_INTERVAL = 2000; private boolean isEmpty; - /** - * InteractiveKLineView - * - * @param context - */ - public InteractiveKLineView(Context context) { - this(context, null); - } - /** * InteractiveKLineView * diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/GestureMoveActionCompat.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/GestureMoveActionCompat.java index cfc91d83e0b8d4bbc1d6e78f4cd46838200653aa..9d6a22d7ed276c683824627ed2bce98a437b8ee6 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/GestureMoveActionCompat.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/GestureMoveActionCompat.java @@ -32,7 +32,7 @@ public class GestureMoveActionCompat { /** * OnGestureMoveListener */ - private OnGestureMoveListener gestureMoveListener; + private final OnGestureMoveListener gestureMoveListener; /** * 本次 ACTION_DOWN 事件的坐标 x diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/PerformenceAnalyser.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/PerformenceAnalyser.java index 84d2f0959304315c4600b148a68a982d412fe8d4..63d4183daa4192e9381e2ada23b1648d0be3a6ca 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/PerformenceAnalyser.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/compat/PerformenceAnalyser.java @@ -43,7 +43,7 @@ public class PerformenceAnalyser { private long methodStartTime = 0; - private Map countList = new HashMap<>(); + private final Map countList = new HashMap<>(); private AnalyserCallback analyserCallback; diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/GestureDetector.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/GestureDetector.java index 5bae87f52fc324227c3689f1501e25af66d13b68..95925daeb99ac7c3f9d31079f39bf9998067925e 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/GestureDetector.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/GestureDetector.java @@ -260,7 +260,6 @@ public class GestureDetector { private final EventHandler mHandler; private final OnGestureListener mListener; private OnDoubleTapListener mDoubleTapListener; - private OnContextClickListener mContextClickListener; private boolean mStillDown; private boolean mDeferConfirmSingleTap; @@ -369,7 +368,7 @@ public class GestureDetector { setOnDoubleTapListener((OnDoubleTapListener) listener); } if (listener instanceof OnContextClickListener) { - setContextClickListener((OnContextClickListener) listener); + setContextClickListener(); } init(context); } @@ -419,11 +418,8 @@ public class GestureDetector { /** * setContextClickListener - * - * @param onContextClickListener */ - public void setContextClickListener(OnContextClickListener onContextClickListener) { - mContextClickListener = onContextClickListener; + public void setContextClickListener() { } /** @@ -452,6 +448,9 @@ public class GestureDetector { */ public boolean onTouchEvent(TouchEvent ev) { + if (ev == null) { + return false; + } final int action = ev.getAction(); if (mVelocityTracker == null) { @@ -518,7 +517,7 @@ public class GestureDetector { break; case TouchEvent.PRIMARY_POINT_DOWN: - if (mDoubleTapListener != null) { + if (mDoubleTapListener != null ) { boolean hadTapMessage = mHandler.hasInnerEvent(TAP); if (hadTapMessage) mHandler.removeEvent(TAP); if ((ev != null) && (mPreviousUpEvent != null) @@ -540,8 +539,7 @@ public class GestureDetector { mDownFocusX = mLastFocusX = focusX; mDownFocusY = mLastFocusY = focusY; - if (mCurrentDownEvent != null) { - } + mCurrentDownEvent = ev; mAlwaysInTapRegion = true; mAlwaysInBiggerTapRegion = true; diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/ScaleGestureDetector.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/ScaleGestureDetector.java index ba03bc52af8e714000400c3f9373a597cd4e61a1..599b8dd69e1feb161b801f19f3b53d403ad73a60 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/ScaleGestureDetector.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/ScaleGestureDetector.java @@ -43,7 +43,7 @@ public class ScaleGestureDetector { * greater than 0.01. */ - public boolean onScale(ScaleGestureDetector detector); + boolean onScale(ScaleGestureDetector detector); /** * Responds to the beginning of a scaling gesture. Reported by @@ -57,7 +57,7 @@ public class ScaleGestureDetector { * sense, onScaleBegin() may return false to ignore the * rest of the gesture. */ - public boolean onScaleBegin(ScaleGestureDetector detector); + boolean onScaleBegin(ScaleGestureDetector detector); /** * Responds to the end of a scale gesture. Reported by existing @@ -70,7 +70,7 @@ public class ScaleGestureDetector { * @param detector The detector reporting the event - use this to * retrieve extended info about event state. */ - public void onScaleEnd(ScaleGestureDetector detector); + void onScaleEnd(ScaleGestureDetector detector); } /** @@ -135,8 +135,8 @@ public class ScaleGestureDetector { private long mCurrTime; private long mPrevTime; private boolean mInProgress; - private int mSpanSlop; - private int mMinSpan; + private final int mSpanSlop; + private final int mMinSpan; private final EventHandler mHandler; @@ -217,12 +217,14 @@ public class ScaleGestureDetector { final int count = event.getPointerCount(); final boolean isStylusButtonDown = (TouchEvent.POINT_MOVE) != 0; - - final boolean anchoredScaleCancelled = - mAnchoredScaleMode == ANCHORED_SCALE_MODE_STYLUS && !isStylusButtonDown; - final boolean streamComplete = action == TouchEvent.PRIMARY_POINT_UP || - action == TouchEvent.CANCEL || anchoredScaleCancelled; - + boolean anchoredScaleCancelled = false; + if (mAnchoredScaleMode == ANCHORED_SCALE_MODE_STYLUS && !isStylusButtonDown) { + anchoredScaleCancelled = true; + } + boolean streamComplete = false; + if (action == TouchEvent.PRIMARY_POINT_UP || action == TouchEvent.CANCEL || anchoredScaleCancelled) { + streamComplete = true; + } if (action == TouchEvent.PRIMARY_POINT_DOWN || streamComplete) { // Reset any scale in progress with the listener. // If it's an ACTION_DOWN we're beginning a new event stream. @@ -271,11 +273,7 @@ public class ScaleGestureDetector { focusX = mAnchoredScaleStartX; focusY = mAnchoredScaleStartY; MmiPoint point = event.getPointerPosition(event.getIndex()); - if (point.getY() < focusY) { - mEventBeforeOrAboveStartingGestureEvent = true; - } else { - mEventBeforeOrAboveStartingGestureEvent = false; - } + mEventBeforeOrAboveStartingGestureEvent = point.getY() < focusY; } else { for (int i = 0; i < count; i++) { if (skipIndex == i) continue; diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/VelocityTracker.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/VelocityTracker.java index 56f8116fffbe70146c0d5ac591928b0e29ed7e86..486eb2fc1d58aaf47ad29970baa3051b93d0b709 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/VelocityTracker.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/detector/VelocityTracker.java @@ -67,6 +67,11 @@ public class VelocityTracker { return velocityDetector.getVerticalVelocity(); } + /** + * getYVelocity + * + * @return getYVelocity + */ public float getYVelocity() { return getYVelocity(mActivePointerId); } diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/BOLLDrawing.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/BOLLDrawing.java index ee8e89526ace0f9f4f0a57ce67f6bed7edf03b17..7d065353c8e4fe8520b258cb1e40aba0a1fc2e98 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/BOLLDrawing.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/BOLLDrawing.java @@ -49,7 +49,7 @@ public class BOLLDrawing implements IDrawing { private float[] r2Buffer = new float[4]; private float[] r3Buffer = new float[4]; - private float[] gridBuffer = new float[2]; + private final float[] gridBuffer = new float[2]; @Override public void onInit(RectFloat contentRect, AbstractRender render) { @@ -111,9 +111,9 @@ public class BOLLDrawing implements IDrawing { final int i = currentIndex - minIndex; if (currentIndex < maxIndex - 1) { - xPointBuffer[i * 4 + 0] = currentIndex + 0.5f; + xPointBuffer[i * 4 + 0] = (float) ((double)currentIndex + (double)0.5f); xPointBuffer[i * 4 + 1] = 0; - xPointBuffer[i * 4 + 2] = currentIndex + 1 + 0.5f; + xPointBuffer[i * 4 + 2] = (float) ((double)currentIndex + (double)1 + (double)0.5f); xPointBuffer[i * 4 + 3] = 0; r1Buffer[i * 4 + 0] = 0; @@ -141,7 +141,7 @@ public class BOLLDrawing implements IDrawing { canvas.drawRect(indexRect, axisPaint); gridBuffer[0] = 0; - gridBuffer[1] = (maxY + minY) / 2; + gridBuffer[1] = (float) (((double)maxY + (double)minY) / (double)2); render.mapPoints(null, gridBuffer); canvas.drawLine(indexRect.left, gridBuffer[1], indexRect.right, gridBuffer[1], axisPaint); diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/CandleDrawing.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/CandleDrawing.java index 7fe5d1e5d9a9b3f29ddccf4c0285dc4ec7d2b7d6..d81d9ddec8a98edefa43b1d5dd7396db2688feff 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/CandleDrawing.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/CandleDrawing.java @@ -24,6 +24,7 @@ import com.wordplat.ikvstockchart.entry.Entry; import com.wordplat.ikvstockchart.entry.EntrySet; import com.wordplat.ikvstockchart.entry.SizeColor; import com.wordplat.ikvstockchart.render.AbstractRender; +import com.wordplat.ikvstockchart.utils.NumCalcUtil; import com.wordplat.ikvstockchart.utils.StringUtils; import ohos.agp.render.Canvas; import ohos.agp.render.Paint; @@ -67,16 +68,16 @@ public class CandleDrawing implements IDrawing { /** * entry 与 entry 之间的间隙,默认 0.1f (10%) */ - private float candleSpace = 0.1f; + private static final float candleSpace = 0.1f; private float extremumToRight; /** * 计算 2 根线坐标用的 */ - private float[] candleLineBuffer = new float[8]; + private final float[] candleLineBuffer = new float[8]; /** * 计算 1 个矩形坐标用的 */ - private float[] candleRectBuffer = new float[4]; + private final float[] candleRectBuffer = new float[4]; @Override public void onInit(RectFloat contentRect, AbstractRender render) { @@ -122,10 +123,10 @@ public class CandleDrawing implements IDrawing { Entry entry = ViewUtils.setUpCandlePaint(candlePaint, entrySet, iindex, sizeColor); // 绘制 影线 - candleLineBuffer[0] = iindex + 0.5f; - candleLineBuffer[2] = iindex + 0.5f; - candleLineBuffer[4] = iindex + 0.5f; - candleLineBuffer[6] = iindex + 0.5f; + candleLineBuffer[0] = (float) ((double) iindex + (double) 0.5f); + candleLineBuffer[2] = (float) ((double) iindex + (double) 0.5f); + candleLineBuffer[4] = (float) ((double) iindex + (double) 0.5f); + candleLineBuffer[6] = (float) ((double) iindex + (double) 0.5f); if (entry.getOpen() > entry.getClose()) { candleLineBuffer[1] = entry.getHigh(); candleLineBuffer[3] = entry.getOpen(); @@ -149,13 +150,13 @@ public class CandleDrawing implements IDrawing { canvas.drawText(extremumPaint, decimalFormatter.format(entry.getLow()) + " →", candleLineBuffer[6], - candleLineBuffer[7] + 20); + NumCalcUtil.add(candleLineBuffer[7], 20)); } else { extremumPaint.setTextAlign(TextAlignment.LEFT); canvas.drawText(extremumPaint, "← " + decimalFormatter.format(entry.getLow()), candleLineBuffer[6], - candleLineBuffer[7] + 20); + NumCalcUtil.add(candleLineBuffer[7], 20)); } } if (iindex == entrySet.getMaxYIndex()) { @@ -164,21 +165,21 @@ public class CandleDrawing implements IDrawing { canvas.drawText(extremumPaint, decimalFormatter.format(entry.getHigh()) + " →", candleLineBuffer[0], - candleLineBuffer[1] - 5); + NumCalcUtil.subtract(candleLineBuffer[1], 5)); } else { extremumPaint.setTextAlign(TextAlignment.LEFT); canvas.drawText(extremumPaint, "← " + decimalFormatter.format(entry.getHigh()), candleLineBuffer[0], - candleLineBuffer[1] - 5); + NumCalcUtil.subtract(candleLineBuffer[1], 5)); } } /** * 绘制 蜡烛图的矩形 */ - candleRectBuffer[0] = iindex + candleSpace; - candleRectBuffer[2] = iindex + 1 - candleSpace; + candleRectBuffer[0] = NumCalcUtil.add(iindex, candleSpace); + candleRectBuffer[2] = NumCalcUtil.add(iindex + 1, candleSpace); if (entry.getOpen() > entry.getClose()) { candleRectBuffer[1] = entry.getOpen(); @@ -197,8 +198,9 @@ public class CandleDrawing implements IDrawing { /** * 涨停、跌停、或不涨不跌的一字板 */ - if (Math.abs(candleRectBuffer[1] - candleRectBuffer[3]) < 1.f) { - canvas.drawRect(candleRectBuffer[0], candleRectBuffer[1], candleRectBuffer[2], candleRectBuffer[3] + 2, candlePaint); + + if (Math.abs(NumCalcUtil.subtract(candleRectBuffer[1], candleRectBuffer[3])) < 1.f) { + canvas.drawRect(candleRectBuffer[0], candleRectBuffer[1], candleRectBuffer[2], NumCalcUtil.add(candleRectBuffer[3], 2), candlePaint); } else { canvas.drawRect(candleRectBuffer[0], candleRectBuffer[1], candleRectBuffer[2], candleRectBuffer[3], candlePaint); } diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/EmptyDataDrawing.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/EmptyDataDrawing.java index f109c56b1c9a3c630d73290e34d41447b5f4fbf3..bf2fda129b6e469e646e0b372e5feb68599d3099 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/EmptyDataDrawing.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/EmptyDataDrawing.java @@ -21,6 +21,7 @@ package com.wordplat.ikvstockchart.drawing; import com.wordplat.ikvstockchart.entry.SizeColor; import com.wordplat.ikvstockchart.render.AbstractRender; +import com.wordplat.ikvstockchart.utils.NumCalcUtil; import com.wordplat.ikvstockchart.utils.StringUtils; import ohos.agp.render.Canvas; import ohos.agp.render.Paint; @@ -89,7 +90,7 @@ public class EmptyDataDrawing implements IDrawing { canvas.drawText(textPaint, drawText, contentRect.getWidth() / 2, - (contentRect.top + contentRect.bottom - fontMetrics.top - fontMetrics.bottom) / 2); + NumCalcUtil.divide((float) ((double)contentRect.top + (double)contentRect.bottom - (double)fontMetrics.top - (double)fontMetrics.bottom), 2)); } } } diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/HighlightDrawing.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/HighlightDrawing.java index 08a7b4494d225117a1ffaee33458ec56bf846755..3cab328190581b90f3dba8223c212bb828671e3e 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/HighlightDrawing.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/HighlightDrawing.java @@ -48,7 +48,7 @@ public class HighlightDrawing implements IDrawing { protected final RectFloat contentRect = new RectFloat(); protected AbstractRender render; - private List markerViewList = new ArrayList<>(); + private final List markerViewList = new ArrayList<>(); /** * HighlightDrawing diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/KDJDrawing.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/KDJDrawing.java index 4b12a94aaf7edf85fdd83b9f96cfd11c5db3c3bb..2bd648d38c95c9273e4c4e19efcbbc83c6e919e2 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/KDJDrawing.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/KDJDrawing.java @@ -52,7 +52,7 @@ public class KDJDrawing implements IDrawing { private float[] dBuffer = new float[4]; private float[] jBuffer = new float[4]; - private float[] gridBuffer = new float[2]; + private final float[] gridBuffer = new float[2]; @Override public void onInit(RectFloat contentRect, AbstractRender render) { diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/KLineVolumeDrawing.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/KLineVolumeDrawing.java index 8054d9e3eec3532f694f68328fa04f4946aa861a..8085e5e6437d34a71b30ecc29d66ded3d0503ff9 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/KLineVolumeDrawing.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/KLineVolumeDrawing.java @@ -51,9 +51,9 @@ public class KLineVolumeDrawing implements IDrawing { /** * entry 与 entry 之间的间隙,默认 0.1f (10%) */ - private float candleSpace = 0.1f; - private float[] xRectBuffer = new float[4]; - private float[] candleBuffer = new float[4]; + private static final float candleSpace = 0.1f; + private final float[] xRectBuffer = new float[4]; + private final float[] candleBuffer = new float[4]; @Override public void onInit(RectFloat contentRect, AbstractRender render) { diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/MACDDrawing.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/MACDDrawing.java index 3b37c587a886e23ba497febafa794b90a4733d52..2fcee9bcc44ba1d2daf2e5379affbc41d4a63507 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/MACDDrawing.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/MACDDrawing.java @@ -47,16 +47,16 @@ public class MACDDrawing implements IDrawing { private final RectFloat indexRect = new RectFloat(); private AbstractRender render; - private float candleSpace = 0.1f; + private static final float candleSpace = 0.1f; private float[] xPointBuffer = new float[4]; private float[] deaBuffer = new float[4]; private float[] diffBuffer = new float[4]; - private float[] gridBuffer = new float[2]; + private final float[] gridBuffer = new float[2]; - private float[] xRectBuffer = new float[4]; - private float[] macdBuffer = new float[4]; + private final float[] xRectBuffer = new float[4]; + private final float[] macdBuffer = new float[4]; @Override public void onInit(RectFloat contentRect, AbstractRender render) { diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/RSIDrawing.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/RSIDrawing.java index 66ddae07537154b97c10b3942d5596f378717074..c61a93d14680828eab71b92e909dd134f0d1d163 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/RSIDrawing.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/RSIDrawing.java @@ -53,7 +53,7 @@ public class RSIDrawing implements IDrawing { private float[] r2Buffer = new float[4]; private float[] r3Buffer = new float[4]; - private float[] gridBuffer = new float[2]; + private final float[] gridBuffer = new float[2]; @Override public void onInit(RectFloat contentRect, AbstractRender render) { diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/TimeLineDrawing.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/TimeLineDrawing.java index 339d358de1ad20feaa26229a245ab66bd42354cc..f42ec0cae8ed58a88fcff13730349ad4dedc6a0c 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/TimeLineDrawing.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/drawing/TimeLineDrawing.java @@ -46,7 +46,7 @@ public class TimeLineDrawing implements IDrawing { private AbstractRender render; private float[] lineBuffer = new float[4]; - private float[] pointBuffer = new float[2]; + private final float[] pointBuffer = new float[2]; @Override public void onInit(RectFloat contentRect, AbstractRender render) { diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/entry/EntrySet.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/entry/EntrySet.java index 5fd633aab8b186916ad24f67520a5727ccf70e84..2b44f008bbc6e2fbdbd0fd6c566cb93f08df2b3d 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/entry/EntrySet.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/entry/EntrySet.java @@ -18,6 +18,8 @@ package com.wordplat.ikvstockchart.entry; +import com.wordplat.ikvstockchart.utils.NumCalcUtil; + import java.util.ArrayList; import java.util.List; @@ -140,7 +142,7 @@ public class EntrySet { * @return float */ public float getDeltaY() { - return maxY - minY; + return NumCalcUtil.subtract(maxY , minY); } /** @@ -321,42 +323,42 @@ public class EntrySet { for (int i = 0; i < entries.size(); i++) { Entry entry = entries.get(i); - ma5 += entry.getClose(); - ma10 += entry.getClose(); - ma20 += entry.getClose(); + ma5 += (double)entry.getClose(); + ma10 += (double)entry.getClose(); + ma20 += (double)entry.getClose(); - volumeMa5 += entry.getVolume(); - volumeMa10 += entry.getVolume(); + volumeMa5 += (double)entry.getVolume(); + volumeMa10 += (double)entry.getVolume(); if (i >= 5) { - ma5 -= entries.get(i - 5).getClose(); + ma5 -= (double)entries.get(i - 5).getClose(); entry.setMa5(ma5 / 5f); - volumeMa5 -= entries.get(i - 5).getVolume(); + volumeMa5 -= (double)entries.get(i - 5).getVolume(); entry.setVolumeMa5(volumeMa5 / 5f); } else { - entry.setMa5(ma5 / (i + 1f)); + entry.setMa5(NumCalcUtil.divide(ma5 , (i + 1f))); - entry.setVolumeMa5(volumeMa5 / (i + 1f)); + entry.setVolumeMa5(NumCalcUtil.divide(volumeMa5 , (float) (i + (double)1f))); } if (i >= 10) { - ma10 -= entries.get(i - 10).getClose(); - entry.setMa10(ma10 / 10f); + ma10 -= (double)entries.get(i - 10).getClose(); + entry.setMa10(NumCalcUtil.divide(ma10 , 10f)); - volumeMa10 -= entries.get(i - 10).getVolume(); - entry.setVolumeMa10(volumeMa10 / 5f); + volumeMa10 -= (double)entries.get(i - 10).getVolume(); + entry.setVolumeMa10(NumCalcUtil.divide(volumeMa10 , 5f)); } else { - entry.setMa10(ma10 / (i + 1f)); + entry.setMa10(NumCalcUtil.divide(ma10 , (float) (i + (double)1f))); - entry.setVolumeMa10(volumeMa10 / (i + 1f)); + entry.setVolumeMa10(NumCalcUtil.divide(volumeMa10 , (float) (i + (double)1f))); } if (i >= 20) { - ma20 -= entries.get(i - 20).getClose(); - entry.setMa20(ma20 / 20f); + ma20 -= (double)entries.get(i - 20).getClose(); + entry.setMa20(NumCalcUtil.divide(ma20 , 20f)); } else { - entry.setMa20(ma20 / (i + 1f)); + entry.setMa20(NumCalcUtil.divide(ma20 , (float) (i + (double)1f))); } } } diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/marker/YAxisTextMarkerView.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/marker/YAxisTextMarkerView.java index 51b630a66b319b9ad92f934bc881e799c2dfe8c9..943b22683cc8b190cd4ab15eac48478958261c3b 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/marker/YAxisTextMarkerView.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/marker/YAxisTextMarkerView.java @@ -55,6 +55,11 @@ public class YAxisTextMarkerView implements IMarkerView { private float inset = 0; private YMarkerAlign yMarkerAlign; + /** + * YAxisTextMarkerView + * + * @param height + */ public YAxisTextMarkerView(int height) { this.height = height; } @@ -102,7 +107,7 @@ public class YAxisTextMarkerView implements IMarkerView { float width = markerTextPaint.measureText(value) + 50; - highlightPointY = highlightPointY - height / 2; + highlightPointY = (float) ((double)highlightPointY - height / 2); if (highlightPointY < contentRect.top) { highlightPointY = contentRect.top; } diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/render/AbstractRender.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/render/AbstractRender.java index 6a05b0a6ff84e0f364a9729ac7baf62defcded5c..e77b40f3643c10183071fdb06c38cd8704032229 100644 --- a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/render/AbstractRender.java +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/render/AbstractRender.java @@ -290,7 +290,10 @@ public abstract class AbstractRender { * @return float */ public float[] getHighlightPoint() { - return highlightPoint; + if (highlightPoint == null) { + return null; + } + return highlightPoint.clone(); } /** @@ -300,15 +303,12 @@ public abstract class AbstractRender { * @return boolean */ public boolean canScroll(float dx) { - final float offset = touchValues[MTRANS_X] - dx; + final double offset = (double) touchValues[MTRANS_X] - (double) dx; if (-maxScrollOffset > offset && touchValues[MTRANS_X] <= -maxScrollOffset) { return false; } - if (offset > minScrollOffset && touchValues[MTRANS_X] >= minScrollOffset) { - return false; - } - return true; + return !(offset > minScrollOffset) || !(touchValues[MTRANS_X] >= minScrollOffset); } /** @@ -336,7 +336,7 @@ public abstract class AbstractRender { * @param dx 变化量 */ public void updateOverScrollOffset(float dx) { - overScrollOffset += -dx; + overScrollOffset += (double) -dx; } /** @@ -365,7 +365,7 @@ public abstract class AbstractRender { public void updateCurrentTransX(float dx) { matrixTouch.getData(); - touchValues[MTRANS_X] += -dx; + touchValues[MTRANS_X] += (double) -dx; matrixTouch.setMatrix(new Matrix(touchValues)); } @@ -398,7 +398,7 @@ public abstract class AbstractRender { matrixTouch.getData(); - return touchValues[MTRANS_X] + touchPts[0]; + return (float) ((double)touchValues[MTRANS_X] + (double)touchPts[0]); } /** @@ -409,7 +409,7 @@ public abstract class AbstractRender { public void scroll(float dx) { matrixTouch.getData(); - touchValues[MTRANS_X] += -dx; + touchValues[MTRANS_X] += (double)-dx; overScrollOffset = 0; if (touchValues[MTRANS_X] < -maxScrollOffset) { @@ -610,7 +610,7 @@ public abstract class AbstractRender { /** * 左滑加载完成之后定位到之前滚动的位置 */ - matrixTouch.postTranslate(touchValues[MTRANS_X] - (maxScrollOffset - lastMaxScrollOffset), 0); + matrixTouch.postTranslate((float) ((double)touchValues[MTRANS_X] - ((double) maxScrollOffset - (double) lastMaxScrollOffset)), 0); } else if (touchValues[MTRANS_X] < 0) { if (overScrollOffset != 0 && !viewRectChange) { @@ -663,7 +663,7 @@ public abstract class AbstractRender { if (entrySetSize <= visibleCount) { return 0; } - float result = maxScrollOffset * entryIndex / (entrySetSize - visibleCount); + float result = (float) ((double)maxScrollOffset * (double)entryIndex / ((double)entrySetSize - (double)visibleCount)); result = Math.min(maxScrollOffset, result); return -result; @@ -681,7 +681,7 @@ public abstract class AbstractRender { lastMaxScrollOffset = 0; maxScrollOffset = 0; } else { - maxScrollOffset = width * (scaleX - 1f); + maxScrollOffset = (float) ((double)width * ((double)scaleX - (double)1f)); } } @@ -706,8 +706,8 @@ public abstract class AbstractRender { * @param extremumYDelta extremumYDelta */ protected void computeExtremumValue(float[] extremumY, float minY, float deltaY, float extremumYScale, float extremumYDelta) { - final float deltaYScale = deltaY * extremumYScale - deltaY; - extremumY[0] = minY - deltaYScale / 2 - extremumYDelta; - extremumY[1] = deltaY + deltaYScale + extremumYDelta; + final float deltaYScale = (float) ((double)deltaY * (double)extremumYScale - (double)deltaY); + extremumY[0] = (float) ((double)minY - ((double)deltaYScale / 2) - (double)extremumYDelta); + extremumY[1] = (float) ((double)deltaY +(double) deltaYScale + (double)extremumYDelta); } } diff --git a/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/utils/NumCalcUtil.java b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/utils/NumCalcUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..303f2be3bfc06bbae65f2476cc3944b6e7e3136f --- /dev/null +++ b/ikvStockChart/src/main/java/com/wordplat/ikvstockchart/utils/NumCalcUtil.java @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain an copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.wordplat.ikvstockchart.utils; + +import java.math.BigDecimal; + +/** + * 浮点数计算工具类 + * + * @since 2021-05-17 + */ +public class NumCalcUtil { + private NumCalcUtil() { + } + + /** + * 加法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float add(float num1, float num2) { + return new BigDecimal(num1).add(new BigDecimal(num2)).floatValue(); + } + + /** + * 减法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float subtract(float num1, float num2) { + return new BigDecimal(num1).subtract(new BigDecimal(num2)).floatValue(); + } + + /** + * 乘法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float multiply(float num1, float num2) { + return new BigDecimal(num1).multiply(new BigDecimal(num2)).floatValue(); + } + + /** + * 除法 + * + * @param num1 + * @param num2 + * @return 结果 + */ + public static float divide(float num1, float num2) { + return new BigDecimal(num1).divide(new BigDecimal(num2)).floatValue(); + } +} diff --git a/ikvStockChart/src/ohostest/java/com/wordplat/quickstart/AbstractRenderTest.java b/ikvStockChart/src/ohostest/java/com/wordplat/quickstart/AbstractRenderTest.java index 52ef19101e8a10a6181e6d59f06a9fbe7001a00b..41dade42bb29b773a3a66cc99337a8e739ea8d99 100644 --- a/ikvStockChart/src/ohostest/java/com/wordplat/quickstart/AbstractRenderTest.java +++ b/ikvStockChart/src/ohostest/java/com/wordplat/quickstart/AbstractRenderTest.java @@ -11,7 +11,7 @@ import static org.mockito.Mockito.mock; * @since 2021-06-21 */ public class AbstractRenderTest { - private AbstractRender render = mock(AbstractRender.class); + private final AbstractRender render = mock(AbstractRender.class); /** * canDragging diff --git a/ikvStockChart/src/ohostest/java/com/wordplat/quickstart/InteractiveKLineLayoutTest.java b/ikvStockChart/src/ohostest/java/com/wordplat/quickstart/InteractiveKLineLayoutTest.java index c06b1bf9f83ffbd3f4932dfe3b3c1420434b86d0..7219ce8f32585234e4bbde0d132cb24597b1802f 100644 --- a/ikvStockChart/src/ohostest/java/com/wordplat/quickstart/InteractiveKLineLayoutTest.java +++ b/ikvStockChart/src/ohostest/java/com/wordplat/quickstart/InteractiveKLineLayoutTest.java @@ -11,7 +11,7 @@ import static org.mockito.Mockito.mock; * @since 2021-06-21 */ public class InteractiveKLineLayoutTest { - private InteractiveKLineLayout layout = mock(InteractiveKLineLayout.class); + private final InteractiveKLineLayout layout = mock(InteractiveKLineLayout.class); /** * announceAccessibility