Commit a8ba4a08 by Wyh

8.8 最大登陸數限制

Signed-off-by: Wyh <1239658231>
parent f920b567
......@@ -32,13 +32,10 @@ import com.jess.arms.integration.lifecycle.ActivityLifecycleable;
import com.jess.arms.mvp.IPresenter;
import com.jess.arms.utils.AndroidWorkaround;
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 javax.inject.Inject;
import androidx.lifecycle.Lifecycle;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import io.reactivex.subjects.BehaviorSubject;
......@@ -84,7 +81,6 @@ public abstract class BaseActivity<P extends IPresenter> extends AppCompatActivi
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
View view = convertAutoView(name, context, attrs);
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 {
if (productnameBean.getChild() != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX childBeanX : productnameBean.getChild()) {
if (childBeanX != null) {
//判斷是否打印,為true的時候會同時打印主項
//判斷是否選擇了打印至賬單,為true的時候會同時打印主項
if (childBeanX.getPrintToBill() == 1) {
isCheck = true;
break;
}
if (childBeanX.getChild() != null) {
for (OrderDetails.DataBean.PRODUCTNAMEBean.ChildBeanX.ChildBean childBean : childBeanX.getChild()) {
//判斷是否打印,為true的時候會同時打印主
//判斷是否選擇了打印至賬單,為true的時候會同時打印上一項細
if (childBean.getPrintToBill() == 1) {
isCheck2 = true;
break;
......
......@@ -30,7 +30,7 @@ public class RestaurantInfoUtils {
public static int getRestaurantSize(Context context) {
int size = 0;
List<BrandsBean.BrandsData> brandsBeans = getBrandList(context);
if(brandsBeans == null){
if (brandsBeans == null) {
return 0;
}
for (int i = 0; i < brandsBeans.size(); i++) {
......@@ -40,12 +40,22 @@ public class RestaurantInfoUtils {
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) {
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 brands.get(i);
}
}
return null;
......
package com.gingersoft.gsa.cloud.base.utils.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 java.util.ArrayList;
import java.util.List;
import java.util.Map;
......@@ -55,19 +59,37 @@ public class GsonUtils {
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
* @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());
public static <T> List<T> jsonToList(String json, Class<T> cls) {
ArrayList<T> mList = new ArrayList<>();
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;
import android.widget.ImageView;
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.load.engine.DiskCacheStrategy;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
......@@ -29,13 +33,10 @@ import java.util.List;
/**
* Created by Wyh on 2019/11/1.
*/
public abstract class DialogUtils {
// private Context mContext;
public abstract class DialogUtils implements LifecycleObserver {
private static Dialog dialog;
private View view;
private int style = R.style.PhotoDialog;
// private int mWidth = WindowManager.LayoutParams.WRAP_CONTENT;
// private int mHeight = WindowManager.LayoutParams.WRAP_CONTENT;
private ViewHepler viewHepler;
public DialogUtils(Context mContext, int xmlLayout) {
......@@ -44,7 +45,7 @@ public abstract class DialogUtils {
}
private void init(Context context) {
dismiss();
// dismiss();
dialog = new Dialog(context);
viewHepler = getViewHepler(context);
initLayout(viewHepler, dialog);
......@@ -150,6 +151,7 @@ public abstract class DialogUtils {
return dialog;
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public DialogUtils dismiss() {
if (dialog != null)
dialog.dismiss();
......
package com.gingersoft.gsa.cloud.globalconfig.applyOptions;
import android.util.Log;
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.constans.AppConstans;
import com.jess.arms.http.GlobalHttpHandler;
import com.jess.arms.utils.DeviceUtils;
import okhttp3.Headers;
import okhttp3.Interceptor;
import okhttp3.Request;
......@@ -46,9 +45,11 @@ public class MyGlobalHttpHandler implements GlobalHttpHandler {
Headers headers = request.headers();
for (int i = 0; i < headers.size(); i++) {
builder.set(headers.name(i), headers.value(i));
}
if (GsaCloudApplication.isLogin)
if(GsaCloudApplication.isLogin){
builder.set("token", token);
}
// builder.set("Domain-Name", "common");
return chain.request().newBuilder()
.headers(builder.build())
......
......@@ -25,6 +25,4 @@
<item name="layout_for_test" 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>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.gingersoft.gsa.cloud.login">
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gingersoft.gsa.cloud.login">
<application
android:name="com.gingersoft.gsa.cloud.base.application.GsaCloudApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher"
android:label="@string/user_login_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<application
android:name="com.gingersoft.gsa.cloud.base.application.GsaCloudApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher"
android:label="@string/user_login_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".mvp.ui.activity.mvp.ui.activity.LoginActivity" />
<activity android:name=".mvp.ui.activity.mvp.ui.activity.SwitchServerActivity" />
<activity android:name=".mvp.ui.activity.mvp.ui.activity.WelcomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<activity android:name=".mvp.ui.activity.mvp.ui.activity.LoginActivity"
android:launchMode="singleTop"/>
<activity android:name=".mvp.ui.activity.mvp.ui.activity.SwitchServerActivity" />
<activity android:name=".mvp.ui.activity.mvp.ui.activity.WelcomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".mvp.ui.activity.mvp.ui.activity.LoginOutActivity" />
<activity android:name=".mvp.ui.activity.mvp.ui.activity.RecoverPasswordActivity" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".mvp.ui.activity.mvp.ui.activity.ChooseRestaurantActivity"/>
<activity android:name=".mvp.ui.activity.mvp.ui.activity.LoginOutActivity" />
<activity android:name=".mvp.ui.activity.mvp.ui.activity.RecoverPasswordActivity" />
<meta-data
android:name="com.gingersoft.gsa.cloud.globalconfig.GlobalConfiguration"
android:value="ConfigModule" />
<meta-data
android:name="design_width_in_dp"
android:value="360"/>
<meta-data
android:name="design_height_in_dp"
android:value="640"/>
</application>
<meta-data
android:name="com.gingersoft.gsa.cloud.globalconfig.GlobalConfiguration"
android:value="ConfigModule" />
<meta-data
android:name="design_width_in_dp"
android:value="360" />
<meta-data
android:name="design_height_in_dp"
android:value="640" />
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_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>
\ No newline at end of file
</manifest>
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;
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.LoginBean;
import com.jess.arms.mvp.IModel;
......@@ -33,6 +35,12 @@ public interface BaseLoginContract {
void saveRestaurantListInfo(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返回的数据,无需关心内部细节,即是否使用缓存
......@@ -40,5 +48,10 @@ public interface BaseLoginContract {
Observable<LoginBean> login(RequestBody requestBody);
Observable<BrandsBean> getRestaurantList();
Observable<PublicBean> getLoginLimit(int restaurantId);
Observable<Object> loginOut(int userId, RequestBody requestBody);
}
}
package com.gingersoft.gsa.cloud.login.mvp.contract;
import android.app.Dialog;
import android.content.DialogInterface;
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.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.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.widget.DialogUtils;
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.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.adapter.LoginLimitAdapter;
import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
import com.gingersoft.gsa.cloud.ui.widget.dialog.ChooseRestaurantDialog;
......@@ -30,27 +48,30 @@ public abstract class LoginInterfaceImpl<P extends BaseLoginPresenter> extends B
if (brands != null) {
String brandRestaurantInfos = JsonUtils.toJson(brands);
GsaCloudApplication.setBrandRestaurantInfos(mContext, brandRestaurantInfos);
restaurantSize = getRestaurantSize(brands);
restaurantSize = RestaurantInfoUtils.getRestaurantSize(brands);
brandsBeans.addAll(brands);
}
boolean autoLogin = (boolean) SPUtils.get(mContext, UserConstans.AUTO_LOGIN, false);
if (autoLogin) {
int restaurantId = GsaCloudApplication.getRestaurantId(this);
if (restaurantId != 0) {
//有選擇餐廳,直接跳轉首頁
jumpMainActivity();
//上一次進入app有選擇餐廳,通過餐廳ID獲取允許的最大登陸數
mPresenter.getLoginLimit(restaurantId, false);
// jumpMainActivity();
return;
}
}
if (restaurantSize == 1) {
//只有一個品牌是直接進下載頁面
BrandsBean.BrandsData brandsBean = getOnlyBrand(brands);
BrandsBean.BrandsData.RestaurantsBean restaurantsBean = getOnlyRestaurant(brands);
BrandsBean.BrandsData brandsBean = RestaurantInfoUtils.getOnlyBrand(brands);
BrandsBean.BrandsData.RestaurantsBean restaurantsBean = RestaurantInfoUtils.getOnlyRestaurant(brands);
if (brandsBean != null) {
saveBrandAndRestaurantInfo(brandsBean.getBrandId(), brandsBean.getBrandName(), restaurantsBean);
//通過餐廳ID獲取允許的最大登陸數
mPresenter.getLoginLimit(restaurantsBean.getRestaurantId(), true);
}
jumpDownloadActivity();
// jumpDownloadActivity();
} else {
showChooseRestaurantDialog(brandsBeans, brands);
}
......@@ -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) {
BrandsBean.BrandsData brandsBean = getBrandByRestaurantId(brands, item.getRestaurantId());
BrandsBean.BrandsData brandsBean = RestaurantInfoUtils.getBrandByRestaurantId(brands, item.getRestaurantId());
if (brandsBean != null) {
saveBrandAndRestaurantInfo(brandsBean.getBrandId(), brandsBean.getBrandName(), item);
mPresenter.getLoginLimit(item.getRestaurantId(), true);
}
dialog.dismiss();
jumpDownloadActivity();
// jumpDownloadActivity();
}
protected void saveBrandAndRestaurantInfo(int brandId, String brandName, BrandsBean.BrandsData.RestaurantsBean restaurantsBean) {
GsaCloudApplication.setBrandId(mContext, brandId);
GsaCloudApplication.setBrandName(mContext, brandName);
GsaCloudApplication.setRestaurantId(mContext, restaurantsBean.getRestaurantId());
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);
}
}
}
if (restaurantsBean != null) {
GsaCloudApplication.setRestaurantId(mContext, restaurantsBean.getRestaurantId());
GsaCloudApplication.setRestaurantName(mContext, restaurantsBean.getRestaurantName());
GsaCloudApplication.setGsPosShopId(mContext, restaurantsBean.getGsPosShopId());
}
return null;
}
private void jumpDownloadActivity() {
public void jumpDownloadActivity() {
CC.obtainBuilder("Component.Download")
.setActionName("showDownloadActivity")
.addParam("fromPage", 1)
......@@ -144,11 +124,56 @@ public abstract class LoginInterfaceImpl<P extends BaseLoginPresenter> extends B
killMyself();
}
private void jumpMainActivity() {
public void jumpMainActivity() {
CC.obtainBuilder("Component.Main")
.setActionName("showMainActivity")
.build()
.call();
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;
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.server.LoginService;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject;
import io.reactivex.Observable;
import okhttp3.RequestBody;
/**
* ================================================
......@@ -30,34 +20,9 @@ import okhttp3.RequestBody;
* ================================================
*/
@ActivityScope
public class LoginModel extends BaseModel implements LoginContract.Model{
@Inject
Gson mGson;
@Inject
Application mApplication;
public class LoginModel extends BaseLoginModel implements LoginContract.Model{
@Inject
public LoginModel(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();
}
}
\ No newline at end of file
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.server.LoginService;
import com.google.gson.Gson;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.integration.IRepositoryManager;
import com.jess.arms.mvp.BaseModel;
import javax.inject.Inject;
import io.reactivex.Observable;
import okhttp3.RequestBody;
@ActivityScope
public class WelcomeModel extends BaseModel implements WelcomeContract.Model {
@Inject
Gson mGson;
@Inject
Application mApplication;
public class WelcomeModel extends BaseLoginModel implements WelcomeContract.Model {
@Inject
public WelcomeModel(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();
}
}
\ No newline at end of file
......@@ -3,22 +3,31 @@ package com.gingersoft.gsa.cloud.login.mvp.presenter;
import android.app.Activity;
import android.app.Application;
import android.content.Intent;
import android.util.Log;
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.bean.PublicBean;
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.ui.activity.mvp.ui.activity.LoginActivity;
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.google.gson.reflect.TypeToken;
import com.jess.arms.di.scope.ActivityScope;
import com.jess.arms.http.imageloader.ImageLoader;
import com.jess.arms.integration.AppManager;
import com.jess.arms.mvp.BasePresenter;
import com.jess.arms.utils.RxLifecycleUtils;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.Scheduler;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.annotations.NonNull;
import io.reactivex.schedulers.Schedulers;
......@@ -97,7 +106,7 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas
@Override
public void onError(Throwable t) {
super.onError(t);
OkHttp3Utils.noticePersonnel(AppConstans.RP_LOGIN_ERROR, "登陸報錯:"+t.getMessage());
OkHttp3Utils.noticePersonnel(AppConstans.RP_LOGIN_ERROR, "登陸報錯:" + t.getMessage());
if (IAcitivity instanceof LoginActivity) {
} else {
mRootView.launchActivity(new Intent(IAcitivity, LoginActivity.class));
......@@ -107,7 +116,7 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas
}
public void getRestaurantList(){
public void getRestaurantList() {
mModel.getRestaurantList()
.subscribeOn(Schedulers.io())
.subscribeOn(AndroidSchedulers.mainThread())
......@@ -119,7 +128,7 @@ public class BaseLoginPresenter<M extends BaseLoginContract.Model, V extends Bas
@Override
public void onNext(@NonNull BrandsBean info) {
if(info != null){
if (info != null) {
mRootView.saveRestaurantListInfo(info.getData());
} else {
mRootView.saveRestaurantListInfo(null);
......@@ -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;
import com.gingersoft.gsa.cloud.bean.PublicBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.BrandsBean;
import com.gingersoft.gsa.cloud.ui.bean.mode.LoginBean;
......@@ -8,7 +9,10 @@ import io.reactivex.Observable;
import me.jessyan.retrofiturlmanager.RetrofitUrlManager;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.Headers;
import retrofit2.http.POST;
......@@ -17,9 +21,6 @@ import retrofit2.http.POST;
*/
public interface LoginService {
// @POST("gsa/login" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
// Observable<LoginBean> login(@Body RequestBody requestBody);
@Headers({"Domain-Name: system_url"})
@POST("public/user/login" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
Observable<LoginBean> login(@Body RequestBody requestBody);
......@@ -27,5 +28,10 @@ public interface LoginService {
@GET("user/brand/get" + RetrofitUrlManager.IDENTIFICATION_PATH_SIZE + 2)
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;
import android.text.TextWatcher;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.CheckBox;
......@@ -15,7 +16,6 @@ import android.widget.ImageView;
import androidx.annotation.NonNull;
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.log.LogUtil;
import com.gingersoft.gsa.cloud.base.utils.other.SPUtils;
......@@ -96,15 +96,15 @@ public class LoginActivity extends LoginInterfaceImpl<LoginPresenter> implements
@Override
public int initView(@Nullable Bundle savedInstanceState) {
StatusBarUtil.setTransparent(this);
StatusBarUtil.setDarkMode(this);
// StatusBarUtil.setTransparent(this);
// StatusBarUtil.setDarkMode(this);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);//SOFT_INPUT_ADJUST_NOTHING
return R.layout.user_login_activity_login; //如果你不需要框架帮你设置 setContentView(id) 需要自行设置,请返回 0
}
@Override
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();
//顯示記住的登錄名
if (!Objects.equals(SPUtils.get(mContext, UserConstans.LOGIN_USERNAME, ""), "")) {
......@@ -169,7 +169,7 @@ public class LoginActivity extends LoginInterfaceImpl<LoginPresenter> implements
@Override
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);
} else {
icClearAccount.setVisibility(View.VISIBLE);
......@@ -178,6 +178,14 @@ public class LoginActivity extends LoginInterfaceImpl<LoginPresenter> implements
@Override
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();
}
});
......@@ -303,7 +311,8 @@ public class LoginActivity extends LoginInterfaceImpl<LoginPresenter> implements
//保存登陸信息
// saveLoginInfo(loginBean);
}
//158 - 189
//158 - 189
@Override
public void showChooseRestaurantDialog(List<BrandsBean.BrandsData> brandsBeans, List<BrandsBean.BrandsData> brands) {
new ChooseRestaurantDialog.BottomListSheetBuilder(mContext)
......
......@@ -15,10 +15,8 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat;
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.other.SPUtils;
import com.gingersoft.gsa.cloud.constans.UserConstans;
......@@ -80,7 +78,6 @@ public class WelcomeActivity extends LoginInterfaceImpl<WelcomePresenter> implem
@Override
public int initView(@Nullable Bundle savedInstanceState) {
StatusBarUtil.setColorNoTranslucent(this, ContextCompat.getColor(this, R.color.white));
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
private void showSendSettlementDialog() {
QMUIDialog.MessageDialogBuilder dialogBuilder = new QMUIDialog.MessageDialogBuilder(this);
dialogBuilder.setTitle("溫馨提示");
dialogBuilder.setMessage("是否確認清機");
dialogBuilder.addAction(0, "確認", QMUIDialogAction.ACTION_PROP_NEGATIVE, (dialog, index) -> {
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() {
cancelDialogForLoading()
if (it) {
finish()
ToastUtils.show(this@OrderDetailsActivity, "取消訂單成功")
ToastUtils.show(this@OrderDetailsActivity, "訂單已取消")
} else {
ToastUtils.show(this@OrderDetailsActivity, "取消訂單失敗")
}
......@@ -331,7 +331,7 @@ class OrderDetailsActivity : BaseActivity() {
cancelDialogForLoading()
if (it) {
finish()
ToastUtils.show(this@OrderDetailsActivity, "取消訂單成功")
ToastUtils.show(this@OrderDetailsActivity, "訂單已取消")
} else {
ToastUtils.show(this@OrderDetailsActivity, "取消訂單失敗")
}
......
......@@ -92,7 +92,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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: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 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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_constraintTop_toTopOf="parent" />
......
......@@ -65,7 +65,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
......
......@@ -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_progress_color">@color/qmui_config_color_gray_1</item>
</style>
</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