Commit 7e856eaf by sikang

update

parent fcbdd49a
......@@ -71,12 +71,12 @@
android:name="firebase_messaging_auto_init_enabled"
android:value="false" />
<service android:name=".common.service.MsgHandleService">
<service android:name=".service.MsgHandleService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".common.service.MsgInstanceIdService">
<service android:name=".service.MsgInstanceIdService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
......
......@@ -23,7 +23,7 @@ import io.reactivex.Observable;
import io.reactivex.subjects.BehaviorSubject;
import tech.starwin.LibConfig;
import tech.starwin.R;
import tech.starwin.common.service.MsgHandleService;
import tech.starwin.service.MsgHandleService;
import tech.starwin.mvp.IView;
import tech.starwin.utils.PresenterHoler;
import tech.starwin.utils.context_utils.FragmentLauncher;
......
......@@ -11,7 +11,7 @@ import io.reactivex.schedulers.Schedulers;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import tech.starwin.common.impl.HttpObserver;
import tech.starwin.impl.HttpObserver;
import tech.starwin.mvp.IView;
import tech.starwin.network.ServiceGenerator;
......
package tech.starwin.common.impl;
package tech.starwin.impl;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
......
package tech.starwin.common.impl;
package tech.starwin.impl;
import android.view.View;
import tech.starwin.utils.FireBaseHelper;
import tech.starwin.utils.LogUtils;
/**
* Created by SiKang on 2018/10/11.
......
package tech.starwin.common.impl;
package tech.starwin.impl;
import android.view.View;
......@@ -6,7 +6,6 @@ import android.view.View;
* Created by SiKang on 2018/9/18.
*/
public abstract class OnNoShakeClickListener extends OnEventClickListener {
public abstract void onNoShakeClick(View view);
public int lockTime = 1500;
......@@ -27,6 +26,11 @@ public abstract class OnNoShakeClickListener extends OnEventClickListener {
v.setClickable(true);
}
}, lockTime);
onNoShakeClick(v);
onEventClick(v);
}
@Override
public void onEventClick(View v) {
}
}
package tech.starwin.common.impl;
package tech.starwin.impl;
import com.qmuiteam.qmui.widget.QMUITabSegment;
......
......@@ -2,25 +2,18 @@ package tech.starwin.mvp.presenter;
import android.annotation.SuppressLint;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.google.gson.Gson;
import java.io.File;
import java.util.List;
import io.reactivex.Observable;
import io.reactivex.functions.BiFunction;
import okhttp3.MultipartBody;
import okhttp3.ResponseBody;
import tech.starwin.base.BasePresenter;
import tech.starwin.common.impl.HttpObserver;
import tech.starwin.impl.HttpObserver;
import tech.starwin.mvp.api.UploadApi;
import tech.starwin.mvp.api.UserApi;
import tech.starwin.mvp.beans.EmploymentBean;
import tech.starwin.mvp.beans.OcrResultBean;
import tech.starwin.network.ServiceGenerator;
import tech.starwin.utils.LoginManager;
import tech.starwin.utils.MultipartBodyMaker;
......
......@@ -10,7 +10,7 @@ import io.reactivex.functions.Function;
import io.reactivex.functions.Predicate;
import okhttp3.ResponseBody;
import tech.starwin.base.BasePresenter;
import tech.starwin.common.impl.HttpObserver;
import tech.starwin.impl.HttpObserver;
import tech.starwin.mvp.api.UserApi;
import tech.starwin.mvp.beans.EmploymentBean;
import tech.starwin.mvp.beans.GatewayInfoBean;
......
package tech.starwin.common.service;
package tech.starwin.service;
import android.content.Context;
......
package tech.starwin.common.service;
package tech.starwin.service;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;
......
......@@ -21,16 +21,16 @@ public class FireBaseHelper {
public static final String REST_URL = "rest_url";
/**
* click埋点,ITEM_NAME = view.getTag()
* click埋点,CONTENT_TYPE = view.getTag()
*/
public static void LogClickEventByTag(View view) {
if (view.getTag() != null && view.getTag() instanceof String) {
logClickEvent(view.getContext(), (String) view.getTag());
logClickEventByName(view.getContext(), (String) view.getTag());
}
}
/**
* click埋点 ITEM_NAME = view.getText()
* click埋点 CONTENT_TYPE = view.getText()
*/
public static void LogClickEventByText(View view) {
String itemName = "";
......@@ -40,14 +40,14 @@ public class FireBaseHelper {
itemName = ((Button) view).getText().toString();
}
if (!TextUtils.isEmpty(itemName)) {
logClickEvent(view.getContext(), itemName);
logClickEventByName(view.getContext(), itemName);
}
}
/**
* click埋点
*/
public static void logClickEvent(Context context, String itemName) {
public static void logClickEventByName(Context context, String itemName) {
Bundle bundle = new Bundle();
bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "click_" + itemName);
FirebaseAnalytics.getInstance(context).logEvent(FirebaseAnalytics.Event.SELECT_CONTENT, bundle);
......
package tech.starwin.utils.ui_utils;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.annotation.DrawableRes;
import android.support.annotation.StringRes;
import android.support.v4.content.ContextCompat;
import android.view.View;
import com.qmuiteam.qmui.widget.QMUIEmptyView;
import com.qmuiteam.qmui.widget.QMUITabSegment;
import com.qmuiteam.qmui.widget.grouplist.QMUICommonListItemView;
import com.qmuiteam.qmui.widget.grouplist.QMUIGroupListView;
import tech.starwin.utils.BitmapUtils;
import tech.starwin.widget.PageStateLayout;
/**
* Created by SiKang on 2018/10/12.
*/
public class QMUIHelper {
/**
* 为一个View 套一个 EmptyView外壳,用于展示无数据和重试的情况
*
* @param targetView 需要套壳,加入状态显示的View
* @param emptyText 没有数据时的提示文字
* @param retryText 重试按钮的文字
* @param listener 当pageStateLayout.retry() 被执行时的刷新处理
*/
public static PageStateLayout bindEmptyView(View targetView, final String emptyText, final String retryText, PageStateLayout.OnRetryListener listener) {
//创建一个默认的EmptyView
final QMUIEmptyView emptyView = new QMUIEmptyView(targetView.getContext());
emptyView.setBackgroundColor(Color.WHITE);
//给targetView 套壳
final PageStateLayout pageStateLayout = new PageStateLayout.Builder(targetView)
.setCustomView(emptyView)
.setOnRetryListener(listener)
.create();
//不同状态的UI处理
pageStateLayout.setOnStateChangedListener(new PageStateLayout.OnStateChangedListener() {
@Override
public void onLoading(PageStateLayout.ViewHolder holder) {
emptyView.show(true);
}
@Override
public void onError(PageStateLayout.ViewHolder holder) {
}
@Override
public void onEmpty(PageStateLayout.ViewHolder holder) {
emptyView.show(false, emptyText, null, retryText, new View.OnClickListener() {
@Override
public void onClick(View v) {
pageStateLayout.retry();
}
});
}
});
return pageStateLayout;
}
/**
* 创建一个(icon + text)类型的Tab按钮
*/
public static QMUITabSegment.Tab createTab(Context context, @DrawableRes int normalIcon, @DrawableRes int selectIcon, String text) {
return new QMUITabSegment.Tab(
ContextCompat.getDrawable(context, normalIcon),
ContextCompat.getDrawable(context, selectIcon),
text, false
);
}
/**
* 创建一个(icon + text)类型的Tab按钮,并按指定尺寸显示icon
*/
public static QMUITabSegment.Tab createTab(Context context, int iconWidtn, int iconHeight, @DrawableRes int normalIcon, @DrawableRes int selectIcon, String text) {
Bitmap normalBitmap = BitmapFactory.decodeResource(context.getResources(),
normalIcon);
Bitmap selectBitmap = BitmapFactory.decodeResource(context.getResources(),
selectIcon);
Drawable normalDrawble = new BitmapDrawable(BitmapUtils.scaleBitmap(normalBitmap, iconWidtn, iconHeight));
Drawable selectDrawble = new BitmapDrawable(BitmapUtils.scaleBitmap(selectBitmap, iconWidtn, iconHeight));
return new QMUITabSegment.Tab(normalDrawble, selectDrawble, text, false);
}
/**
* 创建一个(text)类型的Tab按钮
*/
public static QMUITabSegment.Tab createTab(String text) {
return new QMUITabSegment.Tab(text);
}
/**
* 创建一个只包含 Text 的item按钮
*/
public static QMUICommonListItemView createItemView(int id, QMUIGroupListView groupListView, @StringRes int titleId) {
return createChevronItemView(id, groupListView, groupListView.getContext().getString(titleId));
}
public static QMUICommonListItemView createItemCiew(int id, QMUIGroupListView groupListView, String title) {
QMUICommonListItemView itemWithChevron = groupListView.createItemView(title);
itemWithChevron.setId(id);
return itemWithChevron;
}
/**
* 创建一个 Text + 右箭头的 item按钮
*/
public static QMUICommonListItemView createChevronItemView(int id, QMUIGroupListView groupListView, @StringRes int titleId) {
return createChevronItemView(id, groupListView, groupListView.getContext().getString(titleId));
}
public static QMUICommonListItemView createChevronItemView(int id, QMUIGroupListView groupListView, String title) {
QMUICommonListItemView itemWithChevron = createItemCiew(id, groupListView, title);
itemWithChevron.setAccessoryType(QMUICommonListItemView.ACCESSORY_TYPE_CHEVRON);
return itemWithChevron;
}
}
......@@ -25,15 +25,12 @@ import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.Toast;
import com.qmuiteam.qmui.widget.QMUITabSegment;
import com.qmuiteam.qmui.widget.grouplist.QMUICommonListItemView;
import com.qmuiteam.qmui.widget.grouplist.QMUIGroupListView;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.schedulers.Schedulers;
import tech.starwin.utils.BitmapUtils;
import tech.starwin.widget.PageStateLayout;
/**
......@@ -179,67 +176,6 @@ public class UIHelper {
return outMetrics.heightPixels;
}
/**
* 创建一个(icon + text)类型的Tab按钮
*/
public static QMUITabSegment.Tab createTab(Context context, @DrawableRes int normalIcon, @DrawableRes int selectIcon, String text) {
return new QMUITabSegment.Tab(
ContextCompat.getDrawable(context, normalIcon),
ContextCompat.getDrawable(context, selectIcon),
text, false
);
}
/**
* 创建一个(icon + text)类型的Tab按钮,并按指定尺寸显示icon
*/
public static QMUITabSegment.Tab createTab(Context context, int iconWidtn, int iconHeight, @DrawableRes int normalIcon, @DrawableRes int selectIcon, String text) {
Bitmap normalBitmap = BitmapFactory.decodeResource(context.getResources(),
normalIcon);
Bitmap selectBitmap = BitmapFactory.decodeResource(context.getResources(),
selectIcon);
Drawable normalDrawble = new BitmapDrawable(BitmapUtils.scaleBitmap(normalBitmap, iconWidtn, iconHeight));
Drawable selectDrawble = new BitmapDrawable(BitmapUtils.scaleBitmap(selectBitmap, iconWidtn, iconHeight));
return new QMUITabSegment.Tab(normalDrawble, selectDrawble, text, false);
}
/**
* 创建一个(text)类型的Tab按钮
*/
public static QMUITabSegment.Tab createTab(String text) {
return new QMUITabSegment.Tab(text);
}
/**
* 创建一个只包含 Text 的item按钮
*/
public static QMUICommonListItemView createItemView(int id, QMUIGroupListView groupListView, @StringRes int titleId) {
return createChevronItemView(id, groupListView, groupListView.getContext().getString(titleId));
}
public static QMUICommonListItemView createItemCiew(int id, QMUIGroupListView groupListView, String title) {
QMUICommonListItemView itemWithChevron = groupListView.createItemView(title);
itemWithChevron.setId(id);
return itemWithChevron;
}
/**
* 创建一个 Text + 右箭头的 item按钮
*/
public static QMUICommonListItemView createChevronItemView(int id, QMUIGroupListView groupListView, @StringRes int titleId) {
return createChevronItemView(id, groupListView, groupListView.getContext().getString(titleId));
}
public static QMUICommonListItemView createChevronItemView(int id, QMUIGroupListView groupListView, String title) {
QMUICommonListItemView itemWithChevron = createItemCiew(id, groupListView, title);
itemWithChevron.setAccessoryType(QMUICommonListItemView.ACCESSORY_TYPE_CHEVRON);
return itemWithChevron;
}
/**
* 模拟返回键
......
......@@ -15,34 +15,50 @@ import tech.starwin.R;
/**
* Created by SiKang on 2018/9/19.
*/
public class LoadDialog extends Dialog {
private ObjectAnimator mLoadAnimation;
public class LoadingDialog extends Dialog {
private ObjectAnimator mRotationAnimation;
private ObjectAnimator mScaleXAnimation;
private ObjectAnimator mScaleYAnimation;
public LoadDialog(@NonNull Context context) {
public LoadingDialog(@NonNull Context context) {
super(context, R.style.style_bg_transparent_dialog);
View view = LayoutInflater.from(context).inflate(R.layout.base_progress_loading, null, false);
setContentView(view);
setCanceledOnTouchOutside(false);
ImageView rotationView = view.findViewById(R.id.progress_dialog_loadingImv);
ImageView iconView = view.findViewById(R.id.progress_dialog_iconImv);
rotationView.setImageResource(LibConfig.LOADING_BACKGROUND);
iconView.setImageResource(LibConfig.LOADING_ICON);
//初始化动画
mLoadAnimation = ObjectAnimator.ofFloat(rotationView, "rotation", 0, 360);
mLoadAnimation.setDuration(1000);
mLoadAnimation.setRepeatCount(Animation.INFINITE);
mRotationAnimation = ObjectAnimator.ofFloat(rotationView, "rotation", 0, 360);
mRotationAnimation.setDuration(1000);
mRotationAnimation.setRepeatCount(Animation.INFINITE);
mScaleXAnimation = ObjectAnimator.ofFloat(rotationView, "scaleX", 1f, 1.5f, 1f);
mScaleXAnimation.setDuration(1000);
mScaleXAnimation.setRepeatCount(Animation.INFINITE);
mScaleYAnimation = ObjectAnimator.ofFloat(rotationView, "scaleY", 1f, 1.5f, 1f);
mScaleYAnimation.setDuration(1000);
mScaleYAnimation.setRepeatCount(Animation.INFINITE);
}
@Override
public void show() {
super.show();
mLoadAnimation.start();
mRotationAnimation.start();
mScaleXAnimation.start();
mScaleYAnimation.start();
}
@Override
public void dismiss() {
super.dismiss();
mLoadAnimation.cancel();
mRotationAnimation.cancel();
mScaleXAnimation.cancel();
mScaleYAnimation.cancel();
}
}
package tech.starwin.widget;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.HashMap;
import java.util.Map;
/**
* Created by SiKang on 2018/10/12.
*/
public class PageStateLayout extends FrameLayout {
private View mStateView;
private OnStateChangedListener onStateChangedListener;
private OnRetryListener onRetryListener;
private ViewHolder viewHolder;
private PageStateLayout(@NonNull Context context) {
super(context);
}
private PageStateLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
private PageStateLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
private void setCustomView(@NonNull View view) {
mStateView = view;
viewHolder = new ViewHolder(view);
addView(mStateView);
}
public void setOnStateChangedListener(OnStateChangedListener onStateChangedListener) {
this.onStateChangedListener = onStateChangedListener;
}
public void setOnRetryListener(OnRetryListener onRetryListener) {
this.onRetryListener = onRetryListener;
}
public void showError() {
showStateView();
if (onStateChangedListener != null) {
onStateChangedListener.onError(viewHolder);
}
}
public void showLoading() {
showStateView();
if (onStateChangedListener != null) {
onStateChangedListener.onLoading(viewHolder);
}
}
public void showEmpty() {
showStateView();
if (onStateChangedListener != null) {
onStateChangedListener.onEmpty(viewHolder);
}
}
public void retry() {
hide();
if (onRetryListener != null) {
onRetryListener.onRetry();
}
}
public void hide() {
if (mStateView != null) {
mStateView.setVisibility(GONE);
}
}
private void showStateView() {
if (mStateView != null) {
mStateView.setVisibility(VISIBLE);
}
}
public static class Builder {
private PageStateLayout pageStateLayout;
public Builder(View view) {
//得到目标父布局,将view记录索引后,从布局中移除
ViewGroup parent = (ViewGroup) view.getParent();
int index = parent.indexOfChild(view);
parent.removeView(view);
//创建PageStateLayout,并添加到之前view所在的位置
pageStateLayout = new PageStateLayout(view.getContext());
parent.addView(pageStateLayout, index, view.getLayoutParams());
pageStateLayout.addView(view);
}
public Builder setCustomView(@NonNull View view) {
pageStateLayout.setCustomView(view);
return this;
}
public Builder setOnStateChangedListener(OnStateChangedListener listener) {
pageStateLayout.setOnStateChangedListener(listener);
return this;
}
public Builder setOnRetryListener(OnRetryListener listener) {
pageStateLayout.setOnRetryListener(listener);
return this;
}
public PageStateLayout create() {
return pageStateLayout;
}
}
public static class ViewHolder {
private View view;
Map<Integer, View> childViews;
public ViewHolder(View view) {
childViews = new HashMap<>();
this.view = view;
}
public View getContentView() {
return view;
}
public View getView(int id) {
if (childViews.containsKey(id)) {
return childViews.get(id);
} else {
return view.findViewById(id);
}
}
public TextView getTextView(int viewId) {
return (TextView) getView(viewId);
}
public Button getButton(int viewId) {
return (Button) getView(viewId);
}
public ImageView getImageView(int viewId) {
return (ImageView) getView(viewId);
}
public ImageButton getImageButton(int viewId) {
return (ImageButton) getView(viewId);
}
public EditText getEditText(int viewId) {
return (EditText) getView(viewId);
}
}
public interface OnStateChangedListener {
void onLoading(ViewHolder holder);
void onError(ViewHolder holder);
void onEmpty(ViewHolder holder);
}
public interface OnRetryListener {
void onRetry();
}
}
......@@ -8,7 +8,6 @@ import android.support.annotation.NonNull;
import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
import tech.starwin.utils.ui_utils.DialogFactory;
import tech.starwin.widget.LoadDialog;
/**
......@@ -21,7 +20,7 @@ public class ProgressDialog {
public ProgressDialog(@NonNull Context context) {
this.context = context;
this.loadingDialog = new LoadDialog(context);
this.loadingDialog = new LoadingDialog(context);
}
public ProgressDialog(@NonNull Dialog loadingDialog) {
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent">
<TextView
android:layout_width="@dimen/x_500"
android:layout_height="@dimen/x_500" />
<ImageView
android:id="@+id/progress_dialog_loadingImv"
android:layout_width="@dimen/x_300"
android:layout_height="@dimen/x_300"
android:layout_width="@dimen/x_200"
android:layout_height="@dimen/x_200"
android:layout_centerInParent="true" />
<ImageView
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment