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