Date: Wed, 5 Dec 2018 15:10:19 +0800
Subject: [PATCH 08/28] =?UTF-8?q?fix=20=20=E7=A9=BA=E9=A1=B5=E9=9D=A2?=
=?UTF-8?q?=E5=8A=A0=E8=BD=BDBUG?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
common_base/build.gradle | 1 +
.../common/adapter/FragmentPagerAdapter.java | 4 ++--
.../com/wss/common/base/BaseActivity.java | 22 +++++++++---------
.../com/wss/common/base/BaseFragment.java | 23 +++++++++----------
.../com/wss/common/base/BaseMvpActivity.java | 3 +--
.../wss/common/base/mvp/BasePresenter.java | 2 +-
.../wss/common/widget/NumberProgressBar.java | 5 +++-
.../src/main/AndroidManifest.xml | 1 -
8 files changed, 31 insertions(+), 30 deletions(-)
diff --git a/common_base/build.gradle b/common_base/build.gradle
index 33a99e0..8fda9e6 100644
--- a/common_base/build.gradle
+++ b/common_base/build.gradle
@@ -48,6 +48,7 @@ dependencies {
api rootProject.ext.dependencies["support-v4"]
api rootProject.ext.dependencies["design"]
api rootProject.ext.dependencies["support_annotations"]
+ api rootProject.ext.dependencies["junit"]
//MultiDex分包方法
api rootProject.ext.dependencies["multidex"]
//黄油刀
diff --git a/common_base/src/main/java/com/wss/common/adapter/FragmentPagerAdapter.java b/common_base/src/main/java/com/wss/common/adapter/FragmentPagerAdapter.java
index 499cb62..8c9f0d4 100644
--- a/common_base/src/main/java/com/wss/common/adapter/FragmentPagerAdapter.java
+++ b/common_base/src/main/java/com/wss/common/adapter/FragmentPagerAdapter.java
@@ -13,8 +13,8 @@
/**
* Describe:滑动Fragment适配器
- * 如果滑动Fragment是同一个 使用双参构造方法 则覆写 getTabFragment 返回Fragment
- * 如果滑动Fragment是不同的Fragment 使用第三参个构造方法 传入对应的Fragment
+ * 如果滑动Fragment是同一个 使用双参构造方法 覆写 getTabFragment 返回Fragment
+ * 如果滑动Fragment是不同的Fragment 使用第三参构造方法 传入对应的Fragment集合
*
* Created by 吴天强 on 2018/10/22.
*/
diff --git a/common_base/src/main/java/com/wss/common/base/BaseActivity.java b/common_base/src/main/java/com/wss/common/base/BaseActivity.java
index ae77bd4..8cd0568 100644
--- a/common_base/src/main/java/com/wss/common/base/BaseActivity.java
+++ b/common_base/src/main/java/com/wss/common/base/BaseActivity.java
@@ -122,19 +122,19 @@ protected void showErrorView() {
}
public void showEmptyOrErrorView(String text, int img) {
- emptyView = findViewById(R.id.vs_empty);
- if (emptyView != null) {
- emptyView.setVisibility(View.VISIBLE);
- findViewById(R.id.iv_empty).setBackgroundResource(img);
- ((TextView) findViewById(R.id.tv_empty)).setText(text);
- findViewById(R.id.ll_empty).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- onPageClick();
- }
- });
+ if (emptyView == null) {
+ emptyView = findViewById(R.id.vs_empty);
}
+ emptyView.setVisibility(View.VISIBLE);
+ findViewById(R.id.iv_empty).setBackgroundResource(img);
+ ((TextView) findViewById(R.id.tv_empty)).setText(text);
+ findViewById(R.id.ll_empty).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ onPageClick();
+ }
+ });
}
protected void hideEmptyView() {
diff --git a/common_base/src/main/java/com/wss/common/base/BaseFragment.java b/common_base/src/main/java/com/wss/common/base/BaseFragment.java
index edc3de2..745f750 100644
--- a/common_base/src/main/java/com/wss/common/base/BaseFragment.java
+++ b/common_base/src/main/java/com/wss/common/base/BaseFragment.java
@@ -84,19 +84,18 @@ protected void showErrorView() {
}
public void showEmptyOrErrorView(String text, int img) {
- emptyView = rootView.findViewById(R.id.vs_empty);
-
- if (emptyView != null) {
- emptyView.setVisibility(View.VISIBLE);
- rootView.findViewById(R.id.iv_empty).setBackgroundResource(img);
- ((TextView) rootView.findViewById(R.id.tv_empty)).setText(text);
- rootView.findViewById(R.id.ll_empty).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- onPageClick();
- }
- });
+ if (emptyView == null) {
+ emptyView = rootView.findViewById(R.id.vs_empty);
}
+ emptyView.setVisibility(View.VISIBLE);
+ rootView.findViewById(R.id.iv_empty).setBackgroundResource(img);
+ ((TextView) rootView.findViewById(R.id.tv_empty)).setText(text);
+ rootView.findViewById(R.id.ll_empty).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ onPageClick();
+ }
+ });
}
protected void hideEmptyView() {
diff --git a/common_base/src/main/java/com/wss/common/base/BaseMvpActivity.java b/common_base/src/main/java/com/wss/common/base/BaseMvpActivity.java
index 826b881..e5aedff 100644
--- a/common_base/src/main/java/com/wss/common/base/BaseMvpActivity.java
+++ b/common_base/src/main/java/com/wss/common/base/BaseMvpActivity.java
@@ -11,13 +11,12 @@
* Describe:所有需要Mvp开发的Activity的基类
* Created by 吴天强 on 2018/10/15.
*/
-
+@SuppressWarnings("unchecked")
public abstract class BaseMvpActivity
extends BaseActivity implements IBaseView {
protected P presenter;
- @SuppressWarnings("unchecked")
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
diff --git a/common_base/src/main/java/com/wss/common/base/mvp/BasePresenter.java b/common_base/src/main/java/com/wss/common/base/mvp/BasePresenter.java
index bb3c05d..58f4358 100644
--- a/common_base/src/main/java/com/wss/common/base/mvp/BasePresenter.java
+++ b/common_base/src/main/java/com/wss/common/base/mvp/BasePresenter.java
@@ -12,6 +12,7 @@
* Created by 吴天强 on 2018/10/17.
*/
+@SuppressWarnings("unchecked")
public abstract class BasePresenter {
private V mProxyView;
@@ -21,7 +22,6 @@ public abstract class BasePresenter {
/**
* 绑定View
*/
- @SuppressWarnings("unchecked")
public void attachView(V view) {
weakReference = new WeakReference<>(view);
mProxyView = (V) Proxy.newProxyInstance(
diff --git a/common_base/src/main/java/com/wss/common/widget/NumberProgressBar.java b/common_base/src/main/java/com/wss/common/widget/NumberProgressBar.java
index 89a56f3..f114fff 100644
--- a/common_base/src/main/java/com/wss/common/widget/NumberProgressBar.java
+++ b/common_base/src/main/java/com/wss/common/widget/NumberProgressBar.java
@@ -15,7 +15,10 @@
import com.wss.common.base.R;
-
+/**
+ * Describe:数字进度条
+ * Created by 吴天强 on 2018/11/1.
+ */
public class NumberProgressBar extends View {
diff --git a/module_wan_android/src/main/AndroidManifest.xml b/module_wan_android/src/main/AndroidManifest.xml
index e3b480a..ae4412c 100644
--- a/module_wan_android/src/main/AndroidManifest.xml
+++ b/module_wan_android/src/main/AndroidManifest.xml
@@ -9,6 +9,5 @@
-
From fb92625ea4342421546adab4c6772ae35a69d5ba Mon Sep 17 00:00:00 2001
From: wutq
Date: Tue, 19 Mar 2019 14:26:02 +0800
Subject: [PATCH 09/28] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E4=BA=8E?=
=?UTF-8?q?=E6=85=A2=E6=85=A2=E7=89=8C=E8=AE=A1=E7=AE=97=E5=99=A8=EF=BC=8C?=
=?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89RadioGroup?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
common_base/src/main/AndroidManifest.xml | 3 +-
.../com/wss/common/base/BaseMvpActivity.java | 8 +
.../java/com/wss/common/utils/MoneyUtils.java | 6 +-
.../java/com/wss/common/utils/PxUtils.java | 7 +
.../wss/common/widget/NumberProgressBar.java | 2 +-
.../wss/common/widget/StrongRadioGroup.java | 381 ++++++++++++++++++
.../res/drawable-xhdpi/popup_icon_close.png | Bin 0 -> 498 bytes
.../src/main/res/drawable-xxhdpi/ic_back.png | Bin 612 -> 916 bytes
.../res/drawable-xxhdpi/input_add_default.png | Bin 266 -> 429 bytes
.../drawable-xxhdpi/input_add_disabled.png | Bin 266 -> 388 bytes
.../drawable-xxhdpi/input_minus_default.png | Bin 138 -> 181 bytes
.../drawable-xxhdpi/input_minus_disabled.png | Bin 155 -> 204 bytes
.../res/drawable-xxhdpi/popup_icon_close.png | Bin 0 -> 747 bytes
.../src/main/res/drawable-xxxhdpi/ic_back.png | Bin 916 -> 0 bytes
.../main/res/drawable-xxxhdpi/ic_launcher.png | Bin 4851 -> 0 bytes
.../drawable-xxxhdpi/input_add_default.png | Bin 429 -> 0 bytes
.../drawable-xxxhdpi/input_add_disabled.png | Bin 388 -> 0 bytes
.../drawable-xxxhdpi/input_minus_default.png | Bin 181 -> 0 bytes
.../drawable-xxxhdpi/input_minus_disabled.png | Bin 204 -> 0 bytes
.../res/drawable/market_shape_round_red.xml | 0
common_base/src/main/res/values/colors.xml | 2 +-
module_main/src/main/AndroidManifest.xml | 3 +
.../wss/module/main/ui/main/MainActivity.java | 1 +
.../main/ui/main/mvp/MainPresenter.java | 4 +
.../module/main/ui/page/DialogActivity.java | 22 +-
.../main/ui/page/RadioGroupActivity.java | 48 +++
.../module/main/ui/page/YumanmanActivity.java | 196 +++++++++
.../res/layout/main_activity_radio_group.xml | 59 +++
.../res/layout/main_activity_scale_image.xml | 4 +
.../res/layout/main_activity_yumanman.xml | 148 +++++++
.../src/main/assets/html/goods_detail.html | 83 ++++
.../ui/goods/detail/GoodsDetailActivity.java | 32 +-
.../fragment/GoodsInfoMainFragment.java | 9 +-
.../fragment/child/GoodsConfigFragment.java | 16 +-
.../fragment/child/GoodsInfoWebFragment.java | 4 +-
.../detail/helper/GoodsSpecificationPop.java | 106 +++++
.../color/market_goods_button_text_color.xml | 5 +
.../market_bg_of_ellipse_button_black.xml | 12 +
.../market_bg_of_ellipse_button_red.xml | 12 +
.../market_bg_of_ellipse_button_select.xml | 5 +
.../layout/market_activity_goods_details.xml | 1 +
.../market_fragment_goods_info_main.xml | 6 +-
.../market_item_of_goods_config_list.xml | 19 +-
.../layout/market_pop_goods_specification.xml | 99 +++++
44 files changed, 1260 insertions(+), 43 deletions(-)
create mode 100644 common_base/src/main/java/com/wss/common/widget/StrongRadioGroup.java
create mode 100644 common_base/src/main/res/drawable-xhdpi/popup_icon_close.png
create mode 100644 common_base/src/main/res/drawable-xxhdpi/popup_icon_close.png
delete mode 100644 common_base/src/main/res/drawable-xxxhdpi/ic_back.png
delete mode 100644 common_base/src/main/res/drawable-xxxhdpi/ic_launcher.png
delete mode 100644 common_base/src/main/res/drawable-xxxhdpi/input_add_default.png
delete mode 100644 common_base/src/main/res/drawable-xxxhdpi/input_add_disabled.png
delete mode 100644 common_base/src/main/res/drawable-xxxhdpi/input_minus_default.png
delete mode 100644 common_base/src/main/res/drawable-xxxhdpi/input_minus_disabled.png
rename {module_market => common_base}/src/main/res/drawable/market_shape_round_red.xml (100%)
create mode 100644 module_main/src/main/java/com/wss/module/main/ui/page/RadioGroupActivity.java
create mode 100644 module_main/src/main/java/com/wss/module/main/ui/page/YumanmanActivity.java
create mode 100644 module_main/src/main/res/layout/main_activity_radio_group.xml
create mode 100644 module_main/src/main/res/layout/main_activity_yumanman.xml
create mode 100644 module_market/src/main/assets/html/goods_detail.html
create mode 100644 module_market/src/main/java/com/wss/module/market/ui/goods/detail/helper/GoodsSpecificationPop.java
create mode 100644 module_market/src/main/res/color/market_goods_button_text_color.xml
create mode 100644 module_market/src/main/res/drawable/market_bg_of_ellipse_button_black.xml
create mode 100644 module_market/src/main/res/drawable/market_bg_of_ellipse_button_red.xml
create mode 100644 module_market/src/main/res/drawable/market_bg_of_ellipse_button_select.xml
create mode 100644 module_market/src/main/res/layout/market_pop_goods_specification.xml
diff --git a/common_base/src/main/AndroidManifest.xml b/common_base/src/main/AndroidManifest.xml
index a4ea8b7..f0f9a56 100644
--- a/common_base/src/main/AndroidManifest.xml
+++ b/common_base/src/main/AndroidManifest.xml
@@ -9,7 +9,8 @@
-
+
+
diff --git a/common_base/src/main/java/com/wss/common/base/BaseMvpActivity.java b/common_base/src/main/java/com/wss/common/base/BaseMvpActivity.java
index e5aedff..30e6ab6 100644
--- a/common_base/src/main/java/com/wss/common/base/BaseMvpActivity.java
+++ b/common_base/src/main/java/com/wss/common/base/BaseMvpActivity.java
@@ -3,6 +3,7 @@
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
+import android.text.TextUtils;
import com.wss.common.base.mvp.BasePresenter;
import com.wss.common.base.mvp.IBaseView;
@@ -41,7 +42,14 @@ protected void onDestroy() {
//***************************************IBaseView方法实现*************************************
@Override
public void showLoading() {
+ showLoading("");
+ }
+
+ public void showLoading(String msg) {
if (loadingDialog != null && !loadingDialog.isShowing()) {
+ if (!TextUtils.isEmpty(msg)) {
+ loadingDialog.setTitleText(msg);
+ }
loadingDialog.show();
}
}
diff --git a/common_base/src/main/java/com/wss/common/utils/MoneyUtils.java b/common_base/src/main/java/com/wss/common/utils/MoneyUtils.java
index 15d12d4..ebc2363 100644
--- a/common_base/src/main/java/com/wss/common/utils/MoneyUtils.java
+++ b/common_base/src/main/java/com/wss/common/utils/MoneyUtils.java
@@ -24,9 +24,9 @@ public static class Algorithm {
* @param v2
* @return
*/
- public static String add(String v1, String v2) {
- BigDecimal b1 = new BigDecimal(v1);
- BigDecimal b2 = new BigDecimal(v2);
+ public static String add(Object v1, Object v2) {
+ BigDecimal b1 = new BigDecimal(String.valueOf(v1));
+ BigDecimal b2 = new BigDecimal(String.valueOf(v2));
return b1.add(b2).toString();
}
diff --git a/common_base/src/main/java/com/wss/common/utils/PxUtils.java b/common_base/src/main/java/com/wss/common/utils/PxUtils.java
index 005da2a..83a205e 100644
--- a/common_base/src/main/java/com/wss/common/utils/PxUtils.java
+++ b/common_base/src/main/java/com/wss/common/utils/PxUtils.java
@@ -2,6 +2,8 @@
import android.content.Context;
+import com.wss.common.base.BaseApplication;
+
/**
* Describe:尺寸工具类
* Created by 吴天强 on 2017/9/19.
@@ -37,6 +39,11 @@ public static int dp2px(Context context, float dipValue) {
return (int) (dipValue * scale + 0.5);
}
+ public static int dp2px(float dipValue) {
+ final float scale = getScreenDensity(BaseApplication.getApplication());
+ return (int) (dipValue * scale + 0.5);
+ }
+
/**
* 将像素转换成dp
*
diff --git a/common_base/src/main/java/com/wss/common/widget/NumberProgressBar.java b/common_base/src/main/java/com/wss/common/widget/NumberProgressBar.java
index f114fff..b129306 100644
--- a/common_base/src/main/java/com/wss/common/widget/NumberProgressBar.java
+++ b/common_base/src/main/java/com/wss/common/widget/NumberProgressBar.java
@@ -32,7 +32,7 @@ public class NumberProgressBar extends View {
*/
private Context context;
- /**
+ /**l
* 主线程传过来进程 0 - 100
*/
private int progress;
diff --git a/common_base/src/main/java/com/wss/common/widget/StrongRadioGroup.java b/common_base/src/main/java/com/wss/common/widget/StrongRadioGroup.java
new file mode 100644
index 0000000..66889fb
--- /dev/null
+++ b/common_base/src/main/java/com/wss/common/widget/StrongRadioGroup.java
@@ -0,0 +1,381 @@
+package com.wss.common.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CompoundButton;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+
+
+/**
+ * Describe:可添加任意ViewGroup的RadioGroup
+ * Created by 吴天强 on 2019/3/18.
+ */
+
+public class StrongRadioGroup extends LinearLayout {
+ // holds the checked id; the selection is empty by default
+ private int mCheckedId = -1;
+ // tracks children radio buttons checked state
+ private CompoundButton.OnCheckedChangeListener mChildOnCheckedChangeListener;
+ // when true, mOnCheckedChangeListener discards events
+ private boolean mProtectFromCheckedChange = false;
+ private OnCheckedChangeListener mOnCheckedChangeListener;
+ private PassThroughHierarchyChangeListener mPassThroughListener;
+
+ public StrongRadioGroup(Context context) {
+ super(context);
+ setOrientation(VERTICAL);
+ init();
+ }
+
+ public StrongRadioGroup(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ private void init() {
+ mChildOnCheckedChangeListener = new CheckedStateTracker();
+ mPassThroughListener = new PassThroughHierarchyChangeListener();
+ super.setOnHierarchyChangeListener(mPassThroughListener);
+ }
+
+ @Override
+ public void setOnHierarchyChangeListener(OnHierarchyChangeListener listener) {
+ // the user listener is delegated to our pass-through listener
+ mPassThroughListener.mOnHierarchyChangeListener = listener;
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ super.onFinishInflate();
+
+ // checks the appropriate radio button as requested in the XML file
+ if (mCheckedId != -1) {
+ mProtectFromCheckedChange = true;
+ setCheckedStateForView(mCheckedId, true);
+ mProtectFromCheckedChange = false;
+ setCheckedId(mCheckedId);
+ }
+ }
+
+ @Override
+ public void addView(View child, int index, ViewGroup.LayoutParams params) {
+ if (child instanceof RadioButton) {
+ final RadioButton button = (RadioButton) child;
+ if (button.isChecked()) {
+ mProtectFromCheckedChange = true;
+ if (mCheckedId != -1) {
+ setCheckedStateForView(mCheckedId, false);
+ }
+ mProtectFromCheckedChange = false;
+ setCheckedId(button.getId());
+ }
+ } else if (child instanceof ViewGroup) {
+ //添加部分
+ final RadioButton button = findRadioButton((ViewGroup) child);
+ if (button.isChecked()) {
+ mProtectFromCheckedChange = true;
+ if (mCheckedId != -1) {
+ setCheckedStateForView(mCheckedId, false);
+ }
+ mProtectFromCheckedChange = false;
+ setCheckedId(button.getId());
+ }
+ }
+
+ super.addView(child, index, params);
+ }
+
+ /**
+ * 查找radioButton控件
+ */
+ public RadioButton findRadioButton(ViewGroup group) {
+ RadioButton resBtn = null;
+ int len = group.getChildCount();
+ for (int i = 0; i < len; i++) {
+ if (group.getChildAt(i) instanceof RadioButton) {
+ resBtn = (RadioButton) group.getChildAt(i);
+ } else if (group.getChildAt(i) instanceof ViewGroup) {
+ findRadioButton((ViewGroup) group.getChildAt(i));
+ }
+ }
+ return resBtn;
+ }
+
+ /**
+ *
+ * Sets the selection to the radio button whose identifier is passed in
+ * parameter. Using -1 as the selection identifier clears the selection;
+ * such an operation is equivalent to invoking {@link #clearCheck()}.
+ *
+ *
+ * @param id the unique id of the radio button to select in this group
+ * @see #getCheckedRadioButtonId()
+ * @see #clearCheck()
+ */
+ public void check(int id) {
+ // don't even bother
+ if (id != -1 && (id == mCheckedId)) {
+ return;
+ }
+
+ if (mCheckedId != -1) {
+ setCheckedStateForView(mCheckedId, false);
+ }
+
+ if (id != -1) {
+ setCheckedStateForView(id, true);
+ }
+
+ setCheckedId(id);
+ }
+
+ private void setCheckedId(int id) {
+ mCheckedId = id;
+ if (mOnCheckedChangeListener != null) {
+ mOnCheckedChangeListener.onCheckedChanged(this, mCheckedId);
+ }
+ }
+
+ private void setCheckedStateForView(int viewId, boolean checked) {
+ View checkedView = findViewById(viewId);
+ if (checkedView != null && checkedView instanceof RadioButton) {
+ ((RadioButton) checkedView).setChecked(checked);
+ }
+ }
+
+ /**
+ *
+ * Returns the identifier of the selected radio button in this group. Upon
+ * empty selection, the returned value is -1.
+ *
+ *
+ * @return the unique id of the selected radio button in this group
+ * @see #check(int)
+ * @see #clearCheck()
+ */
+ public int getCheckedRadioButtonId() {
+ return mCheckedId;
+ }
+
+ /**
+ *
+ * Clears the selection. When the selection is cleared, no radio button in
+ * this group is selected and {@link #getCheckedRadioButtonId()} returns
+ * null.
+ *
+ *
+ * @see #check(int)
+ * @see #getCheckedRadioButtonId()
+ */
+ public void clearCheck() {
+ check(-1);
+ }
+
+ /**
+ *
+ * Register a callback to be invoked when the checked radio button changes
+ * in this group.
+ *
+ *
+ * @param listener the callback to call on checked state change
+ */
+ public void setOnCheckedChangeListener(OnCheckedChangeListener listener) {
+ mOnCheckedChangeListener = listener;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public LayoutParams generateLayoutParams(AttributeSet attrs) {
+ return new StrongRadioGroup.LayoutParams(getContext(), attrs);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
+ return p instanceof StrongRadioGroup.LayoutParams;
+ }
+
+ @Override
+ protected LinearLayout.LayoutParams generateDefaultLayoutParams() {
+ return new LayoutParams(LayoutParams.WRAP_CONTENT,
+ LayoutParams.WRAP_CONTENT);
+ }
+
+ /**
+ *
+ * This set of layout parameters defaults the width and the height of the
+ * children to {@link #WRAP_CONTENT} when they are not specified in the XML
+ * file. Otherwise, this class ussed the value read from the XML file.
+ *
+ *
+ *
+ * Attributes} for a list of all child view attributes that this class
+ * supports.
+ *
+ */
+ public static class LayoutParams extends LinearLayout.LayoutParams {
+ /**
+ * {@inheritDoc}
+ */
+ public LayoutParams(Context c, AttributeSet attrs) {
+ super(c, attrs);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public LayoutParams(int w, int h) {
+ super(w, h);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public LayoutParams(int w, int h, float initWeight) {
+ super(w, h, initWeight);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public LayoutParams(ViewGroup.LayoutParams p) {
+ super(p);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public LayoutParams(MarginLayoutParams source) {
+ super(source);
+ }
+
+ /**
+ *
+ * Fixes the child's width to
+ * {@link android.view.ViewGroup.LayoutParams#WRAP_CONTENT} and the
+ * child's height to
+ * {@link android.view.ViewGroup.LayoutParams#WRAP_CONTENT} when not
+ * specified in the XML file.
+ *
+ *
+ * @param a the styled attributes set
+ * @param widthAttr the width attribute to fetch
+ * @param heightAttr the height attribute to fetch
+ */
+ @Override
+ protected void setBaseAttributes(TypedArray a, int widthAttr,
+ int heightAttr) {
+
+ if (a.hasValue(widthAttr)) {
+ width = a.getLayoutDimension(widthAttr, "layout_width");
+ } else {
+ width = WRAP_CONTENT;
+ }
+
+ if (a.hasValue(heightAttr)) {
+ height = a.getLayoutDimension(heightAttr, "layout_height");
+ } else {
+ height = WRAP_CONTENT;
+ }
+ }
+ }
+
+ /**
+ *
+ * Interface definition for a callback to be invoked when the checked radio
+ * button changed in this group.
+ *
+ */
+ public interface OnCheckedChangeListener {
+ /**
+ *
+ * Called when the checked radio button has changed. When the selection
+ * is cleared, checkedId is -1.
+ *
+ *
+ * @param group the group in which the checked radio button has changed
+ * @param checkedId the unique identifier of the newly checked radio button
+ */
+ public void onCheckedChanged(StrongRadioGroup group, int checkedId);
+ }
+
+ private class CheckedStateTracker implements
+ CompoundButton.OnCheckedChangeListener {
+ public void onCheckedChanged(CompoundButton buttonView,
+ boolean isChecked) {
+ // prevents from infinite recursion
+ if (mProtectFromCheckedChange) {
+ return;
+ }
+
+ mProtectFromCheckedChange = true;
+ if (mCheckedId != -1) {
+ setCheckedStateForView(mCheckedId, false);
+ }
+ mProtectFromCheckedChange = false;
+
+ int id = buttonView.getId();
+ setCheckedId(id);
+ }
+ }
+
+ /**
+ *
+ * A pass-through listener acts upon the events and dispatches them to
+ * another listener. This allows the table layout to set its own internal
+ * hierarchy change listener without preventing the user to setup his.
+ *
+ */
+ private class PassThroughHierarchyChangeListener implements
+ ViewGroup.OnHierarchyChangeListener {
+ private ViewGroup.OnHierarchyChangeListener mOnHierarchyChangeListener;
+
+ public void onChildViewAdded(View parent, View child) {
+ if (parent == StrongRadioGroup.this && child instanceof RadioButton) {
+ int id = child.getId();
+ // generates an id if it's missing
+ if (id == View.NO_ID) {
+ id = child.hashCode();
+ child.setId(id);
+ }
+ ((RadioButton) child)
+ .setOnCheckedChangeListener(mChildOnCheckedChangeListener);
+ } else if (parent == StrongRadioGroup.this && child instanceof ViewGroup) {
+ //添加部分
+ RadioButton btn = findRadioButton((ViewGroup) child);
+ int id = btn.getId();
+ // generates an id if it's missing
+ if (id == View.NO_ID) {
+ id = btn.hashCode();
+ btn.setId(id);
+ }
+ btn.setOnCheckedChangeListener(mChildOnCheckedChangeListener);
+ }
+
+ if (mOnHierarchyChangeListener != null) {
+ mOnHierarchyChangeListener.onChildViewAdded(parent, child);
+ }
+ }
+
+ public void onChildViewRemoved(View parent, View child) {
+ if (parent == StrongRadioGroup.this && child instanceof RadioButton) {
+ ((RadioButton) child).setOnCheckedChangeListener(null);
+ } else if (parent == StrongRadioGroup.this && child instanceof ViewGroup) {
+ //添加部分
+ findRadioButton((ViewGroup) child).setOnCheckedChangeListener(
+ null);
+ }
+ if (mOnHierarchyChangeListener != null) {
+ mOnHierarchyChangeListener.onChildViewRemoved(parent, child);
+ }
+ }
+ }
+}
diff --git a/common_base/src/main/res/drawable-xhdpi/popup_icon_close.png b/common_base/src/main/res/drawable-xhdpi/popup_icon_close.png
new file mode 100644
index 0000000000000000000000000000000000000000..220beb4a888edc40f7f9679dad4c19d663634af4
GIT binary patch
literal 498
zcmVPx$tVu*cR9Fe^m+NhWFc5@~a2=$G^pKPQRoo?2-J=Q+6_6HEMM^+q2YHcYVRpTs
zib|5>D9S|Mpy6&ZEnpd%*vH`T9scHTsHG^`
zPOJk>XmdH1i+~8Ms_KIT?<|r68G*Y)ll9he^?X|C=$+ulrA{m{p^h35fhirPv<;#B
zauT2xaxXaamkcODqTVece?ef*MW+H{V#x#uv6xG)ZWlOcnE@RL?`<;>-gCmrw>md#
z@Pjp9auQm5z(Gf~52E33rN2AGOGC@24b{zaa_dkZEkhTB!-9YwZ8KQq6C`q1e#|zr
z21jm9N1mpQ)|jL@n9^}d+cj7d3S*F)!U|68=wK
zLbsO6qJy~L5M0l})@>u=Px&PDw;TRA>e5noWp}VHAMp$BZ%K-$V#SQARQODHbTPzygbD6j@BHWJMMd3!)?o
znGH533oIB33zR4n3WZ`pDS!D(=8vmq*}=P)ULLuG)_
zHZe2eDY*%1YWzclb{V3QdJJRZH&g})?GrO29*`TQrp7%)rWy_!qLR7`&2by5?vbg1
z!(hcNlEc*WxQEEp!ZFK~+;tcnx1s7DnSO8rthholo&Rx>sfW{+DY=UgH9$-LB@tT#)}6*TFiV}=_bT3=SZIPx%9!W$&R9Fe^m`y~bVHC%E`ICsMRteC9oHgduDF4%2(weQU(Vg^~msD6>7DN
zNCg~;8T}r>y85UGL_kh*2~q6)QIMx+|f#EgCo4OaQ897Jm19Hg!o>Q$ju%ZL=i
zrI^t#pw=p1or6qgNY0Ht>QKu7gg(QmGmF;^z0vXvbrwREa2ywO?GC=GgDnFPDu+Xm
zdSGa=JVTv@P$}$#)DuIiI@mG*A@{D{6+^oF8{BSrhB^zOLf8Q*_Ytd09c&qZP(Eyl
zA>B##TArcKLMRtDAzc0HV9Nl^a$r4d$UJCyhB^zOELimPx$XGugsR9FdPWS|hJsHjH+jp%|JQ+DUh&83tW$w-N2Jv}|KZ{L1C{{R0!8^|0+
zM#f)UTuDML)Y6R)~{{6QG%rPK7hz$}0vB?D#ISA+g4E@-|NO2s7fuv}r
zh1yXE5en7O5E>03LLop%el!h@h7h3;ASBNMQUI#8p%o>GY3jcLrUm~ER8&Z-UxBTJ
zf1I4GH$bffMreCx9&)XXX$kE`Kus5*ElD5;Jq0>OiuP6#wgKp!u#_ZfV08B*y98)(A+Rxf0a=U?8>k17s0k^?ClAa`4*&oE+mEb<
zk&(&q&Yc?vki|%056Uz|iU(+}b~J3R9`7pm@&p>(@@eJ;k(9d
z7W>5&tSpO@OgdIbxg6NU$~WO=fnyGj&?AP30>;x~0&Jp5H+T-Ku`&FL*ArQ?@IJ`b
N44$rjF6*2UngFd;WQ70#
diff --git a/common_base/src/main/res/drawable-xxhdpi/input_add_disabled.png b/common_base/src/main/res/drawable-xxhdpi/input_add_disabled.png
index dd67fb78726ad071302d627feedfec651b3b2133..cee60c96edd36a24648b3b38b884331341a98fbf 100644
GIT binary patch
literal 388
zcmV-~0ek+5P)Px$K1oDDR9Fe^SWOCoP!R5Abc7Z``*!LL>KyI5K^qUzrW>^D9CZV8*FJL55dyRM
z!k}L2sDmLi!2{>_eSS>Lho&d|g<-g$7VE4{;QRhg($YwZqbM4sX?mtJL?2_!jn2e%
z-D}gn{icN(fawbiY&;X7sida}P?98H^?ANJ0KXd6DQ+WI0dcGG!)^C$+hSlPO3ip?xOX
z7KU?eoevjvZey6v*mA^OS3$&yXR)J;L5GB+rO1@R4v*V>4wv67RFh-5#J(VBjfk-D
zWq*aZqZR-D{JiZTx`^(5jGi8E=St94K$=1vR*HICC$sr>sZs&@XXO9
z>tKeA01smmSBIbLf=#SxQby8hZQW`|n?fC&-!&Ml5ICHwu*-tssgPCrR-yNSK>sj!
My85}Sb4q9e02_r|XaE2J
diff --git a/common_base/src/main/res/drawable-xxhdpi/input_minus_default.png b/common_base/src/main/res/drawable-xxhdpi/input_minus_default.png
index 753174d19826c0d7c6749de11e4ec7d23aacbe3c..1f8d10029f6768a4b6b674a3570ab668e561df70 100644
GIT binary patch
literal 181
zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|l3?zm1T2})p#^NA%Cx&(BWL^R}asfUet{@dE
zTFT05Dk?yv0Y+*-E(CG;a})tpaFzu51v3~1)HU>7c>izK7t3ovK?6@0#}JM4$q5py
zI~pUN`-m7QPgE>clbUfXpi|FeuA)$Eh8FYWPHwJ(FbUrHOAHKePwRf2%>OSDsF%Uh
L)z4*}Q$iB}oscef
literal 138
zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w#^NA%Cx&(BWL^R}`~f~8u0UEv
zMNLIT9f*{b)x3?8=L3aUN`m}?8CpO8TtC;{9LSgSba4!kxSX6IQK0aKiM@?Si=$6?
d)tLuO3`-|-Jb#pFv>vF4!PC{xWt~$(699h5A>;r6
diff --git a/common_base/src/main/res/drawable-xxhdpi/input_minus_disabled.png b/common_base/src/main/res/drawable-xxhdpi/input_minus_disabled.png
index 7b18444686adf7a37b88d29d3e3edca7e580f679..525e156480398c44f9a74c6074aec8e9bd0303f0 100644
GIT binary patch
literal 204
zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB7>k44ofy`glX(f`w0XKXhD30_
zowSj+!GMRQP%M#of_WmV+G(yFp~DU{%oq8*4cH^??N_+|w7+mWTSfyE1@U&wT)8`3
zFmi+H)PDyLu-(#s6C0J?_S;IyqrFmW$t-JrXTOO{8)Dio{J!w3jP3q5#n=)Jre*v$
p%1b;#`%5euO&pk^=z}pc|My1<86S6sn*&|M;OXk;vd$@?2>_*mML_@n
literal 155
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
aWLRxkS{}P;(*N@}6x_(%utMK0@_ztU708$X
diff --git a/common_base/src/main/res/drawable-xxxhdpi/input_add_default.png b/common_base/src/main/res/drawable-xxxhdpi/input_add_default.png
deleted file mode 100644
index 34fa1464300807a0ebf2d4eba7591877aee718c7..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 429
zcmV;e0aE^nP)Px$XGugsR9FdPWS|hJsHjH+jp%|JQ+DUh&83tW$w-N2Jv}|KZ{L1C{{R0!8^|0+
zM#f)UTuDML)Y6R)~{{6QG%rPK7hz$}0vB?D#ISA+g4E@-|NO2s7fuv}r
zh1yXE5en7O5E>03LLop%el!h@h7h3;ASBNMQUI#8p%o>GY3jcLrUm~ER8&Z-UxBTJ
zf1I4GH$bffMreCx9&)XXX$kE`Kus5*ElD5;Jq0>OiuP6#wgKp!u#_ZfV08B*y98)(A+Rxf0a=U?8>k17s0k^?ClAa`4*&oE+mEb<
zk&(&q&Yc?vki|%056Uz|iU(+}b~J3R9`7pm@&p>(@@ePx$K1oDDR9Fe^SWOCoP!R5Abc7Z``*!LL>KyI5K^qUzrW>^D9CZV8*FJL55dyRM
z!k}L2sDmLi!2{>_eSS>Lho&d|g<-g$7VE4{;QRhg($YwZqbM4sX?mtJL?2_!jn2e%
z-D}gn{icN(fawbiY&;X7sida}P?98H^?ANJ0KXd6DQ+WI0dcG|l3?zm1T2})p#^NA%Cx&(BWL^R}asfUet{@dE
zTFT05Dk?yv0Y+*-E(CG;a})tpaFzu51v3~1)HU>7c>izK7t3ovK?6@0#}JM4$q5py
zI~pUN`-m7QPgE>clbUfXpi|FeuA)$Eh8FYWPHwJ(FbUrHOAHKePwRf2%>OSDsF%Uh
L)z4*}Q$iB}oscef
diff --git a/common_base/src/main/res/drawable-xxxhdpi/input_minus_disabled.png b/common_base/src/main/res/drawable-xxxhdpi/input_minus_disabled.png
deleted file mode 100644
index 525e156480398c44f9a74c6074aec8e9bd0303f0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 204
zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB7>k44ofy`glX(f`w0XKXhD30_
zowSj+!GMRQP%M#of_WmV+G(yFp~DU{%oq8*4cH^??N_+|w7+mWTSfyE1@U&wT)8`3
zFmi+H)PDyLu-(#s6C0J?_S;IyqrFmW$t-JrXTOO{8)Dio{J!w3jP3q5#n=)Jre*v$
p%1b;#`%5euO&pk^=z}pc|My1<86S6sn*&|M;OXk;vd$@?2>_*mML_@n
diff --git a/module_market/src/main/res/drawable/market_shape_round_red.xml b/common_base/src/main/res/drawable/market_shape_round_red.xml
similarity index 100%
rename from module_market/src/main/res/drawable/market_shape_round_red.xml
rename to common_base/src/main/res/drawable/market_shape_round_red.xml
diff --git a/common_base/src/main/res/values/colors.xml b/common_base/src/main/res/values/colors.xml
index b26bb20..325e36f 100644
--- a/common_base/src/main/res/values/colors.xml
+++ b/common_base/src/main/res/values/colors.xml
@@ -5,7 +5,7 @@
#00000000
#FFFFFF
#BBBBBB
- #DC143C
+ #FF0000
#0099FF
#000000
#FFA82E
diff --git a/module_main/src/main/AndroidManifest.xml b/module_main/src/main/AndroidManifest.xml
index 6acc797..045e9df 100644
--- a/module_main/src/main/AndroidManifest.xml
+++ b/module_main/src/main/AndroidManifest.xml
@@ -1,6 +1,7 @@
+
@@ -26,5 +27,7 @@
+
+
diff --git a/module_main/src/main/java/com/wss/module/main/ui/main/MainActivity.java b/module_main/src/main/java/com/wss/module/main/ui/main/MainActivity.java
index c5ad7bb..41bce46 100644
--- a/module_main/src/main/java/com/wss/module/main/ui/main/MainActivity.java
+++ b/module_main/src/main/java/com/wss/module/main/ui/main/MainActivity.java
@@ -88,6 +88,7 @@ public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
presenter.checkUpdate();
}
presenter.getTabList();
+
}
diff --git a/module_main/src/main/java/com/wss/module/main/ui/main/mvp/MainPresenter.java b/module_main/src/main/java/com/wss/module/main/ui/main/mvp/MainPresenter.java
index bb0607b..074bc25 100644
--- a/module_main/src/main/java/com/wss/module/main/ui/main/mvp/MainPresenter.java
+++ b/module_main/src/main/java/com/wss/module/main/ui/main/mvp/MainPresenter.java
@@ -15,7 +15,9 @@
import com.wss.module.main.ui.page.FlowLayoutActivity;
import com.wss.module.main.ui.page.MultipleItemActivity;
import com.wss.module.main.ui.page.ObserverButtonActivity;
+import com.wss.module.main.ui.page.RadioGroupActivity;
import com.wss.module.main.ui.page.ScaleImageActivity;
+import com.wss.module.main.ui.page.YumanmanActivity;
import com.wss.module.main.ui.refresh.RefreshStringActivity;
import com.wss.module.main.ui.selector.SelectorActivity;
@@ -80,6 +82,8 @@ public void getTabList() {
list.add(new Template("流式布局", R.drawable.main_icon_15, FlowLayoutActivity.class, "流式布局,从左上角位置开始,自动换行"));
list.add(new Template("聊天", R.drawable.main_icon_16, IMActivity.class, "聊天布局样式,用于测试多功能列表适配器"));
list.add(new Template("图片查看器", R.drawable.main_icon_18, ScaleImageActivity.class, "大图查看器、支持下载、删除、缩放等操作"));
+ list.add(new Template("于慢慢计算器", R.drawable.main_icon_19, YumanmanActivity.class, "某一个初始值递增某次计算结果"));
+ list.add(new Template("自定义RadioGroup", R.drawable.main_icon_20, RadioGroupActivity.class, "自定义RadioGroup"));
getView().tabList(list);
}
}
diff --git a/module_main/src/main/java/com/wss/module/main/ui/page/DialogActivity.java b/module_main/src/main/java/com/wss/module/main/ui/page/DialogActivity.java
index 3a1fe5b..07ae005 100644
--- a/module_main/src/main/java/com/wss/module/main/ui/page/DialogActivity.java
+++ b/module_main/src/main/java/com/wss/module/main/ui/page/DialogActivity.java
@@ -60,6 +60,7 @@ public void onBtnClick(View view) {
new AppDialog(mContext)
.setContent("我的自定义默认对话框")
.show();
+
} else if (view.getId() == R.id.btn_02) {
new AppDialog(mContext, DialogType.INPUT)
.setTitle("来一段文字")
@@ -112,16 +113,17 @@ public void onItemClick(int position) {
.show();
} else if (view.getId() == R.id.btn_07) {
- View progressView = View.inflate(mContext, R.layout.update_progress_layout, null);
- progressBar = progressView.findViewById(R.id.number_progress);
- progressDialog = new AppDialog(mContext);
- mProgress = 0;
- progressBar.setProgress(mProgress);
-
- progressDialog.setTitle("更新")
- .addDialogView(progressView)
- .show();
- update();
+// View progressView = View.inflate(mContext, R.layout.update_progress_layout, null);
+// progressBar = progressView.findViewById(R.id.number_progress);
+// progressDialog = new AppDialog(mContext);
+// mProgress = 0;
+// progressBar.setProgress(mProgress);
+//
+// progressDialog.setTitle("更新")
+// .addDialogView(progressView)
+// .show();
+// update();
+
}
}
diff --git a/module_main/src/main/java/com/wss/module/main/ui/page/RadioGroupActivity.java b/module_main/src/main/java/com/wss/module/main/ui/page/RadioGroupActivity.java
new file mode 100644
index 0000000..e502940
--- /dev/null
+++ b/module_main/src/main/java/com/wss/module/main/ui/page/RadioGroupActivity.java
@@ -0,0 +1,48 @@
+package com.wss.module.main.ui.page;
+
+import android.widget.TextView;
+
+import com.wss.common.base.ActionBarActivity;
+import com.wss.common.base.mvp.BasePresenter;
+import com.wss.common.widget.StrongRadioGroup;
+import com.wss.module.main.R;
+import com.wss.module.main.R2;
+
+import butterknife.BindView;
+
+/**
+ * Describe:
+ * Created by 吴天强 on 2019/3/18.
+ */
+
+public class RadioGroupActivity extends ActionBarActivity {
+
+
+ @BindView(R2.id.mg)
+ StrongRadioGroup mainTab;
+
+ @BindView(R2.id.tv_count)
+ TextView tvCount;
+
+
+ @Override
+ protected BasePresenter createPresenter() {
+ return null;
+ }
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.main_activity_radio_group;
+ }
+
+ @Override
+ protected void initView() {
+ setTitleText("自定义RadioGroup");
+ mainTab.setOnCheckedChangeListener(new StrongRadioGroup.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(StrongRadioGroup group, int checkedId) {
+
+ }
+ }); //检查文件权限
+ }
+}
diff --git a/module_main/src/main/java/com/wss/module/main/ui/page/YumanmanActivity.java b/module_main/src/main/java/com/wss/module/main/ui/page/YumanmanActivity.java
new file mode 100644
index 0000000..69fb72d
--- /dev/null
+++ b/module_main/src/main/java/com/wss/module/main/ui/page/YumanmanActivity.java
@@ -0,0 +1,196 @@
+package com.wss.module.main.ui.page;
+
+import android.annotation.SuppressLint;
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.os.Handler;
+import android.os.Message;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.wss.common.base.ActionBarActivity;
+import com.wss.common.base.mvp.BasePresenter;
+import com.wss.common.utils.MoneyUtils;
+import com.wss.common.utils.ToastUtils;
+import com.wss.common.widget.ObserverButton;
+import com.wss.module.main.R;
+import com.wss.module.main.R2;
+
+import butterknife.BindView;
+import butterknife.OnClick;
+
+/**
+ * Describe:于慢慢牌计算器
+ * Created by 吴天强 on 2019/3/12.
+ */
+
+public class YumanmanActivity extends ActionBarActivity {
+
+ @BindView(R2.id.edt_initial_value)
+ EditText edtInitialValue;
+
+ @BindView(R2.id.edt_count_value)
+ EditText edtCountValue;
+
+ @BindView(R2.id.edt_increment_value)
+ EditText edtIncrementValue;
+
+ @BindView(R2.id.tv_result)
+ TextView tvResult;
+
+ @BindView(R2.id.tv_result_detail)
+ TextView tvResultDetail;
+
+ @BindView(R2.id.ob_btn)
+ ObserverButton button;
+
+ @BindView(R2.id.root)
+ View root;
+
+ @BindView(R2.id.values)
+ View values;
+
+
+ //设置一个默认值
+ private int recordVisibleRec = 0;
+
+ @Override
+ protected BasePresenter createPresenter() {
+ return null;
+ }
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.main_activity_yumanman;
+ }
+
+ @Override
+ protected void initView() {
+ setTitleText("于慢慢计算器");
+ button.observer(edtInitialValue, edtIncrementValue, edtCountValue);
+ }
+
+
+ @OnClick({R2.id.ob_btn, R2.id.tv_result})
+ public void addValue(View v) {
+ if (v.getId() == R.id.ob_btn) {
+ Double a = Double.valueOf(edtInitialValue.getText().toString().trim());
+ Integer b = Integer.valueOf(edtCountValue.getText().toString().trim());
+ Double c = Double.valueOf(edtIncrementValue.getText().toString().trim());
+ add(new Bean(a, b, c));
+ } else {
+ ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
+ cm.setPrimaryClip(ClipData.newPlainText(null, ((TextView) v).getText()));
+ ToastUtils.showToast(mContext, "结果已复制到粘贴板");
+ }
+ }
+
+ private void add(final Bean bean) {
+ showLoading("正在疯狂计算···");
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ double a = bean.getA();
+ int b = bean.getB();
+ double c = bean.getC();
+ double sum = a;
+ StringBuilder sb = new StringBuilder();
+ String str;
+ if (b > 1) {
+ for (int i = 0; i < b; i++) {
+ sb.append(a);
+ sb.append("+");
+ a = Double.valueOf(MoneyUtils.Algorithm.add(a, c));
+ sum = Double.valueOf(MoneyUtils.Algorithm.add(sum, a));
+ }
+ str = sb.toString();
+ str = str.substring(0, str.length() - 1);
+ } else {
+ str = String.valueOf(a);
+ }
+ Message message = handler.obtainMessage();
+ message.obj = new Bean(sum, str);
+ handler.sendMessage(message);
+ }
+
+ }).start();
+ }
+
+ @SuppressLint("HandlerLeak")
+ private Handler handler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ super.handleMessage(msg);
+ Bean bean = (Bean) msg.obj;
+ tvResult.setText(String.format("计算结果:%s", bean.getSum()));
+ tvResultDetail.setText(String.format("计算详情:%s", bean.getStr()));
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ dismissLoading();
+ }
+ }, 500);
+ }
+ };
+
+ private class Bean {
+ double a;
+ int b;
+ double c;
+ double sum;
+ String str;
+
+ public Bean(double sum, String str) {
+ this.sum = sum;
+ this.str = str;
+ }
+
+ public double getSum() {
+ return sum;
+ }
+
+ public void setSum(double sum) {
+ this.sum = sum;
+ }
+
+ public String getStr() {
+ return str;
+ }
+
+ public void setStr(String str) {
+ this.str = str;
+ }
+
+ Bean(double a, int b, double c) {
+ this.a = a;
+ this.b = b;
+ this.c = c;
+ }
+
+ public double getA() {
+ return a;
+ }
+
+ public void setA(double a) {
+ this.a = a;
+ }
+
+ public int getB() {
+ return b;
+ }
+
+ public void setB(int b) {
+ this.b = b;
+ }
+
+ public double getC() {
+ return c;
+ }
+
+ public void setC(double c) {
+ this.c = c;
+ }
+ }
+}
diff --git a/module_main/src/main/res/layout/main_activity_radio_group.xml b/module_main/src/main/res/layout/main_activity_radio_group.xml
new file mode 100644
index 0000000..fad34a0
--- /dev/null
+++ b/module_main/src/main/res/layout/main_activity_radio_group.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/module_main/src/main/res/layout/main_activity_scale_image.xml b/module_main/src/main/res/layout/main_activity_scale_image.xml
index c31337f..0c3e47f 100644
--- a/module_main/src/main/res/layout/main_activity_scale_image.xml
+++ b/module_main/src/main/res/layout/main_activity_scale_image.xml
@@ -11,5 +11,9 @@
android:layout_height="45dp"
android:layout_marginTop="10dp"
android:text="图片查看" />
+
diff --git a/module_main/src/main/res/layout/main_activity_yumanman.xml b/module_main/src/main/res/layout/main_activity_yumanman.xml
new file mode 100644
index 0000000..91f35a9
--- /dev/null
+++ b/module_main/src/main/res/layout/main_activity_yumanman.xml
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/module_market/src/main/assets/html/goods_detail.html b/module_market/src/main/assets/html/goods_detail.html
new file mode 100644
index 0000000..2a678af
--- /dev/null
+++ b/module_market/src/main/assets/html/goods_detail.html
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+ 商品详情
+
+
+
+
+
+
+
+
+
+
+
+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+

