diff --git a/README.md b/README.md
deleted file mode 100644
index 6ea72fd..0000000
--- a/README.md
+++ /dev/null
@@ -1,46 +0,0 @@
-LeanbackTvSample
-=====
-
-[![简书](https://img.shields.io/badge/%E7%AE%80%E4%B9%A6-iSuperRed-brightgreen.svg)](http://www.jianshu.com/u/c2e31017da0e)
-| [简体中文文档][1]
-
-LeanbackTvSample is a smart TV desktop application based on the Android platform written by Google's open source framework Leanback.
-
-
-
-
-
-效果图
--------
-
-
-
-
-
-
-
-License
--------
-```
-Copyright (c) 2019 iSuperRed
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-```
-
-[1]: https://www.jianshu.com/p/b286e087b074
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 21df5a1..237748d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -60,10 +60,21 @@ dependencies {
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
-
// 网络请求框架:https://github.com/getActivity/EasyHttp
implementation 'com.github.getActivity:EasyHttp:11.2'
implementation 'com.squareup.okhttp3:okhttp:3.12.13'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.github.getActivity:GsonFactory:6.2'
+
+ implementation 'com.github.li-xiaojun:XPopup:2.9.19'
+ implementation 'com.google.android.material:material:1.4.0'
+ implementation 'androidx.recyclerview:recyclerview:1.2.1'
+
+ //工具类
+ implementation 'com.blankj:utilcodex:1.30.6'
+ //微信开源项目,替代SP
+ implementation 'com.tencent:mmkv:1.0.22'
+ //拼音库
+ implementation 'com.github.SilenceDut:jpinyin:v1.0'
+
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 00bf821..19e9151 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -43,7 +43,7 @@
android:name="com.unionmed.unionmedtv.activity.AppInstalledActivity"
android:screenOrientation="landscape" />
diff --git a/app/src/main/java/com/unionmed/unionmedtv/api/GetCodeApi.java b/app/src/main/java/com/unionmed/unionmedtv/api/GetCodeApi.java
new file mode 100644
index 0000000..1cc6656
--- /dev/null
+++ b/app/src/main/java/com/unionmed/unionmedtv/api/GetCodeApi.java
@@ -0,0 +1,36 @@
+package com.unionmed.unionmedtv.api;
+
+
+import androidx.annotation.NonNull;
+
+import com.hjq.http.config.IRequestApi;
+import com.hjq.http.config.IRequestType;
+import com.hjq.http.model.BodyType;
+
+import java.util.List;
+
+/**
+ * desc : 发送短信验证码
+ */
+public final class GetCodeApi implements IRequestApi, IRequestType {
+
+ @NonNull
+ @Override
+ public BodyType getBodyType() {
+ return BodyType.JSON;
+ }
+
+ @NonNull
+ @Override
+ public String getApi() {
+ return "/index/sendMessageCode";
+ }
+
+ private String mobile;
+ private int type;
+
+ public GetCodeApi(String mobile, int type) {
+ this.mobile = mobile;
+ this.type = type;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/unionmed/unionmedtv/api/MobileLoginApi.java b/app/src/main/java/com/unionmed/unionmedtv/api/MobileLoginApi.java
new file mode 100644
index 0000000..3c2e271
--- /dev/null
+++ b/app/src/main/java/com/unionmed/unionmedtv/api/MobileLoginApi.java
@@ -0,0 +1,490 @@
+package com.unionmed.unionmedtv.api;
+
+
+import androidx.annotation.NonNull;
+
+import com.github.stuxuhai.jpinyin.PinyinException;
+import com.github.stuxuhai.jpinyin.PinyinHelper;
+import com.hjq.http.config.IRequestApi;
+import com.hjq.http.config.IRequestType;
+import com.hjq.http.model.BodyType;
+
+import java.util.Objects;
+
+/**
+ * desc : 发送短信验证码
+ */
+public final class MobileLoginApi implements IRequestApi, IRequestType {
+
+ @NonNull
+ @Override
+ public BodyType getBodyType() {
+ return BodyType.JSON;
+ }
+
+ @NonNull
+ @Override
+ public String getApi() {
+ return "/index/sendMessageCode";
+ }
+
+ private String mobile;
+ private String code;
+
+ public MobileLoginApi(String mobile, String code) {
+ this.mobile = mobile;
+ this.code = code;
+ }
+
+ public final static class TokenBean {
+
+ /**
+ * name : 林瑞金
+ * headImg : null
+ * mobile : 15905997060
+ * preRegion : {"pkey":"15","ip":"47.118.51.167","port":"8065","fmsvr":"rtmp://10.120.224.5/livepkgr/","msgsvr":"http://120.195.56.245:3190/msg_server","ipsvr":"https://mobile.union-med.net/app/appintegrate/v1.8","msgip":"120.195.56.245","oder_num":4,"memo":"福州","svalue":"rtmp://10.120.224.5/livepkgr/","filesvr":"http://47.118.51.167:8999/eleand/"}
+ * isAtuh : 1
+ * isuse : null
+ * online : null
+ * faceAuthFlag : 1
+ * upkey : 4262
+ * pkey : null
+ * identity_id : 350500199107135035
+ * isSetPsw : 0
+ * im_useraccount : 4262
+ * im_password : null
+ * im_token : aMoc5MIihofCrtEW13iC7YL9uCPhRbbiDN4O4yV6HZC1i+9NneL2fU4Qn0g=
+ * currentAddress : {"addressKey":"435","pkey":"4262","name":"拒绝","sex":null,"mobile":"15905997060","address":"福建省福州市鼓楼区白马北路201-207号一号3号楼","detailAddress":"12","isCurrent":"1","isDefault":"1","xzqh":"3501","createTime":"1682577679","isDelete":"0"}
+ * userType : null
+ * token : c6011b69-cb6d-410f-a24f-75806cebcca0
+ */
+
+ private String name;
+ private Object headImg;
+ private String mobile;
+ private City preRegion;
+ private String isAtuh;
+ private Object isuse;
+ private Object online;
+ private int faceAuthFlag;
+ private String upkey;
+ private Object pkey;
+ private String identity_id;
+ private String isSetPsw;
+ private String im_useraccount;
+ private String im_password;
+ private String im_token;
+ private CurrentAddressBean currentAddress;
+ private Object userType;
+ private String token;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Object getHeadImg() {
+ return headImg;
+ }
+
+ public void setHeadImg(Object headImg) {
+ this.headImg = headImg;
+ }
+
+ public String getMobile() {
+ return mobile;
+ }
+
+ public void setMobile(String mobile) {
+ this.mobile = mobile;
+ }
+
+ public City getPreRegion() {
+ return preRegion;
+ }
+
+ public void setPreRegion(City preRegion) {
+ this.preRegion = preRegion;
+ }
+
+ public String getIsAtuh() {
+ return isAtuh;
+ }
+
+ public void setIsAtuh(String isAtuh) {
+ this.isAtuh = isAtuh;
+ }
+
+ public Object getIsuse() {
+ return isuse;
+ }
+
+ public void setIsuse(Object isuse) {
+ this.isuse = isuse;
+ }
+
+ public Object getOnline() {
+ return online;
+ }
+
+ public void setOnline(Object online) {
+ this.online = online;
+ }
+
+ public int getFaceAuthFlag() {
+ return faceAuthFlag;
+ }
+
+ public void setFaceAuthFlag(int faceAuthFlag) {
+ this.faceAuthFlag = faceAuthFlag;
+ }
+
+ public String getUpkey() {
+ return upkey;
+ }
+
+ public void setUpkey(String upkey) {
+ this.upkey = upkey;
+ }
+
+ public Object getPkey() {
+ return pkey;
+ }
+
+ public void setPkey(Object pkey) {
+ this.pkey = pkey;
+ }
+
+ public String getIdentity_id() {
+ return identity_id;
+ }
+
+ public void setIdentity_id(String identity_id) {
+ this.identity_id = identity_id;
+ }
+
+ public String getIsSetPsw() {
+ return isSetPsw;
+ }
+
+ public void setIsSetPsw(String isSetPsw) {
+ this.isSetPsw = isSetPsw;
+ }
+
+ public String getIm_useraccount() {
+ return im_useraccount;
+ }
+
+ public void setIm_useraccount(String im_useraccount) {
+ this.im_useraccount = im_useraccount;
+ }
+
+ public String getIm_password() {
+ return im_password;
+ }
+
+ public void setIm_password(String im_password) {
+ this.im_password = im_password;
+ }
+
+ public String getIm_token() {
+ return im_token;
+ }
+
+ public void setIm_token(String im_token) {
+ this.im_token = im_token;
+ }
+
+ public CurrentAddressBean getCurrentAddress() {
+ return currentAddress;
+ }
+
+ public void setCurrentAddress(CurrentAddressBean currentAddress) {
+ this.currentAddress = currentAddress;
+ }
+
+ public Object getUserType() {
+ return userType;
+ }
+
+ public void setUserType(Object userType) {
+ this.userType = userType;
+ }
+
+ public String getToken() {
+ return token;
+ }
+
+ public void setToken(String token) {
+ this.token = token;
+ }
+
+ public static class City implements Comparable{
+ /**
+ * pkey : 15
+ * ip : 47.118.51.167
+ * port : 8065
+ * fmsvr : rtmp://10.120.224.5/livepkgr/
+ * msgsvr : http://120.195.56.245:3190/msg_server
+ * ipsvr : https://mobile.union-med.net/app/appintegrate/v1.8
+ * msgip : 120.195.56.245
+ * oder_num : 4
+ * memo : 福州
+ * svalue : rtmp://10.120.224.5/livepkgr/
+ * filesvr : http://47.118.51.167:8999/eleand/
+ */
+
+ private String pkey;
+ private String ip;
+ private String port;
+ private String fmsvr;
+ private String msgsvr;
+ private String ipsvr;
+ private String msgip;
+ private int oder_num;
+ private String memo;
+ private String svalue;
+ private String filesvr;
+
+ public String getPkey() {
+ return pkey;
+ }
+
+ public void setPkey(String pkey) {
+ this.pkey = pkey;
+ }
+
+ public String getIp() {
+ return ip;
+ }
+
+ public void setIp(String ip) {
+ this.ip = ip;
+ }
+
+ public String getPort() {
+ return port;
+ }
+
+ public void setPort(String port) {
+ this.port = port;
+ }
+
+ public String getFmsvr() {
+ return fmsvr;
+ }
+
+ public void setFmsvr(String fmsvr) {
+ this.fmsvr = fmsvr;
+ }
+
+ public String getMsgsvr() {
+ return msgsvr;
+ }
+
+ public void setMsgsvr(String msgsvr) {
+ this.msgsvr = msgsvr;
+ }
+
+ public String getIpsvr() {
+ return ipsvr;
+ }
+
+ public void setIpsvr(String ipsvr) {
+ this.ipsvr = ipsvr;
+ }
+
+ public String getMsgip() {
+ return msgip;
+ }
+
+ public void setMsgip(String msgip) {
+ this.msgip = msgip;
+ }
+
+ public int getOder_num() {
+ return oder_num;
+ }
+
+ public void setOder_num(int oder_num) {
+ this.oder_num = oder_num;
+ }
+
+ public String getMemo() {
+ return memo;
+ }
+
+ public void setMemo(String memo) {
+ this.memo = memo;
+ }
+
+ public String getSvalue() {
+ return svalue;
+ }
+
+ public void setSvalue(String svalue) {
+ this.svalue = svalue;
+ }
+
+ public String getFilesvr() {
+ return filesvr;
+ }
+
+ public void setFilesvr(String filesvr) {
+ this.filesvr = filesvr;
+ }
+
+ @Override
+ public int compareTo(City city) {
+ try {
+ return PinyinHelper.getShortPinyin(this.memo)
+ .compareTo(PinyinHelper.getShortPinyin(city.memo));
+ } catch (PinyinException e) {
+ e.printStackTrace();
+ }
+ return 0;
+ }
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ City city = (City) o;
+ return memo.equals(city.memo);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(memo);
+ }
+ }
+
+ public static class CurrentAddressBean {
+ /**
+ * addressKey : 435
+ * pkey : 4262
+ * name : 拒绝
+ * sex : null
+ * mobile : 15905997060
+ * address : 福建省福州市鼓楼区白马北路201-207号一号3号楼
+ * detailAddress : 12
+ * isCurrent : 1
+ * isDefault : 1
+ * xzqh : 3501
+ * createTime : 1682577679
+ * isDelete : 0
+ */
+
+ private String addressKey;
+ private String pkey;
+ private String name;
+ private Object sex;
+ private String mobile;
+ private String address;
+ private String detailAddress;
+ private String isCurrent;
+ private String isDefault;
+ private String xzqh;
+ private String createTime;
+ private String isDelete;
+
+ public String getAddressKey() {
+ return addressKey;
+ }
+
+ public void setAddressKey(String addressKey) {
+ this.addressKey = addressKey;
+ }
+
+ public String getPkey() {
+ return pkey;
+ }
+
+ public void setPkey(String pkey) {
+ this.pkey = pkey;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Object getSex() {
+ return sex;
+ }
+
+ public void setSex(Object sex) {
+ this.sex = sex;
+ }
+
+ public String getMobile() {
+ return mobile;
+ }
+
+ public void setMobile(String mobile) {
+ this.mobile = mobile;
+ }
+
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public String getDetailAddress() {
+ return detailAddress;
+ }
+
+ public void setDetailAddress(String detailAddress) {
+ this.detailAddress = detailAddress;
+ }
+
+ public String getIsCurrent() {
+ return isCurrent;
+ }
+
+ public void setIsCurrent(String isCurrent) {
+ this.isCurrent = isCurrent;
+ }
+
+ public String getIsDefault() {
+ return isDefault;
+ }
+
+ public void setIsDefault(String isDefault) {
+ this.isDefault = isDefault;
+ }
+
+ public String getXzqh() {
+ return xzqh;
+ }
+
+ public void setXzqh(String xzqh) {
+ this.xzqh = xzqh;
+ }
+
+ public String getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(String createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getIsDelete() {
+ return isDelete;
+ }
+
+ public void setIsDelete(String isDelete) {
+ this.isDelete = isDelete;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/unionmed/unionmedtv/dialog/TipDialog.java b/app/src/main/java/com/unionmed/unionmedtv/dialog/TipDialog.java
new file mode 100644
index 0000000..6329924
--- /dev/null
+++ b/app/src/main/java/com/unionmed/unionmedtv/dialog/TipDialog.java
@@ -0,0 +1,64 @@
+package com.unionmed.unionmedtv.dialog;
+
+import android.content.Context;
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+
+import com.lxj.xpopup.core.CenterPopupView;
+import com.unionmed.unionmedtv.R;
+
+public class TipDialog extends CenterPopupView {
+ private TextView tv_cancel;
+ private TextView tv_title;
+ private TextView tv_confirm;
+ private String title;
+ private DialogClick dialogClick;
+
+ public TipDialog(@NonNull Context context, String title, DialogClick dialogClick) {
+ super(context);
+ this.title = title;
+ this.dialogClick = dialogClick;
+ }
+
+ @Override
+ protected int getImplLayoutId() {
+ return R.layout.dialog_tip;
+ }
+
+ @Override
+ protected void onCreate() {
+ super.onCreate();
+ tv_cancel = findViewById(R.id.tv_cancel);
+ tv_cancel.requestFocus();
+ tv_cancel.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (dialogClick != null) {
+ dialogClick.cancel();
+ }
+ dialog.dismiss();
+ }
+ });
+ tv_title = findViewById(R.id.tv_title);
+ tv_confirm = findViewById(R.id.tv_confirm);
+ tv_confirm.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ if (dialogClick != null) {
+ dialogClick.confirm();
+ }
+ dialog.dismiss();
+ }
+ });
+ tv_title = findViewById(R.id.tv_title);
+ tv_title.setText(title);
+ }
+
+ public interface DialogClick {
+ void cancel();
+
+ void confirm();
+ }
+}
diff --git a/app/src/main/java/com/unionmed/unionmedtv/fragment/ContentFragment.java b/app/src/main/java/com/unionmed/unionmedtv/fragment/ContentFragment.java
index 3bc29e4..0aed556 100644
--- a/app/src/main/java/com/unionmed/unionmedtv/fragment/ContentFragment.java
+++ b/app/src/main/java/com/unionmed/unionmedtv/fragment/ContentFragment.java
@@ -92,7 +92,7 @@ public class ContentFragment extends BaseLazyLoadFragment {
Content.DataBean dataBean = dataBeans.get(i);
addItem(dataBean);
}
-// addFooter();
+ addFooter();
mPbLoading.setVisibility(View.GONE);
mVerticalGridView.setVisibility(View.VISIBLE);
break;
@@ -252,12 +252,11 @@ public class ContentFragment extends BaseLazyLoadFragment {
@Override
public void onSucceed(HttpData> stringHttpData) {
LogUtils.e("成功:" + stringHttpData);
- if(stringHttpData.getCode()==200){
+ if(stringHttpData.getData().getCode()==200){
List doctorInfo = stringHttpData.getData().getData().getMember();
if (doctorInfo == null) {
return;
}
-
mAdapter.setItems(doctorInfo,null);
mPbLoading.setVisibility(View.GONE);
mVerticalGridView.setVisibility(View.VISIBLE);
@@ -306,17 +305,17 @@ public class ContentFragment extends BaseLazyLoadFragment {
break;
}
-// if (json == null) {
-// return;
-// }
-// Content content = LocalJsonResolutionUtil.JsonToObject(json, Content.class);
-// final Message msg = Message.obtain();
-// msg.what = MSG_ADD_ITEM;
-// Bundle b = new Bundle();
-// b.putParcelable(MSG_BUNDLE_KEY_ADD_ITEM, content);
-// msg.setData(b);
-// //延迟1秒模拟加载数据过程
-// mHandler.sendMessageDelayed(msg, 1000);
+ if (json == null) {
+ return;
+ }
+ Content content = LocalJsonResolutionUtil.JsonToObject(json, Content.class);
+ final Message msg = Message.obtain();
+ msg.what = MSG_ADD_ITEM;
+ Bundle b = new Bundle();
+ b.putParcelable(MSG_BUNDLE_KEY_ADD_ITEM, content);
+ msg.setData(b);
+ //延迟1秒模拟加载数据过程
+ mHandler.sendMessageDelayed(msg, 1000);
}
});
diff --git a/app/src/main/java/com/unionmed/unionmedtv/login/activity/LoginActivity.java b/app/src/main/java/com/unionmed/unionmedtv/login/activity/LoginActivity.java
new file mode 100644
index 0000000..5d52f52
--- /dev/null
+++ b/app/src/main/java/com/unionmed/unionmedtv/login/activity/LoginActivity.java
@@ -0,0 +1,21 @@
+package com.unionmed.unionmedtv.login.activity;
+
+import android.os.Bundle;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.FragmentActivity;
+
+import com.unionmed.unionmedtv.R;
+import com.unionmed.unionmedtv.login.activity.fragment.LoginPhoneFragment;
+
+public class LoginActivity extends FragmentActivity {
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_login);
+ if (savedInstanceState == null) {
+ getSupportFragmentManager().beginTransaction()
+ .replace(R.id.main_browse_fragment, new LoginPhoneFragment())
+ .commitNow();
+ }
+ }
+}
diff --git a/app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginAccountFragment.java b/app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginAccountFragment.java
new file mode 100644
index 0000000..57188ed
--- /dev/null
+++ b/app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginAccountFragment.java
@@ -0,0 +1,83 @@
+package com.unionmed.unionmedtv.login.activity.fragment;
+
+import android.app.Dialog;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.fragment.app.Fragment;
+
+import com.lxj.xpopup.XPopup;
+import com.lxj.xpopup.core.BasePopupView;
+import com.lxj.xpopup.interfaces.OnConfirmListener;
+import com.unionmed.unionmedtv.R;
+import com.unionmed.unionmedtv.dialog.TipDialog;
+
+public class LoginAccountFragment extends Fragment implements View.OnClickListener {
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ private String mParam1;
+ private String mParam2;
+ private View mRootView;
+ private TextView tv_scan_code_login;
+
+ public LoginAccountFragment() {
+ // Required empty public constructor
+ }
+
+ public static LoginAccountFragment newInstance(String param1, String param2) {
+ LoginAccountFragment fragment = new LoginAccountFragment();
+ Bundle args = new Bundle();
+ args.putString(ARG_PARAM1, param1);
+ args.putString(ARG_PARAM2, param2);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mParam1 = getArguments().getString(ARG_PARAM1);
+ mParam2 = getArguments().getString(ARG_PARAM2);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ if (mRootView == null) {
+ mRootView = inflater.inflate(R.layout.fragment_account_login, container, false);
+ initView(mRootView);
+ }
+ return mRootView;
+ }
+
+ public void initView(View view) {
+ tv_scan_code_login = view.findViewById(R.id.tv_scan_code_login);
+ tv_scan_code_login.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View view) {
+ if (view.getId() == R.id.tv_scan_code_login) {
+// new XPopup.Builder(getContext()).isRequestFocus(true).asCustom(new TipDialog(getActivity(), "我是一个title", new TipDialog.DialogClick() {
+// @Override
+// public void cancel() {
+//
+// }
+//
+// @Override
+// public void confirm() {
+//
+// }
+// })).show();
+ getActivity().getSupportFragmentManager().beginTransaction()
+ .replace(R.id.main_browse_fragment, new LoginPhoneFragment())
+ .commitNow();
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginPhoneFragment.java b/app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginPhoneFragment.java
new file mode 100644
index 0000000..bd876a9
--- /dev/null
+++ b/app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginPhoneFragment.java
@@ -0,0 +1,178 @@
+package com.unionmed.unionmedtv.login.activity.fragment;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.CountDownTimer;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.EditText;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import androidx.fragment.app.Fragment;
+
+import com.hjq.http.EasyHttp;
+import com.hjq.http.listener.OnHttpListener;
+import com.unionmed.unionmedtv.R;
+import com.unionmed.unionmedtv.activity.MainActivity;
+import com.unionmed.unionmedtv.api.GetCodeApi;
+import com.unionmed.unionmedtv.api.GetNearDoctorApi;
+import com.unionmed.unionmedtv.api.MobileLoginApi;
+import com.unionmed.unionmedtv.network.ApiResponse;
+import com.unionmed.unionmedtv.network.HttpData;
+import com.unionmed.unionmedtv.utils.CacheUtil;
+import com.unionmed.unionmedtv.utils.ToastUtils;
+
+import java.util.List;
+
+import me.jessyan.autosize.utils.LogUtils;
+
+
+public class LoginPhoneFragment extends Fragment implements View.OnClickListener {
+ private static final String ARG_PARAM1 = "param1";
+ private static final String ARG_PARAM2 = "param2";
+
+ private String mParam1;
+ private String mParam2;
+ private View mRootView;
+ private TextView tv_account_login;
+ private EditText edit_phone;
+ private EditText edit_code;
+ private TextView tv_getVerification;
+ private TextView tv_login;
+
+ public LoginPhoneFragment() {
+ // Required empty public constructor
+ }
+
+ public static LoginPhoneFragment newInstance(String param1, String param2) {
+ LoginPhoneFragment fragment = new LoginPhoneFragment();
+ Bundle args = new Bundle();
+ args.putString(ARG_PARAM1, param1);
+ args.putString(ARG_PARAM2, param2);
+ fragment.setArguments(args);
+ return fragment;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ if (getArguments() != null) {
+ mParam1 = getArguments().getString(ARG_PARAM1);
+ mParam2 = getArguments().getString(ARG_PARAM2);
+ }
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ if (mRootView == null) {
+ mRootView = inflater.inflate(R.layout.fragment_phone_login, container, false);
+ initView(mRootView);
+ }
+ return mRootView;
+ }
+
+ public void initView(View view) {
+ tv_account_login = view.findViewById(R.id.tv_account_login);
+ tv_account_login.setOnClickListener(this);
+ edit_phone = view.findViewById(R.id.edit_phone);
+ edit_code = view.findViewById(R.id.edit_code);
+ tv_getVerification = view.findViewById(R.id.tv_getVerification);
+ tv_getVerification.setOnClickListener(this);
+ tv_login = view.findViewById(R.id.tv_login);
+ tv_login.setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View view) {
+ if (view.getId() == R.id.tv_account_login) {//切换登录方式
+ getActivity().getSupportFragmentManager().beginTransaction()
+ .replace(R.id.main_browse_fragment, new LoginAccountFragment())
+ .commitNow();
+ } else if (view.getId() == R.id.tv_getVerification) {//获取验证码
+ if (TextUtils.isEmpty(edit_phone.getText())) {
+ ToastUtils.s(getActivity(), "请输入手机号");
+ return;
+ }
+ getCode(edit_phone.getText().toString());
+ } else if (view.getId() == R.id.tv_login) {//登录
+ if (TextUtils.isEmpty(edit_phone.getText())) {
+ ToastUtils.s(getActivity(), "请输入手机号");
+ return;
+ }
+ if (TextUtils.isEmpty(edit_code.getText())) {
+ ToastUtils.s(getActivity(), "请输入验证码");
+ return;
+ }
+
+ MobileLogin(edit_phone.getText().toString(), edit_code.getText().toString());
+ }
+ }
+
+ //获取验证码
+ public void getCode(String phone) {
+ EasyHttp.post(getActivity())
+ .api(new GetCodeApi(phone, 11))
+ .request(new OnHttpListener>>() {
+
+ @Override
+ public void onSucceed(HttpData> apiResponseHttpData) {
+ LogUtils.e("成功:" + apiResponseHttpData);
+ ToastUtils.s(getActivity(), "获取验证码成功");
+ if (apiResponseHttpData.getData().getCode() == 200) {
+ tv_getVerification.setEnabled(false);
+ new CountDownTimer(60 * 1000, 1000) {
+ @Override
+ public void onTick(long l) {
+ tv_getVerification.setText("已发送(" + (l / 1001) + ") s");
+ }
+
+ @Override
+ public void onFinish() {
+ tv_getVerification.setText("获取验证码");
+ tv_getVerification.setEnabled(true);
+ }
+ }.start();
+ }
+ }
+
+ @Override
+ public void onFail(Exception e) {
+ ToastUtils.s(getActivity(), "获取验证码失败");
+ LogUtils.e("失败:" + e);
+ }
+ });
+ }
+
+ //手机号登录
+ public void MobileLogin(String mobile, String code) {
+ EasyHttp.post(getActivity())
+ .api(new MobileLoginApi(mobile, code))
+ .request(new OnHttpListener>>() {
+
+ @Override
+ public void onSucceed(HttpData> apiResponseHttpData) {
+ LogUtils.e("成功:" + apiResponseHttpData);
+ if (apiResponseHttpData.getData().getCode() == 200) {
+ MobileLoginApi.TokenBean tokenBean=apiResponseHttpData.getData().getData();
+ CacheUtil.setToken(tokenBean);
+ CacheUtil.setAccountNumber(tokenBean.getMobile());
+ CacheUtil.saveImUserAccount(tokenBean.getIm_useraccount());
+ CacheUtil.saveImUserPwd(tokenBean.getIm_password());
+ CacheUtil.saveImTokenRong(tokenBean.getIm_token());
+ Intent intent=new Intent(getActivity(),MainActivity.class);
+ getActivity().startActivity(intent);
+ }
+ }
+
+ @Override
+ public void onFail(Exception e) {
+ ToastUtils.s(getActivity(), "获取验证码失败");
+ LogUtils.e("失败:" + e);
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/unionmed/unionmedtv/presenter/TypeDoctorPresenter.java b/app/src/main/java/com/unionmed/unionmedtv/presenter/TypeDoctorPresenter.java
index 12c497e..33c56b0 100644
--- a/app/src/main/java/com/unionmed/unionmedtv/presenter/TypeDoctorPresenter.java
+++ b/app/src/main/java/com/unionmed/unionmedtv/presenter/TypeDoctorPresenter.java
@@ -1,5 +1,6 @@
package com.unionmed.unionmedtv.presenter;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
@@ -14,6 +15,7 @@ import com.bumptech.glide.request.RequestOptions;
import com.unionmed.unionmedtv.R;
import com.unionmed.unionmedtv.api.GetNearDoctorApi;
import com.unionmed.unionmedtv.bean.Content;
+import com.unionmed.unionmedtv.widgets.CornerTextView;
public class TypeDoctorPresenter extends Presenter {
private Context mContext;
@@ -30,26 +32,65 @@ public class TypeDoctorPresenter extends Presenter {
return new ViewHolder(view);
}
+ @SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {
if (item instanceof GetNearDoctorApi.DoctorInfo.MemberBean) {
+ GetNearDoctorApi.DoctorInfo.MemberBean memberBean= (GetNearDoctorApi.DoctorInfo.MemberBean) item;
ViewHolder vh = (ViewHolder) viewHolder;
+ int drawable;
+ if (memberBean.getOnline().equals("1")) {
+ vh.tv_online_status.setText("在线");
+ vh.tv_online_status.setBackground(mContext.getResources().getDrawable(R.drawable.shape_corner15_color_0bbac6));
+ drawable = R.mipmap.icon_default_online;
+ } else {
+ vh.tv_online_status.setText("离线");
+ drawable = R.mipmap.icon_default_offline;
+ vh.tv_online_status.setBackground(mContext.getResources().getDrawable(R.drawable.shape_corner15_color_9a9a9a));
+ }
Glide.with(mContext)
- .load( ((GetNearDoctorApi.DoctorInfo.MemberBean) item).getPhoto())
+ .load(memberBean.getPhoto())
.apply(new RequestOptions()
.circleCrop()
- .placeholder(R.drawable.bg_shape_default)
- .circleCrop())
+ .placeholder(drawable)
+ .circleCrop())
.into(vh.iv_photo);
- vh.tv_name.setText(((GetNearDoctorApi.DoctorInfo.MemberBean) item).getName());
- if(((GetNearDoctorApi.DoctorInfo.MemberBean) item).getOnline().equals("1")) {
- vh.tv_online_status.setText("在线");
- }else{
- vh.tv_online_status.setText("离线");
+ vh.tv_name.setText(memberBean.getName());
+ if (!memberBean.getPersoninfo().isEmpty()) {
+ if (!memberBean.getPersoninfo().get(0).getDepartment().isEmpty()
+ && !memberBean.getPersoninfo().get(0).getZc().isEmpty()) {//部门职称都不为null
+ vh.tv_dept.setText(memberBean.getPersoninfo().get(0).getDepartment()
+ + " | " + memberBean.getPersoninfo().get(0).getZc());
+ } else if (memberBean.getPersoninfo().get(0).getDepartment().isEmpty()
+ && memberBean.getPersoninfo().get(0).getZc().isEmpty()) {//部门职称都为null
+ vh.tv_dept.setText("- -");
+ } else if (!memberBean.getPersoninfo().get(0).getDepartment().isEmpty()
+ && memberBean.getPersoninfo().get(0).getZc().isEmpty()) {//部门不为null,职称为null
+ vh.tv_dept.setText(memberBean.getPersoninfo().get(0).getDepartment());
+ } else if (memberBean.getPersoninfo().get(0).getDepartment().isEmpty()
+ && !memberBean.getPersoninfo().get(0).getZc().isEmpty()) {//部门为null,职称不为null
+ vh.tv_dept.setText(memberBean.getPersoninfo().get(0).getZc());
+ }
+
+ vh.tv_hospital.setText(memberBean.getPersoninfo().get(0).getChosname());
+ } else {
+ vh.tv_dept.setText("- -");
+ vh.tv_dept.setText("- -");
+ }
+ if (memberBean.getSex().equals("男")) {
+ vh.iv_sex.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_sex_boy));
+ } else {
+ vh.iv_sex.setImageDrawable(mContext.getResources().getDrawable(R.drawable.icon_sex_girl));
+ }
+ if (memberBean.getDistance().isEmpty()) {
+ vh.tv_distance.setVisibility(View.GONE);
+ }else {
+ vh.tv_distance.setVisibility(View.VISIBLE);
+ vh.tv_distance.setText(memberBean.getDistance());
}
- vh.tv_dept.setText(((GetNearDoctorApi.DoctorInfo.MemberBean) item).getPersoninfo().get(0).getDepartment());
- vh.tv_hospital.setText(((GetNearDoctorApi.DoctorInfo.MemberBean) item).getPersoninfo().get(0).getChosname());
+
+
}
}
@@ -63,18 +104,22 @@ public class TypeDoctorPresenter extends Presenter {
private final ImageView mIvTypeThreePoster;
TextView tv_name;
ImageView iv_photo;
+ ImageView iv_sex;
TextView tv_online_status;
TextView tv_dept;
TextView tv_hospital;
+ CornerTextView tv_distance;
public ViewHolder(View view) {
super(view);
mIvTypeThreePoster = view.findViewById(R.id.iv_type_three_poster);
tv_name = view.findViewById(R.id.tv_name);
iv_photo = view.findViewById(R.id.iv_photo);
+ iv_sex = view.findViewById(R.id.iv_sex);
tv_online_status = view.findViewById(R.id.tv_online_status);
tv_dept = view.findViewById(R.id.tv_dept);
tv_hospital = view.findViewById(R.id.tv_hospital);
+ tv_distance = view.findViewById(R.id.tv_distance);
}
}
}
diff --git a/app/src/main/java/com/unionmed/unionmedtv/utils/CacheUtil.java b/app/src/main/java/com/unionmed/unionmedtv/utils/CacheUtil.java
new file mode 100644
index 0000000..b7343d2
--- /dev/null
+++ b/app/src/main/java/com/unionmed/unionmedtv/utils/CacheUtil.java
@@ -0,0 +1,118 @@
+package com.unionmed.unionmedtv.utils;
+
+import android.text.TextUtils;
+
+import com.blankj.utilcode.util.StringUtils;
+import com.google.gson.Gson;
+import com.tencent.mmkv.MMKV;
+import com.unionmed.unionmedtv.R;
+import com.unionmed.unionmedtv.api.MobileLoginApi;
+
+public class CacheUtil {
+ private static MMKV kv = MMKV.mmkvWithID(StringUtils.getString(R.string.mmap_id));
+
+ /**
+ * 获取保存的用户信息
+ */
+ public static MobileLoginApi.TokenBean getToken() {
+ String tokenStr = kv.decodeString(StringUtils.getString(R.string.token_id));
+ if (TextUtils.isEmpty(tokenStr)) {
+ return null;
+ } else {
+ return new Gson().fromJson(tokenStr, MobileLoginApi.TokenBean.class);
+ }
+ }
+
+ /**
+ * 设置用户信息
+ */
+ public static void setToken(MobileLoginApi.TokenBean token) {
+ if (token == null) {
+ kv.encode(StringUtils.getString(R.string.token_id), "");
+ setIsLogin(false);
+ } else {
+ kv.encode(StringUtils.getString(R.string.token_id), new Gson().toJson(token));
+ setIsLogin(true);
+ }
+ }
+
+ /**
+ * 获取保存的账号
+ */
+ public static String getAccountNumber() {
+ return kv.decodeString(StringUtils.getString(R.string.account_number), "");
+ }
+
+ /**
+ * 设置账号
+ */
+ public static void setAccountNumber(String account) {
+ if (TextUtils.isEmpty(account)) {
+ kv.encode(StringUtils.getString(R.string.account_number), "");
+ } else {
+ kv.encode(StringUtils.getString(R.string.account_number), account);
+ }
+ }
+
+ /**
+ * 保存当前登录账号的IM账号
+ */
+ public static void saveImUserAccount(String imAccount) {
+ if (TextUtils.isEmpty(imAccount)) {
+ kv.encode(StringUtils.getString(R.string.im_user_account), "");
+ } else {
+ kv.encode(StringUtils.getString(R.string.im_user_account), imAccount);
+ }
+ }
+
+ /**
+ * 获取当前登录账号的IM账号
+ */
+ public static String getImUserAccount() {
+ return kv.decodeString(StringUtils.getString(R.string.im_user_account), "");
+ }
+
+ /**
+ * 保存当前登录账号的IM账号,对应的密码
+ */
+ public static void saveImUserPwd(String imPwd) {
+ if (TextUtils.isEmpty(imPwd)) {
+ kv.encode(StringUtils.getString(R.string.im_user_pwd), "");
+ } else {
+ kv.encode(StringUtils.getString(R.string.im_user_pwd), imPwd);
+ }
+ }
+
+ /**
+ * 获取当前登录账号的IM账号,对应的密码
+ */
+ public static String getImUserPwd() {
+ return kv.decodeString(StringUtils.getString(R.string.im_user_pwd), "");
+ }
+
+ /**
+ * 融云im_token
+ */
+ public static void saveImTokenRong(String imToken) {
+ if (TextUtils.isEmpty(imToken)) {
+ kv.encode(StringUtils.getString(R.string.im_token), "");
+ } else {
+ kv.encode(StringUtils.getString(R.string.im_token), imToken);
+ }
+ }
+
+ /**
+ * 获取融云im_token
+ */
+ public static String getImTokenRong() {
+ return kv.decodeString(StringUtils.getString(R.string.im_token), "");
+ }
+
+
+ /**
+ * 设置是否已经登录
+ */
+ private static void setIsLogin(Boolean isLogin) {
+ kv.encode(StringUtils.getString(R.string.is_login), isLogin);
+ }
+}
diff --git a/app/src/main/java/com/unionmed/unionmedtv/utils/ToastUtils.java b/app/src/main/java/com/unionmed/unionmedtv/utils/ToastUtils.java
new file mode 100644
index 0000000..b2b0999
--- /dev/null
+++ b/app/src/main/java/com/unionmed/unionmedtv/utils/ToastUtils.java
@@ -0,0 +1,13 @@
+package com.unionmed.unionmedtv.utils;
+
+import android.content.Context;
+import android.widget.Toast;
+
+public final class ToastUtils {
+ public static void s(Context mContext, String s) {
+ if (mContext == null) {
+ return;
+ }
+ Toast.makeText(mContext.getApplicationContext(), s, Toast.LENGTH_SHORT).show();
+ }
+}
diff --git a/app/src/main/java/com/unionmed/unionmedtv/widgets/CornerTextView.java b/app/src/main/java/com/unionmed/unionmedtv/widgets/CornerTextView.java
new file mode 100644
index 0000000..980dc5b
--- /dev/null
+++ b/app/src/main/java/com/unionmed/unionmedtv/widgets/CornerTextView.java
@@ -0,0 +1,143 @@
+package com.unionmed.unionmedtv.widgets;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.util.AttributeSet;
+import android.widget.TextView;
+
+import com.unionmed.unionmedtv.R;
+
+public class CornerTextView extends TextView {
+ private static final float ANGEL_RIGHT_TOP = 45f;
+ private static final float ANGEL_LEFT_TOP = -45f;
+ private static final float DISTANCE_DEFAULT = 120f;
+ private static final float STROKE_WIDTH_DEFAULT = 0f;
+ private static final int CORNER_BACKGROUND_COLOR_DEFAULT = 0xFF00B94D;
+ //根号2
+ private static final float REAGAN_TWO = (float) Math.sqrt(2);
+
+ /**
+ * 显示在右上角还是左上角
+ */
+ private Gravity gravity;
+ /**
+ * 有边角的距离
+ */
+ private float distance = DISTANCE_DEFAULT;
+ /**
+ * 文字与色带的边距
+ */
+ private float strokeWidth;
+ /**
+ * 色带颜色
+ */
+ private int beltColor;
+
+ // 文字底部到边角顶点的距离
+ private float disToBottom;
+ Paint mBgPaint;
+ private Path path;
+ // 背景色带的高度*根号2
+ private float beltHeight;
+
+ public CornerTextView(Context context) {
+ super(context);
+ init(null, 0);
+ }
+
+ public CornerTextView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(attrs, 0);
+ }
+
+ public CornerTextView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ init(attrs, defStyle);
+ }
+
+ private void init(AttributeSet attrs, int defStyle) {
+ setGravity(android.view.Gravity.CENTER);
+
+ final TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.CornerTextView, defStyle, 0);
+
+ int gravityInt = a.getInt(R.styleable.CornerTextView_gravity, 0);
+ if (gravityInt == 0) {
+ gravity = Gravity.RIGHT_TOP;
+ } else {
+ gravity = Gravity.LEFT_TOP;
+ }
+ distance = a.getDimension(R.styleable.CornerTextView_distance, DISTANCE_DEFAULT);
+ strokeWidth = a.getDimension(R.styleable.CornerTextView_strokeWidth, STROKE_WIDTH_DEFAULT);
+ beltColor = a.getColor(R.styleable.CornerTextView_beltColor, CORNER_BACKGROUND_COLOR_DEFAULT);
+
+ a.recycle();
+
+ //绘制斜条用
+ mBgPaint = new Paint();
+ mBgPaint.setAntiAlias(true);
+ mBgPaint.setColor(beltColor);
+ mBgPaint.setStyle(Paint.Style.FILL);
+
+ path = new Path();
+
+ invalidateTextPaintAndMeasurements();
+ }
+
+ private void invalidateTextPaintAndMeasurements() {
+ Paint.FontMetrics fm = getPaint().getFontMetrics();
+
+ float mTextHeight = (float) Math.ceil(fm.bottom - fm.top);
+
+ disToBottom = (float) (1.5 * mTextHeight + distance + strokeWidth);
+ beltHeight = (mTextHeight + 2 * strokeWidth) * REAGAN_TWO;
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+ int width = (int) (disToBottom * REAGAN_TWO);
+ int height = (int) (disToBottom * REAGAN_TWO);
+
+ path.reset();
+ if (gravity == Gravity.RIGHT_TOP) {
+ path.moveTo(0, 0);
+ path.lineTo(beltHeight * REAGAN_TWO, 0);
+ path.lineTo(width, height - beltHeight * REAGAN_TWO);
+ path.lineTo(width, height);
+ } else {
+ path.moveTo(0, height);
+ path.lineTo(0, height - beltHeight * REAGAN_TWO);
+ path.lineTo(width - beltHeight * REAGAN_TWO, 0);
+ path.lineTo(width, 0);
+ }
+ path.close();
+
+ setMeasuredDimension(width & MEASURED_SIZE_MASK, height & MEASURED_SIZE_MASK);
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ canvas.drawPath(path, mBgPaint);
+
+ canvas.save();
+ if (gravity == Gravity.RIGHT_TOP) {
+ canvas.translate(beltHeight / REAGAN_TWO / 2, -beltHeight / REAGAN_TWO / 2);
+ canvas.rotate(ANGEL_RIGHT_TOP, this.getWidth() / 2f, this.getHeight() / 2f);
+ } else {
+ canvas.translate(-beltHeight / REAGAN_TWO / 2, -beltHeight / REAGAN_TWO / 2);
+ canvas.rotate(ANGEL_LEFT_TOP, this.getWidth() / 2f, this.getHeight() / 2f);
+ }
+
+ super.onDraw(canvas);
+
+ canvas.restore();
+ }
+
+ public enum Gravity {
+ LEFT_TOP, RIGHT_TOP
+ }
+}
diff --git a/app/src/main/java/com/unionmed/unionmedtv/widgets/ImgConstraintLayout.java b/app/src/main/java/com/unionmed/unionmedtv/widgets/ImgConstraintLayout.java
index 5e70849..55115d8 100644
--- a/app/src/main/java/com/unionmed/unionmedtv/widgets/ImgConstraintLayout.java
+++ b/app/src/main/java/com/unionmed/unionmedtv/widgets/ImgConstraintLayout.java
@@ -52,7 +52,7 @@ public class ImgConstraintLayout extends ConstraintLayout implements View.OnFocu
private void move(final View view) {
view.bringToFront();
- final int width = getWidth();
+ final int width = getWidth()-230;
valueAnimator = ValueAnimator.ofFloat(((Integer) (-width - 30)).floatValue(), ((Integer) (width + 30)).floatValue());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
diff --git a/app/src/main/res/drawable/account_password_select.xml b/app/src/main/res/drawable/account_password_select.xml
new file mode 100644
index 0000000..b3a3a0b
--- /dev/null
+++ b/app/src/main/res/drawable/account_password_select.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/bg_btn_50616d_border5.xml b/app/src/main/res/drawable/bg_btn_50616d_border5.xml
new file mode 100644
index 0000000..8b6edee
--- /dev/null
+++ b/app/src/main/res/drawable/bg_btn_50616d_border5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_btn_50616d_radius_18.xml b/app/src/main/res/drawable/bg_btn_50616d_radius_18.xml
new file mode 100644
index 0000000..90191fe
--- /dev/null
+++ b/app/src/main/res/drawable/bg_btn_50616d_radius_18.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_btn_border_radius_18.xml b/app/src/main/res/drawable/bg_btn_border_radius_18.xml
new file mode 100644
index 0000000..2561c74
--- /dev/null
+++ b/app/src/main/res/drawable/bg_btn_border_radius_18.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/bg_btn_border_radius_5.xml b/app/src/main/res/drawable/bg_btn_border_radius_5.xml
new file mode 100644
index 0000000..58d2362
--- /dev/null
+++ b/app/src/main/res/drawable/bg_btn_border_radius_5.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/bg_btn_c1fcff_border5.xml b/app/src/main/res/drawable/bg_btn_c1fcff_border5.xml
new file mode 100644
index 0000000..4efc8a0
--- /dev/null
+++ b/app/src/main/res/drawable/bg_btn_c1fcff_border5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_btn_contact_visit.xml b/app/src/main/res/drawable/bg_btn_contact_visit.xml
new file mode 100644
index 0000000..296084f
--- /dev/null
+++ b/app/src/main/res/drawable/bg_btn_contact_visit.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_btn_grey9_border5.xml b/app/src/main/res/drawable/bg_btn_grey9_border5.xml
new file mode 100644
index 0000000..9e5c2df
--- /dev/null
+++ b/app/src/main/res/drawable/bg_btn_grey9_border5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_white_border_radius_20.xml b/app/src/main/res/drawable/bg_white_border_radius_20.xml
new file mode 100644
index 0000000..af3d899
--- /dev/null
+++ b/app/src/main/res/drawable/bg_white_border_radius_20.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_code_select.xml b/app/src/main/res/drawable/btn_code_select.xml
new file mode 100644
index 0000000..c5f3b24
--- /dev/null
+++ b/app/src/main/res/drawable/btn_code_select.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/btn_select.xml b/app/src/main/res/drawable/btn_select.xml
new file mode 100644
index 0000000..3197182
--- /dev/null
+++ b/app/src/main/res/drawable/btn_select.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/edit_phone_select.xml b/app/src/main/res/drawable/edit_phone_select.xml
new file mode 100644
index 0000000..7c200e1
--- /dev/null
+++ b/app/src/main/res/drawable/edit_phone_select.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_unionmed_logo.png b/app/src/main/res/drawable/ic_unionmed_logo.png
new file mode 100644
index 0000000..d5a02eb
Binary files /dev/null and b/app/src/main/res/drawable/ic_unionmed_logo.png differ
diff --git a/app/src/main/res/drawable/shape_corner15_color_9a9a9a.xml b/app/src/main/res/drawable/shape_corner15_color_9a9a9a.xml
new file mode 100644
index 0000000..1cdd936
--- /dev/null
+++ b/app/src/main/res/drawable/shape_corner15_color_9a9a9a.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
new file mode 100644
index 0000000..0529a26
--- /dev/null
+++ b/app/src/main/res/layout/activity_login.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_tip.xml b/app/src/main/res/layout/dialog_tip.xml
new file mode 100644
index 0000000..ccb666e
--- /dev/null
+++ b/app/src/main/res/layout/dialog_tip.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_account_login.xml b/app/src/main/res/layout/fragment_account_login.xml
new file mode 100644
index 0000000..66d1c05
--- /dev/null
+++ b/app/src/main/res/layout/fragment_account_login.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_phone_login.xml b/app/src/main/res/layout/fragment_phone_login.xml
new file mode 100644
index 0000000..8d97917
--- /dev/null
+++ b/app/src/main/res/layout/fragment_phone_login.xml
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_type_doctor_layout.xml b/app/src/main/res/layout/item_type_doctor_layout.xml
index 55b725f..dfce122 100644
--- a/app/src/main/res/layout/item_type_doctor_layout.xml
+++ b/app/src/main/res/layout/item_type_doctor_layout.xml
@@ -4,10 +4,25 @@
xmlns:tools="http://schemas.android.com/tools"
style="@style/FocusStyle"
android:layout_width="170dp"
- android:layout_height="212dp"
+ android:layout_height="232dp"
android:background="@drawable/shape_corners10_color_1b4765">
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 99f3394..dced76f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -13,4 +13,14 @@
服务器数据返回异常,请稍后再试
下载失败,文件 md5 校验失败
//网络请求 -- 结束
+
+
+ app
+ token_id
+ login
+ account_number
+ im_user_account
+ im_user_pwd
+ im_token
+ ip_address