From 0fb5b366a7b205a52a6695c7f22e6177bedc3ddc Mon Sep 17 00:00:00 2001 From: linminjie <1004644107@qq.com> Date: Wed, 24 May 2023 18:02:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=8B=E6=9C=BA=E5=8F=B7=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 46 -- app/build.gradle | 13 +- app/src/main/AndroidManifest.xml | 2 +- .../com/unionmed/unionmedtv/api/GetCodeApi.java | 36 ++ .../unionmed/unionmedtv/api/MobileLoginApi.java | 490 +++++++++++++++++++++ .../com/unionmed/unionmedtv/dialog/TipDialog.java | 64 +++ .../unionmedtv/fragment/ContentFragment.java | 27 +- .../unionmedtv/login/activity/LoginActivity.java | 21 + .../activity/fragment/LoginAccountFragment.java | 83 ++++ .../activity/fragment/LoginPhoneFragment.java | 178 ++++++++ .../unionmedtv/presenter/TypeDoctorPresenter.java | 65 ++- .../com/unionmed/unionmedtv/utils/CacheUtil.java | 118 +++++ .../com/unionmed/unionmedtv/utils/ToastUtils.java | 13 + .../unionmedtv/widgets/CornerTextView.java | 143 ++++++ .../unionmedtv/widgets/ImgConstraintLayout.java | 2 +- .../main/res/drawable/account_password_select.xml | 8 + .../main/res/drawable/bg_btn_50616d_border5.xml | 8 + .../main/res/drawable/bg_btn_50616d_radius_18.xml | 6 + .../main/res/drawable/bg_btn_border_radius_18.xml | 14 + .../main/res/drawable/bg_btn_border_radius_5.xml | 14 + .../main/res/drawable/bg_btn_c1fcff_border5.xml | 8 + app/src/main/res/drawable/bg_btn_contact_visit.xml | 5 + app/src/main/res/drawable/bg_btn_grey9_border5.xml | 8 + .../res/drawable/bg_white_border_radius_20.xml | 9 + app/src/main/res/drawable/btn_code_select.xml | 8 + app/src/main/res/drawable/btn_select.xml | 8 + app/src/main/res/drawable/edit_phone_select.xml | 8 + app/src/main/res/drawable/ic_unionmed_logo.png | Bin 0 -> 23387 bytes .../res/drawable/shape_corner15_color_9a9a9a.xml | 6 + app/src/main/res/layout/activity_login.xml | 12 + app/src/main/res/layout/dialog_tip.xml | 49 +++ app/src/main/res/layout/fragment_account_login.xml | 82 ++++ app/src/main/res/layout/fragment_phone_login.xml | 121 +++++ .../main/res/layout/item_type_doctor_layout.xml | 26 +- .../main/res/mipmap-xhdpi/icon_default_offline.png | Bin 0 -> 5436 bytes .../main/res/mipmap-xhdpi/icon_default_online.png | Bin 0 -> 6484 bytes app/src/main/res/values/attrs_corner_text_view.xml | 11 + app/src/main/res/values/strings.xml | 10 + 38 files changed, 1644 insertions(+), 78 deletions(-) delete mode 100644 README.md create mode 100644 app/src/main/java/com/unionmed/unionmedtv/api/GetCodeApi.java create mode 100644 app/src/main/java/com/unionmed/unionmedtv/api/MobileLoginApi.java create mode 100644 app/src/main/java/com/unionmed/unionmedtv/dialog/TipDialog.java create mode 100644 app/src/main/java/com/unionmed/unionmedtv/login/activity/LoginActivity.java create mode 100644 app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginAccountFragment.java create mode 100644 app/src/main/java/com/unionmed/unionmedtv/login/activity/fragment/LoginPhoneFragment.java create mode 100644 app/src/main/java/com/unionmed/unionmedtv/utils/CacheUtil.java create mode 100644 app/src/main/java/com/unionmed/unionmedtv/utils/ToastUtils.java create mode 100644 app/src/main/java/com/unionmed/unionmedtv/widgets/CornerTextView.java create mode 100644 app/src/main/res/drawable/account_password_select.xml create mode 100644 app/src/main/res/drawable/bg_btn_50616d_border5.xml create mode 100644 app/src/main/res/drawable/bg_btn_50616d_radius_18.xml create mode 100644 app/src/main/res/drawable/bg_btn_border_radius_18.xml create mode 100644 app/src/main/res/drawable/bg_btn_border_radius_5.xml create mode 100644 app/src/main/res/drawable/bg_btn_c1fcff_border5.xml create mode 100644 app/src/main/res/drawable/bg_btn_contact_visit.xml create mode 100644 app/src/main/res/drawable/bg_btn_grey9_border5.xml create mode 100644 app/src/main/res/drawable/bg_white_border_radius_20.xml create mode 100644 app/src/main/res/drawable/btn_code_select.xml create mode 100644 app/src/main/res/drawable/btn_select.xml create mode 100644 app/src/main/res/drawable/edit_phone_select.xml create mode 100644 app/src/main/res/drawable/ic_unionmed_logo.png create mode 100644 app/src/main/res/drawable/shape_corner15_color_9a9a9a.xml create mode 100644 app/src/main/res/layout/activity_login.xml create mode 100644 app/src/main/res/layout/dialog_tip.xml create mode 100644 app/src/main/res/layout/fragment_account_login.xml create mode 100644 app/src/main/res/layout/fragment_phone_login.xml create mode 100644 app/src/main/res/mipmap-xhdpi/icon_default_offline.png create mode 100644 app/src/main/res/mipmap-xhdpi/icon_default_online.png create mode 100644 app/src/main/res/values/attrs_corner_text_view.xml 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 0000000000000000000000000000000000000000..d5a02eb703bc20bbeb3a4909ef19ecf7a827050a GIT binary patch literal 23387 zcmX_oRahKduTvspEW7{ z6#=aKS3(B>P87%&TeqUwsCIOiw2??L(xcw=HLQ?if0ityr4Ox@C_6rXcWZe&wcw;W)agD3qsEJ9b z%3Lcz(nV+$3%nh<7?Y&9euabnKoX)RQ>jxbSq(R;L)Q{_aV{#vXC!wzhi7;UHsPYx z1p;`HX4Hyvj2>OFAnK)x%Po_$T#> zmpDz>p=+@|OKMq)Ws4M|cyxc#xh3%eR^oPllCy8uCPDr?Ohj(L8I%i)6nwSwy`&hM z@kvh|Gsd|)6H(KdaQiDVyj{{<4HIdU@3%-9VDf-gp-#TdB#xzy6yZWNCfWP8*c^%j zMOD`-=dwe%@_>b)-fv2YKA5b3m%K)~5_``amE8k|I)kdffC?WPZ5~Jr41t^jTmB3B zAPb0PLHSB>-U26iI=bw9!;X{`K?}7X&;{_IEG|MEe!%?uXX_j{g=UxK8u6+w`HF_} z1pyw2B8dk39j!VrKdLjK0ocaHaadqtbg?M>a8YON6L972fFe9Rq@AiNi?@ud@ei1P zuO#{q!%7)%AP%GQi-<4Uk?uGS0Zp!>Gtvnq4G;b4exTXLSjq3usgtc%#=?3Vq%(Yu z)wQ`2cFk=3AuT2hTl_@mDo{eQs0Tk;bk}f7Ityjn_&ZJ5N{|RVkWBK}oiWWmzXUFg zjtWB9|G>wj&#GCR5>^Cs`#u;)H|f;)gQ8lsRS)(=;@I_lxAXm~rK#c>py!l>hIrHk zxQ;AIc#6bx&I2)sLqHnvGXgIiFN~xrAJ*LGO!#&;5lk&E<8s;}vIB~MZ|`va{>skj zk)K7(F=tx8bLA$!{3xjzkj49~x`qj&ErIE_Zd5-i%p(WiKkc?TXo;_AFNo~$hDO|1_>R6jr z)eTHgmJ~47Ak3l=dC?!d&&!yNG;ry2zbpL@&f~8hRe^~ZcLJM!U>5zmbwpRFX$4?( zyxG8ZM7lyCt`VG@;=Ox?2rGyQUAY?5kAX>@RWA);k5_|K*vE;)e(zsEjXUPl} zRS*W{^R!25<9sUcaVlCFaQP3RgU{op;`UncWmKCl!<|H#Z~m;+amd-rxl*q(ryxM&WXg1)iF)C8 z!UP?+t)tcrqhbAt?A7&Vd7t{I%=aX^GKvKGV6l<9!#~9UH#Z4I0)5(<)orB^YD!h3 zNQ6vb@Yn)6sv!ANKy|Pk5|yWCf8ogq0~|qPOFH#_x`eGw8u2myJ$q!da7I(3(JXH+ z37azd3?CR#lk=F5Nte|iU4=IHZ-)<{Qu}?kY}G6}hX?rY?fbf3MSODj0Jjw1lOR)+ zfuXf>6oQf(5Gy*I?F;Fmq455Ar5Z;p-&10ndMh}wyvHi9q$t!hK!FP-W*g9R)B8<| zJ7hwTk^Zi8QgtdBA&@c|#Emx2i(!$!me_72VtA*e{2P~Z-EbGstMRbgw1umtA!&%Y zZ6C6U2w>rPLoXAmQwoS4mn$)gW+_BoOo-i zc=R&Gn)p~bkB%*wMzv;B$%i-O>imM6IbJL!^XiI6nEp~bA4Ko%HuzwdzT1=<)Yo+b zXe6$gBAIpF7}|v>J1yXbU#dL)!_vUG{^%c#xPd*yh=s!z$6?_9vb51Anl<=P{^1M+ zxlUVfZUMPPtSwnu6+iYJ9T~A`#4yzhFNn6Q`7sz78N0&zD}G*dt=M;1{{oiB%ific zR)$mD^iZV&)sOqX`FU>LsSk73hq4qWox{Nrj!OC^94%h2+Hv z-AAH4JlT&BDvrx*oz_Y7E~?h_Uv^>1I6sp1`N!=qsSpa*v;dY|=JZ>SJy*GzgZBvG z&J-fc%pROZWM&5UU0_l$zxAyR1qzT_P*h*xLndJT0Wj9#I7V-Y zLMztn{nypm#(9lvf}OKZ%Yx+cTGyaEt_~ zLz)0xxgpFT4U}h+%Ij8da_`1x;){O8E}=kt&A=$N7dvX5q}mtuDC9BNA{Bd_ z+L)59*>Tz%4d`_1i=tjJh^2J+|*aeuvo8QC_X2@>KV;l!-L3iBj%h zS%x}iia;_|)usjDty3gq@L}uP*(e_?5otUHh zh+PG6J^qSwUO>khnsteCei4&Wxb-V+^!yG|crb=`DdkG~gP6aJ$!PMGpYZJOUlsu` zJv~PO01-92nh;8H{XYoHxY!jIg;;CNV2xNL;xDUi<(*=0!}c^E5hFz?eK8>S^}p^J z9DVDrE$mn&sG38DPQ$!@LMrl#M!RD1+c0)SvQC!iI70+FOm-5yW-S2UOl|ny_8>I` z@dQR|F1*^*Psn24R%Fx%H(bu`d#g8zS6|Z$crCB^UsvA|kkfkia&UAR`So_*ye&P{ zsRKFd@Ce?as_7V1apKM_>G7Ci>m+UVx1K~V*G^H<5EGg_9+!3a;;NR&=CdMqZqI?8 zx%%p0GKOWouf~OgCr2sBlcn&1SH$qDJ@r)jV+{jOiVV5s2oRSazR1uC)ZPzGJm3$u zVpg86Fhnt;DZqZF>C0*FkM z$jFmP-)Py<&gCbK=0?eB1!Gus?&z%Z&i)~xGSLpt>A14xYAfL@m&ap|?N=~cy-Q(6 zms$`$s~boEEWHIcOQtxli#F%=dgDkVU4nDklDP6=q3K3wQ6OgCR1A&GC70qE6{amp zG&o0}qPK}v?WV9ow(>n}m^&%7@A_(KM0qeF0TO}Gy(q2ipWSFGdHg|ttgG9C*m=lWTgmP)n_z% z#!d~rV(uIz(Fd1x9zASiLt*bES;m2bo8N-lorwYXYEt^cYg~zM-xN4%H6i7DBvvid z?EJ#J({e{1RtW&G3W#Br)QElnq?a9dtwB!&0k)R`9@3c+9}D;>VGT^OQpaDmZ$6!| z97XD;ZoscPXXpJOdvtebm3X=N(kz2ZUF1v7KlWWMLh$})ywB~yD1m;#ssP5sKr^BV z3Ka9p0PHKqP9vI~Vc|BQA}OTF2J9Z!fRN0Z!#fc}2#4%Rxh%USVAU0X3Y9sAr~a5g zn93a^#_V+|TLBfl(Beya zJ&K2XJfY8+Q;gov@kOUuQea#bV~tPbQ8zxEL@LlqqQOQF!JumIfq&6wJXo5-B}0 z{H?IN>XOR9Yt+*SF$b@vWcANm*T}p_fUms82P&7a&O3s~T8|w+eE?oHFA}?kB6&x-T3eb9O50GMwUwc}sMPLjm+0i1F@wo|VOZ@=JQHZ9JhYVe^rG-Gz~NsxIb zqcjM#LKk>giD)j8&jK8JKi&jSdKeSbp=JK7>-#IP<2<*57q17A(Y|AFeVp(4RHAY# zaOL=(@`!%o9A%qa7|c~f51VCC4K1b7%$Cw`B$7_`kFv&cAtk|p4ZjhYnZHL4EJ9KW zwUrpyf44MbwMpe?gvAr2XNN_U`CDkE$RT2IXMl`|6x#Mfui()h3{CO}FPvT=M+-O! zrl11S#e*m4%h_?c~T!@n(9t zAjaSGM~I4n@p2{$XY8bb^c)|f!E&ILy!=R-7J`P4E-=eT56(|-VSYbYs+Kmf^2j)h zoX-TV&X#z@i5SFlt(4+0>cS% z(M2|J@Da+0Ol7J7@0b`DB^});*o`fjSVgOILy3V#Cl+w4M0Ym)nA?)k-)rH_XN83l;-C26* zYo;*ap*4A^F)J^k7o7c+Qd8J9p?vY-tpl=+t%CekCyQ-rVR*ra&tPc2U0CN1^J4*h zpF->I&?5pzQMcQpmYs5aw3fE`UcX3xQ0)x(j8;=@-V|!h~*+ z<@WZEjSbSgeG{7fBlDJu#WSSbdsrqGWD+em7Xc@kZNp@^6Q6X0O?EX1tLm< z1jci=z8qjQ9nvX1egsi{W~FQh!823QU&k8#;5m?KL-*~EHcm{eF4?R^Jr*n|fk>^A zGQ7Xde+Yl)=R3)+_GU~3tVCOh`q1TE!9uTBag72g$|HAn%_mLifX{eScn;T$PfG8P zf(!m~J&JlKm_1^MRxEWOF<|?^cArEBf!BMJ)g2&{dM0><-&<$suM)?{M>oM*rGly? zK?%FXmG%lGtadV#sm0!0YMe?=7&BHmgMf72ch0bzf+{lKp7#yoaidA$u2{jcI264F zX~pQ8_{X0O5y2eqc%GIsf8Qf|amp>(t1!B1AZ0ErVil&2Biqx?f1px#W&!e5_ zug$%(x)lb(l^O=E4+dYIVsG`~c{+q!ZHf*C$=3JZU9$e(y|3Bh3e6|K}aLr(?m)SHbjA zSM#Q&ELQM<)p~^RglWXn?cqjGa-_XxS+4JypQUdOG>FWwI_u-!&Rhv_suBWxS}FRi zrmHjQ#&{HHV;5L{c{DMn@9J&gvXcMPq=7*(Py<5?5jxqTbC(Nm$@}kUs|@{>PYz)g0E*enwVEZJ;J9fiE<5U zcv~|qQv?F}XP2nKHqnNfRuC83Y3a(9HLBH)^jJL>#(6aU{o&nLRbu-;WL=kJ8UlEgwqZGXfs}E{~{F*j%9Tet6e=)$f4l%}+z<~PN)L&{;~CXArAgnNd&}^Xm_#PX=e??V?i?YUJe9D9 zeG4g@GZ}iMcLOGW1k$vVk0P5>2#!Xb&>YL|8VO3h z`0A|;>!t?qaPRBtB!gV2ejt|$V5_|c#NW+0zNjNj{TcN_eEyuv7W4*s97vJy2CFHH z7@1EW-FozG3R%rje|H5nELKKlvgv&t;o+`$y$(w+!@-~xR0&0|r#f)x9O0aZ9>Q?gwpV47oc=s06$cOUd{2yc|n4SoOLeQRyyh1%e zKn&xf6Mf%Z%5WoHqs#f7tm4bE98c=6AOkE@70Ds?;-A zk-|z^66nV*NfHbK*0P0r-z?LXJMtj<`a5H36EWs}4EOoKb(x=y7lCJ z6s}J8!lmFGMa&bo-Pk<=+tM)VTAofX+eKVHB8xr7s|yJA#SVF8s4ot{w6f&k=; z(IV6b0k4`_zQo-#HdH?olNjoHy;r@qT?eWioa0`Y+yaWu{7`-ss7TFA^;J(LlGbj4 zLIm*BY$$aw)+WAQs(sfMQ^#jCdLM4tYD3z(&)UtU!!jA#3Kh_i%MS0SQ-5sno(R2s zkp-^oHHVGkhxU1DwfG*&=e@YTUFybsR&RhN3Qt5c(A_uG9f;uB%%@=l=N4Lj2Fk#Fji7bZ+dZ*}V4HPw;7)BkoGd z4GD+H1l{TQZLLh-F1F0BfnAi93*Uoz@n1QJb5H&xN&yp~{Vhe9Uol7Di`wLe)A*ZJ zM{F@VOPcV#PwX&Iq`r)9V9@KVh%kvqnr)u&1~Ux%>n}Kp9*5d-^jF9>-x$eTmeI7= z$Qr$=P;8nZGtvxJ4EmCp-#m=wx<=wy+yuCkoVd7sDe=!0cG?n4J(t_@(YNc{e7H7S znqzzDL{;5B5AC@dc>Awd4Mi|__%k~J+1Oqn8Mu-2Xrc?i%YHdyZbVOHVroE<=J||; z7+H^Atyw?M=NpEM))mUz|SS^ivG)A!k{g#|$5o)-X{K`9E!=)8?uh z1L9f4QRMC!a4%F61RB3PXK{u%|Iv%#JN@H19Shc9Po7k6#4gw=Ivm(KI-zs9CXoh}d_9av>@oA{gVYaH8smN}5WzsK8=DuHO*6 zwqAAi_=!`xW(z`dz6*fz;3)uuTSmd_m&ZPsu6=w># z!Kra$B0uiubbt}jc_6B^o>wL@AQ`+|_U$k96+Takj|k$o%0kErZ?OmVXLgE7(Ml*HNWzE&HEdXvpj)~)?EZ;i4A?c1SUkrjeEf{hW~a404sb; zQTIQxY1g-ItK{9ej`!Vfu_o74E7@V0#yy~tu*Qtk3_%268^N@E1LNO*uO}B6{8u#= z6mNQ*=SRfOkUm^cX6^j&@{xyr?koc6JGLHu$oo#Axzk=(fr(ItcHc6vZ$P^+EtI{G8O;X)#SQ){-~$<5C%=0J~amRkRuGx)nnJI z-*_o{-&~V9qPziK%KQy3#^qd%4Pjar|O z;S8B^bdq#R6wIim-4P|y4pD0v9h^^(tPmXedM2=AxBU>X3&f1W2=zwHU|0@i)tXK& z8~`w;S)ba`4H;qeTT;Y@6~UUGFdWh6WYL-ml9c$00tkCNe<{YL^u5L^P+Mcn1jT?8 z>C_I(|A=UW@E(wh@&QdT?zno%2nu;%ue*)yminNZVKd$YGV-k>_oLw(Rb)pu!CN&?;YFhye_+pCYNfP4Ql;!{y{m1hyn8Lq|} z^L{6d(=Gc#{)@C+cah9&9>?*VJ?v$p? z6VaEL$tup~?+;(KHmRQUYfV7eN|hkM_kPK1TDCvN(=#rL+JQI2!Pz3x_%jfiR%!pC z7Ol){y8kHQT@IVU+=^QGY z(F>-D0~<5K482#$R_n+t^hCW#tX_%7TB96v#+j0jPLv8XgtN!$o*!YIr%ZuZ+7LeD zuOCW*s?wLf6sHDuNg3u-CQkPtG6@9Zup3?Mdd*ntz%-!M;_^UGF}tpUDSruR49 zi5A(#SK6-}R7afpNiwoSHUGuqf%i+_?<#ns1Kgj)cvu0w#eWgdMIOvuJxS>7R8 z4^HBc2}~20(j&v2p9P2V-dnPN{zLI^?+cdhYUaq;n~Q>2AQv&G|5}oH`Gaa#MS(%&fU^LYW zYuyeVCT7?HrYDNhY-IF<-Z*s18L+esxFYhJy_rC?<(j=^;ljUXL`RS_)ivuv5t56* zP{zbi1BkA8kiMK>au^>F-0kA6!}?2_%DNzhWtKnR2yZbc8zC4NzTiYS2G%I5;LUNq z{2?RSy)#ZD?Y~d zU((xlO4F=frPfnr&!Ata96Y4dyB?a$B%6v1?7-U9C#S1@kmihVCvd`jL6n<*F#C0H z;HLw)7gQy#4?wPOIwa_>rvFVu^ZhI@0>Rg}kur$grMdTI?vo;eMeX$X(CU4CvDQ)K zsj37(8`8S=k7PXtFJL;2?l(|WL|f|b;7o=YHrD&Tzq(Ae$iFtd44=3SZUl31%w6#O zelqxpq`VJyk_L(juP1CC3T$KGn^32oCfIJ7a1ec4$}Icjg3~T^L^Ip0gHL_kZ#=2F%6(co( z6+6ii^>9lf(w)SCq+pv~dlaa0Rg}%maz*&4oQW1Dyd{4)U9$5+Z{$|D*bYln9Ya3P zEcElgy%_zXs<_fxFq4Tw?GE0X$hI7mS+^Z)oau5M4){FA3TPoy@sPS1xawrX z{a%O{w5^W-$NGj=_jbB3v&P)Z4t;G*xtIXMZ9h;((c$x_dzN#+geFAB^gk-EnQ6){ z4pA^JvtCEHqyi$hNZ;-7x;N?@sChV`>&AjP8?8`JEoZD`}6BXj=rE&yq}EQY0d`7K@cl5F_|hbx9$4 zq;YjdnChA94LG#_Tx=8|VplJib~n8+3J^rMkkipEW|6!;48Ze8X?9Hy$(}XlbO!zK7Bo@5e3SF?ncq z9jKszxMnl?3xd$SZ?@y=orJ<)j}muszYQE_b|uxs*tEyBLqAc#K!zg41|G%`sf~Hb zm@ftRnZ<1gepqqs8`-X}gh~&pam~PBDbxN>z7=h=guTi0pOloQ{CD$M@V)|-5~gn? zkjeNkK@vjY|B;@0vCMZE5e>yvyI)EbEFjNUxmZt+hv8Uq&YuJkZ>LEANPtd zw@tGVWtTh^MnV!f9zarpdg?Ns;w@7T(>1`^$q(c3Z{En8Hs!bWSSUpLSyBv;?a3Q( z<2Q?RVa|f!A3y^wUjnPa<>|r37{~Ab*WHup$F=TK^r}Q2Dw&tZ(3FqR=%mf_@mV0% zp6Mt>X86EM{mAqyNkF&x!A|OZL=t+chR7s9Rm#YdqFhd2q1pSpFbP0Gsj+eKHy(Rj zTL_46Qi%!n>@P8-vG&dUs3nh}*^AV~%rNRH)V#p?Jm$xb57nKOM6e)O>pr7me0_}j zf3l=O%|E|Gd<>r96DR>tlGn0T6C~0>F zM!!iEF~o5hO8$TEn?X{D^LK1=ETvGTF-OnI$L5)`vbvx3YgFFipEW~w-5a}Wks?`y zu$KAztYXELOgj83QD91rHh2bw{n3suMAW0*g6m(2{uBXSGmtQh3qexJ;#Fg!(gUYk?Fe+h`#2OwDma6U>|7!rGN-P|s3625G21eh9j$2A<&)+cq^X_Eo=;kw_ zBsJqqWPStw7LS-8{zm}ChKz`xjL1yjcVXDD%1OF}{r&gwM-N#UxSSU=7WP1iRQ2Zw zgAah{Hwe+=AA1t_mG;bQXC#K%w95be=~fkas7Ksh^9xA@xcb~ zWAb>t4%2H>{hc59itD^NFg~;t#xs)P3Q{AWTj zu{7|TwUQBLi*Li(NW;+6)U5U(Ra=+fE`x^+MKDSnimj1mW%*T`5-Wyt6^L^cv^}S~ zPXxtjl}F!>l)ZLQaJFoZwgFyv&JuH@&Ag?Teoi5l>6d;CK8v^dBMOQ3*LCgUG%g?I|J#JL#9^|i(EI8My%XqeJH+5CDO@=5uF<1vZ*NI@A-(Fcr#{LSHP;by_H)pURsY* zEi~pHElmxzIN)%)$Hr=QMyf44ESC?!oB?!NgwHs@?<*4z##9lKxN3^4tNK>dt6^IL z^LRQ9^9eh9|Im??21oH9H5^+@xYnZ5*vJw-ym_t%>-R0^9GepW&Ln((*-+-;6uX$f zO1NqKqveRni3XL=0Um2ooe@O;K z)Z@l=t(ckj9lGQ1TVTrua@ycC%kt#v0I$xBMgqIV(fMhq^LI-+_2cFz(N)!d(HUNp z3e!Wy-jzmjguLNa-B3gv4RYJs*iejSP@o>|H<4`SdrN!pi z7><7yF0(mm+HVoKQYE_u%PC~d4QZ7tXO~f*{e+|BSv;!m8dX&SF!6Xo^R4Zl#lmlY z8jy39vBzzDrQ~`-aH#m(hUzX|DHtSRN_uUmEt?(#!d0AqDFqSyI=na^#jXU?%9p2_ zkOh&a;M|^+)J+wCFhCGerz)1F;+heJ$N}DvzjQsyh~MaI3b-+_=@`Z3*+o?iJ8Nqc z*>0QLJ7X@xjSi#a4~+)WhGk+1umR5vcI$l##@~r4UbI^8cGcdY489 zKg(aHXi7?>}~rPc0u;nCI=5w8|rii{J=wAf+iy7&Cr_|2z1SKdJ!^P9aQ(erIub_Zc-wgPn5{#oumqt7;u7zQIw04!y&K6favG?3qvXBtZ@+P$b z`(vLa4UB?=w7X2Y6+32DgkE+z2G#iuxNItP*HI)cQJaZtg$6Go_%kvaQ{-zzSs2rx zL_eqjDe)Zr-tsVUzfg5ngLJ7cR^N9mNBe@EU&zBm>R-I>DQSsVV0EJwpBf{~p~&;&fj zD(HqaAqld`@@(uQxMDiC{G;_-H7;4bJ!m{-%za*80;-z%BJ^AjI%0pk>>uLctzY9t zn8iD5{wIl~zu!h7aC4b++hqR*NEc2sqq$r zoJ=-kvKuc;j!~|`4Qg6Ka2j7bGRrX;{7($g*SkGt|7(R>k_WqTLiFsLc@vsubdE5Z z0K_4A(%Fqid3pt_Rj)^B8t)7O%R;H}A~*cat{EIn$}MYb^3w2qfNO;RrmO6Bwh72< zkX@xXyI1!0(|Pr@FnLhn>eR8n-TQh@H#0(~LagRlKqWBl)};q-iNsh=K!mBD^lna; z85l#YUA9t^(1Lj<0ls;};!zfzIX(_ws_gaP3ZkE+A$k4b!an#`T8P3YW?&!DtbZbM zCC%kH+55KP*WA7*`y?ypI|sDmRDzz^pRu@ck`e!- zS16{gZ!=p5du$?D?W`bC9`QbtP2KD3{3}UpUH8yCLA~U=@8a#&n1c5?c@}VX`4@Acbo~}4YLfLiC43> zaWu9>A7_dFk)Z?NYQiGRg%ta!!v6|6~N1{~qa68k8ERSna-pkqxGP=YrC`jrbi$Lzdun z3{C9RNMZflM#XItQoq3+#zxST@=GqTpUuRU2Qdc;O>nsade@H6D1I6{kf$gwdVIX- z-YLG+JW=eiz58XamRprR(x4iwhJO9)nhg^xp4J|3Sy)t@N@OVm+HHmrKOXyH%fTj6 zCf&u@A^aa{hllZ*>78Vb?s%IRW^B)g`mAB@*w{RYUKRJlCjwfMrQ?E*hnmfl+KaOZ zRc({NmEwVbqlH?XTy{utMyK28kei8#&}egP3&RqFoN6pVnsoY4N_;{NjCJf&T~~Qa zDT1Bjg;R)VnG~*{p-kmNeCeGe87L;B85xRO1$=RZV!i7uf1&-HPtAH|`5<2ja za9FG;<(Yf!W`YQHAO;2x;~J8TTO96W%id$xy?)>*+F6QWu1}qeeBd&(Xt7U`8W_I? zH|CSm)tttUxi6gb3E@^KF_8pKt;&*`m%pzISa*Ckv|YWvqdXo`fJagY81&Y^I;7m~ zqv?+1JO4xR=kruNq8~4>H`wo0%f>2ehLg@U(q#f2ecWAtW>6-c^Q@4s`|>KPTnJvb zrNwnKjeXf|KGC#0i037G{h zsmi*(^UYY_GU84eR4vAk%l1!uyThDCb!~8 z*}lNhC$zJgJSd23N4W;*>#GHOm~wC}QR}g|9CPI>cqv5sYpie8`(%O7+RfO0+b4ZH zRGA->ARVuy61Wl+CsW49NhE^dPQ7>ITJssZ(rC?a!=*Vh6Uc?zjt_X#sxf1Ft)g1+ z4?}bydikBKQHn!9MfO8WSQ<2KzK0uF6evQ5zZb|qHsFXG)7|m%D;Q$Eih!i6!cM0P zP(55-U>z*MN7iG2)X55!7#}YSaW|&Mh#F{H^&aFaP~&olD_lXQO{M|M&y z$h83cHp_%9mX~cQEH@9kF3qWN&m#Z@s_{G26&bE4g5pv%zpWaMfMr`83Xjsls9)hn z2+G)IxKZ&2yfg3<3^wbpiOON9&Cd#G#9Jz|c~vLyLAt?vsNue&^jS4_pq->~J72B# zK%daB2n0tq7Wko~*k{wn#%{7NrrlTUsP79JzYNZ}?Y>4LFzEA!Sh~sRX*tDx}fK_~Ae6~1O=@%Ko-{ef_pCbKgd-OTB%UtFX5RW+Eg;$mD z_q9!g2!%txZYpM}lustGk-!txEtxy!o`L6Ger5vS#2JCaey+lBRPE z=T)O7v4t(_4gG_1ej}+$(AOfN_T;Hv8#$Y#J;52j|k$}rQ#y^i2vR0r<2 z#v?T1^DM)u$*o-M5YHKS(Fyli9c6xeLMjJ(ml9nFBL>nB?CQ`J-Z^ZWTx~LFb~OAD58Ke)1OEMf41l`BKKcn@6mF#D^nGI_ z_Hnx`Dz6?L&+P+?ARpD9p@LCGHWmm)wV1P~hlkRn9r;h-d#`McIQTf;Of4YJ~6&A#t z#^endTG3}SLRI`GkWun-QLVfLOJsZySvGN{0SZ2z{&TFr&CDz-T8bZz$Wdt*`Ps;H zlo1oWd?Qrm=#<+zDTH!Mc9td>V5Su7f%?Iu(*x|yq_$kf&w_@&{ zk6SBX6~&7mR(&|#aBqJTcg@Zu-2W|cHGQ*qc@5+`CGGIXvz4Ar>tYVP{$X}yGeM7b zdi$q|ZQ%=w{+oU4wX4C;Ptr#EpJ-u9Q?$FkR^~aeSUZ$zv~!9_8%byu)lGb^spG)f z(7OSbLvsrgK(2IBogAoYhGq2(o9Y2`+e+Kv%pZgIHxkjgx=~SSaC#$Bm8rwx04Lqm4rch%0-!>OsxQk%89j z4fz9VMA$8tg`1kd`|mE23Lgc3Cd33kq<@RnFtsq-AGqA2CU{MgYx+rnzuS+&Qs9&x zew`fCr2L#(+mGj`U>}0vX}n86hh4bw2!EDe+sX{CmB|Os%IgwH-oXl47GY@6NJ#~ zAJG{un)ad|w#9e9^T4sIt|fo|3ap6IW6+u(fR0k3X*z zeEAn3h=Q*YL8t3b;QMpPS#R}S#pOq@qN;>g@zjdgz;JWKW;dI^B6-zA%1Me6#PkK& z-12^RbYfA_bf{63ll${s9DWb=)6;`CWe9k3;Gs$7Ki4Dh8bges@b#t*I9iM?!Knph zM`wKE?Cmc%#G(EwRrfnA{(dSn^`l>NuAR*M3Cut?;M;6QTnGt&39R>G3`8r#N@SWEA}u?SqL9O-N!U+UcXyj2KKTPzv2x0FQcC1G)4CifexhwkQX zY9+z9bbQ|2jTMbvMvee8Ys8TKL!&P@>2-4aC1ZtlYjDqUdavO9nzl zLBI8ekemV2&U_JbZhcC$qwu|0FcVM-h0F##>g?BuekiW>jRaxG}{)T=sR= zQ_i#!6|EZBGAqJ<0=p(|-&~jDD*Uu2xalE4cO~?^pobTZMb5F2<=3(qpF>?-E#9fY z)i-~n3bsu)&kXFRm)kW7ci5ezZu=IZ>uCp)FYYNl>m0|g2swBf=^T-2)@wEgNRbnm ziRq(oy0s}?<59rU_c!t<_$oUwb$A38v;>|jO-`a@&mt2VccrmoI;oQPEVq6P49uUG zNm^(co{=XQ`#L%omnexp4M%t|8>RVmD~SobmOe4c=}K|%pS<0k<8yQtxKFpTssJgi zrTf#Ayde^TrNa&A2<%l2Tz8LUoh>+k93cKGp;JB?Bzw$3|EZMx?5;_~S60`pSBcN| zH7WTm$nWf%e&1eG?M?4j8&7a~))(Et@)@OH7iy(9skzE{+OQR&qeJ4Rx63h()j40v zoybXh1Mb*e@z)~xm|yDzY72QaNj{C%@Qy3GpwB=SUaNr)tjknC0ir9Q78C@eTsG?1 zOMc#n{fL56hLE{uBx}9)JP7sQZU^_4rok%9t?qL2j+uz5-jddD5q*fhndb%iH`G=` z>SE|AqVj`&LLE#37+T^@8kQOYf?<|K2=k}qn`2?qzV?6yMZpzM8fzPh&+5QeoP6`|zyE?q;JmsPPLbI=%|B}TXR9FtI>+~7ldMp3l^d|f;xG*mM1;C? zVF%_UmQ{v_z!>lZDF1k3wEnsZT{r@)m&&zqW1Kd7GHH$)YAdwxu%c+ z5J%SG*N^E5f3KA7XOtjE25!%~g(-1;B1!7zVaEZ{OaksjRQ`fJH3l=7b zsM0Kxh)DtfWa$6>7XT3aq6(5%&0NW<3r~>P_~gp1G$CSr3P6UF02+RV#(Or} z0UbSDulMtR+g+efjI(YBxZP}0I z^I_O*fyriL^W+9AO97aqs3B=-7P7=2Hmb4z-CVf+0;e0bc07Db^P=2TBr0dHd{sUl z52Hh$fX!0LPRs80;H9&*m;tE<<;s8V2K zK`vy%z&uB9UTDCO$%2zD?KpV07Hxw|zx5uu<%Xd1nY7vQmv=wFq}7HEg?YGR_fD+O z%fVF}*3Q+Rays#LT@zkEcL9&R_aUr7K441$cz99(iO>s)Fz`m~84=?z2a4E~p0nlR z>JfbElDTpyDz&0kKA%2)Dki4 zdKRpVTc_}^FCW5h555V{0v-8s^}ttEug9bJe4Yiact#+z)J@=Yd(bg5il4l65YN8< z(W3dxwq>6Ae?hzH938{nAO8a7Mg#uzlez6RLL-RWGyRHka|9$PG5!de+ShNOz01sKL*ng%Lt_2^~8+P@f zx^xmUkvk&67>UJgv2pQUtq#XRsJi?oQj~AOZF_p4mbpUqPq>iIAqlJ6DluAvpR0@> zc%Cl73^|qp@Y5$wp{A=B|NhxeMZ`Icn60?_r@zLTj;?_Eu>zRK;o!c@cjMnbe=`XC z9&I5&{_#t%;a9I6fjvkf>QDgg9vjC`Up|DN+U>^I}zz$1T&>w%X7W@V5ExD4=Y$=;yGhM`52y6XrjSg>~%7WVyD40|#T)5|&b{I8|Si28sm$Ah1 zBS*A1a4b7OSW4xWz6qC~Z)q$y@P?v19Q&7VvBIk576QgQ9{n>8ot=Kq&z4XCj%7Te zW8L<{f5-W@&bj8{0Q{E&#rVQiohUX2y7Cc#eE-i?U|ck=-Z_AMn-`}w`Q83fXyne2 z0RG@Y6%L%B12QUXSvQ7TcJ+o$)E>$DZ4M6p=TI^F`sW3jB=^mw)x#`XPdJBolnj95 z0AK>jzVS&oJtXI^c*!>*8LsMkKf#5L?zxep1u&n>#p4g$gWE3N7W52|H}>J0I(+Bp zm(bANi?w;#_~q@N!QS;1AZ&NA^2~=HbZzU@qzkjI|CHYp|wr8Hs zvz3S%>DA)}_~61k`%lun{`2kiY~JRDg-Dwxtb81=)#AOg)25sPu?H7bj$`kpA&3Ru zpfo+%sK)be<_SCeaNBS4zCYQd#+x5y!D8iMcI|RW=onlX05223X1fF5 zdHO}Xc;aJ>m@TL-E?~iO+1m1uAJ`jz{wQ8ObuMNAZz(Cj{%=2oY?UJD7_XfmGj(zf1@b}7f-yIkJfH^KyV7eW?#Hv1lR5u1dki2 zVj}Gcr|{#)*1=r9zol{&#!ph@BEQZE1L zukcn){i1`rwWJWofAn1tz3t*#hQSTL_%9sr`>-r^1Ha$ghFgC5dkp%0BucXMc>Vid zM~NZO&|-G1AHDD@9(i_uQ~>7C4DP$B4O)dWV9G>&^X6FtKC`C>B7Wcv_)d);r&_D9 zvtkmv)}4+Bz@NFi8{5{52miPYi}C1-Wo+u!g@ves?!B%ZiV(NtUyl^xe6x~mmSwQv zn>ROylsZ59Y6&{K1BHTop_i2d5EWLik^%5C0et<>9}PJ4q`Q4pmH6A&?qda9!OC&~ zOw%-e^0`mr`!`+{v~OZGqPpj6L4V6pt8nn29>#|J+@QbzGjG5`=xHwOn# zRbbSz2A^0njIzSxVF65Zvj6zmCK%N55iI!+`058ac=zn|2W@THB<^0~mjB)JWf%?O z7D(9c&1Dm*3*Z~JRb&6R9tgSs@|TJ92VP2zMBbVkzWpOK^abh~FRduU^WVH50P47DH+n+y7& z$$B#^fO!HhzJ6;n^dWA!kOwbO+R+i#}N4^`9Tttwv>;L=*+J{C$)(L0GK?E}2d+G)J^0gxYeJllFVjj8u z`~QaK1<9Qg31Ep(fJg8B0`A1w zK6`mrNMVux97aqkykC1Y)@szysGFcMtS*30HfUI#@Nxir`Sw9vwQVryo~8tV`9cBg z|NC3eBo%#-LfE*A|K;Bo8A$k7B_@9dzxy!jG!U%VoGv{0=cn+$N8gVaz!Ot8?D*%O zqGbgEEa36*i#u<_16S+`x{iTK6SBYjt)Rc@6*4^gjr*~uGPr>47YB~uTaP~*_68;@ zq3=BT9DZ}~trY>VTIt07H?~0~3-7Go*s~V)iCt_q1(~8gA^>ywK78ZWCg_#H-W*6>5d^nbA`)csHa%JwnD=I>8+bJU zOoU|L`_#3p6;v?uMe;E#`TF5d)aCzyDLMA^UIZm*V%YlmNa6oQ;=2bWWBH4}Yp9sF8@< zL*X|slw)XgLCBymYfl*f|JS|$fUktObqLLfF813`Jda0Te`gU1OLC2P^_yQsWzO`M zFj#3G9KzOr{wXZhK%HW;0hrAF<{g{yr~B`MLL59k)VH5}9zWmz`l4licGnI(^}rW{ z+G`Ww@A$z_QPVkZdKgNGwbC~*S;*e4L%1f0U9 zN*MqvBx3x}eRts29h*aX{6zR6TvV-XXaswH{Ij5JXEFkqEP$}l|91%|3Sy`I!l`pG zTdXjumH71b%^}rV4wsuXMtSt`+wl3h)Fl&uDGq}l-c<+b0{24y&72tB4bylv`&T57 zZ;$OAT)uU&K0FwJNt-*b>%jUYqFVNiic#M!1LL6}5_?dbWkZfOkYn?o&$%`wo;p$x zV3@II^Drxr3iY9wwDM5bslb$ti=rGWN{mxW+GVEt{J?aSUIA>0X9gM}vZ zSxO(uFdPhY-v*ac%U*bIHnl-2J0DbS6AHj2Fu*<6wJ);liiN;LpZk}CMHm_n^vTw1 z9Qe}pi>=3E8H2P*834~N@aBuQ;16HAJs|2utcxd-=b!FBgrC21IKUvmzrSP!Fqvbv zN{JW0^;K*uDP&WDL|ceHx3PZ+*Zu6b=m-+XE!hCPt!fmX*&RGqv&*T&P~VO4cqC{a z9mhKtny{{XFe(63G=od3M{v!yK{f(Mtc5uEzx+WqY8ur+^MYNrb!f?3c;UE16G9kN z!HrB(4!~q_H*TxOk8iyR8}f5vW~Y0{C-Cb-Z{rU~j>2jWZGn@_04B89SdfQ*x%qll zuoX=qx9H*Xb@->JUqpTPVxQY&yn*#v2Oj=(b5OhBDQg+V2KT{a2M*UZV0gk5(r_Zw z4NTU|;NY7 zB^e#|Rj^&Ug3XKM%iymrkC+#MD&C_*lty1IzyZ_O3Rzsp||s=h|`N z-0QFFZ-=FP6etWD=ong8P1BG%O+s4xg9wtTo3=qfotRWrnnt@H{8+_Qt?D$i39@d} zRuziEkFgfCmccrra3r+q*qI6aP%rIhK;tJO&Hb2#)F=3>#xM7D* z7d!3vpwSEV#f%PuP(!QN}{k#Ow473l3Z$it z{eN@f6q>tlqOra6LGeYQIVegJ{9ZQ}+pSnBPo0IZeQ!tKpvJ+K$;aa!#Uq}3SQZ$; zqPPPq7PO39fPHn(U$<-Z$>}~e+c?%Pxs7$phEaCED1+sAw}fnH3nfp*O;<;{;|aFz zP(W$=-lVIEk6%y-7)>Sc`@E=h*s#Xs(6MgzeKCR)EkS%Sk{Y$_f&wlbX9-bR0FQyv z^hui1QN+hCECdKaAmE43X2IhgC&ZXl7R${()7FV=H$TfLUGBmH_`bJB#0@Rv0ffj)wo9gR?Ea_R?; z5=S6S1j;250j~#-*eqD?u)z>h)Y3mPiepW!7#qucEpM7;7RPV{InM&P9tz!293F8m z<`V&9NeKc0AN&>x>%30gzL#ZNu_oM~4W`x;X+HfZ7~KZ)2ZGw|&me*+YKMZco*SA^ z2(TLlkJqb_1g`TqA;sjuvnJe)T{m(5`VC$BXFl0qkhU1{EWy_8s{nF=A7mBe6y}G~ zgupI45OB$O)M3RUNz^6nu#O7vwOqm79QB;a4^Xmf1tDR8t|!>Gi&5*H2Bk}~tdff_ zQUpYc1i#0PfFxqI+wq`_Aahrt6h|7HF*Kam_oztW$cdb-=3zJ{GT^p2o7OX-8Gq2UsLxpC@Ldo znqA+;dGmrRo>v3}0bZ|Lt2q0z%b`)@L?3oZ6fIN;PfSmCKCku{u5twi;Uyfde|0i| zzgPEdOsIzdI1AS&Zh5W|aJrrFIP6$vx1!Q2>Gr)N;}ba18bt5lRDY#h+gHT;22di@ z;;s7kCj)rzUL&sdoP(;)y1zts@q93xU<|6sjfUTAglKwdh^@PR4H|hdAME5dM2ZzWYTUdQ!M15#wt(a^L}(xITcZfBYx}@^4TC3fDt!dA1NROCl<~ z9(c;l+I??nT>H~&pZDW~U>hQl#I~Q=vS~rdCFp@lzlnxFUXS`67r@mf2=;xT^o4}4 z^MXQ(I~$LH(P-341g+&|*ywk|Y}9v6yb~Tr!$;@ASTp&P6$B^! zu2!@2NvO(E{uR#3Bow4jmgnsDdf~Q8SmTo6D%T&AutJ4nEmzPtki4ZxK{}mpMzgQ4 zVAz7g2hYZumYg23X8SLp;N^Vtf!i|=2xxiEcKDr6e90nWsl%#Em1Nmg&E2w_(i-!$piSg=R`!z=b)&oiw6Pj$!ri1B@up)2X=F*Rw5X`?;RMq zhrcyl;x)dr0XNlm3_=jb(T#ZX&5_gsn2p-HvkFu_4Ny5%J$zhoAz)zjy?!sOW;4Fx zbHZZMcjIHH&hNAYajTy%owGOdWDrEygd+!=lj)eAVSM-QQuKxQKvjPZfOBSLZ-(+y zvR2>g(bzIqB%#J(OXstpE?n&3g$h}mz%T^iS8$i^!~XqA`>8&>ML>0(4F-A~Dt#)8 zMsm@4h=A;p;dVGsVG*%Hw(0i0%-qiYA)LN^6=8nroW0o-$cIqKW;E1Kn@~P;kB_=K z8*ZZsR9%`qOS$BHLO{Fk^>|=2m*R1EVyYx7R5*G08gBBXbM~f<2%WIu3Di#?yiEDb z0nA2i+qnU%`WJxmL#^yhSzbui_Psu@*3WpYM@~qUWMzUMc6@^7P}gK{PX1&80TP5D z`~YtsY@A7WY5`nbZGcgJ8jA8)0Gxt$CR7Xf@4kQ!Hc`YXr(Ih<$3GndLpa%d8HzId zhGGQ_PcBUFgTe59L7U18bdCsx}KCv7toi-i2 z2J`6l=opTjZ^7M%G?*(u&-2OTJ{W{L9Ij89WHP+~X0F!k{0P_i&-)6{ z!F)EE3_>9Lq2Tq0-Sf`m!Q29vNoN^bz2lETpoe(w^h|K)*WXzmBgW?}noOwjI$@3J zrob#^d)*7&J@~jS#5*cva_U%avr1~=FLTyxYwB_;Pxj41iBTa0>$d3}bj-vciPf=*V0E zN40D9#OfA+ZsRq@vzd|{ymLR#S(YTNiy&)<68}u7Do(UsL3i&!4h$-C6|9yQc5cvrw%A4ynW%hl?{XA!vxlAKuHyQN%UZ(9#M;BT{ zHvoQPG<)zF0UeCLgF0~lxYHHOq%nJ;`Zu!^z_B_Q+hs}Qr%Q+TY?zng$n5c%rd8jAqZU%a1;~9-$vOZ(-oBJ`0NL8 z)DlJ>-`=wcD%L?&s{ryOfB^4`nCeu`eOxrpSu88XO4*JItC)}se{XyO?_Iizo`Ipc zD_jT?v@U^ciA>Kz5Sk(2B9;eEGt%{3xSzWKj`fB$R4X?*K_g}uumY592Ji$ZsRX5L zLskMx6W4XQK%|Iu`20TDBvGTrSuWdjl(12^KMHlBspAu#Z597JAcQ4L literal 0 HcmV?d00001 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"> - - + + + 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 + + + + + + + + + + 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