+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/module_market/src/main/java/com/wss/module/market/ui/goods/detail/GoodsDetailActivity.java b/module_market/src/main/java/com/wss/module/market/ui/goods/detail/GoodsDetailActivity.java
index 5d816eb..824e1f1 100644
--- a/module_market/src/main/java/com/wss/module/market/ui/goods/detail/GoodsDetailActivity.java
+++ b/module_market/src/main/java/com/wss/module/market/ui/goods/detail/GoodsDetailActivity.java
@@ -1,7 +1,9 @@
package com.wss.module.market.ui.goods.detail;
+import android.os.Handler;
import android.text.TextUtils;
import android.view.View;
+import android.widget.ImageView;
import android.widget.TextView;
import com.wss.common.adapter.FragmentPagerAdapter;
@@ -48,6 +50,9 @@ public class GoodsDetailActivity extends BaseActivity {
@BindView(R2.id.tv_count)
TextView tvCount;//购物车数量
+ @BindView(R2.id.iv_cart)
+ ImageView ivCart;//购物车
+
//TODO 测试使用列表造的伪数据表示不同商品做加入购物车操作
private GoodsInfo goodsInfo;
@@ -128,11 +133,28 @@ public void onViewClicked(View view) {
} else if (i == R.id.tv_add_cart) {
//加入购物车
if (goodsInfo != null) {
- goodsInfo.setNum(goodsInfoMainFragment.getGoodsCount());
- ShoppingCartUtils.addCartGoods(goodsInfo);
- EventBusUtils.sendEvent(new Event(EventAction.EVENT_SHOPPING_CART_REFRESH));
- }else {
- ToastUtils.showToast(mContext,"没有正经的商品信息~");
+ final long time = 500;
+ ivCart.animate()
+ .scaleX(1.3f)
+ .scaleY(1.3f)
+ .setDuration(time)
+ .start();
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ goodsInfo.setNum(goodsInfoMainFragment.getGoodsCount());
+ ShoppingCartUtils.addCartGoods(goodsInfo);
+ EventBusUtils.sendEvent(new Event(EventAction.EVENT_SHOPPING_CART_REFRESH));
+ ivCart.animate()
+ .scaleX(1.0f)
+ .scaleY(1.0f)
+ .setDuration(time)
+ .start();
+ }
+ }, time * 2 );
+
+ } else {
+ ToastUtils.showToast(mContext, "没有正经的商品信息~");
}
} else if (i == R.id.tv_buy_now) {
//立即购买
diff --git a/module_market/src/main/java/com/wss/module/market/ui/goods/detail/fragment/GoodsInfoMainFragment.java b/module_market/src/main/java/com/wss/module/market/ui/goods/detail/fragment/GoodsInfoMainFragment.java
index 3210eff..b9f50a0 100644
--- a/module_market/src/main/java/com/wss/module/market/ui/goods/detail/fragment/GoodsInfoMainFragment.java
+++ b/module_market/src/main/java/com/wss/module/market/ui/goods/detail/fragment/GoodsInfoMainFragment.java
@@ -22,6 +22,7 @@
import com.wss.module.market.ui.goods.detail.GoodsDetailActivity;
import com.wss.module.market.ui.goods.detail.adapter.GoodsCommentAdapter;
import com.wss.module.market.ui.goods.detail.adapter.RecommendGoodsAdapter;
+import com.wss.module.market.ui.goods.detail.helper.GoodsSpecificationPop;
import com.wss.module.market.ui.goods.detail.mvp.GoodsDetailPresenter;
import com.wss.module.market.ui.goods.detail.mvp.contract.GoodsDetailContract;
@@ -100,13 +101,17 @@ protected void initView() {
}
- @OnClick({R2.id.ll_pull_up, R2.id.ll_comment})
+ @OnClick({R2.id.ll_pull_up, R2.id.ll_comment, R2.id.miv_goods_specification})
public void onClick(View v) {
- if (v.getId() == R.id.ll_pull_up) {//上拉查看图文详情
+ if (v.getId() == R.id.ll_pull_up) {
+ //上拉查看图文详情
svSwitch.smoothOpen(true);
} else if (v.getId() == R.id.ll_comment) {
//查看评论
goodsDetailActivity.setCurrentFragment(2);
+ } else if (v.getId() == R.id.miv_goods_specification) {
+ //选择商品规格
+ GoodsSpecificationPop.getInstance(mContext).show(v);
}
}
diff --git a/module_market/src/main/java/com/wss/module/market/ui/goods/detail/fragment/child/GoodsConfigFragment.java b/module_market/src/main/java/com/wss/module/market/ui/goods/detail/fragment/child/GoodsConfigFragment.java
index f1093ff..1899300 100644
--- a/module_market/src/main/java/com/wss/module/market/ui/goods/detail/fragment/child/GoodsConfigFragment.java
+++ b/module_market/src/main/java/com/wss/module/market/ui/goods/detail/fragment/child/GoodsConfigFragment.java
@@ -31,8 +31,20 @@ protected int getLayoutId() {
protected void initView() {
listView.setFocusable(false);
List data = new ArrayList<>();
- data.add(new GoodsConfigBean("品牌", "小米Mix 3"));
- data.add(new GoodsConfigBean("型号", "全面屏 小米Mix 3"));
+ data.add(new GoodsConfigBean("品牌", "小米(MI)"));
+ data.add(new GoodsConfigBean("型号", "小米MIX3"));
+ data.add(new GoodsConfigBean("入网型号", "以官网信息为准"));
+ data.add(new GoodsConfigBean("上市时间", "2018年10月"));
+ data.add(new GoodsConfigBean("操作系统", "Android"));
+ data.add(new GoodsConfigBean("CPU", "骁龙845 八核"));
+ data.add(new GoodsConfigBean("ROM", "128GB"));
+ data.add(new GoodsConfigBean("RAM", "8GM"));
+ data.add(new GoodsConfigBean("网络支持", "2G/3G/4G"));
+ data.add(new GoodsConfigBean("屏幕尺寸", "3.98英寸"));
+ data.add(new GoodsConfigBean("分辨率", "2340*1080"));
+ data.add(new GoodsConfigBean("摄像头", "2400万+2000万像素"));
+ data.add(new GoodsConfigBean("电池容量(mAh)", "3200mAh (typ)/ 3100mAh (min)"));
+ data.add(new GoodsConfigBean("数据接口", "蓝牙/NFC"));
listView.setAdapter(new GoodsConfigAdapter(mContext, data, R.layout.market_item_of_goods_config_list));
}
diff --git a/module_market/src/main/java/com/wss/module/market/ui/goods/detail/fragment/child/GoodsInfoWebFragment.java b/module_market/src/main/java/com/wss/module/market/ui/goods/detail/fragment/child/GoodsInfoWebFragment.java
index 9932a0c..d126588 100644
--- a/module_market/src/main/java/com/wss/module/market/ui/goods/detail/fragment/child/GoodsInfoWebFragment.java
+++ b/module_market/src/main/java/com/wss/module/market/ui/goods/detail/fragment/child/GoodsInfoWebFragment.java
@@ -31,9 +31,9 @@ protected void initView() {
}
public void initWebView() {
- String url = "http://m.okhqb.com/item/description/1000334264.html?fromApp=true";
+// String url = "http://m.okhqb.com/item/description/1000334264.html?fromApp=true";
webView.setFocusable(false);
- webView.loadUrl(url);
+ webView.loadUrl("file:///android_asset/html/goods_detail.html");
webSettings = webView.getSettings();
webSettings.setLoadWithOverviewMode(true);
webSettings.setBuiltInZoomControls(true);
diff --git a/module_market/src/main/java/com/wss/module/market/ui/goods/detail/helper/GoodsSpecificationPop.java b/module_market/src/main/java/com/wss/module/market/ui/goods/detail/helper/GoodsSpecificationPop.java
new file mode 100644
index 0000000..58e3bee
--- /dev/null
+++ b/module_market/src/main/java/com/wss/module/market/ui/goods/detail/helper/GoodsSpecificationPop.java
@@ -0,0 +1,106 @@
+package com.wss.module.market.ui.goods.detail.helper;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.PopupWindow;
+import android.widget.TextView;
+
+import com.wss.common.utils.ImageUtils;
+import com.wss.common.utils.PxUtils;
+import com.wss.common.widget.FlowLayout;
+import com.wss.module.market.R;
+import com.wss.module.market.R2;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
+ * Describe:商品规格Pop
+ * Created by 吴天强 on 2019/1/31.
+ */
+
+public class GoodsSpecificationPop extends PopupWindow {
+
+ private String imgUrl = "https://img14.360buyimg.com/n0/jfs/t1/1867/31/11716/401006/5bd072f8E6db292ab/f3610e2e816ade0f.jpg";
+ private String[] colors = new String[]{"黑色", "宝石蓝", "翡翠绿", "红色", "藏青色", "胡杨黄"};
+ private String[] versions = new String[]{"6GB+128G", "8GB+128GB", "8GB+256GB", "10GB+256GB"};
+ private String[] buyWays = new String[]{"官网套餐", "碎屏保险服务", "故宫特别版", "贴膜套装"};
+
+
+ private Context context;
+ @SuppressLint("StaticFieldLeak")
+ private static GoodsSpecificationPop specificationPop;
+
+ @BindView(R2.id.fl_color)
+ FlowLayout flColor;//颜色
+
+ @BindView(R2.id.fl_version)
+ FlowLayout flVersion;//版本
+
+ @BindView(R2.id.fl_buy_way)
+ FlowLayout flBuyWay;//购买方式
+
+ @BindView(R2.id.iv_goods_img)
+ ImageView imageView;
+
+ public GoodsSpecificationPop(Context context) {
+ this.context = context;
+ }
+
+ public static synchronized GoodsSpecificationPop getInstance(Context context) {
+ if (specificationPop == null) {
+ specificationPop = new GoodsSpecificationPop(context);
+ }
+ return specificationPop;
+ }
+
+ public void show(View parent) {
+ View view = View.inflate(context, R.layout.market_pop_goods_specification, null);
+ ButterKnife.bind(this, view);
+ setAnimationStyle(R.style.AnimSheetBottom);
+ setBackgroundDrawable(new ColorDrawable(0));
+ setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
+ setHeight(ViewGroup.LayoutParams.MATCH_PARENT);
+ setFocusable(true);
+ setOutsideTouchable(true);
+ setContentView(view);
+ showAtLocation(parent, Gravity.CENTER, 0, 0);
+ loadData();
+ update();
+ }
+
+ private void loadData() {
+ ImageUtils.loadImage(imageView, imgUrl);
+ flColor.removeAllViews();
+ //加载颜色
+ for (String color : colors) {
+ TextView textView = new TextView(context);
+ textView.setText(color);
+ textView.setBackgroundResource(R.drawable.market_bg_of_ellipse_button_select);
+// textView.setTextColor(R.color.market_goods_button_text_color);
+ textView.setTextColor(Color.BLACK);
+ ViewGroup.MarginLayoutParams mlp = new ViewGroup.MarginLayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+ mlp.setMargins(0, PxUtils.dp2px(5), PxUtils.dp2px(5), 0);
+ textView.setLayoutParams(mlp);
+ textView.setPadding(PxUtils.dp2px(10), PxUtils.dp2px(4), PxUtils.dp2px(10), PxUtils.dp2px(4));
+ textView.setGravity(Gravity.CENTER);
+ textView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ v.setSelected(!v.isSelected());
+ }
+ });
+
+ flColor.addView(textView);
+ }
+
+
+ }
+
+}
diff --git a/module_market/src/main/res/color/market_goods_button_text_color.xml b/module_market/src/main/res/color/market_goods_button_text_color.xml
new file mode 100644
index 0000000..236489e
--- /dev/null
+++ b/module_market/src/main/res/color/market_goods_button_text_color.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/module_market/src/main/res/drawable/market_bg_of_ellipse_button_black.xml b/module_market/src/main/res/drawable/market_bg_of_ellipse_button_black.xml
new file mode 100644
index 0000000..24ce153
--- /dev/null
+++ b/module_market/src/main/res/drawable/market_bg_of_ellipse_button_black.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/module_market/src/main/res/drawable/market_bg_of_ellipse_button_red.xml b/module_market/src/main/res/drawable/market_bg_of_ellipse_button_red.xml
new file mode 100644
index 0000000..6b34ee9
--- /dev/null
+++ b/module_market/src/main/res/drawable/market_bg_of_ellipse_button_red.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/module_market/src/main/res/drawable/market_bg_of_ellipse_button_select.xml b/module_market/src/main/res/drawable/market_bg_of_ellipse_button_select.xml
new file mode 100644
index 0000000..7763649
--- /dev/null
+++ b/module_market/src/main/res/drawable/market_bg_of_ellipse_button_select.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/module_market/src/main/res/layout/market_activity_goods_details.xml b/module_market/src/main/res/layout/market_activity_goods_details.xml
index d37d6a1..c62edb4 100644
--- a/module_market/src/main/res/layout/market_activity_goods_details.xml
+++ b/module_market/src/main/res/layout/market_activity_goods_details.xml
@@ -2,6 +2,7 @@
diff --git a/module_market/src/main/res/layout/market_item_of_goods_config_list.xml b/module_market/src/main/res/layout/market_item_of_goods_config_list.xml
index cc2aae8..d136132 100644
--- a/module_market/src/main/res/layout/market_item_of_goods_config_list.xml
+++ b/module_market/src/main/res/layout/market_item_of_goods_config_list.xml
@@ -1,7 +1,7 @@
+ android:layout_height="match_parent"
+ android:background="@color/gray" />
-
-
-
-
+ android:layout_height="1px"
+ android:background="@color/gray" />
diff --git a/module_market/src/main/res/layout/market_pop_goods_specification.xml b/module_market/src/main/res/layout/market_pop_goods_specification.xml
new file mode 100644
index 0000000..b635e41
--- /dev/null
+++ b/module_market/src/main/res/layout/market_pop_goods_specification.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From e2a0ed89665efe7d53b7dab160b8e20f6d3d3b5f Mon Sep 17 00:00:00 2001
From: wutq
Date: Mon, 3 Jun 2019 16:12:06 +0800
Subject: [PATCH 10/28] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=A8=E6=80=81?=
=?UTF-8?q?=E6=9D=83=E9=99=90=E5=BA=93,RX=E5=BA=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/misc.xml | 2 +-
app/build.gradle | 4 +
common_base/build.gradle | 11 ++
common_base/src/main/AndroidManifest.xml | 3 +-
.../com/wss/common/base/BaseFragment.java | 3 +-
.../java/com/wss/common/bean/Template.java | 7 +-
.../com/wss/common/manage/UpdateManager.java | 8 +-
.../wss/common/utils/PermissionsUtils.java | 115 ++++++++++-----
.../com/wss/common/utils/StringUtils.java | 11 --
.../java/com/wss/common/utils/ToastUtils.java | 30 ++--
.../pulltorefresh/PullToRefreshLayout.java | 12 +-
.../common/widget/scaleImg/ImageViewer.java | 48 +++----
.../src/main/res/drawable-xhdpi/ic_back.png | Bin 0 -> 612 bytes
.../res/drawable-xhdpi/input_add_default.png | Bin 0 -> 266 bytes
.../res/drawable-xhdpi/input_add_disabled.png | Bin 0 -> 266 bytes
.../drawable-xhdpi/input_minus_default.png | Bin 0 -> 138 bytes
.../drawable-xhdpi/input_minus_disabled.png | Bin 0 -> 155 bytes
.../src/main/res/layout/activity_webview.xml | 2 +-
config.gradle | 18 ++-
module_main/build.gradle | 5 +-
module_main/src/main/AndroidManifest.xml | 7 +
.../ui/hortab/fragment/OrderFragment.java | 4 +-
.../main/ui/loading/LoadingActivity.java | 2 +-
.../wss/module/main/ui/main/MainActivity.java | 12 +-
.../main/ui/main/mvp/MainPresenter.java | 3 +
.../module/main/ui/page/DialogActivity.java | 47 +++---
.../main/ui/page/ObserverButtonActivity.java | 2 +-
.../module/main/ui/page/QRCodeActivity.java | 64 +++++++++
.../module/main/ui/page/YumanmanActivity.java | 2 +-
.../main/ui/selector/SelectorActivity.java | 10 +-
.../main/res/drawable-xxxhdpi/main_ic_add.png | Bin 0 -> 539 bytes
.../res/drawable-xxxhdpi/main_ic_card.png | Bin 0 -> 15777 bytes
.../res/drawable-xxxhdpi/main_ic_contact.png | Bin 0 -> 1550 bytes
.../res/drawable-xxxhdpi/main_ic_payment.png | Bin 0 -> 15300 bytes
.../res/drawable-xxxhdpi/main_ic_scan.png | Bin 0 -> 15343 bytes
.../res/drawable-xxxhdpi/main_ic_transfer.png | Bin 0 -> 15538 bytes
.../res/drawable-xxxhdpi/mainic_search.png | Bin 0 -> 3225 bytes
.../main/res/drawable/main_shape_search.xml | 11 ++
.../main/res/layout/item_of_demo_fragment.xml | 14 ++
.../main_activity_corrdinator_layout.xml | 134 ++++++++++++++++++
.../main/res/layout/main_activity_qr_code.xml | 19 +++
.../main/res/layout/main_demo_activity.xml | 76 ++++++++++
.../main/res/layout/main_demo_fragment.xml | 27 ++++
.../main/res/layout/main_fragment_news.xml | 55 +++++++
.../src/main/res/layout/main_include_open.xml | 115 +++++++++++++++
.../res/layout/main_include_toolbar_close.xml | 46 ++++++
.../res/layout/main_include_toolbar_open.xml | 40 ++++++
module_main/src/main/res/values/attr.xml | 7 +
.../src/main/res/values/attrs_orange.xml | 34 +++++
module_main/src/main/res/values/dimens.xml | 5 +
.../main/res/values/ids_sticky_nav_layout.xml | 9 ++
module_main/src/main/res/values/styles.xml | 13 ++
module_market/build.gradle | 1 +
.../ui/goods/cart/ShoppingCartActivity.java | 2 +-
.../ui/goods/detail/GoodsDetailActivity.java | 4 +-
.../module/user/ui/account/LoginActivity.java | 2 +-
.../user/ui/account/RegisterActivity.java | 6 +-
.../user/ui/main/mvp/UserPresenter.java | 2 +-
.../wan/ui/collection/CollectionActivity.java | 4 +-
.../wan/ui/project/ProjectActivity.java | 4 +-
.../module/wan/ui/search/SearchActivity.java | 4 +-
.../wan/ui/setup/SystemArticleActivity.java | 4 +-
62 files changed, 905 insertions(+), 165 deletions(-)
delete mode 100644 common_base/src/main/java/com/wss/common/utils/StringUtils.java
create mode 100644 common_base/src/main/res/drawable-xhdpi/ic_back.png
create mode 100644 common_base/src/main/res/drawable-xhdpi/input_add_default.png
create mode 100644 common_base/src/main/res/drawable-xhdpi/input_add_disabled.png
create mode 100644 common_base/src/main/res/drawable-xhdpi/input_minus_default.png
create mode 100644 common_base/src/main/res/drawable-xhdpi/input_minus_disabled.png
create mode 100644 module_main/src/main/java/com/wss/module/main/ui/page/QRCodeActivity.java
create mode 100644 module_main/src/main/res/drawable-xxxhdpi/main_ic_add.png
create mode 100644 module_main/src/main/res/drawable-xxxhdpi/main_ic_card.png
create mode 100644 module_main/src/main/res/drawable-xxxhdpi/main_ic_contact.png
create mode 100644 module_main/src/main/res/drawable-xxxhdpi/main_ic_payment.png
create mode 100644 module_main/src/main/res/drawable-xxxhdpi/main_ic_scan.png
create mode 100644 module_main/src/main/res/drawable-xxxhdpi/main_ic_transfer.png
create mode 100644 module_main/src/main/res/drawable-xxxhdpi/mainic_search.png
create mode 100644 module_main/src/main/res/drawable/main_shape_search.xml
create mode 100644 module_main/src/main/res/layout/item_of_demo_fragment.xml
create mode 100644 module_main/src/main/res/layout/main_activity_corrdinator_layout.xml
create mode 100644 module_main/src/main/res/layout/main_activity_qr_code.xml
create mode 100644 module_main/src/main/res/layout/main_demo_activity.xml
create mode 100644 module_main/src/main/res/layout/main_demo_fragment.xml
create mode 100644 module_main/src/main/res/layout/main_fragment_news.xml
create mode 100644 module_main/src/main/res/layout/main_include_open.xml
create mode 100644 module_main/src/main/res/layout/main_include_toolbar_close.xml
create mode 100644 module_main/src/main/res/layout/main_include_toolbar_open.xml
create mode 100644 module_main/src/main/res/values/attr.xml
create mode 100644 module_main/src/main/res/values/attrs_orange.xml
create mode 100644 module_main/src/main/res/values/dimens.xml
create mode 100644 module_main/src/main/res/values/ids_sticky_nav_layout.xml
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 9ac5bbb..c0d5735 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -42,7 +42,7 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index 7ed3cdf..ecc418b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -41,6 +41,10 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
+ compileOptions {
+ targetCompatibility rootProject.ext.versions.javaSDKVersion
+ sourceCompatibility rootProject.ext.versions.javaSDKVersion
+ }
}
configurations.all {
diff --git a/common_base/build.gradle b/common_base/build.gradle
index 8fda9e6..e03c6fa 100644
--- a/common_base/build.gradle
+++ b/common_base/build.gradle
@@ -35,6 +35,10 @@ android {
dexOptions {
javaMaxHeapSize "4g"
}
+ compileOptions {
+ targetCompatibility rootProject.ext.versions.javaSDKVersion
+ sourceCompatibility rootProject.ext.versions.javaSDKVersion
+ }
}
dependencies {
@@ -85,4 +89,11 @@ dependencies {
api rootProject.ext.dependencies["greenDao"]
//scaleImageView
api rootProject.ext.dependencies["scaleImageView"]
+ //二维码扫描
+ api rootProject.ext.dependencies["zxing"]
+ //危险权限
+ api rootProject.ext.dependencies["xxpermissions"]
+ //RX
+ api rootProject.ext.dependencies["rx2_java"]
+ api rootProject.ext.dependencies["rx2_android"]
}
diff --git a/common_base/src/main/AndroidManifest.xml b/common_base/src/main/AndroidManifest.xml
index f0f9a56..fa7d643 100644
--- a/common_base/src/main/AndroidManifest.xml
+++ b/common_base/src/main/AndroidManifest.xml
@@ -9,8 +9,9 @@
-
+
+
diff --git a/common_base/src/main/java/com/wss/common/base/BaseFragment.java b/common_base/src/main/java/com/wss/common/base/BaseFragment.java
index 745f750..cbb55b4 100644
--- a/common_base/src/main/java/com/wss/common/base/BaseFragment.java
+++ b/common_base/src/main/java/com/wss/common/base/BaseFragment.java
@@ -34,6 +34,7 @@ public abstract class BaseFragment extends Fragment {
private Unbinder unBinder;
protected Context mContext;
protected LoadingDialog loadingDialog;
+ protected HorizontalTabTitle tabTitle;
@Override
@@ -118,7 +119,7 @@ protected void onPageClick() {
* 给Fragment设置数据
*/
public void setFragmentData(HorizontalTabTitle data) {
-
+ this.tabTitle = data;
}
/**
diff --git a/common_base/src/main/java/com/wss/common/bean/Template.java b/common_base/src/main/java/com/wss/common/bean/Template.java
index 28eaad8..7a25167 100644
--- a/common_base/src/main/java/com/wss/common/bean/Template.java
+++ b/common_base/src/main/java/com/wss/common/bean/Template.java
@@ -1,6 +1,7 @@
package com.wss.common.bean;
-import com.wss.common.base.BaseActivity;
+import android.app.Activity;
+
import com.wss.common.base.bean.BaseBean;
import java.util.Map;
@@ -32,11 +33,11 @@ public Template(String title, int res, String url, int type, String describe) {
this.describe = describe;
}
- public Template(String title, int res, Class extends BaseActivity> clazz) {
+ public Template(String title, int res, Class extends Activity> clazz) {
this(title, res, clazz, "");
}
- public Template(String title, int res, Class extends BaseActivity> clazz, String describe) {
+ public Template(String title, int res, Class extends Activity> clazz, String describe) {
this.title = title;
this.res = res;
this.clazz = clazz;
diff --git a/common_base/src/main/java/com/wss/common/manage/UpdateManager.java b/common_base/src/main/java/com/wss/common/manage/UpdateManager.java
index 45ae0b5..59cc479 100644
--- a/common_base/src/main/java/com/wss/common/manage/UpdateManager.java
+++ b/common_base/src/main/java/com/wss/common/manage/UpdateManager.java
@@ -63,7 +63,7 @@ public static synchronized UpdateManager getInstance(Context context) {
*/
public void download(String url) {
if (TextUtils.isEmpty(url)) {
- ToastUtils.showToast(mContext, "请设置下载Url");
+ ToastUtils.show(mContext, "请设置下载Url");
return;
}
progressDialog.show();
@@ -107,16 +107,16 @@ public void handleMessage(Message msg) {
break;
case DOWNLOAD_SUCCESS:
progressDialog.dismiss();
- ToastUtils.showToast(mContext, "下载完成");
+ ToastUtils.show(mContext, "下载完成");
installApk();
break;
case DOWNLOAD_FAILED:
progressDialog.dismiss();
- ToastUtils.showToast(mContext, "下载失败");
+ ToastUtils.show(mContext, "下载失败");
break;
case DOWNLOAD_CANCEL:
progressDialog.dismiss();
- ToastUtils.showToast(mContext, "已取消下载");
+ ToastUtils.show(mContext, "已取消下载");
break;
default:
break;
diff --git a/common_base/src/main/java/com/wss/common/utils/PermissionsUtils.java b/common_base/src/main/java/com/wss/common/utils/PermissionsUtils.java
index b53bc02..565412a 100644
--- a/common_base/src/main/java/com/wss/common/utils/PermissionsUtils.java
+++ b/common_base/src/main/java/com/wss/common/utils/PermissionsUtils.java
@@ -1,14 +1,17 @@
package com.wss.common.utils;
import android.app.Activity;
-import android.content.pm.PackageManager;
-import android.os.Build;
-import android.support.v4.app.ActivityCompat;
-import android.support.v4.content.ContextCompat;
-import java.util.ArrayList;
+import com.hjq.permissions.OnPermission;
+import com.hjq.permissions.Permission;
+import com.hjq.permissions.XXPermissions;
+
import java.util.List;
+import io.reactivex.Observable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
/**
* Describe:6.0动态权限管理帮助类
* Created by 吴天强 on 2018/10/25.
@@ -16,47 +19,93 @@
public class PermissionsUtils {
-
/**
- * 判断权限
+ * 授权所有权限
*
- * @param context context
- * @param permissions 权限列表
+ * @param activity activity
*/
- public static boolean checkPermissions(Activity context, String... permissions) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- List permissionsList = new ArrayList<>();
- if (permissions != null && permissions.length != 0) {
- for (String permission : permissions) {
- if (!isHavePermissions(context, permission)) {
- permissionsList.add(permission);
+ public static void authorizationAllPermissions(Activity activity) {
+ XXPermissions.with(activity)
+ .request(new OnPermission() {
+ @Override
+ public void hasPermission(List granted, boolean isAll) {
+ }
+
+ @Override
+ public void noPermission(List denied, boolean quick) {
+ }
+ });
+ }
+
+ /**
+ * 检查相机权限
+ */
+ public static Observable checkPermissions(Activity activity, String... permissions) {
+ return Observable.create(
+ subscriber -> {
+ if (XXPermissions.isHasPermission(activity, permissions)) {
+ subscriber.onNext(true);
+ } else {
+ XXPermissions.with(activity)
+ .permission(permissions)
+ .request(new OnPermission() {
+ @Override
+ public void hasPermission(List granted, boolean isAll) {
+ subscriber.onNext(true);
+ }
+
+ @Override
+ public void noPermission(List denied, boolean quick) {
+ subscriber.onNext(false);
+ ToastUtils.show(activity, "您必须授权必要权限才可使用该功能!");
+ }
+ });
}
- }
- if (permissionsList.size() > 0) {
- // 遍历完后申请
- applyPermissions(context, permissionsList);
- return false;
- }
- }
- }
- return true;
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread());
}
+
/**
- * 检查是否授权某权限
+ * 检查相机权限
*/
- private static boolean isHavePermissions(Activity context, String permissions) {
- return ContextCompat.checkSelfPermission(context, permissions) == PackageManager.PERMISSION_GRANTED;
+ public static Observable checkCamera(Activity activity) {
+ return checkPermissions(activity, Permission.CAMERA);
}
/**
- * 申请权限
+ * 检查相机、文件读写权限
+ *
+ * @param activity activity
+ * @return boolean
+ */
+ public static Observable checkCameraAndStorage(Activity activity) {
+ String[] storage = {
+ Permission.READ_EXTERNAL_STORAGE,
+ Permission.WRITE_EXTERNAL_STORAGE,
+ Permission.CAMERA};
+ return checkPermissions(activity, storage);
+ }
+
+
+ /**
+ * 检查录音相关权限
+ */
+ public static Observable checkRecord(Activity activity) {
+ String[] storage = {
+ Permission.READ_EXTERNAL_STORAGE,
+ Permission.WRITE_EXTERNAL_STORAGE,
+ Permission.RECORD_AUDIO};
+ return checkPermissions(activity, storage);
+ }
+
+ /**
+ * 检查拨打电话相关权限
*/
- private static void applyPermissions(Activity context, List permissions) {
- if (!permissions.isEmpty()) {
- ActivityCompat.requestPermissions(context, permissions.toArray(new String[permissions.size()]), 1);
- }
+ public static Observable checkCallPhone(Activity activity) {
+ return checkPermissions(activity, Permission.CALL_PHONE);
}
diff --git a/common_base/src/main/java/com/wss/common/utils/StringUtils.java b/common_base/src/main/java/com/wss/common/utils/StringUtils.java
deleted file mode 100644
index 55a80df..0000000
--- a/common_base/src/main/java/com/wss/common/utils/StringUtils.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.wss.common.utils;
-
-/**
- * Describe:字符串工具类
- * Created by 吴天强 on 2018/10/17.
- */
-
-public class StringUtils {
-
-
-}
diff --git a/common_base/src/main/java/com/wss/common/utils/ToastUtils.java b/common_base/src/main/java/com/wss/common/utils/ToastUtils.java
index bf07c16..109f3f5 100644
--- a/common_base/src/main/java/com/wss/common/utils/ToastUtils.java
+++ b/common_base/src/main/java/com/wss/common/utils/ToastUtils.java
@@ -1,8 +1,12 @@
package com.wss.common.utils;
import android.content.Context;
+import android.view.View;
+import android.widget.TextView;
import android.widget.Toast;
+import com.wss.common.base.R;
+
/**
* Describe:Toast
@@ -11,12 +15,12 @@
public class ToastUtils {
- public static void showToast(Context context, int strings) {
- showToast(context, context.getString(strings));
+ public static void show(Context context, int strings) {
+ show(context, context.getString(strings));
}
- public static void showToast(Context context, String text) {
-// showToast(context, title, Gravity.BOTTOM);
+ public static void show(Context context, String text) {
+// show(context, title, Gravity.BOTTOM);
Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
}
@@ -27,14 +31,14 @@ public static void showToast(Context context, String text) {
* @param gravity 弹出位置
*/
- public static void showToast(Context context, CharSequence s, int gravity) {
-// Toast toast = new Toast(context);
-// View toastView = View.inflate(context, R.layout.toast, null);
-// toast.setView(toastView);
-// toast.setDuration(Toast.LENGTH_SHORT);
-// TextView textView = toastView.findViewById(R.id.tv_message);
-// textView.setText(s);
-// toast.setGravity(gravity, 0, 100);
-// toast.show();
+ public static void show(Context context, CharSequence s, int gravity) {
+ Toast toast = new Toast(context);
+ View toastView = View.inflate(context, R.layout.toast, null);
+ toast.setView(toastView);
+ toast.setDuration(Toast.LENGTH_SHORT);
+ TextView textView = toastView.findViewById(R.id.tv_message);
+ textView.setText(s);
+ toast.setGravity(gravity, 0, 100);
+ toast.show();
}
}
diff --git a/common_base/src/main/java/com/wss/common/widget/pulltorefresh/PullToRefreshLayout.java b/common_base/src/main/java/com/wss/common/widget/pulltorefresh/PullToRefreshLayout.java
index 079311b..7f04698 100644
--- a/common_base/src/main/java/com/wss/common/widget/pulltorefresh/PullToRefreshLayout.java
+++ b/common_base/src/main/java/com/wss/common/widget/pulltorefresh/PullToRefreshLayout.java
@@ -75,7 +75,7 @@ public PullToRefreshLayout(Context context, AttributeSet attrs, int defStyleAttr
init();
}
- private void cal() {
+ private void init() {
head_height = PxUtils.dp2px(getContext(), HEAD_HEIGHT);
foot_height = PxUtils.dp2px(getContext(), FOOT_HEIGHT);
head_height_2 = PxUtils.dp2px(getContext(), HEAD_HEIGHT * 2);
@@ -84,15 +84,6 @@ private void cal() {
mTouchSlope = ViewConfiguration.get(getContext()).getScaledTouchSlop();
}
- private void init() {
- cal();
- int count = getChildCount();
- if (count != 1) {
- new IllegalArgumentException("child only can be one");
- }
-
- }
-
@Override
protected void onFinishInflate() {
super.onFinishInflate();
@@ -110,6 +101,7 @@ protected void onAttachedToWindow() {
private void addHeadView() {
if (mHeaderView == null) {
mHeaderView = new RefreshView(getContext());
+ mHeaderView.setType(true);
} else {
removeView(mHeaderView.getView());
}
diff --git a/common_base/src/main/java/com/wss/common/widget/scaleImg/ImageViewer.java b/common_base/src/main/java/com/wss/common/widget/scaleImg/ImageViewer.java
index a36b162..875225f 100644
--- a/common_base/src/main/java/com/wss/common/widget/scaleImg/ImageViewer.java
+++ b/common_base/src/main/java/com/wss/common/widget/scaleImg/ImageViewer.java
@@ -1,6 +1,5 @@
package com.wss.common.widget.scaleImg;
-import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
@@ -17,6 +16,7 @@
import com.bumptech.glide.request.target.Target;
import com.davemorrissey.labs.subscaleview.ImageSource;
import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView;
+import com.hjq.permissions.Permission;
import com.orhanobut.logger.Logger;
import com.wss.common.base.R;
import com.wss.common.utils.PermissionsUtils;
@@ -43,21 +43,18 @@ public class ImageViewer {
private Activity mActivity;
//图片下载器
- private ImageDownloader mImageDownloader = new ImageDownloader() {
- @Override
- public File downLoad(String url, Activity activity) {
- File file = null;
- try {
- file = Glide.with(activity)
- .load(url)
- .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
- .get();
- } catch (InterruptedException | ExecutionException e) {
- e.printStackTrace();
- Logger.e("下载图片异常" + e.getMessage());
- }
- return file;
+ private ImageDownloader mImageDownloader = (url, activity) -> {
+ File file = null;
+ try {
+ file = Glide.with(activity)
+ .load(url)
+ .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL)
+ .get();
+ } catch (InterruptedException | ExecutionException e) {
+ e.printStackTrace();
+ Logger.e("下载图片异常" + e.getMessage());
}
+ return file;
};
private List mUrls = new ArrayList<>();
@@ -207,16 +204,19 @@ public void onClick(View v) {
imDownload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- if (PermissionsUtils.checkPermissions(mActivity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
- try {
- MediaStore.Images.Media.insertImage(mActivity.getContentResolver(),
- mDownloadFiles.get(mSelectedPosition).getAbsolutePath(),
- mDownloadFiles.get(mSelectedPosition).getName(), null);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
+
+ PermissionsUtils.checkPermissions(mActivity, Permission.WRITE_EXTERNAL_STORAGE).subscribe(r -> {
+ if (r) {
+ try {
+ MediaStore.Images.Media.insertImage(mActivity.getContentResolver(),
+ mDownloadFiles.get(mSelectedPosition).getAbsolutePath(),
+ mDownloadFiles.get(mSelectedPosition).getName(), null);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ }
+ ToastUtils.show(mActivity, "图片保存成功");
}
- ToastUtils.showToast(mActivity, "图片保存成功");
- }
+ });
}
});
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
diff --git a/common_base/src/main/res/drawable-xhdpi/ic_back.png b/common_base/src/main/res/drawable-xhdpi/ic_back.png
new file mode 100644
index 0000000000000000000000000000000000000000..e395a62989c6957e4ff4deeba44e2949e6137ef1
GIT binary patch
literal 612
zcmV-q0-ODbP)Px%9!W$&R9Fe^m`y~bVHC%E`ICsMRteC9oHgduDF4%2(weQU(Vg^~msD6>7DN
zNCg~;8T}r>y85UGL_kh*2~q6)QIMx+|f#EgCo4OaQ897Jm19Hg!o>Q$ju%ZL=i
zrI^t#pw=p1or6qgNY0Ht>QKu7gg(QmGmF;^z0vXvbrwREa2ywO?GC=GgDnFPDu+Xm
zdSGa=JVTv@P$}$#)DuIiI@mG*A@{D{6+^oF8{BSrhB^zOLf8Q*_Ytd09c&qZP(Eyl
zA>B##TArcKLMRtDAzc0HV9Nl^a$r4d$UJCyhB^zOELimJ;k(9d
z7W>5&tSpO@OgdIbxg6NU$~WO=fnyGj&?AP30>;x~0&Jp5H+T-Ku`&FL*ArQ?@IJ`b
N44$rjF6*2UngFd;WQ70#
literal 0
HcmV?d00001
diff --git a/common_base/src/main/res/drawable-xhdpi/input_add_disabled.png b/common_base/src/main/res/drawable-xhdpi/input_add_disabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..dd67fb78726ad071302d627feedfec651b3b2133
GIT binary patch
literal 266
zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|j(EB_hIsHM
zrzi-;?5m0Vd49gVwZo~%hzOgK($e=ri>G!)^C$+hSlPO3ip?xOX
z7KU?eoevjvZey6v*mA^OS3$&yXR)J;L5GB+rO1@R4v*V>4wv67RFh-5#J(VBjfk-D
zWq*aZqZR-D{JiZTx`^(5jGi8E=St94K$=1vR*HICC$sr>sZs&@XXO9
z>tKeA01smmSBIbLf=#SxQby8hZQW`|n?fC&-!&Ml5ICHwu*-tssgPCrR-yNSK>sj!
My85}Sb4q9e02_r|XaE2J
literal 0
HcmV?d00001
diff --git a/common_base/src/main/res/drawable-xhdpi/input_minus_default.png b/common_base/src/main/res/drawable-xhdpi/input_minus_default.png
new file mode 100644
index 0000000000000000000000000000000000000000..753174d19826c0d7c6749de11e4ec7d23aacbe3c
GIT binary patch
literal 138
zcmeAS@N?(olHy`uVBq!ia0vp^5+KaN3?zjj6;1;w#^NA%Cx&(BWL^R}`~f~8u0UEv
zMNLIT9f*{b)x3?8=L3aUN`m}?8CpO8TtC;{9LSgSba4!kxSX6IQK0aKiM@?Si=$6?
d)tLuO3`-|-Jb#pFv>vF4!PC{xWt~$(699h5A>;r6
literal 0
HcmV?d00001
diff --git a/common_base/src/main/res/drawable-xhdpi/input_minus_disabled.png b/common_base/src/main/res/drawable-xhdpi/input_minus_disabled.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b18444686adf7a37b88d29d3e3edca7e580f679
GIT binary patch
literal 155
zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|LOop^Lp*qs
z6C_v{D;h{KIoq>HoS$!h|I~>S5ug75uQ$u8V$XP{zhI_qkGNjU51y0{0hbGAL^^oy
zGhpPM&$5YE%|ln}RkP<6qx>s#E(%ESHYUn4F}!h
+ android:layout_height="match_parent" />
diff --git a/config.gradle b/config.gradle
index 4e383d8..9233239 100644
--- a/config.gradle
+++ b/config.gradle
@@ -23,6 +23,7 @@ ext {
espressoVersion : "3.0.1",
junitVersion : "4.12",
annotationsVersion : "24.0.0",
+ javaSDKVersion : 1.8,//javaSDK版本
multidexVersion : "1.0.2",
butterknifeVersion : "8.4.0",
@@ -34,7 +35,6 @@ ext {
loggerVersion : "2.2.0",
fastjsonVersion : "1.1.54",
immersionbarVersion : "2.3.2-beta05",
-// picassoVersion : "2.71828",
glideVersion : "4.8.0",
bannerVersion : "2.1.4",
javaxVersion : "1.2",
@@ -43,6 +43,10 @@ ext {
pickerViewVersion : "4.1.6",
superAdapterVersion : "3.6.8",
scaleImageViewVersion : "3.10.0",
+ zxingViewVersion : "1.3",
+ xxpermissionsVersion : "5.5",
+ rx2JavaVersion : "2.1.5",
+ rx2AndroidVersion : "2.0.1",
]
dependencies = [
@@ -105,7 +109,17 @@ ext {
"superAdapter" : "org.byteam.superadapter:superadapter:${versions["superAdapterVersion"]}",
//展示大图+手势滑动
- "scaleImageView" : "com.davemorrissey.labs:subsampling-scale-image-view:${versions["scaleImageViewVersion"]}"
+ "scaleImageView" : "com.davemorrissey.labs:subsampling-scale-image-view:${versions["scaleImageViewVersion"]}",
+
+ //二维码扫描
+ "zxing" : "com.github.0xZhangKe:QRCodeView:${versions["zxingViewVersion"]}",
+
+ //危险权限库
+ "xxpermissions" : "com.hjq:xxpermissions:${versions["xxpermissionsVersion"]}",
+
+ //RX家族
+ "rx2_java" : "io.reactivex.rxjava2:rxjava:${versions["rx2JavaVersion"]}",
+ "rx2_android" : "io.reactivex.rxjava2:rxandroid:${versions["rx2AndroidVersion"]}",
// //图片缩放
// "photoview" : "com.github.chrisbanes.photoview:library:1.2.4",
diff --git a/module_main/build.gradle b/module_main/build.gradle
index 2f3638f..32f5c9e 100644
--- a/module_main/build.gradle
+++ b/module_main/build.gradle
@@ -50,13 +50,16 @@ android {
}
}
}
+ compileOptions {
+ targetCompatibility rootProject.ext.versions.javaSDKVersion
+ sourceCompatibility rootProject.ext.versions.javaSDKVersion
+ }
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//公用依赖包
implementation project(':common_base')
-
//Arouter路由
annotationProcessor rootProject.ext.dependencies["arouter_compiler"]
//黄油刀
diff --git a/module_main/src/main/AndroidManifest.xml b/module_main/src/main/AndroidManifest.xml
index 045e9df..8d81011 100644
--- a/module_main/src/main/AndroidManifest.xml
+++ b/module_main/src/main/AndroidManifest.xml
@@ -29,5 +29,12 @@
+
+
+
diff --git a/module_main/src/main/java/com/wss/module/main/ui/hortab/fragment/OrderFragment.java b/module_main/src/main/java/com/wss/module/main/ui/hortab/fragment/OrderFragment.java
index 9818571..4397b6a 100644
--- a/module_main/src/main/java/com/wss/module/main/ui/hortab/fragment/OrderFragment.java
+++ b/module_main/src/main/java/com/wss/module/main/ui/hortab/fragment/OrderFragment.java
@@ -69,7 +69,7 @@ public void onError(Object tag, String errorMsg) {
if (page == 0) {
showErrorView();
} else {
- ToastUtils.showToast(mContext, errorMsg);
+ ToastUtils.show(mContext, errorMsg);
}
}
@@ -79,7 +79,7 @@ public void onEmpty(Object tag) {
if (page == 0) {
showEmptyView();
} else {
- ToastUtils.showToast(mContext, "暂无更多数据");
+ ToastUtils.show(mContext, "暂无更多数据");
}
}
diff --git a/module_main/src/main/java/com/wss/module/main/ui/loading/LoadingActivity.java b/module_main/src/main/java/com/wss/module/main/ui/loading/LoadingActivity.java
index 2b3e9e1..cf2a6a4 100644
--- a/module_main/src/main/java/com/wss/module/main/ui/loading/LoadingActivity.java
+++ b/module_main/src/main/java/com/wss/module/main/ui/loading/LoadingActivity.java
@@ -19,7 +19,7 @@
public class LoadingActivity extends BaseActivity {
- private long loadingTime = 1500;
+ private long loadingTime = 1000;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
diff --git a/module_main/src/main/java/com/wss/module/main/ui/main/MainActivity.java b/module_main/src/main/java/com/wss/module/main/ui/main/MainActivity.java
index 41bce46..da370e1 100644
--- a/module_main/src/main/java/com/wss/module/main/ui/main/MainActivity.java
+++ b/module_main/src/main/java/com/wss/module/main/ui/main/MainActivity.java
@@ -1,6 +1,5 @@
package com.wss.module.main.ui.main;
-import android.Manifest;
import android.support.annotation.IdRes;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
@@ -8,6 +7,7 @@
import android.view.KeyEvent;
import android.widget.RadioGroup;
+import com.hjq.permissions.Permission;
import com.wss.common.base.ActionBarActivity;
import com.wss.common.base.BaseApplication;
import com.wss.common.base.BaseFragment;
@@ -84,9 +84,11 @@ public void onCheckedChanged(RadioGroup group, @IdRes int checkedId) {
}
}); //检查文件权限
- if (PermissionsUtils.checkPermissions(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
- presenter.checkUpdate();
- }
+ PermissionsUtils.checkPermissions(this, Permission.WRITE_EXTERNAL_STORAGE).subscribe(r -> {
+ if (r) {
+ presenter.checkUpdate();
+ }
+ });
presenter.getTabList();
}
@@ -136,7 +138,7 @@ private void hideFragment() {
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if ((System.currentTimeMillis() - mExitTime) > 2000) {
- ToastUtils.showToast(mContext, getString(R.string.main_exit_app));
+ ToastUtils.show(mContext, getString(R.string.main_exit_app));
mExitTime = System.currentTimeMillis();
} else {
BaseApplication.getApplication().exitApp();
diff --git a/module_main/src/main/java/com/wss/module/main/ui/main/mvp/MainPresenter.java b/module_main/src/main/java/com/wss/module/main/ui/main/mvp/MainPresenter.java
index 074bc25..1dfb044 100644
--- a/module_main/src/main/java/com/wss/module/main/ui/main/mvp/MainPresenter.java
+++ b/module_main/src/main/java/com/wss/module/main/ui/main/mvp/MainPresenter.java
@@ -15,6 +15,7 @@
import com.wss.module.main.ui.page.FlowLayoutActivity;
import com.wss.module.main.ui.page.MultipleItemActivity;
import com.wss.module.main.ui.page.ObserverButtonActivity;
+import com.wss.module.main.ui.page.QRCodeActivity;
import com.wss.module.main.ui.page.RadioGroupActivity;
import com.wss.module.main.ui.page.ScaleImageActivity;
import com.wss.module.main.ui.page.YumanmanActivity;
@@ -84,6 +85,8 @@ public void getTabList() {
list.add(new Template("图片查看器", R.drawable.main_icon_18, ScaleImageActivity.class, "大图查看器、支持下载、删除、缩放等操作"));
list.add(new Template("于慢慢计算器", R.drawable.main_icon_19, YumanmanActivity.class, "某一个初始值递增某次计算结果"));
list.add(new Template("自定义RadioGroup", R.drawable.main_icon_20, RadioGroupActivity.class, "自定义RadioGroup"));
+ list.add(new Template("扫描二维码", R.drawable.main_icon_21, QRCodeActivity.class, "扫描二维码"));
+
getView().tabList(list);
}
}
diff --git a/module_main/src/main/java/com/wss/module/main/ui/page/DialogActivity.java b/module_main/src/main/java/com/wss/module/main/ui/page/DialogActivity.java
index 07ae005..beb7b01 100644
--- a/module_main/src/main/java/com/wss/module/main/ui/page/DialogActivity.java
+++ b/module_main/src/main/java/com/wss/module/main/ui/page/DialogActivity.java
@@ -1,17 +1,18 @@
package com.wss.module.main.ui.page;
-import android.Manifest;
import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.view.View;
+import com.hjq.permissions.Permission;
import com.wss.common.base.ActionBarActivity;
import com.wss.common.base.mvp.BasePresenter;
import com.wss.common.utils.PermissionsUtils;
import com.wss.common.utils.ToastUtils;
import com.wss.common.widget.NumberProgressBar;
import com.wss.common.widget.dialog.AppDialog;
+import com.wss.common.widget.dialog.AppDialog.OnButtonClickListener;
import com.wss.common.widget.dialog.DialogType;
import com.wss.module.main.R;
import com.wss.module.main.R2;
@@ -47,7 +48,7 @@ protected int getLayoutId() {
@Override
protected void initView() {
setTitleText("对话框");
- PermissionsUtils.checkPermissions(this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ PermissionsUtils.checkPermissions(this, Permission.WRITE_EXTERNAL_STORAGE).subscribe();
}
/**
@@ -64,22 +65,17 @@ public void onBtnClick(View view) {
} else if (view.getId() == R.id.btn_02) {
new AppDialog(mContext, DialogType.INPUT)
.setTitle("来一段文字")
- .setLeftButton("输好了", new AppDialog.OnButtonClickListener() {
- @Override
- public void onClick(String val) {
- ToastUtils.showToast(mContext, val);
- }
- })
+ .setLeftButton("输好了", val -> ToastUtils.show(mContext, val))
.setRightButton("不输了")
.show();
} else if (view.getId() == R.id.btn_03) {
new AppDialog(mContext, DialogType.COUNT)
.setTitle("修改数量")
.setNumber(1, 10, 2)
- .setLeftButton("OK", new AppDialog.OnButtonClickListener() {
+ .setLeftButton("OK", new OnButtonClickListener() {
@Override
public void onClick(String val) {
- ToastUtils.showToast(mContext, val);
+ ToastUtils.show(mContext, val);
}
})
.setLeftButtonTextColor(R.color.red)
@@ -103,28 +99,21 @@ public void onClick(String val) {
list.add("相册");
new AppDialog(mContext, DialogType.BOTTOM_IN)
.setTitle("多条目")
- .setBottomItems(list, new AppDialog.OnItemClickListener() {
- @Override
- public void onItemClick(int position) {
- ToastUtils.showToast(mContext, list.get(position));
- }
- })
+ .setBottomItems(list, position -> ToastUtils.show(mContext, list.get(position)))
.setBottomCancelText("再见")
.show();
} else if (view.getId() == R.id.btn_07) {
-// View progressView = View.inflate(mContext, R.layout.update_progress_layout, null);
-// progressBar = progressView.findViewById(R.id.number_progress);
-// progressDialog = new AppDialog(mContext);
-// mProgress = 0;
-// progressBar.setProgress(mProgress);
-//
-// progressDialog.setTitle("更新")
-// .addDialogView(progressView)
-// .show();
-// update();
-
-
+ View progressView = View.inflate(mContext, R.layout.update_progress_layout, null);
+ progressBar = progressView.findViewById(R.id.number_progress);
+ progressDialog = new AppDialog(mContext);
+ mProgress = 0;
+ progressBar.setProgress(mProgress);
+
+ progressDialog.setTitle("更新")
+ .addDialogView(progressView)
+ .show();
+ update();
}
}
@@ -150,7 +139,7 @@ public void handleMessage(Message msg) {
int progress = (int) msg.obj;
progressBar.setProgress(progress);
if (progress >= mMaxProgress) {
- ToastUtils.showToast(mContext, "下载完成");
+ ToastUtils.show(mContext, "下载完成");
progressDialog.dismiss();
} else {
update();
diff --git a/module_main/src/main/java/com/wss/module/main/ui/page/ObserverButtonActivity.java b/module_main/src/main/java/com/wss/module/main/ui/page/ObserverButtonActivity.java
index bffc410..0f672d2 100644
--- a/module_main/src/main/java/com/wss/module/main/ui/page/ObserverButtonActivity.java
+++ b/module_main/src/main/java/com/wss/module/main/ui/page/ObserverButtonActivity.java
@@ -53,7 +53,7 @@ protected void initView() {
@OnClick(R2.id.ob_btn)
public void onClick(View v) {
- ToastUtils.showToast(mContext, "可点击");
+ ToastUtils.show(mContext, "可点击");
}
diff --git a/module_main/src/main/java/com/wss/module/main/ui/page/QRCodeActivity.java b/module_main/src/main/java/com/wss/module/main/ui/page/QRCodeActivity.java
new file mode 100644
index 0000000..c15704b
--- /dev/null
+++ b/module_main/src/main/java/com/wss/module/main/ui/page/QRCodeActivity.java
@@ -0,0 +1,64 @@
+package com.wss.module.main.ui.page;
+
+import com.wss.common.base.ActionBarActivity;
+import com.wss.common.base.mvp.BasePresenter;
+import com.wss.common.utils.PermissionsUtils;
+import com.wss.common.utils.ToastUtils;
+import com.wss.module.main.R;
+import com.wss.module.main.R2;
+import com.zhangke.qrcodeview.QRCodeView;
+
+import butterknife.BindView;
+
+/**
+ * Describe:二维码扫描页面
+ * Created by 吴天强 on 2019/3/20.
+ */
+
+public class QRCodeActivity extends ActionBarActivity {
+
+
+ @BindView(R2.id.qr_code_view)
+ QRCodeView qrCodeView;
+
+ @Override
+ protected BasePresenter createPresenter() {
+ return null;
+ }
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.main_activity_qr_code;
+ }
+
+ @Override
+ protected void initView() {
+
+ setTitleText("二维码扫描");
+ PermissionsUtils.checkCamera(this).subscribe(r -> {
+ if (r) {
+ qrCodeView.startPreview();
+ qrCodeView.setOnQRCodeListener(result -> {
+ ToastUtils.show(mContext, result.getText());
+ finish();
+ });
+ } else {
+ finish();
+ }
+ });
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ qrCodeView.stopPreview();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+
+ }
+
+
+}
diff --git a/module_main/src/main/java/com/wss/module/main/ui/page/YumanmanActivity.java b/module_main/src/main/java/com/wss/module/main/ui/page/YumanmanActivity.java
index 69fb72d..0716d8c 100644
--- a/module_main/src/main/java/com/wss/module/main/ui/page/YumanmanActivity.java
+++ b/module_main/src/main/java/com/wss/module/main/ui/page/YumanmanActivity.java
@@ -83,7 +83,7 @@ public void addValue(View v) {
} else {
ClipboardManager cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
cm.setPrimaryClip(ClipData.newPlainText(null, ((TextView) v).getText()));
- ToastUtils.showToast(mContext, "结果已复制到粘贴板");
+ ToastUtils.show(mContext, "结果已复制到粘贴板");
}
}
diff --git a/module_main/src/main/java/com/wss/module/main/ui/selector/SelectorActivity.java b/module_main/src/main/java/com/wss/module/main/ui/selector/SelectorActivity.java
index 4253e0c..ba29531 100644
--- a/module_main/src/main/java/com/wss/module/main/ui/selector/SelectorActivity.java
+++ b/module_main/src/main/java/com/wss/module/main/ui/selector/SelectorActivity.java
@@ -100,7 +100,7 @@ private void showLunarPicker() {
lunarPicker = new TimePickerBuilder(this, new OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {//选中事件回调
- ToastUtils.showToast(mContext, getTime(date));
+ ToastUtils.show(mContext, getTime(date));
}
})
.setDate(selectedDate)
@@ -169,7 +169,7 @@ public void onTimeSelect(Date date, View v) {//选中事件回调
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
selectDate = calendar;
- ToastUtils.showToast(mContext, getTime(date));
+ ToastUtils.show(mContext, getTime(date));
}
}).build();
//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,
@@ -191,7 +191,7 @@ public void onOptionsSelect(int options1, int options2, int options3, View v) {
String tx = options1Items.get(options1).getPickerViewText() +
options2Items.get(options1).get(options2) +
options3Items.get(options1).get(options2).get(options3);
- ToastUtils.showToast(mContext, tx);
+ ToastUtils.show(mContext, tx);
}
})
@@ -215,7 +215,7 @@ private void showUserList() {//条件选择器初始化,自定义布局
@Override
public void onOptionsSelect(int options1, int option2, int options3, View v) {
//返回的分别是三个级别的选中位置
- ToastUtils.showToast(mContext, user.get(options1));
+ ToastUtils.show(mContext, user.get(options1));
}
})
.setSelectOptions(2)
@@ -234,7 +234,7 @@ private void showUserInfoList() {
@Override
public void onOptionsSelect(int options1, int options2, int options3, View v) {
String str = user.get(options1) + "来自" + userFrom.get(options2) + "是一个" + userDes.get(options3);
- ToastUtils.showToast(mContext, str);
+ ToastUtils.show(mContext, str);
}
})
.setOptionsSelectChangeListener(new OnOptionsSelectChangeListener() {
diff --git a/module_main/src/main/res/drawable-xxxhdpi/main_ic_add.png b/module_main/src/main/res/drawable-xxxhdpi/main_ic_add.png
new file mode 100644
index 0000000000000000000000000000000000000000..4d563a82e3fc4b4c3f461d2e90b280c5b72839d0
GIT binary patch
literal 539
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
literal 0
HcmV?d00001
diff --git a/module_main/src/main/res/drawable-xxxhdpi/main_ic_contact.png b/module_main/src/main/res/drawable-xxxhdpi/main_ic_contact.png
new file mode 100644
index 0000000000000000000000000000000000000000..802747bf5065205aeff0c560ddff4c3b50bed713
GIT binary patch
literal 1550
zcmV+p2J!icP)K}0@_$U9Z#zjtX
zrnrO4fc8a1c=)%fN*(rhglBoRsR#L&0=ciMH=9w(Shxka_X$ZOu=}b?eYH9QL>iMv
z34qU3)l&_u?rA>36&wH_l6oy3uW3={HPv0|$UU*(YN!
zn@qN+3&?jvD@7|+t8cN<>dV*Tc36f6<|aMXIv
z3tW7VCi-oH1%TG|+zejR7iGP?R^Xam9RRUv7~pc0)Bu-5$(S?14RD97+|Y43LIHqT
zk9iE)GzoZIv*_LFzo9#
zy!<#Tfq9`tRSEzT2dtXSNB4xL7dR_Ba#vNExpf@?xaRF>(PVZc#I`3KHvv`s9|t$f7Jp
z;((hwGItUj0Cp@f%@q4xt6sh#wW(-?z9OC9109`N_w0|Op6cVvTEg|JhQ=HAbfj7z
zJpH)ofKxkv5x{UGs#`Sp!ZsU+pv%~Wxzq=@8X7IV>O?3ve}vb!>-P}V;4*>H!)FU?
zR^RUmyqxRR4PY_2OkiZdzF#&=yL}ZCew!hf)eqcN0<*ydy+9qd*8TX7#-Ubm=V<3p
zcc28$8*i*fIfsc(w`A({Bdg#-yf|6PrE{?zpTOMf45=Rt){$}X(uXC4M#T3#Bdr0Ov0wI;_!cLV^h<)X}
zh~ZUBT%wA^y}9{gtw6095bHB3K5`&i6O7I37TKu%*El4ShFs($qk>($ma8WW6GFcU
zje})Mcd3>v^=o{;%NTX7A#5ivJbd<{LJFJMypbO0V0N`9{6A_}l&zxMF3w+x)emYBa|B*DyeQF?tfb>8C;
z$MH7?xXQOSzzuMf1S%gJ5;wqA5~zG^NL(ejUkJC%ZHZ;Jg#Z8m07*qoM6N<$f)KIU
ADgXcg
literal 0
HcmV?d00001
diff --git a/module_main/src/main/res/drawable-xxxhdpi/main_ic_payment.png b/module_main/src/main/res/drawable-xxxhdpi/main_ic_payment.png
new file mode 100644
index 0000000000000000000000000000000000000000..7b6b4cc11c6f465078891d2f084f72d63649a0c5
GIT binary patch
literal 15300
zcmeI3U2GIp6o7}+QY=40FaZR0vq1QBc4qc(c8A>s>=s*aYg3ACfdI2JciXYMGwaT@
zyDcyLBp6>b(P%*M1w#y2N=yjiZ)rdcPvCp+*%(4PTY`kPv%{%$EKJJ&^OLpcFDNC881oR48WjEAM&9>L2BUbmz0
zaYkz4T___bgqG;WLO3Xeon3~J78oX*&APH4mzL>dxL`2Iux`ffrr``)?^6viN2~f$
z%Sq8s6zEb$NgIl$I!wP}TZ?KwYEnM$vNsSF4G@9(7@%1{?dDrKR`B=)uV)P#
z5Lnjc#F~lth-tEt=$qh!6QH$koDbVf)Ca5|Sv15cd9ly6`H>|dp=DB{5m8cNCt%WQ
zXNV~e+GdurN~qJ4S_Uo)L_8s;(y+}cpJ_s)svDvzfyQVA4!9IW7WhCQ5nux>9S?8`
zn)iC$w8(h@?U#7gABej_ob%-$tB!39h4>)MHi)bZs>jS(Bjq^0NGVz#H)Td72N#
zd79%ufDX9hK|1L5`*_Zs@OV6lVj!Ed34vb9D6sE|N!uKAFER`!`=q#s6TP$;kXf1+
zy*@hbV*wrab8Zjo6Md53N(i`@3T`HZYEX2Tt$nsEhPj;YY+Jyq<422%q>}GYX)&V%
zv;M-)VgZ&~TB&21Hu*XhM9J)J5y>nMAcvT7qvd6lEDL7J#N(VA0?WV6eDWCCE}-Jd
z%W{>UHMtXAOBh)(12%NR44F#hTVBVTq3%PB`CpJ!{)2ybv~0OmRg8$c5Dgi&S(*Q!R(sz9AND}R@AG+J7e9i_F>)ZCw!n_gDNT-c1&hyQxpuXqq04gJAfL9_%H0t7D-TzEc+
zmf%8w;6;K9&j-;GTnG@nNO0l#AX4T@FKy5=YwboE(8c(B)IT=
z5G}!l0Ktn`T(#v_IDrb^+swijG>i4ymCfMp6CCDQfQliW(h**WW0rhoz|B
zcT<#bh@uu~Z|(YeBSlSXX^d`Y&HZ@$`ml15om+k7)NpmGT3N<_I3xS(!Peo+^}*ZD
zwQG*7zuLe5(?$E9xv)^at2L@8ha7vWYSh5FH!q)lZIgTX;kO4GHw}KWDg4t>`IVzX
z&km}+^#kFHqfhR5Yx&6F&AB`7ocZqB_3F0HZ9jC496z@6#Jlg`Z3?GPsoS?7xVw7m
zzN;@^yLbK+J^InH@XzmTyzs@WwzJc3Qn}3^C_4{!&$+bW#x|*TNg#dW{JyH1Io8eM
z1+Gh9?z}XxC);<=|I4kzqo*JA*POfc$Kijz(VxifTJd1@(4FeS+>#M;6KNP4tx<;7
z!@Z1~IabwlXn2^d`fE|mi084hOJ*hK%`=uc8&-ZlvYCrt`RwY)3%$d8R?MGSAHIL{
p+f^q9;KCN4`)V3Rjg3`NwQJA(eSc}kdUz64V|`O}@cG^Q{{=9Ex1s<5
literal 0
HcmV?d00001
diff --git a/module_main/src/main/res/drawable-xxxhdpi/main_ic_scan.png b/module_main/src/main/res/drawable-xxxhdpi/main_ic_scan.png
new file mode 100644
index 0000000000000000000000000000000000000000..7be7b6400d67675dd18934c3abb77e76c6a648d3
GIT binary patch
literal 15343
zcmeI3Yitx%6vw9!w3K%UAXvz{1Y!fTGdr`dnQWJoF3?7{G^NtkwA$&+Y&&*$X5E?6
zZ5y;;z!(#VD32&sMIMF-Y9IuK1gxN+P%s)1#Z(BQ0s@*y2r+tRpVQmzO%pJFxtr|c
z-2Xl2-1*&e?#`EavASy6grZqR1VK!wtO(YC?<(_M_yG9axX(5le2tA&H0T5|ZmRh%
zAYR+?5J7O)l-hcuKD3+{wWvdov=-Tsh{nKdg77aTjHf$|&tD=_LZyY^tw<%Jo
zz0Mt?L$PwXO{wUP%PYI9YQ^q$k(2C;0!97=4+2DGL$D>H5mo0CrS@c89{e_kDZ4E>
z#b__JmzfD|^`UB8xfYjgZij~yX^+?D$3E}C~Sw)D#$
zC<4FyaVgB#1ed1M0jt#BW*9M^qB=V}9i6O0i?>ovj^ikrp%{h)Gf2HlHG~AI>T^>;
zGI4^kF2C4?B|bkI~jCrQlu#5&@U
z>wL^Yzt$cZ077Q(3
zt7(xys>-S}2yNx%$*QtFTBoRz)~T2HDcB{q-??aVP%z{Gs7D`3dq~Dx>!f+s&AZqI
zw2!B0OOVt|C`L$=lyKLO7*3vc^NiCP!!i?&0s2Q03}Hl3taB}KB#{qm@u*+~l&H`u
zQ!%yGPvr(JGqY92munF%4wfYcSU;6-*y5F}G`>>R4M7#<%3uHtI21+VeFEoldRUnZ
zODso9tcxZEH|rwZt}w%TS*IijOcG)!WOW}BI;e>qX19RQse?t*L=Zl=tQL=(;arS|
z^l~j8(&?0aq>pLgNY3SPd!0;}W!Z2hktNuWL@VM7IQN8zWsZ3*5=h31jECVs8H5Fi
zB{{E4AUUUpBL$ZzNnsxt@MKfu2{R;Bg`$IM?XpxcsO99zwo-m(@MuPeD9IBlCd75w
z?7vcbrUA1@TK2>;eUg353!-_p1w^wwWXVqr8qF;$>zQ^_hHmG`5TxQ;+=tK6*(R%~
z_DY3H&Kf?5u7!)0@yqeVzNrnbs*TbAs>)F`;=1NWO$_J(sv
zduC6u`}rexMfWo*6bmPTfS^r`3(W^oF)j!Q+Qhifd>|F$f`Fh+j0?>NQZX(F2-?KB
z(0m{j|F$f`Fh+j0?>NQZX(F2-?KB(0m{j|F$f`Fh+
zj0?>NQZX(F2--yAD#|^=DXZYQ%}(%u=68GESq>iVw22ipA%f_hM-aWw6U3c=!1u2N
z(Loc$Z_Nb3ZzqTu+UBQDEhUJ8HI>1#+Qj*5Kb)R0>XFGCgr1!R<8CgVIfq=o@!gZF
z0#y6XDPPZQuH3p!I`I0fwSUjt_Qor_rV5iL_l}-;uBVXqvX|%
zoc*xBl-u(}pL*o_Tjbmuh1(w1Lrnw42kUm6o&D3tSK2pRrF*_sy~}JpAAb3!3`Y
zjX7ZS{y8dk<*RiC6MX|<73q)h^XlpehigmY`gON&j(K+XnJ<4_#9S&mwPyFZO{Z@Z
zubO0;+dKOA$M(a}l=rAzJ<&$4zhb)Yv%7@qD&D*AO6}#J2aa(!3;Xrr*olG%
zGanz0Y58S(q343nbK!&2FH!C1ULKo~%t<}ZHI%cX&$o_$`pvRWw;tX=9xD9fP~py!
zEeA`cMbESy^X|PhXa5|{HDg*+!&B~C+
literal 0
HcmV?d00001
diff --git a/module_main/src/main/res/drawable-xxxhdpi/main_ic_transfer.png b/module_main/src/main/res/drawable-xxxhdpi/main_ic_transfer.png
new file mode 100644
index 0000000000000000000000000000000000000000..db41da596ecf64d6032d3eba4ffbe9a624944f12
GIT binary patch
literal 15538
zcmeI3e{dAl9l#eeF_=U)7wH1vb++vae@*SZK=2lW)p;OQA*|bb)s$w
ziye~ew~i0JVYNtt-`eU9(IK@~j7oLg39-4mv4!tm$9o0qqClxH#R3O$QRghFcudyV
zl;4{6%Yxs=FlDu*r|9ea)+I(jOIv8UrB+FZ7Pqa2
z%1M(BC+nhFm&201tbtPS%a;%$Y*TPqHXM-r)~K$lEJY=gNn6rsQxYAN-Rt#Iw1aXu
zNHBxcHpn`cB4w>A<7C25P}KN@r0S9)TMWNkSn1ULR;v*xcV+h#S95`6Ez1s2q*9zp
z*=;mc$VlLGHfm=gmR_2`Q({bvi?Xf(J9|MpHLB=}7FDJRnNv?27@SEcl#5+(z43U#
z(3-xq3n0iMEoiB=Y*0n2Nz|0i1TQY_0$Zsnw0m8O#K1Szs%iVr(WGpy5V_F
zKLXE2lti4<15%vp5Ghse@KO0e)685}v9(G}Nq}XE0jG~DG;Fd;XBt~CYdR!_7aN6yS|GpaGxnV!!$XmC+><1=e&R>P*N(57ZJY?`-RAxnC|k&Oloo2-m~
z&`f)81~+?RpvDavnva5qVTG#ke3KXc6N=^MSM&7X$DfS^T;3(W`8Vq6dq
zw1{z``9NBX3j%@`F)lP8NQ-enK+qz_h2{fkF)j!QTEw`}d>}2x1pz^e7#Erkq{X-(
zAZQWeLi2&N7#9QtEn-|~K9CmUf`Fh!j0?>N(qdc?5VVMKq4_{sj0*yS7BMa~A4rRF
zK|s(V#)aksX)!Jc2wKFr(0m{*#svXEi%49h`A0ZK89cX{1P^GI#VH$jxYNSdHH8SG
zdjUc8^by1-{{`P45kx0V5Es@G1iO*87QH&8ng9ev!3SoESWFM|A7Ofssd!70><1Up3gXI@T^F-#pXA
zE^RFO&h|_1%(kw%du-rKyCTJ-k^YhsL&fs?(oZYOHbM=m@ZnzxNy%(p5()^3}3x#5~~;X&@u
zh5A2#y