Commit a8ba4a08 by Wyh

8.8 最大登陸數限制

Signed-off-by: Wyh <1239658231>
parent f920b567
...@@ -32,13 +32,10 @@ import com.jess.arms.integration.lifecycle.ActivityLifecycleable; ...@@ -32,13 +32,10 @@ import com.jess.arms.integration.lifecycle.ActivityLifecycleable;
import com.jess.arms.mvp.IPresenter; import com.jess.arms.mvp.IPresenter;
import com.jess.arms.utils.AndroidWorkaround; import com.jess.arms.utils.AndroidWorkaround;
import com.jess.arms.utils.ArmsUtils; import com.jess.arms.utils.ArmsUtils;
import com.qmuiteam.qmui.arch.QMUIActivity;
import com.qmuiteam.qmui.skin.QMUISkinManager;
import com.trello.rxlifecycle2.android.ActivityEvent; import com.trello.rxlifecycle2.android.ActivityEvent;
import javax.inject.Inject; import javax.inject.Inject;
import androidx.lifecycle.Lifecycle;
import butterknife.ButterKnife; import butterknife.ButterKnife;
import butterknife.Unbinder; import butterknife.Unbinder;
import io.reactivex.subjects.BehaviorSubject; import io.reactivex.subjects.BehaviorSubject;
...@@ -84,7 +81,6 @@ public abstract class BaseActivity<P extends IPresenter> extends AppCompatActivi ...@@ -84,7 +81,6 @@ public abstract class BaseActivity<P extends IPresenter> extends AppCompatActivi
@Override @Override
public View onCreateView(String name, Context context, AttributeSet attrs) { public View onCreateView(String name, Context context, AttributeSet attrs) {
View view = convertAutoView(name, context, attrs); View view = convertAutoView(name, context, attrs);
return view == null ? super.onCreateView(name, context, attrs) : view; return view == null ? super.onCreateView(name, context, attrs) : view;
} }
......
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="id" name="statusbarutil_fake_status_bar_view" />
<item type="id" name="statusbarutil_translucent_view" />
</resources>
\ No newline at end of file
...@@ -704,14 +704,14 @@ public class OrderDetail implements Serializable { ...@@ -704,14 +704,14 @@ public class OrderDetail implements Serializable {
if (productnameBean.getChild() != null) { if (productnameBean.getChild() != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX childBeanX : productnameBean.getChild()) { for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX childBeanX : productnameBean.getChild()) {
if (childBeanX != null) { if (childBeanX != null) {
//判斷是否打印,為true的時候會同時打印主項 //判斷是否選擇了打印至賬單,為true的時候會同時打印主項
if (childBeanX.getPrintToBill() == 1) { if (childBeanX.getPrintToBill() == 1) {
isCheck = true; isCheck = true;
break; break;
} }
if (childBeanX.getChild() != null) { if (childBeanX.getChild() != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX.ChildBean childBean : childBeanX.getChild()) { for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX.ChildBean childBean : childBeanX.getChild()) {
//判斷是否打印,為true的時候會同時打印主 //判斷是否選擇了打印至賬單,為true的時候會同時打印上一項細
if (childBean.getPrintToBill() == 1) { if (childBean.getPrintToBill() == 1) {
isCheck2 = true; isCheck2 = true;
break; break;
......
...@@ -30,7 +30,7 @@ public class RestaurantInfoUtils { ...@@ -30,7 +30,7 @@ public class RestaurantInfoUtils {
public static int getRestaurantSize(Context context) { public static int getRestaurantSize(Context context) {
int size = 0; int size = 0;
List<BrandsBean.BrandsData> brandsBeans = getBrandList(context); List<BrandsBean.BrandsData> brandsBeans = getBrandList(context);
if(brandsBeans == null){ if (brandsBeans == null) {
return 0; return 0;
} }
for (int i = 0; i < brandsBeans.size(); i++) { for (int i = 0; i < brandsBeans.size(); i++) {
...@@ -40,12 +40,22 @@ public class RestaurantInfoUtils { ...@@ -40,12 +40,22 @@ public class RestaurantInfoUtils {
return size; return size;
} }
public static int getRestaurantSize(List<BrandsBean.BrandsData> brands) {
if (brands == null) {
return 0;
}
int size = 0;
for (int i = 0; i < brands.size(); i++) {
if (brands.get(i).getRestaurants() != null)
size += brands.get(i).getRestaurants().size();
}
return size;
}
public static BrandsBean.BrandsData getOnlyBrand(List<BrandsBean.BrandsData> brands) { public static BrandsBean.BrandsData getOnlyBrand(List<BrandsBean.BrandsData> brands) {
for (int i = 0; i < brands.size(); i++) { for (int i = 0; i < brands.size(); i++) {
if (brands.get(i).getRestaurants() != null) { if (brands.get(i).getRestaurants() != null) {
for (int j = 0; j < brands.get(i).getRestaurants().size(); j++) { return brands.get(i);
return brands.get(i);
}
} }
} }
return null; return null;
......
package com.gingersoft.gsa.cloud.base.utils.gson; package com.gingersoft.gsa.cloud.base.utils.gson;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -55,19 +59,37 @@ public class GsonUtils { ...@@ -55,19 +59,37 @@ public class GsonUtils {
return t; return t;
} }
// 有問題,轉換出來的類型不對
// /**
// * 转成list
// *
// * @param gsonString
// * @param cls
// * @return
// */
// public static <T> List<T> GsonToList(String gsonString, Class<T> cls) {
// List<T> list = null;
// if (gson != null) {
// list = gson.fromJson(gsonString, new TypeToken<List<T>>() {
// }.getType());
// }
// return list;
// }
/** /**
* 转成list * json字符串转成list
* *
* @param gsonString
* @param cls * @param cls
* @return * @return
*/ */
public static <T> List<T> GsonToList(String gsonString, Class<T> cls) { public static <T> List<T> jsonToList(String json, Class<T> cls) {
List<T> list = null; ArrayList<T> mList = new ArrayList<>();
if (gson != null) {
list = gson.fromJson(gsonString, new TypeToken<List<T>>() {}.getType()); JsonArray array = new JsonParser().parse(json).getAsJsonArray();
for (final JsonElement elem : array) {
mList.add(gson.fromJson(elem, cls));
} }
return list; return mList;
} }
/** /**
......
...@@ -17,6 +17,10 @@ import android.view.WindowManager; ...@@ -17,6 +17,10 @@ import android.view.WindowManager;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
...@@ -29,13 +33,10 @@ import java.util.List; ...@@ -29,13 +33,10 @@ import java.util.List;
/** /**
* Created by Wyh on 2019/11/1. * Created by Wyh on 2019/11/1.
*/ */
public abstract class DialogUtils { public abstract class DialogUtils implements LifecycleObserver {
// private Context mContext;
private static Dialog dialog; private static Dialog dialog;
private View view; private View view;
private int style = R.style.PhotoDialog; private int style = R.style.PhotoDialog;
// private int mWidth = WindowManager.LayoutParams.WRAP_CONTENT;
// private int mHeight = WindowManager.LayoutParams.WRAP_CONTENT;
private ViewHepler viewHepler; private ViewHepler viewHepler;
public DialogUtils(Context mContext, int xmlLayout) { public DialogUtils(Context mContext, int xmlLayout) {
...@@ -44,7 +45,7 @@ public abstract class DialogUtils { ...@@ -44,7 +45,7 @@ public abstract class DialogUtils {
} }
private void init(Context context) { private void init(Context context) {
dismiss(); // dismiss();
dialog = new Dialog(context); dialog = new Dialog(context);
viewHepler = getViewHepler(context); viewHepler = getViewHepler(context);
initLayout(viewHepler, dialog); initLayout(viewHepler, dialog);
...@@ -150,6 +151,7 @@ public abstract class DialogUtils { ...@@ -150,6 +151,7 @@ public abstract class DialogUtils {
return dialog; return dialog;
} }
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public DialogUtils dismiss() { public DialogUtils dismiss() {
if (dialog != null) if (dialog != null)
dialog.dismiss(); dialog.dismiss();
......
package com.gingersoft.gsa.cloud.globalconfig.applyOptions; package com.gingersoft.gsa.cloud.globalconfig.applyOptions;
import android.util.Log;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.constans.AppConstans;
import com.gingersoft.gsa.cloud.base.utils.encryption.Aes; import com.gingersoft.gsa.cloud.base.utils.encryption.Aes;
import com.gingersoft.gsa.cloud.constans.AppConstans;
import com.jess.arms.http.GlobalHttpHandler; import com.jess.arms.http.GlobalHttpHandler;
import com.jess.arms.utils.DeviceUtils; import com.jess.arms.utils.DeviceUtils;
import okhttp3.Headers; import okhttp3.Headers;
import okhttp3.Interceptor; import okhttp3.Interceptor;
import okhttp3.Request; import okhttp3.Request;
...@@ -46,9 +45,11 @@ public class MyGlobalHttpHandler implements GlobalHttpHandler { ...@@ -46,9 +45,11 @@ public class MyGlobalHttpHandler implements GlobalHttpHandler {
Headers headers = request.headers(); Headers headers = request.headers();
for (int i = 0; i < headers.size(); i++) { for (int i = 0; i < headers.size(); i++) {
builder.set(headers.name(i), headers.value(i)); builder.set(headers.name(i), headers.value(i));
} }
if (GsaCloudApplication.isLogin) if(GsaCloudApplication.isLogin){
builder.set("token", token); builder.set("token", token);
}
// builder.set("Domain-Name", "common"); // builder.set("Domain-Name", "common");
return chain.request().newBuilder() return chain.request().newBuilder()
.headers(builder.build()) .headers(builder.build())
......
...@@ -25,6 +25,4 @@ ...@@ -25,6 +25,4 @@
<item name="layout_for_test" type="id"/> <item name="layout_for_test" type="id"/>
<item name="topbar_heart_disconnect" type="id"/> <item name="topbar_heart_disconnect" type="id"/>
<item type="id" name="statusbarutil_fake_status_bar_view" />
<item type="id" name="statusbarutil_translucent_view" />
</resources> </resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.gingersoft.gsa.cloud.login">
xmlns:tools="http://schemas.android.com/tools"
package="com.gingersoft.gsa.cloud.login">
<application <application
android:name="com.gingersoft.gsa.cloud.base.application.GsaCloudApplication" android:name="com.gingersoft.gsa.cloud.base.application.GsaCloudApplication"
android:allowBackup="true" android:allowBackup="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher"
android:label="@string/user_login_name" android:label="@string/user_login_name"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<activity android:name=".mvp.ui.activity.mvp.ui.activity.LoginActivity" /> <activity android:name=".mvp.ui.activity.mvp.ui.activity.LoginActivity"
<activity android:name=".mvp.ui.activity.mvp.ui.activity.SwitchServerActivity" /> android:launchMode="singleTop"/>
<activity android:name=".mvp.ui.activity.mvp.ui.activity.WelcomeActivity"> <activity android:name=".mvp.ui.activity.mvp.ui.activity.SwitchServerActivity" />
<intent-filter> <activity android:name=".mvp.ui.activity.mvp.ui.activity.WelcomeActivity">
<action android:name="android.intent.action.MAIN" /> <intent-filter>
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".mvp.ui.activity.mvp.ui.activity.LoginOutActivity" /> <activity android:name=".mvp.ui.activity.mvp.ui.activity.ChooseRestaurantActivity"/>
<activity android:name=".mvp.ui.activity.mvp.ui.activity.RecoverPasswordActivity" /> <activity android:name=".mvp.ui.activity.mvp.ui.activity.LoginOutActivity" />
<activity android:name=".mvp.ui.activity.mvp.ui.activity.RecoverPasswordActivity" />
<meta-data <meta-data
android:name="com.gingersoft.gsa.cloud.globalconfig.GlobalConfiguration" android:name="com.gingersoft.gsa.cloud.globalconfig.GlobalConfiguration"
android:value="ConfigModule" /> android:value="ConfigModule" />
<meta-data <meta-data
android:name="design_width_in_dp" android:name="design_width_in_dp"
android:value="360"/> android:value="360" />
<meta-data <meta-data
android:name="design_height_in_dp" android:name="design_height_in_dp"
android:value="640"/> android:value="640" />
</application> </application>
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" /> <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
</manifest> </manifest>
\ No newline at end of file
package com.gingersoft.gsa.cloud.login.mvp.bean;
public class LoginLimitBean {
private int userId;
private String userName;
private long dateTime;
public LoginLimitBean() {
}
public LoginLimitBean(int userId, String userName, long dateTime) {
this.userId = userId;
this.userName = userName;
this.dateTime = dateTime;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public long getDateTime() {
return dateTime;
}
public void setDateTime(long dateTime) {
this.dateTime = dateTime;
}
}
package com.gingersoft.gsa.cloud.login.mvp.contract; package com.gingersoft.gsa.cloud.login.mvp.contract;
import com.gingersoft.gsa.cloud.bean.PublicBean;
import com.gingersoft.gsa.cloud.login.mvp.bean.LoginLimitBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean; import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean; import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.jess.arms.mvp.IModel; import com.jess.arms.mvp.IModel;
...@@ -33,6 +35,12 @@ public interface BaseLoginContract { ...@@ -33,6 +35,12 @@ public interface BaseLoginContract {
void saveRestaurantListInfo(List<BrandsBean.BrandsData> brands); void saveRestaurantListInfo(List<BrandsBean.BrandsData> brands);
void showChooseRestaurantDialog(List<BrandsBean.BrandsData> brandsBean, List<BrandsBean.BrandsData> brands); void showChooseRestaurantDialog(List<BrandsBean.BrandsData> brandsBean, List<BrandsBean.BrandsData> brands);
void jumpMainActivity();
void jumpDownloadActivity();
void showLoginLimit(List<LoginLimitBean> loginLimitBeans);
} }
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存 //Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
...@@ -40,5 +48,10 @@ public interface BaseLoginContract { ...@@ -40,5 +48,10 @@ public interface BaseLoginContract {
Observable<LoginBean> login(RequestBody requestBody); Observable<LoginBean> login(RequestBody requestBody);
Observable<BrandsBean> getRestaurantList(); Observable<BrandsBean> getRestaurantList();
Observable<PublicBean> getLoginLimit(int restaurantId);
Observable<Object> loginOut(int userId, RequestBody requestBody);
} }
} }
package com.gingersoft.gsa.cloud.login.mvp.contract; package com.gingersoft.gsa.cloud.login.mvp.contract;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.billy.cc.core.component.CC; import com.billy.cc.core.component.CC;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.listener.OnItemChildClickListener;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.JsonUtils; import com.gingersoft.gsa.cloud.base.utils.JsonUtils;
import com.gingersoft.gsa.cloud.base.utils.RestaurantInfoUtils;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils; import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.base.widget.DialogUtils;
import com.gingersoft.gsa.cloud.constans.UserConstans; import com.gingersoft.gsa.cloud.constans.UserConstans;
import com.gingersoft.gsa.cloud.login.R;
import com.gingersoft.gsa.cloud.login.mvp.bean.LoginLimitBean;
import com.gingersoft.gsa.cloud.login.mvp.presenter.BaseLoginPresenter; import com.gingersoft.gsa.cloud.login.mvp.presenter.BaseLoginPresenter;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.ui.activity.LoginActivity;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.ui.activity.SwitchServerActivity; import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.ui.activity.SwitchServerActivity;
import com.gingersoft.gsa.cloud.login.mvp.ui.adapter.LoginLimitAdapter;
import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean; import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean; import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.gingersoft.gsa.cloud.ui.widget.dialog.ChooseRestaurantDialog; import com.gingersoft.gsa.cloud.ui.widget.dialog.ChooseRestaurantDialog;
...@@ -30,27 +48,30 @@ public abstract class LoginInterfaceImpl<P extends BaseLoginPresenter> extends B ...@@ -30,27 +48,30 @@ public abstract class LoginInterfaceImpl<P extends BaseLoginPresenter> extends B
if (brands != null) { if (brands != null) {
String brandRestaurantInfos = JsonUtils.toJson(brands); String brandRestaurantInfos = JsonUtils.toJson(brands);
GsaCloudApplication.setBrandRestaurantInfos(mContext, brandRestaurantInfos); GsaCloudApplication.setBrandRestaurantInfos(mContext, brandRestaurantInfos);
restaurantSize = getRestaurantSize(brands); restaurantSize = RestaurantInfoUtils.getRestaurantSize(brands);
brandsBeans.addAll(brands); brandsBeans.addAll(brands);
} }
boolean autoLogin = (boolean) SPUtils.get(mContext, UserConstans.AUTO_LOGIN, false); boolean autoLogin = (boolean) SPUtils.get(mContext, UserConstans.AUTO_LOGIN, false);
if (autoLogin) { if (autoLogin) {
int restaurantId = GsaCloudApplication.getRestaurantId(this); int restaurantId = GsaCloudApplication.getRestaurantId(this);
if (restaurantId != 0) { if (restaurantId != 0) {
//有選擇餐廳,直接跳轉首頁 //上一次進入app有選擇餐廳,通過餐廳ID獲取允許的最大登陸數
jumpMainActivity(); mPresenter.getLoginLimit(restaurantId, false);
// jumpMainActivity();
return; return;
} }
} }
if (restaurantSize == 1) { if (restaurantSize == 1) {
//只有一個品牌是直接進下載頁面 //只有一個品牌是直接進下載頁面
BrandsBean.BrandsData brandsBean = getOnlyBrand(brands); BrandsBean.BrandsData brandsBean = RestaurantInfoUtils.getOnlyBrand(brands);
BrandsBean.BrandsData.RestaurantsBean restaurantsBean = getOnlyRestaurant(brands); BrandsBean.BrandsData.RestaurantsBean restaurantsBean = RestaurantInfoUtils.getOnlyRestaurant(brands);
if (brandsBean != null) { if (brandsBean != null) {
saveBrandAndRestaurantInfo(brandsBean.getBrandId(), brandsBean.getBrandName(), restaurantsBean); saveBrandAndRestaurantInfo(brandsBean.getBrandId(), brandsBean.getBrandName(), restaurantsBean);
//通過餐廳ID獲取允許的最大登陸數
mPresenter.getLoginLimit(restaurantsBean.getRestaurantId(), true);
} }
jumpDownloadActivity(); // jumpDownloadActivity();
} else { } else {
showChooseRestaurantDialog(brandsBeans, brands); showChooseRestaurantDialog(brandsBeans, brands);
} }
...@@ -75,67 +96,26 @@ public abstract class LoginInterfaceImpl<P extends BaseLoginPresenter> extends B ...@@ -75,67 +96,26 @@ public abstract class LoginInterfaceImpl<P extends BaseLoginPresenter> extends B
} }
protected void ChooseRestaurantItemClick(List<BrandsBean.BrandsData> brands, ChooseRestaurantDialog dialog, BrandsBean.BrandsData.RestaurantsBean item) { protected void ChooseRestaurantItemClick(List<BrandsBean.BrandsData> brands, ChooseRestaurantDialog dialog, BrandsBean.BrandsData.RestaurantsBean item) {
BrandsBean.BrandsData brandsBean = getBrandByRestaurantId(brands, item.getRestaurantId()); BrandsBean.BrandsData brandsBean = RestaurantInfoUtils.getBrandByRestaurantId(brands, item.getRestaurantId());
if (brandsBean != null) { if (brandsBean != null) {
saveBrandAndRestaurantInfo(brandsBean.getBrandId(), brandsBean.getBrandName(), item); saveBrandAndRestaurantInfo(brandsBean.getBrandId(), brandsBean.getBrandName(), item);
mPresenter.getLoginLimit(item.getRestaurantId(), true);
} }
dialog.dismiss(); dialog.dismiss();
jumpDownloadActivity(); // jumpDownloadActivity();
} }
protected void saveBrandAndRestaurantInfo(int brandId, String brandName, BrandsBean.BrandsData.RestaurantsBean restaurantsBean) { protected void saveBrandAndRestaurantInfo(int brandId, String brandName, BrandsBean.BrandsData.RestaurantsBean restaurantsBean) {
GsaCloudApplication.setBrandId(mContext, brandId); GsaCloudApplication.setBrandId(mContext, brandId);
GsaCloudApplication.setBrandName(mContext, brandName); GsaCloudApplication.setBrandName(mContext, brandName);
GsaCloudApplication.setRestaurantId(mContext, restaurantsBean.getRestaurantId()); if (restaurantsBean != null) {
GsaCloudApplication.setRestaurantName(mContext, restaurantsBean.getRestaurantName()); GsaCloudApplication.setRestaurantId(mContext, restaurantsBean.getRestaurantId());
GsaCloudApplication.setGsPosShopId(mContext, restaurantsBean.getGsPosShopId()); GsaCloudApplication.setRestaurantName(mContext, restaurantsBean.getRestaurantName());
} GsaCloudApplication.setGsPosShopId(mContext, restaurantsBean.getGsPosShopId());
private int getRestaurantSize(List<BrandsBean.BrandsData> brands) {
int size = 0;
for (int i = 0; i < brands.size(); i++) {
if (brands.get(i).getRestaurants() != null)
size += brands.get(i).getRestaurants().size();
}
return size;
}
private BrandsBean.BrandsData getOnlyBrand(List<BrandsBean.BrandsData> brands) {
for (int i = 0; i < brands.size(); i++) {
if (brands.get(i).getRestaurants() != null) {
for (int j = 0; j < brands.get(i).getRestaurants().size(); j++) {
return brands.get(i);
}
}
}
return null;
}
private BrandsBean.BrandsData.RestaurantsBean getOnlyRestaurant(List<BrandsBean.BrandsData> brands) {
for (int i = 0; i < brands.size(); i++) {
if (brands.get(i).getRestaurants() != null) {
for (int j = 0; j < brands.get(i).getRestaurants().size(); j++) {
return brands.get(i).getRestaurants().get(j);
}
}
}
return null;
}
private BrandsBean.BrandsData getBrandByRestaurantId(List<BrandsBean.BrandsData> brands, int restaurantId) {
for (int i = 0; i < brands.size(); i++) {
if (brands.get(i).getRestaurants() != null) {
for (int j = 0; j < brands.get(i).getRestaurants().size(); j++) {
if (brands.get(i).getRestaurants().get(j).getRestaurantId() == restaurantId) {
return brands.get(i);
}
}
}
} }
return null;
} }
private void jumpDownloadActivity() { public void jumpDownloadActivity() {
CC.obtainBuilder("Component.Download") CC.obtainBuilder("Component.Download")
.setActionName("showDownloadActivity") .setActionName("showDownloadActivity")
.addParam("fromPage", 1) .addParam("fromPage", 1)
...@@ -144,11 +124,56 @@ public abstract class LoginInterfaceImpl<P extends BaseLoginPresenter> extends B ...@@ -144,11 +124,56 @@ public abstract class LoginInterfaceImpl<P extends BaseLoginPresenter> extends B
killMyself(); killMyself();
} }
private void jumpMainActivity() { public void jumpMainActivity() {
CC.obtainBuilder("Component.Main") CC.obtainBuilder("Component.Main")
.setActionName("showMainActivity") .setActionName("showMainActivity")
.build() .build()
.call(); .call();
killMyself(); killMyself();
} }
private DialogUtils dialogUtils;
public void showLoginLimit(List<LoginLimitBean> loginLimitBeans) {
if (loginLimitBeans != null) {
dialogUtils = new DialogUtils(mContext, R.layout.login_limit_dialog_layout) {
@Override
public void initLayout(ViewHepler hepler, Dialog dialog) {
hepler.setOnClickListenter(R.id.iv_login_limit_back, v -> {
dialog.dismiss();
});
RecyclerView loginLimit = hepler.getView(R.id.rv_login_limit);
loginLimit.setLayoutManager(new LinearLayoutManager(mContext));
LoginLimitAdapter loginLimitAdapter = new LoginLimitAdapter(loginLimitBeans);
loginLimitAdapter.setOnItemChildClickListener((adapter, view, position) -> {
if (position < loginLimitBeans.size()) {
mPresenter.loginOut(loginLimitBeans.get(position).getUserId());
loginLimitBeans.remove(position);
loginLimitAdapter.notifyDataSetChanged();
Log.e("eee", "踢出第" + position + "個");
}
});
loginLimit.setAdapter(loginLimitAdapter);
}
}.setWidth(LinearLayout.LayoutParams.MATCH_PARENT).setOnDismissListener(dialog -> {
//不管有沒有踢出人,彈窗消失回到登陸頁面
startActivity(new Intent(mContext, LoginActivity.class));
}).setGravity(Gravity.BOTTOM).show();
} else {
showMessage("獲取登陸人數失敗");
launchActivity(new Intent(mContext, LoginActivity.class));
}
}
@Override
protected void onPause() {
super.onPause();
if(dialogUtils != null){
dialogUtils.dismiss();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
}
} }
package com.gingersoft.gsa.cloud.login.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.bean.PublicBean;
import com.gingersoft.gsa.cloud.login.mvp.contract.BaseLoginContract;
import com.gingersoft.gsa.cloud.login.mvp.server.LoginService;
import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject;
import io.reactivex.Observable;
import okhttp3.RequestBody;
public class BaseLoginModel extends BaseModel implements BaseLoginContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public BaseLoginModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<LoginBean> login(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(LoginService.class)
.login(requestBody);
}
@Override
public Observable<BrandsBean> getRestaurantList() {
return mRepositoryManager.obtainRetrofitService(LoginService.class)
.getRestaurantList();
}
@Override
public Observable<PublicBean> getLoginLimit(int restaurantId) {
return mRepositoryManager.obtainRetrofitService(LoginService.class)
.getLoginLimit(restaurantId);
}
@Override
public Observable<Object> loginOut(int userId, RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(LoginService.class)
.loginOut(userId, requestBody);
}
}
package com.gingersoft.gsa.cloud.login.mvp.model; package com.gingersoft.gsa.cloud.login.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.gingersoft.gsa.cloud.login.mvp.contract.LoginContract; import com.gingersoft.gsa.cloud.login.mvp.contract.LoginContract;
import com.gingersoft.gsa.cloud.login.mvp.server.LoginService;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope; import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.IRepositoryManager; import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.Observable;
import okhttp3.RequestBody;
/** /**
* ================================================ * ================================================
...@@ -30,34 +20,9 @@ import okhttp3.RequestBody; ...@@ -30,34 +20,9 @@ import okhttp3.RequestBody;
* ================================================ * ================================================
*/ */
@ActivityScope @ActivityScope
public class LoginModel extends BaseModel implements LoginContract.Model{ public class LoginModel extends BaseLoginModel implements LoginContract.Model{
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject @Inject
public LoginModel(IRepositoryManager repositoryManager) { public LoginModel(IRepositoryManager repositoryManager) {
super(repositoryManager); super(repositoryManager);
} }
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<LoginBean> login(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(LoginService.class)
.login(requestBody);
}
@Override
public Observable<BrandsBean> getRestaurantList() {
return mRepositoryManager.obtainRetrofitService(LoginService.class)
.getRestaurantList();
}
} }
\ No newline at end of file
package com.gingersoft.gsa.cloud.login.mvp.model; package com.gingersoft.gsa.cloud.login.mvp.model;
import android.app.Application;
import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.gingersoft.gsa.cloud.login.mvp.contract.WelcomeContract; import com.gingersoft.gsa.cloud.login.mvp.contract.WelcomeContract;
import com.gingersoft.gsa.cloud.login.mvp.server.LoginService;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope; import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.IRepositoryManager; import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.Observable;
import okhttp3.RequestBody;
@ActivityScope @ActivityScope
public class WelcomeModel extends BaseModel implements WelcomeContract.Model { public class WelcomeModel extends BaseLoginModel implements WelcomeContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject @Inject
public WelcomeModel(IRepositoryManager repositoryManager) { public WelcomeModel(IRepositoryManager repositoryManager) {
super(repositoryManager); super(repositoryManager);
} }
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
@Override
public Observable<LoginBean> login(RequestBody requestBody) {
return mRepositoryManager.obtainRetrofitService(LoginService.class)
.login(requestBody);
}
@Override
public Observable<BrandsBean> getRestaurantList() {
return mRepositoryManager.obtainRetrofitService(LoginService.class)
.getRestaurantList();
}
} }
\ No newline at end of file
...@@ -3,22 +3,31 @@ package com.gingersoft.gsa.cloud.login.mvp.presenter; ...@@ -3,22 +3,31 @@ package com.gingersoft.gsa.cloud.login.mvp.presenter;
import android.app.Activity; import android.app.Activity;
import android.app.Application; import android.app.Application;
import android.content.Intent; import android.content.Intent;
import android.util.Log;
import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication; import com.gingersoft.gsa.cloud.base.application.GsaCloudApplication;
import com.gingersoft.gsa.cloud.base.utils.gson.GsonUtils;
import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils; import com.gingersoft.gsa.cloud.base.utils.okhttpUtils.OkHttp3Utils;
import com.gingersoft.gsa.cloud.bean.PublicBean;
import com.gingersoft.gsa.cloud.constans.AppConstans; import com.gingersoft.gsa.cloud.constans.AppConstans;
import com.gingersoft.gsa.cloud.login.mvp.bean.LoginLimitBean;
import com.gingersoft.gsa.cloud.login.mvp.contract.BaseLoginContract; import com.gingersoft.gsa.cloud.login.mvp.contract.BaseLoginContract;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.ui.activity.LoginActivity; import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.ui.activity.LoginActivity;
import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean; import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean; import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.jess.arms.di.scope.ActivityScope; import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader; import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager; import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter; import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils; import com.jess.arms.utils.RxLifecycleUtils;
import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull; import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
...@@ -97,7 +106,7 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas ...@@ -97,7 +106,7 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas
@Override @Override
public void onError(Throwable t) { public void onError(Throwable t) {
super.onError(t); super.onError(t);
OkHttp3Utils.noticePersonnel(AppConstans.RP_LOGIN_ERROR, "登陸報錯:"+t.getMessage()); OkHttp3Utils.noticePersonnel(AppConstans.RP_LOGIN_ERROR, "登陸報錯:" + t.getMessage());
if (IAcitivity instanceof LoginActivity) { if (IAcitivity instanceof LoginActivity) {
} else { } else {
mRootView.launchActivity(new Intent(IAcitivity, LoginActivity.class)); mRootView.launchActivity(new Intent(IAcitivity, LoginActivity.class));
...@@ -107,7 +116,7 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas ...@@ -107,7 +116,7 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas
} }
public void getRestaurantList(){ public void getRestaurantList() {
mModel.getRestaurantList() mModel.getRestaurantList()
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread()) .subscribeOn(AndroidSchedulers.mainThread())
...@@ -119,7 +128,7 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas ...@@ -119,7 +128,7 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas
@Override @Override
public void onNext(@NonNull BrandsBean info) { public void onNext(@NonNull BrandsBean info) {
if(info != null){ if (info != null) {
mRootView.saveRestaurantListInfo(info.getData()); mRootView.saveRestaurantListInfo(info.getData());
} else { } else {
mRootView.saveRestaurantListInfo(null); mRootView.saveRestaurantListInfo(null);
...@@ -134,5 +143,74 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas ...@@ -134,5 +143,74 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas
}); });
} }
/**
* @param restaurantId 餐廳ID
* @param isDownload 是否去下載頁面
*/
public void getLoginLimit(int restaurantId, boolean isDownload) {
mModel.getLoginLimit(restaurantId)
.subscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
.doOnSubscribe(disposable -> mRootView.showLoading("獲取登錄人數"))
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<PublicBean>(mErrorHandler) {
@Override
public void onNext(PublicBean s) {
if (s != null && s.isSuccess()) {
List<LoginLimitBean> loginLimitBeans = new Gson().fromJson(GsonUtils.GsonString(s.getData()), new TypeToken<List<LoginLimitBean>>() {}.getType());
// List<LoginLimitBean> logins = GsonUtils.GsonToList("", LoginLimitBean.class);
if (loginLimitBeans == null || loginLimitBeans.size() <= 0) {
if (isDownload) {
mRootView.jumpDownloadActivity();
} else {
mRootView.jumpMainActivity();
}
} else {
//已達上限,彈出彈窗
mRootView.showLoginLimit(loginLimitBeans);
}
} else {
mRootView.showMessage("獲取登陸人數失敗");
mRootView.launchActivity(new Intent(IAcitivity, LoginActivity.class));
}
}
@Override
public void onError(Throwable t) {
super.onError(t);
mRootView.showLoginLimit(null);
// mRootView.launchActivity(new Intent(IAcitivity, LoginActivity.class));
// mRootView.jumpDownloadActivity();
}
});
}
/**
* 踢出用戶
*/
public void loginOut(int userId) {
RequestBody requestBody = new FormBody.Builder()
.add("type", "2")
.build();
mModel.loginOut(userId, requestBody)
.subscribeOn(Schedulers.io())
.doOnSubscribe(disposable -> mRootView.showLoading(null))
.subscribeOn(AndroidSchedulers.mainThread())
.observeOn(AndroidSchedulers.mainThread())
.doAfterTerminate(() -> mRootView.hideLoading())
.compose(RxLifecycleUtils.bindToLifecycle(mRootView))
.subscribe(new ErrorHandleSubscriber<Object>(mErrorHandler) {
@Override
public void onNext(@NonNull Object info) {
}
@Override
public void onError(Throwable t) {
super.onError(t);
}
});
}
} }
package com.gingersoft.gsa.cloud.login.mvp.server; package com.gingersoft.gsa.cloud.login.mvp.server;
import com.gingersoft.gsa.cloud.bean.PublicBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean; import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean; import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
...@@ -8,7 +9,10 @@ import io.reactivex.Observable; ...@@ -8,7 +9,10 @@ import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager; import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody; import okhttp3.RequestBody;
import retrofit2.http.Body; import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET; import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Headers; import retrofit2.http.Headers;
import retrofit2.http.POST; import retrofit2.http.POST;
...@@ -17,9 +21,6 @@ import retrofit2.http.POST; ...@@ -17,9 +21,6 @@ import retrofit2.http.POST;
*/ */
public interface LoginService { public interface LoginService {
// @POST("gsa/login" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
// Observable<LoginBean> login(@Body RequestBody requestBody);
@Headers({"Domain-Name: system_url"}) @Headers({"Domain-Name: system_url"})
@POST("public/user/login" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @POST("public/user/login" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<LoginBean> login(@Body RequestBody requestBody); Observable<LoginBean> login(@Body RequestBody requestBody);
...@@ -27,5 +28,10 @@ public interface LoginService { ...@@ -27,5 +28,10 @@ public interface LoginService {
@GET("user/brand/get" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2) @GET("user/brand/get" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<BrandsBean> getRestaurantList(); Observable<BrandsBean> getRestaurantList();
@FormUrlEncoded
@POST("user/restrictions" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<PublicBean> getLoginLimit(@Field("restaurantId") int restaurantId);
@POST("user/logout" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<Object> loginOut(@Header("uid") int userId, @Body RequestBody requestBody);
} }
package com.gingersoft.gsa.cloud.login.mvp.ui.activity.di.component;
import dagger.Component;
import com.jess.arms.di.component.AppComponent;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.di.module.ChooseRestaurantModule;
import com.jess.arms.di.scope.ActivityScope;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.ui.activity.ChooseRestaurantActivity;
@ActivityScope
@Component(modules = ChooseRestaurantModule.class,dependencies = AppComponent.class)
public interface ChooseRestaurantComponent {
void inject(ChooseRestaurantActivity activity);
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.login.mvp.ui.activity.di.module;
import com.jess.arms.di.scope.ActivityScope;
import dagger.Module;
import dagger.Provides;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.contract.ChooseRestaurantContract;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.model.ChooseRestaurantModel;
@Module
public class ChooseRestaurantModule {
private ChooseRestaurantContract.View view;
/**
* 构建ChooseRestaurantModule时,将View的实现类传进来,这样就可以提供View的实现类给presenter
* @param view
*/
public ChooseRestaurantModule(ChooseRestaurantContract.View view) {
this.view = view;
}
@ActivityScope
@Provides
ChooseRestaurantContract.View provideChooseRestaurantView(){
return this.view;
}
@ActivityScope
@Provides
ChooseRestaurantContract.Model provideChooseRestaurantModel(ChooseRestaurantModel model){
return model;
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.contract;
import com.jess.arms.mvp.IView;
import com.jess.arms.mvp.IModel;
public interface ChooseRestaurantContract {
//对于经常使用的关于UI的方法可以定义到IView中,如显示隐藏进度条,和显示文字消息
interface View extends IView {
}
//Model层定义接口,外部只需关心Model返回的数据,无需关心内部细节,即是否使用缓存
interface Model extends IModel{
}
}
package com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.model;
import android.app.Application;
import com.google.gson.Gson;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import com.jess.arms.di.scope.ActivityScope;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.contract.ChooseRestaurantContract;
@ActivityScope
public class ChooseRestaurantModel extends BaseModel implements ChooseRestaurantContract.Model{
@Inject
Gson mGson;
@Inject
Application mApplication;
@Inject
public ChooseRestaurantModel(IRepositoryManager repositoryManager) {
super(repositoryManager);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mGson = null;
this.mApplication = null;
}
}
\ No newline at end of file
package com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.presenter;
import android.app.Application;
import com.jess.arms.integration.AppManager;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.http.imageloader.ImageLoader;
import me.jessyan.rxerrorhandler.core.RxErrorHandler;
import javax.inject.Inject;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.contract.ChooseRestaurantContract;
@ActivityScope
public class ChooseRestaurantPresenter extends BasePresenter<ChooseRestaurantContract.Model, ChooseRestaurantContract.View> {
@Inject
RxErrorHandler mErrorHandler;
@Inject
Application mApplication;
@Inject
ImageLoader mImageLoader;
@Inject
AppManager mAppManager;
@Inject
public ChooseRestaurantPresenter (ChooseRestaurantContract.Model model, ChooseRestaurantContract.View rootView) {
super(model, rootView);
}
@Override
public void onDestroy() {
super.onDestroy();
this.mErrorHandler = null;
this.mAppManager = null;
this.mImageLoader = null;
this.mApplication = null;
}
}
package com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.ui.activity;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.gingersoft.gsa.cloud.login.R;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.di.component.DaggerChooseRestaurantComponent;
import com.jess.arms.base.BaseActivity;
import com.jess.arms.di.component.AppComponent;
import com.jess.arms.utils.ArmsUtils;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.di.module.ChooseRestaurantModule;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.contract.ChooseRestaurantContract;
import com.gingersoft.gsa.cloud.login.mvp.ui.activity.mvp.presenter.ChooseRestaurantPresenter;
import static com.jess.arms.utils.Preconditions.checkNotNull;
public class ChooseRestaurantActivity extends BaseActivity<ChooseRestaurantPresenter> implements ChooseRestaurantContract.View {
@Override
public void setupActivityComponent(@NonNull AppComponent appComponent) {
DaggerChooseRestaurantComponent //如找不到该类,请编译一下项目
.builder()
.appComponent(appComponent)
.chooseRestaurantModule(new ChooseRestaurantModule(this))
.build()
.inject(this);
}
@Override
public int initView(@Nullable Bundle savedInstanceState) {
return R.layout.activity_choose_restaurant; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
@Override
public void initData(@Nullable Bundle savedInstanceState) {
}
@Override
public void initIntent() {
}
@Override
public void initTopBar() {
}
@Override
public void initLanguage() {
}
@Override
public void initLayoutParams() {
}
@Override
public void initLayoutVisible() {
}
@Override
public void showLoading(String message) {
}
@Override
public void hideLoading() {
}
@Override
public void showMessage(@NonNull String message) {
checkNotNull(message);
ArmsUtils.snackbarText(message);
}
@Override
public void launchActivity(@NonNull Intent intent) {
checkNotNull(intent);
ArmsUtils.startActivity(intent);
}
@Override
public void killMyself() {
finish();
}
}
...@@ -7,6 +7,7 @@ import android.text.Editable; ...@@ -7,6 +7,7 @@ import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.text.method.HideReturnsTransformationMethod; import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod; import android.text.method.PasswordTransformationMethod;
import android.util.Log;
import android.view.View; import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.CheckBox; import android.widget.CheckBox;
...@@ -15,7 +16,6 @@ import android.widget.ImageView; ...@@ -15,7 +16,6 @@ import android.widget.ImageView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.gingersoft.gsa.cloud.base.utils.StatusBarUtil;
import com.gingersoft.gsa.cloud.base.utils.encryption.Aes; import com.gingersoft.gsa.cloud.base.utils.encryption.Aes;
import com.gingersoft.gsa.cloud.base.utils.log.LogUtil; import com.gingersoft.gsa.cloud.base.utils.log.LogUtil;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils; import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
...@@ -96,15 +96,15 @@ public class LoginActivity extends LoginInterfaceImpl<LoginPresenter> implements ...@@ -96,15 +96,15 @@ public class LoginActivity extends LoginInterfaceImpl<LoginPresenter> implements
@Override @Override
public int initView(@Nullable Bundle savedInstanceState) { public int initView(@Nullable Bundle savedInstanceState) {
StatusBarUtil.setTransparent(this); // StatusBarUtil.setTransparent(this);
StatusBarUtil.setDarkMode(this); // StatusBarUtil.setDarkMode(this);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);//SOFT_INPUT_ADJUST_NOTHING getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);//SOFT_INPUT_ADJUST_NOTHING
return R.layout.user_login_activity_login; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0 return R.layout.user_login_activity_login; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
} }
@Override @Override
public void initData(@Nullable Bundle savedInstanceState) { public void initData(@Nullable Bundle savedInstanceState) {
((ImageView)findViewById(R.id.iv_top_bg)).setAdjustViewBounds(true); ((ImageView) findViewById(R.id.iv_top_bg)).setAdjustViewBounds(true);
mPresenter.requestExternalStoragePermission(); mPresenter.requestExternalStoragePermission();
//顯示記住的登錄名 //顯示記住的登錄名
if (!Objects.equals(SPUtils.get(mContext, UserConstans.LOGIN_USERNAME, ""), "")) { if (!Objects.equals(SPUtils.get(mContext, UserConstans.LOGIN_USERNAME, ""), "")) {
...@@ -169,7 +169,7 @@ public class LoginActivity extends LoginInterfaceImpl<LoginPresenter> implements ...@@ -169,7 +169,7 @@ public class LoginActivity extends LoginInterfaceImpl<LoginPresenter> implements
@Override @Override
public void onTextChanged(CharSequence s, int start, int before, int count) { public void onTextChanged(CharSequence s, int start, int before, int count) {
if (edPwd.getText() != null && edAccount.getText().toString().equals("")) { if (edPwd.getText() != null && edAccount.getText() != null && edAccount.getText().toString().equals("")) {
icClearAccount.setVisibility(View.GONE); icClearAccount.setVisibility(View.GONE);
} else { } else {
icClearAccount.setVisibility(View.VISIBLE); icClearAccount.setVisibility(View.VISIBLE);
...@@ -178,6 +178,14 @@ public class LoginActivity extends LoginInterfaceImpl<LoginPresenter> implements ...@@ -178,6 +178,14 @@ public class LoginActivity extends LoginInterfaceImpl<LoginPresenter> implements
@Override @Override
public void afterTextChanged(Editable s) { public void afterTextChanged(Editable s) {
String str = s.toString();
if (str.contains("/r") || str.contains("\n")) {
edAccount.setText(str.replace("/r", "").replace("\n", ""));
edPwd.requestFocus();
if (edPwd.getText() != null) {
edPwd.setSelection(edPwd.getText().length());
}
}
setLoginBtnState(); setLoginBtnState();
} }
}); });
...@@ -303,7 +311,8 @@ public class LoginActivity extends LoginInterfaceImpl<LoginPresenter> implements ...@@ -303,7 +311,8 @@ public class LoginActivity extends LoginInterfaceImpl<LoginPresenter> implements
//保存登陸信息 //保存登陸信息
// saveLoginInfo(loginBean); // saveLoginInfo(loginBean);
} }
//158 - 189
//158 - 189
@Override @Override
public void showChooseRestaurantDialog(List<BrandsBean.BrandsData> brandsBeans, List<BrandsBean.BrandsData> brands) { public void showChooseRestaurantDialog(List<BrandsBean.BrandsData> brandsBeans, List<BrandsBean.BrandsData> brands) {
new ChooseRestaurantDialog.BottomListSheetBuilder(mContext) new ChooseRestaurantDialog.BottomListSheetBuilder(mContext)
......
...@@ -15,10 +15,8 @@ import android.widget.TextView; ...@@ -15,10 +15,8 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat;
import androidx.viewpager2.widget.ViewPager2; import androidx.viewpager2.widget.ViewPager2;
import com.gingersoft.gsa.cloud.base.utils.StatusBarUtil;
import com.gingersoft.gsa.cloud.base.utils.encryption.Aes; import com.gingersoft.gsa.cloud.base.utils.encryption.Aes;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils; import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
import com.gingersoft.gsa.cloud.constans.UserConstans; import com.gingersoft.gsa.cloud.constans.UserConstans;
...@@ -80,7 +78,6 @@ public class WelcomeActivity extends LoginInterfaceImpl<WelcomePresenter> implem ...@@ -80,7 +78,6 @@ public class WelcomeActivity extends LoginInterfaceImpl<WelcomePresenter> implem
@Override @Override
public int initView(@Nullable Bundle savedInstanceState) { public int initView(@Nullable Bundle savedInstanceState) {
StatusBarUtil.setColorNoTranslucent(this, ContextCompat.getColor(this, R.color.white));
return R.layout.activity_welcome; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0 return R.layout.activity_welcome; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
} }
......
package com.gingersoft.gsa.cloud.login.mvp.ui.adapter;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.gingersoft.gsa.cloud.base.utils.time.TimeUtil;
import com.gingersoft.gsa.cloud.login.R;
import com.gingersoft.gsa.cloud.login.mvp.bean.LoginLimitBean;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
public class LoginLimitAdapter extends BaseQuickAdapter<LoginLimitBean, BaseViewHolder> {
public LoginLimitAdapter(@Nullable List<LoginLimitBean> data) {
super(R.layout.login_limit_item, data);
addChildClickViewIds(R.id.tv_login_limit_operation);
}
@Override
protected void convert(@NotNull BaseViewHolder baseViewHolder,LoginLimitBean loginLimitBean) {
baseViewHolder.setText(R.id.tv_login_limit_account, loginLimitBean.getUserName());
baseViewHolder.setText(R.id.tv_login_limit_time, TimeUtil.getStringByFormat(loginLimitBean.getDateTime(), TimeUtil.dateFormatYMDHMS));
}
}
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:topLeftRadius="@dimen/dp_8"
android:topRightRadius="@dimen/dp_8" />
<solid android:color="@color/white"/>
</shape>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_topleft_topright"
android:paddingBottom="@dimen/dp_30"
android:orientation="vertical">
<ImageView
android:id="@+id/iv_login_limit_back"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_40"
android:paddingLeft="@dimen/dp_10"
android:paddingRight="@dimen/dp_10"
android:src="@drawable/ic_black_back" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/dp_1"
android:background="@color/color_ccc" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="@dimen/dp_15"
android:paddingBottom="@dimen/dp_10"
android:orientation="horizontal">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="當前賬戶"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/dp_16" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="center"
android:text="登錄時間"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/dp_16" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="操作"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/dp_16" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_login_limit"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingBottom="@dimen/dp_10">
<TextView
android:id="@+id/tv_login_limit_account"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="當前賬戶"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/dp_16" />
<TextView
android:id="@+id/tv_login_limit_time"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="center"
tools:text="登錄時間"
android:textColor="@color/theme_333_color"
android:textSize="@dimen/dp_14" />
<FrameLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1">
<com.qmuiteam.qmui.alpha.QMUIAlphaTextView
android:id="@+id/tv_login_limit_operation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@color/theme_color"
android:gravity="center"
android:paddingRight="@dimen/dp_10"
android:paddingTop="@dimen/dp_5"
android:paddingBottom="@dimen/dp_5"
android:paddingLeft="@dimen/dp_10"
android:text="踢出"
android:textColor="@color/white"
android:textSize="@dimen/dp_16" />
</FrameLayout>
</LinearLayout>
\ No newline at end of file
...@@ -230,6 +230,8 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese ...@@ -230,6 +230,8 @@ public class SettlementReportActivity extends BaseActivity<SettlementReportPrese
private void showSendSettlementDialog() { private void showSendSettlementDialog() {
QMUIDialog.MessageDialogBuilder dialogBuilder = new QMUIDialog.MessageDialogBuilder(this); QMUIDialog.MessageDialogBuilder dialogBuilder = new QMUIDialog.MessageDialogBuilder(this);
dialogBuilder.setTitle("溫馨提示"); dialogBuilder.setTitle("溫馨提示");
dialogBuilder.setMessage("是否確認清機"); dialogBuilder.setMessage("是否確認清機");
dialogBuilder.addAction(0, "確認", QMUIDialogAction.ACTION_PROP_NEGATIVE, (dialog, index) -> { dialogBuilder.addAction(0, "確認", QMUIDialogAction.ACTION_PROP_NEGATIVE, (dialog, index) -> {
mPresenter.sendSettlement(type); mPresenter.sendSettlement(type);
......
package com.gingersoft.gsa.other_order_mode.data.model.bean
data class MessageBean(val code: String, val errorMsg: String, val success: Boolean = false, val sysTime: Long = 0, val data: Any? = null)
\ No newline at end of file
...@@ -319,7 +319,7 @@ class OrderDetailsActivity : BaseActivity() { ...@@ -319,7 +319,7 @@ class OrderDetailsActivity : BaseActivity() {
cancelDialogForLoading() cancelDialogForLoading()
if (it) { if (it) {
finish() finish()
ToastUtils.show(this@OrderDetailsActivity, "取消訂單成功") ToastUtils.show(this@OrderDetailsActivity, "訂單已取消")
} else { } else {
ToastUtils.show(this@OrderDetailsActivity, "取消訂單失敗") ToastUtils.show(this@OrderDetailsActivity, "取消訂單失敗")
} }
...@@ -331,7 +331,7 @@ class OrderDetailsActivity : BaseActivity() { ...@@ -331,7 +331,7 @@ class OrderDetailsActivity : BaseActivity() {
cancelDialogForLoading() cancelDialogForLoading()
if (it) { if (it) {
finish() finish()
ToastUtils.show(this@OrderDetailsActivity, "取消訂單成功") ToastUtils.show(this@OrderDetailsActivity, "訂單已取消")
} else { } else {
ToastUtils.show(this@OrderDetailsActivity, "取消訂單失敗") ToastUtils.show(this@OrderDetailsActivity, "取消訂單失敗")
} }
......
...@@ -92,7 +92,7 @@ ...@@ -92,7 +92,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="@dimen/other_order_info_dialog_content_marginLeft" android:layout_margin="@dimen/other_order_info_dialog_content_marginLeft"
android:text="@{data.order_from==2?@string/ricepon_order:@string/h5_order}" android:text="@{data.order_from==7?@string/h5_order:@string/ricepon_order}"
android:textSize="@dimen/dp_16" android:textSize="@dimen/dp_16"
android:textStyle="normal" /> android:textStyle="normal" />
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
android:layout_marginTop="@dimen/dp_10"
android:paddingLeft="@dimen/other_order_info_dialog_content_marginLeft"
android:paddingRight="@dimen/other_order_info_dialog_content_marginLeft">
<TextView
android:id="@+id/tv_item_pay_name"
style="@style/otherOrder_bill_textStyle"
android:layout_width="0dp"
android:layout_weight="0.7"
android:gravity="right"
android:layout_height="wrap_content"
tools:text="餐盒費:" />
<TextView
android:id="@+id/tv_item_pay_amount"
style="@style/otherOrder_bill_info_textStyle"
android:layout_width="0dp"
android:layout_weight="0.3"
android:layout_height="wrap_content"
tools:text="$110"
android:layout_marginLeft="@dimen/dp_5"
android:gravity="right" />
</LinearLayout>
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textSize="@dimen/dp_16" android:textSize="@dimen/dp_16"
android:text="@{data.order_from==2?@string/ricepon_order:@string/h5_order}" android:text="@{data.order_from==7?@string/h5_order:@string/ricepon_order}"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
......
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/other_order_info_dialog_content_marginLeft" android:layout_marginLeft="@dimen/other_order_info_dialog_content_marginLeft"
android:text="@{data.order_from==2?@string/ricepon_order:@string/h5_order}" android:text="@{data.order_from==7?@string/h5_order:@string/ricepon_order}"
android:textSize="@dimen/dp_16" android:textSize="@dimen/dp_16"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
......
...@@ -192,5 +192,4 @@ ...@@ -192,5 +192,4 @@
<item name="app_skin_progress_bar_bg_color">@color/qmui_config_color_gray_8</item> <item name="app_skin_progress_bar_bg_color">@color/qmui_config_color_gray_8</item>
<item name="app_skin_progress_bar_progress_color">@color/qmui_config_color_gray_1</item> <item name="app_skin_progress_bar_progress_color">@color/qmui_config_color_gray_1</item>
</style> </style>
</resources> </resources>
\ No newline at end of file
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