From 1983b8e13134b6960bf14f939612ed489fb04bf9 Mon Sep 17 00:00:00 2001 From: zack Date: Fri, 17 Dec 2021 17:36:09 +0800 Subject: [PATCH 01/86] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=88=91=E7=9A=84?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=EF=BC=8C=E9=A6=96=E9=A1=B5=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E4=B8=8B=E6=96=B9=E5=AF=BC=E8=88=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增我的模块,首页导航改为下方导航 --- .../injector/component/MineComponent.java | 2 + .../ghui/v2er/injector/module/MineModule.java | 2 + .../ghui/v2er/module/home/MineContract.java | 21 ++++++ .../ghui/v2er/module/home/MineFragment.java | 66 ++++++++++++++++++ .../ghui/v2er/module/home/MinePresenter.java | 2 + .../me/ghui/v2er/widget/SectionItemView.java | 2 + app/src/main/res/drawable/ic_arrow_right.xml | 5 ++ app/src/main/res/drawable/ic_bookmark.xml | 9 +++ app/src/main/res/drawable/ic_favorites.xml | 9 +++ app/src/main/res/drawable/ic_paper_plane.xml | 9 +++ app/src/main/res/drawable/ic_pencil.xml | 9 +++ app/src/main/res/drawable/ic_sets.xml | 9 +++ .../main_bottom_navigation_selector.xml | 5 ++ app/src/main/res/layout/fragment_mine.xml | 14 ++++ .../main/res/layout/mine_section_layout.xml | 6 ++ .../layout/mine_user_info_simple_layout.xml | 6 ++ app/src/main/res/layout/navigation_header.xml | 49 ------------- .../res/layout/section_item_view_layout.xml | 6 ++ app/src/main/res/menu/bottom_menu_main.xml | 4 ++ app/src/main/res/menu/navigation_menu.xml | 44 ------------ app/src/main/res/mipmap-hdpi/ic_explore.png | Bin 0 -> 1753 bytes app/src/main/res/mipmap-hdpi/ic_feed.png | Bin 0 -> 1812 bytes app/src/main/res/mipmap-hdpi/ic_message.png | Bin 0 -> 1454 bytes app/src/main/res/mipmap-hdpi/ic_mine.png | Bin 0 -> 1996 bytes app/src/main/res/mipmap-ldpi/ic_explore.png | Bin 0 -> 794 bytes app/src/main/res/mipmap-ldpi/ic_feed.png | Bin 0 -> 881 bytes app/src/main/res/mipmap-ldpi/ic_message.png | Bin 0 -> 674 bytes app/src/main/res/mipmap-ldpi/ic_mine.png | Bin 0 -> 868 bytes app/src/main/res/mipmap-mdpi/ic_explore.png | Bin 0 -> 1127 bytes app/src/main/res/mipmap-mdpi/ic_feed.png | Bin 0 -> 1218 bytes app/src/main/res/mipmap-mdpi/ic_message.png | Bin 0 -> 994 bytes app/src/main/res/mipmap-mdpi/ic_mine.png | Bin 0 -> 1231 bytes app/src/main/res/mipmap-xhdpi/ic_explore.png | Bin 0 -> 2540 bytes app/src/main/res/mipmap-xhdpi/ic_feed.png | Bin 0 -> 2671 bytes app/src/main/res/mipmap-xhdpi/ic_message.png | Bin 0 -> 2267 bytes app/src/main/res/mipmap-xhdpi/ic_mine.png | Bin 0 -> 2901 bytes app/src/main/res/mipmap-xxhdpi/ic_explore.png | Bin 0 -> 4135 bytes app/src/main/res/mipmap-xxhdpi/ic_feed.png | Bin 0 -> 3796 bytes app/src/main/res/mipmap-xxhdpi/ic_message.png | Bin 0 -> 2851 bytes app/src/main/res/mipmap-xxhdpi/ic_mine.png | Bin 0 -> 4770 bytes .../main/res/mipmap-xxxhdpi/ic_explore.png | Bin 0 -> 4647 bytes app/src/main/res/mipmap-xxxhdpi/ic_feed.png | Bin 0 -> 4863 bytes .../main/res/mipmap-xxxhdpi/ic_message.png | Bin 0 -> 4021 bytes app/src/main/res/mipmap-xxxhdpi/ic_mine.png | Bin 0 -> 5569 bytes 44 files changed, 186 insertions(+), 93 deletions(-) create mode 100644 app/src/main/java/me/ghui/v2er/injector/component/MineComponent.java create mode 100644 app/src/main/java/me/ghui/v2er/injector/module/MineModule.java create mode 100644 app/src/main/java/me/ghui/v2er/module/home/MineContract.java create mode 100644 app/src/main/java/me/ghui/v2er/module/home/MineFragment.java create mode 100644 app/src/main/java/me/ghui/v2er/module/home/MinePresenter.java create mode 100644 app/src/main/java/me/ghui/v2er/widget/SectionItemView.java create mode 100755 app/src/main/res/drawable/ic_arrow_right.xml create mode 100644 app/src/main/res/drawable/ic_bookmark.xml create mode 100644 app/src/main/res/drawable/ic_favorites.xml create mode 100644 app/src/main/res/drawable/ic_paper_plane.xml create mode 100644 app/src/main/res/drawable/ic_pencil.xml create mode 100644 app/src/main/res/drawable/ic_sets.xml create mode 100644 app/src/main/res/drawable/main_bottom_navigation_selector.xml create mode 100644 app/src/main/res/layout/fragment_mine.xml create mode 100644 app/src/main/res/layout/mine_section_layout.xml create mode 100644 app/src/main/res/layout/mine_user_info_simple_layout.xml delete mode 100644 app/src/main/res/layout/navigation_header.xml create mode 100644 app/src/main/res/layout/section_item_view_layout.xml create mode 100644 app/src/main/res/menu/bottom_menu_main.xml delete mode 100644 app/src/main/res/menu/navigation_menu.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_explore.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_feed.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_message.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_mine.png create mode 100644 app/src/main/res/mipmap-ldpi/ic_explore.png create mode 100644 app/src/main/res/mipmap-ldpi/ic_feed.png create mode 100644 app/src/main/res/mipmap-ldpi/ic_message.png create mode 100644 app/src/main/res/mipmap-ldpi/ic_mine.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_explore.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_feed.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_message.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_mine.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_explore.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_feed.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_message.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_mine.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_explore.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_feed.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_message.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_mine.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_explore.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_feed.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_message.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_mine.png diff --git a/app/src/main/java/me/ghui/v2er/injector/component/MineComponent.java b/app/src/main/java/me/ghui/v2er/injector/component/MineComponent.java new file mode 100644 index 00000000..32f0bbfb --- /dev/null +++ b/app/src/main/java/me/ghui/v2er/injector/component/MineComponent.java @@ -0,0 +1,2 @@ +package me.ghui.v2er.injector.component;public interface MineComponent { +} diff --git a/app/src/main/java/me/ghui/v2er/injector/module/MineModule.java b/app/src/main/java/me/ghui/v2er/injector/module/MineModule.java new file mode 100644 index 00000000..f272dc5a --- /dev/null +++ b/app/src/main/java/me/ghui/v2er/injector/module/MineModule.java @@ -0,0 +1,2 @@ +package me.ghui.v2er.injector.module;public class MineModule { +} diff --git a/app/src/main/java/me/ghui/v2er/module/home/MineContract.java b/app/src/main/java/me/ghui/v2er/module/home/MineContract.java new file mode 100644 index 00000000..3164b197 --- /dev/null +++ b/app/src/main/java/me/ghui/v2er/module/home/MineContract.java @@ -0,0 +1,21 @@ +package me.ghui.v2er.module.home; + +import me.ghui.v2er.module.base.BaseContract; +import me.ghui.v2er.network.bean.NotificationInfo; + +/** + * Created by ghui on 10/05/2017. + */ + +public class MsgContract { + + public interface IView extends BaseContract.IView { + void fillView(NotificationInfo info, boolean isLoadMore); + } + + public interface IPresenter extends BaseContract.IPresenter { + void loadMore(int page); + int getPage(); + } + +} diff --git a/app/src/main/java/me/ghui/v2er/module/home/MineFragment.java b/app/src/main/java/me/ghui/v2er/module/home/MineFragment.java new file mode 100644 index 00000000..1df94597 --- /dev/null +++ b/app/src/main/java/me/ghui/v2er/module/home/MineFragment.java @@ -0,0 +1,66 @@ +package me.ghui.v2er.module.home; + +import android.os.Bundle; + +import androidx.fragment.app.Fragment; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import me.ghui.v2er.R; + +/** + * A simple {@link Fragment} subclass. + * Use the {@link MineFragment#newInstance} factory method to + * create an instance of this fragment. + */ +public class MineFragment extends Fragment { + + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + + public MineFragment() { + // Required empty public constructor + } + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment MineFragment. + */ + // TODO: Rename and change types and number of parameters + public static MineFragment newInstance(String param1, String param2) { + MineFragment fragment = new MineFragment(); + 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) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_mine, container, false); + } +} \ No newline at end of file diff --git a/app/src/main/java/me/ghui/v2er/module/home/MinePresenter.java b/app/src/main/java/me/ghui/v2er/module/home/MinePresenter.java new file mode 100644 index 00000000..3086cef1 --- /dev/null +++ b/app/src/main/java/me/ghui/v2er/module/home/MinePresenter.java @@ -0,0 +1,2 @@ +package me.ghui.v2er.module.home;public class MinePresenter { +} diff --git a/app/src/main/java/me/ghui/v2er/widget/SectionItemView.java b/app/src/main/java/me/ghui/v2er/widget/SectionItemView.java new file mode 100644 index 00000000..43b420cc --- /dev/null +++ b/app/src/main/java/me/ghui/v2er/widget/SectionItemView.java @@ -0,0 +1,2 @@ +package me.ghui.v2er.widget;public class SectionItemView { +} diff --git a/app/src/main/res/drawable/ic_arrow_right.xml b/app/src/main/res/drawable/ic_arrow_right.xml new file mode 100755 index 00000000..92d3e811 --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_right.xml @@ -0,0 +1,5 @@ + + + + diff --git a/app/src/main/res/drawable/ic_bookmark.xml b/app/src/main/res/drawable/ic_bookmark.xml new file mode 100644 index 00000000..0d18ad3c --- /dev/null +++ b/app/src/main/res/drawable/ic_bookmark.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_favorites.xml b/app/src/main/res/drawable/ic_favorites.xml new file mode 100644 index 00000000..b9a121b6 --- /dev/null +++ b/app/src/main/res/drawable/ic_favorites.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_paper_plane.xml b/app/src/main/res/drawable/ic_paper_plane.xml new file mode 100644 index 00000000..5e07f933 --- /dev/null +++ b/app/src/main/res/drawable/ic_paper_plane.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_pencil.xml b/app/src/main/res/drawable/ic_pencil.xml new file mode 100644 index 00000000..792e8127 --- /dev/null +++ b/app/src/main/res/drawable/ic_pencil.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_sets.xml b/app/src/main/res/drawable/ic_sets.xml new file mode 100644 index 00000000..ca1d0204 --- /dev/null +++ b/app/src/main/res/drawable/ic_sets.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/main_bottom_navigation_selector.xml b/app/src/main/res/drawable/main_bottom_navigation_selector.xml new file mode 100644 index 00000000..17cf52d9 --- /dev/null +++ b/app/src/main/res/drawable/main_bottom_navigation_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml new file mode 100644 index 00000000..17d2fe79 --- /dev/null +++ b/app/src/main/res/layout/fragment_mine.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/mine_section_layout.xml b/app/src/main/res/layout/mine_section_layout.xml new file mode 100644 index 00000000..cdc89f25 --- /dev/null +++ b/app/src/main/res/layout/mine_section_layout.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/mine_user_info_simple_layout.xml b/app/src/main/res/layout/mine_user_info_simple_layout.xml new file mode 100644 index 00000000..41d2ef14 --- /dev/null +++ b/app/src/main/res/layout/mine_user_info_simple_layout.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/navigation_header.xml b/app/src/main/res/layout/navigation_header.xml deleted file mode 100644 index f4ff4c45..00000000 --- a/app/src/main/res/layout/navigation_header.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/section_item_view_layout.xml b/app/src/main/res/layout/section_item_view_layout.xml new file mode 100644 index 00000000..cdc89f25 --- /dev/null +++ b/app/src/main/res/layout/section_item_view_layout.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/bottom_menu_main.xml b/app/src/main/res/menu/bottom_menu_main.xml new file mode 100644 index 00000000..e5041880 --- /dev/null +++ b/app/src/main/res/menu/bottom_menu_main.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/navigation_menu.xml b/app/src/main/res/menu/navigation_menu.xml deleted file mode 100644 index 70ba5384..00000000 --- a/app/src/main/res/menu/navigation_menu.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_explore.png b/app/src/main/res/mipmap-hdpi/ic_explore.png new file mode 100644 index 0000000000000000000000000000000000000000..cd575ec714e27f6c13e2a9713e6534fff4b8865d GIT binary patch literal 1753 zcmV;~1}6E5P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt23AQ#K~!ko?b&N=m3JM$@y|Iur*~w7mRmg|BOP^ug2_O_0C#aS zf{89H1}{Sr5*HIpbc@Dp3(4N7F=M_lS=nP0w*TMr{Cb}6^S}Kr|CnNlOK7#qYImCJHW?pEd&_=3 zh809Cu_Bm8OMTN?GfLQYdf8qVjeJx9stuH|I%tnd+ZUQSrR1DFwvM-xmU`TPyn?(!@X3dMPu4SrrgAaaONLS!EyNw2mKd$Mz$7Iw6DZkQF`gYvR zpq(>R!53b>Nk0~IyU$r(?sh!nlWNpf@P!G9n*xFs^U4EV+ezv|!&hF~ssNObEPv~q zPmH%4wQHVs*zOIr2c4Fel$4ZEDR{t`by9qb=-DY zF)?wmqQ6%GuYOu=u%r^8y?z+HP09vGrtG6H=?L0G-f^nzz7;F_%(uJ}pt!Vm1Fg;) zn}VQivUGSdG=u)<@D$tVs1XHuIa$LpGL<>vxU82#`W)Zz)iP7A!*ik4k#)ksN*-~2 z5?AnsBcYDI!}mR5evw_$BVKZMD01xgN)(ZG0z;nnVzB4Nw0PWld%UjOWeIIodql^C z~vsn}Ji&8S=sHe&Xaa9B2f}PIVVxi`;yKK&Xz2*f2QQ;_>sIPj*qt=+~ zV?|4U)FtP2`JKN;2U840!70!CqkAp0K%-hoBeF6+bkYHbqDcpnZcW_+x&?F#=oZioN=$ty%Z+I)SEi_`@C$E7>a4TL z*DX;W0L`<^LRSnFN7^@-Jza-9V57Uuo)kmm4C-~rA9ROnmC*vtu+4g{WmEJ~mz=TF zU#940EDnRZxFBEQSa zmdN{SecFH%@~TkDC@tTyd;(5hmt79}KwhJ}Jm}#GCkJ)D>!_nfqM6hWcvf4Wjp((* zZn+6I^KG`#>`-qVv)P3xhOE|;mIjky#0lFRm{cqr@}`U0gHk+moYWl!&>9=f4zzQ& z=_+YA;)EIbs$tBSY}c6ftoB1d95zHr?ejOTBsDy z+Uf%>GAlGucNI3Yg0*cXivXTeV_}W{6FTdY3<`uAs5_NeW1S36y?Eb z?dMq(S_WsT4|LYq(4aj$seC$7V%AB8wuyt)2fCuu#Xw8hT>e}Gi+w?Bpba`4Mb`0m zeWB9LMvs<_y4rkgLYT5&e-zGjK%0)BrrV%hjgyl~T``MovEHmu|NK}w3ZQ~stF#0s z{4;e}B&^7#x)OFN~{uo+SoNok!hyE;9kE2@Z* zW?Ota6zPoh++`Ufk{Z+(#noxs9h8eM$j>^d)~6=K>~VFPG;5G7!ugLK_D7p_ka0|} z&sK1b+vz9v%Zw>eCW^zly=9>VQ`ijJ<>xxD`TMAI`x?#ev(=IkPa3q}uN`waoB%{$ vY#2L!Pr2Vp^R;R)pwAfx9o8>joQ?b+2&>M)z|)cW00000NkvXXu0mjfP#{wZ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_feed.png b/app/src/main/res/mipmap-hdpi/ic_feed.png new file mode 100644 index 0000000000000000000000000000000000000000..2031a22900ec9f9d6e0c4ddf9e222aaba7df9215 GIT binary patch literal 1812 zcmV+v2kZEWP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 YV_N08!$mPAwg3PC07*qoM6N<$g2M4@mH+?% literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-ldpi/ic_feed.png b/app/src/main/res/mipmap-ldpi/ic_feed.png new file mode 100644 index 0000000000000000000000000000000000000000..d08e3f1fc677d4b52d3a905f82e49e228c8ecc5d GIT binary patch literal 881 zcmV-%1CIQOP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt0`5sfK~zY`mDWvYTvZgn@!w?LG?THZY10}TTC`1q)mTu83l&;Q z_99BnMz`Xkf?Ci@ErJMjAxd?jA(U)%?WR=FA_l1lwJM5%SnWsDewaxnO-fCgk8#mE zubIqyne=Slx#u4K_niB2&daDsul??mv67Tsb=08iwNu$x8_-n;Lq=YQQ!dp`Md7>2 zwxCTZCqfExVBC1pbOqECqM6fYE)jG@HyH7EIw+$jjE9XRVp?hywK!Ipe;6oD@GH&w%P&8zD|iafVwq-i!LU5b-EY) zn-Xyhs%-T+6Nz4rhlS2MyAmk!P#FDaF~KLJH)yAoRs!Acj(97RWQQ$5`z`jYkqD0l zea!hppWaye7&A)7Oe!iVnsmvqBGHn>en?p?r@Z79=4}pVT#+%)x)5oz6_lM$0S(|m zcWc%tk`u`-dF*V|>vItljp=D`-;CXw)%h5^z~hc+W;q^pQ_*mYs~RbfiS^v!`op8P9tu zS^|y~`(d%3$6x2mQA^ z>u9;b1{=UNmt)&bhdmJVBL-_RNubtnCY5fH(W74rxavcL$tP0_YL^EkB{X=(YXLLm zRYR;6)EU0xCgkmPDEOT5wv((LROu)G;B|c>l#SSzULBJ`m3uzzEqy^h;c!Z=ie-7X zU+1S_8`G)*H+<<$Q|id_h&p2QCa|F2(fXKLP-oR>O22{R7JWOQX>T~OI!vXnRV3%0 zSReJWFH-(Y>PFP05VZ4NsCsL4C0jL`HQ`}-#~pC)b};-8s|dDHnztKl00000NkvXX Hu0mjfseO;W literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-ldpi/ic_message.png b/app/src/main/res/mipmap-ldpi/ic_message.png new file mode 100644 index 0000000000000000000000000000000000000000..5d7dac58624b4cea9150ab49283b442f6accabe2 GIT binary patch literal 674 zcmV;T0$u%yP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt0v}04K~zY`?bc0*%~2S~@y~zm%ot<54SBDb8Wt84lEkEx%@mRa z3oE89EYwgaQtT)eYzT=3DJw5YG!z>aa!r|}>tq&)Ce0{sbBD2*Yuw@gzxOXT%5Qg` z^E=;jo~O=pP9#ZHnys)@qdIx7b?R_eufceG6dSG7qTRe-;(g9It2ZrZtlicR&-Ba7 zs8&%JKet^r4QQg{7J(14ZprCWV~Q5bOb74mbVC`{I3Wmv3ziI@Vo1~M@>mc&j7j?^ zZ7E<58W&rLR#`!CQ*9~CR1XEgDWelTt2`A1n@fSV34%vvl<-6j3xa#9io+wT&%acG&BII=`r$+^U0%$zw@ue*2b&)>?lmVa1V(2gO z$AJDw|3UvcXcWk&Sk+(Tj{(hvk{9;7UV+BqX7dA7XC=6w0`$NDYORg~?NyJw%PBy; zI=~JyM}i{l)`4@WQsanzOmas3k6>hjXM*5z=}tUCZE}L(qB@3daH|6{=+@?KYEagA z^F?N8a?_W{Vkd`~?#rddK&7>+!Fl^4w>A9M@_22m@aZpL1`I@ITT?jTNUb#)cRc}- zO)|LTO^mn8mE>Jc7hc>UH5XpsSxNRxB4~o;n4`*P3+y)$ImdqQe*|M()qp`CRjb6H zt*#~6liSF9Tf9J|RwceV2t>(SCZ0#Z<)S|fLfWQ(f|Me07*qo IM6N<$g8Ks^X#fBK literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-ldpi/ic_mine.png b/app/src/main/res/mipmap-ldpi/ic_mine.png new file mode 100644 index 0000000000000000000000000000000000000000..a44109a7b1399291e01f991b1f35d98c564ae935 GIT binary patch literal 868 zcmV-q1DpJbP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt0^vzSK~zY`&DBk4TvZsx@!y@yB#p_~j7ex}F(#&{HHkrBDkZDvI{Q7Kt>WZHTu?upcIAk~U50WHK`@ z49z5SZ)TQ0n*-;(_kW)A-uJvG5T}$K_SvaZle`(DPWsMOh3N1gayF^g`v%HZmmKxE zYl_u@(gwY*Hpc0!PaU@SK|RwhE}H&B_Z8*qv$J_HgH|^tzW=flF^`-BrxGvRGpM4>xeA2 z>W>CJ1J0OHN#{*~r=vji+EMgdMGOo61dm67TBNXKx(X0iz}6^God7wDRe^4TO;Mn% zB2pTv0&NC&qd+(0P^+~n&^B;A3UtRLg3><`tF&HlF$%;fuuDrtP>+t1FUmkC6!5T@ zD`4upVH2)97Y!QmD-z!H=mwa;i}rvo<>G>Ny0mip<5S+}tWfC3_}kBvMtykDE~i#% zWv%u)q#1X8Y$P63G~@{#*y0r_VM(kS@C*K4nKdGl{|(C!uNqTdahQmf5? z9qPcc!w$)=PhGj{edx8=SLCJx>)n(e&B~5HIpYz{rHu%+X^mARe^mtwZkcr6AASxT@$8x&u&QNq z<}J#iR)Z#)NSEXsOnRyWQ}mC^E*m%QZ_{#?6%-LjsFBjDU58Gcx-{SOpVAX}+dF2B u7;(Wx^YZc)URnY*YP9Iqtw*=K!G8f_?$N947BTz)0000004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt1LR3WK~z}7?blyu)nyn5@Xz_{Y|~Adq%mCsO++&TEp@^!R16#l z1>FP@L7_t37*zBJNufqvq!dL|7hwfmMK}F3WVWRZgR+fk&6&=o!{wa1xj*fkE_^+n zowHH<&C4D*ocFxXd7tm|Jn!@Gjk!Uk?owy9g=Xt_%29{48Zs@4h3~j!c35Z5IBt&? z4bI6#2S|XVZC(L#Ixi+UzkeIE|DlZ~9fIPABZm?N8Z7Ydju&|A__{bFRp^ zq(zOzh^chgUr_+!>O$nS+wV#Nx7SN9gG#lzh?^26tp-^KU6_D>R-<~PJgCO7VIxM3 z7%^hFU^Sq(IBSv?f&s0@CRE{wda%^ee^EB8!_LBxj++I>3{G-v;6JBX%n}b2-@!$Y zQa;JCIpR}rc~#*?(rLG1raOJ^?+LW34XZY-lG4&(z%f}WxP&jV=9 z9o=Y;1>>%4uY1F>WXe{zKz~!3ISkDhZEA$;>L^`o}TDp0LU7?IfAd#RO-zC05?TWtgx|0 zoE7pYrrK6pLM2E_7|?$sxFa?4JmHldv)Kaa+}@~OhrH+1wN5xafK{H()!Tf^YWK3k z({oYGD*G(UQ!$fU$5dLY%SqYj7R9sx1K(euxTCZ>t1`Y%h8}3_5PJ*(lQ!EzxFJ z9s;vT#{~QyUxrLr8x0`kwy{Q1fIf{; z^Ppdqm10<=+Hr&76_HSBm;1x;bI5_{wdi(l2R%9C3qQN4)C!w&yXQTsEjmElTCasR zL)KNJ5=wJbsn;t$m5E-iv$}Ly9^R-iDJ9Z5@#i)8%-D2W=1JcuH&@xX-9CrBpy}G9 ta(W#NN~}<8y+tZq*5#N+KN+~r{s*%n6^~juGYtR$002ovPDHLkV1n!03{e08 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_feed.png b/app/src/main/res/mipmap-mdpi/ic_feed.png new file mode 100644 index 0000000000000000000000000000000000000000..74fe76df024b9dd0b05b81197645a16912b9c04c GIT binary patch literal 1218 zcmV;z1U>tSP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt1V2ecK~z}7t(aYGR7DiWf7`vg+ppcyc4_Gcr7b8DwVFsmiTZ+( z1RnH(CK>{XQKJtUzh3^`W3W7P(!QiX;Zf^fhy$<3^DDGpq5tgO!J$z$2Ov(e^1IEL7X=6jB2+S>`*4? z5@|mKA(~h#oThaHh z2S_o+6t|eNKS}0UAj!?;6k-5THY(4rA9Q zDLM#gBf^A%wX|V!kc2^)d!#YPj~)caxlSj|)KEo)5C$RpJGd$`2L!+%OourC;!h8P z6sI{2EEk;^QPvP8MwEJXvOyM$#W0`nHyBhXuXq#_zmg?MQmi=7P%ZE#-|;S2$bmsS zF$o*<-Z+j@&+~LqDe&LW%e7_0V7n5yg;y!FKjoBBPM8V4;-sc(m9UZ5cvSN8JOjMH z5^r$761>|1poKdq;kYY7D+lP5$;t2@$J82Ou-S70D%s@Pwv~5i5-UMBpRXR^c`~ay zS!BtO6Wb)=2p(c5-2!iMjRSnWI>_KHM%hAyw7mySQkbN9Lamq zkiui~Ej?~!%5Zj5D+CrvCY6=|ZM?)T$w-Twpx?c8x)H3AV_1e8c|&jFO&(Sb%^&a~ zbGV8dL0mHIQeK6)k3QCmb&ErsKr7A!L29H{Wh4Oxd63ry-eQ77-sd7`f++Pe2^oF| zpp?gXg?fR%%-aro$TvZq=xP1{s(6y8#Jj{G{ao~hcO!@?1PPMFd78bFb<>=ohhM$H zbp-XIU!{c?c#Mc`r}%=yc?0`ht zArwbYrd*Ja%N|V9%a_H$yAiA}@L7!0&7hxkQ|t%;G7Qtlh2r7e2%7WkG-v7IO7Y;% z1Ock@?(QZh=`Bdu|AD}uA@A>y0s58m&;LM>;~(bjR5!yBKJvJbcu26oV==`n4Mg~v g!+ds|M=_Cq0U}-(<7%IAF8}}l07*qoM6N<$f`8E^;s5{u literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_message.png b/app/src/main/res/mipmap-mdpi/ic_message.png new file mode 100644 index 0000000000000000000000000000000000000000..504943d1aea74b88a92ed7d9a7d228063e3dd32f GIT binary patch literal 994 zcmV<810DQ{P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_message.png b/app/src/main/res/mipmap-xhdpi/ic_message.png new file mode 100644 index 0000000000000000000000000000000000000000..5ac6ce5f4bb311b8cf688ee37837174376220967 GIT binary patch literal 2267 zcmV<12qgE3P)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 LX=l-3=1KZ53|uJF literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_mine.png b/app/src/main/res/mipmap-xxhdpi/ic_mine.png new file mode 100644 index 0000000000000000000000000000000000000000..34ab1b12ef044bf32eaf7c6d4aba3e6e853dce71 GIT binary patch literal 4770 zcmV;T5?$?yP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_explore.png b/app/src/main/res/mipmap-xxxhdpi/ic_explore.png new file mode 100644 index 0000000000000000000000000000000000000000..bab684b5e89a51e53bf172f813c488639b920377 GIT binary patch literal 4647 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 YlQI&@vKg^UxLYYeU0Fw|LJ|4qKepfb;{X5v literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_message.png b/app/src/main/res/mipmap-xxxhdpi/ic_message.png new file mode 100644 index 0000000000000000000000000000000000000000..a9dfc5412de6b22c575b21ebc353b8e2252812dd GIT binary patch literal 4021 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_mine.png b/app/src/main/res/mipmap-xxxhdpi/ic_mine.png new file mode 100644 index 0000000000000000000000000000000000000000..afe43ab80ba9738a6040d160e0a22743c89e30a1 GIT binary patch literal 5569 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 Date: Fri, 17 Dec 2021 17:37:17 +0800 Subject: [PATCH 02/86] =?UTF-8?q?=E5=8D=87=E7=BA=A7AGP=20=E6=8F=92?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 升级AGP 插件 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 88cc9cec..16c687bc 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { maven { url "https://plugins.gradle.org/m2/" } } dependencies { - classpath 'com.android.tools.build:gradle:4.2.1' + classpath 'com.android.tools.build:gradle:4.2.2' // classpath "gradle.plugin.com.flurry:symbol-upload:+" } } From 586d8d0af281d46bcac307fffe3d469bae99c77d Mon Sep 17 00:00:00 2001 From: zack Date: Fri, 17 Dec 2021 17:41:33 +0800 Subject: [PATCH 03/86] =?UTF-8?q?=E6=B7=BB=E5=8A=A0support=20=E5=85=BC?= =?UTF-8?q?=E5=AE=B9=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加support 兼容库 --- app/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/app/build.gradle b/app/build.gradle index 972c4cbf..0e632038 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -58,6 +58,7 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation 'androidx.legacy:legacy-support-v4:1.0.0' androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', { exclude group: 'com.android.support', module: 'support-annotations' exclude group: 'com.google.code.findbugs' From 56ae8d57b9c772e59e837066e7c4712d9e3bb32e Mon Sep 17 00:00:00 2001 From: zack Date: Fri, 17 Dec 2021 17:42:27 +0800 Subject: [PATCH 04/86] =?UTF-8?q?=E5=AE=8C=E5=96=84=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=8A=E6=88=91=E7=9A=84=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 完善首页功能及我的页面功能逻辑 --- .../injector/component/MineComponent.java | 12 +- .../ghui/v2er/injector/module/MineModule.java | 29 +- .../ghui/v2er/module/base/BaseActivity.java | 6 +- .../ghui/v2er/module/home/MainActivity.java | 406 +++++------------- .../ghui/v2er/module/home/MineContract.java | 7 +- .../ghui/v2er/module/home/MineFragment.java | 220 ++++++++-- .../ghui/v2er/module/home/MinePresenter.java | 16 +- .../ghui/v2er/module/home/NewsFragment.java | 13 + .../v2er/module/settings/SettingFragment.java | 4 + .../java/me/ghui/v2er/widget/BaseToolBar.java | 105 ++++- .../me/ghui/v2er/widget/SectionItemView.java | 169 +++++++- app/src/main/res/drawable/ic_arrow_right.xml | 4 +- app/src/main/res/drawable/ic_bookmark.xml | 10 +- app/src/main/res/drawable/ic_favorites.xml | 2 +- app/src/main/res/drawable/ic_paper_plane.xml | 4 +- app/src/main/res/drawable/ic_pencil.xml | 2 +- app/src/main/res/drawable/ic_sets.xml | 2 +- .../main_bottom_navigation_selector.xml | 4 +- app/src/main/res/layout/act_main.xml | 100 ++--- app/src/main/res/layout/fragment_mine.xml | 20 +- .../main/res/layout/mine_section_layout.xml | 73 +++- .../layout/mine_user_info_simple_layout.xml | 64 ++- .../res/layout/section_item_view_layout.xml | 51 ++- app/src/main/res/menu/bottom_menu_main.xml | 29 +- app/src/main/res/menu/login_toolbar_menu.xml | 2 +- .../main/res/menu/node_info_toolbar_menu.xml | 2 +- .../main/res/menu/topic_info_toolbar_menu.xml | 2 +- app/src/main/res/values/attrs.xml | 5 + app/src/main/res/values/keys.xml | 1 + app/src/main/res/values/strings.xml | 16 + app/src/main/res/values/styles.xml | 9 + app/src/main/res/xml/preferences.xml | 4 + app/src/main/res/xml/shortcuts.xml | 22 +- 33 files changed, 965 insertions(+), 450 deletions(-) diff --git a/app/src/main/java/me/ghui/v2er/injector/component/MineComponent.java b/app/src/main/java/me/ghui/v2er/injector/component/MineComponent.java index 32f0bbfb..b1e5a51b 100644 --- a/app/src/main/java/me/ghui/v2er/injector/component/MineComponent.java +++ b/app/src/main/java/me/ghui/v2er/injector/component/MineComponent.java @@ -1,2 +1,12 @@ -package me.ghui.v2er.injector.component;public interface MineComponent { +package me.ghui.v2er.injector.component; + +import dagger.Component; +import me.ghui.v2er.injector.module.MineModule; +import me.ghui.v2er.injector.scope.PerFragment; +import me.ghui.v2er.module.home.MineFragment; + +@PerFragment +@Component(dependencies = AppComponent.class, modules = MineModule.class) +public interface MineComponent { + void inject(MineFragment fragment); } diff --git a/app/src/main/java/me/ghui/v2er/injector/module/MineModule.java b/app/src/main/java/me/ghui/v2er/injector/module/MineModule.java index f272dc5a..3a5764c7 100644 --- a/app/src/main/java/me/ghui/v2er/injector/module/MineModule.java +++ b/app/src/main/java/me/ghui/v2er/injector/module/MineModule.java @@ -1,2 +1,29 @@ -package me.ghui.v2er.injector.module;public class MineModule { +package me.ghui.v2er.injector.module; + +import dagger.Module; +import dagger.Provides; +import me.ghui.v2er.adapter.base.MultiItemTypeAdapter; +import me.ghui.v2er.injector.scope.PerFragment; +import me.ghui.v2er.module.home.MineContract; +import me.ghui.v2er.module.home.MineFragment; +import me.ghui.v2er.module.home.MinePresenter; +import me.ghui.v2er.module.home.MsgContract; +import me.ghui.v2er.module.home.MsgPresenter; +import me.ghui.v2er.network.bean.UserPageInfo; + +@Module +public class MineModule { + + private MineFragment mView; + + public MineModule(MineFragment mView) { + this.mView = mView; + } + + @PerFragment + @Provides + public MineContract.IPresenter providePresenter() { + return new MinePresenter(mView); + } + } diff --git a/app/src/main/java/me/ghui/v2er/module/base/BaseActivity.java b/app/src/main/java/me/ghui/v2er/module/base/BaseActivity.java index 29b51173..4f581acf 100644 --- a/app/src/main/java/me/ghui/v2er/module/base/BaseActivity.java +++ b/app/src/main/java/me/ghui/v2er/module/base/BaseActivity.java @@ -2,6 +2,7 @@ import android.content.Context; import android.content.Intent; +import android.graphics.Color; import android.os.Bundle; import androidx.annotation.CallSuper; @@ -12,6 +13,7 @@ import com.google.android.material.appbar.AppBarLayout; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import androidx.appcompat.app.AppCompatActivity; @@ -24,7 +26,9 @@ import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.FrameLayout; +import android.widget.ImageButton; import android.widget.LinearLayout; +import android.widget.TextView; import com.r0adkll.slidr.model.SlidrInterface; import com.trello.rxlifecycle2.LifecycleTransformer; @@ -32,6 +36,7 @@ import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; +import java.lang.reflect.Field; import java.util.Stack; import javax.inject.Inject; @@ -88,7 +93,6 @@ public abstract class BaseActivity extends Rx protected SlidrInterface mSlidrInterface; protected DayNightModeEvent mDayNightModeEvent; - protected static String KEY(String key) { return Utils.KEY(key); } diff --git a/app/src/main/java/me/ghui/v2er/module/home/MainActivity.java b/app/src/main/java/me/ghui/v2er/module/home/MainActivity.java index 444605c7..5f511906 100644 --- a/app/src/main/java/me/ghui/v2er/module/home/MainActivity.java +++ b/app/src/main/java/me/ghui/v2er/module/home/MainActivity.java @@ -1,30 +1,18 @@ package me.ghui.v2er.module.home; import android.annotation.SuppressLint; -import android.content.Intent; -import android.util.TypedValue; -import android.view.Gravity; -import android.view.Menu; -import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; -import android.widget.RelativeLayout; -import android.widget.TextView; -import androidx.appcompat.widget.SwitchCompat; -import androidx.drawerlayout.widget.DrawerLayout; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager.widget.ViewPager; -import com.bumptech.glide.request.target.Target; -import com.flyco.tablayout.listener.OnTabSelectListener; -import com.flyco.tablayout.widget.MsgView; import com.google.android.material.appbar.AppBarLayout; -import com.google.android.material.navigation.NavigationView; +import com.google.android.material.bottomnavigation.BottomNavigationView; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; @@ -34,70 +22,44 @@ import me.ghui.v2er.bus.Bus; import me.ghui.v2er.bus.event.TextSizeChangeEvent; import me.ghui.v2er.general.ActivityReloader; -import me.ghui.v2er.general.GlideApp; -import me.ghui.v2er.general.Navigator; -import me.ghui.v2er.general.Page; import me.ghui.v2er.module.base.BaseActivity; -import me.ghui.v2er.module.create.CreateTopicActivity; -import me.ghui.v2er.module.drawer.care.SpecialCareActivity; -import me.ghui.v2er.module.drawer.dailyhot.DailyHotActivity; -import me.ghui.v2er.module.drawer.star.StarActivity; -import me.ghui.v2er.module.login.LoginActivity; -import me.ghui.v2er.module.settings.UserManualActivity; -import me.ghui.v2er.module.user.UserHomeActivity; -import me.ghui.v2er.network.bean.UserInfo; -import me.ghui.v2er.util.DarkModelUtils; -import me.ghui.v2er.util.L; -import me.ghui.v2er.util.ScaleUtils; -import me.ghui.v2er.util.Theme; -import me.ghui.v2er.util.UserUtils; import me.ghui.v2er.util.Utils; import me.ghui.v2er.util.ViewUtils; import me.ghui.v2er.widget.BaseToolBar; -import me.ghui.v2er.widget.CSlidingTabLayout; -import me.ghui.v2er.widget.FollowProgressBtn; -import me.ghui.v2er.widget.dialog.ConfirmDialog; -import me.ghui.v2er.widget.listener.AppBarStateChangeListener; -public class MainActivity extends BaseActivity implements View.OnClickListener, - UpdateUnReadMsgDelegate, CheckInContract.IView, OnTabSelectListener, +public class MainActivity extends BaseActivity implements View.OnClickListener, UpdateUnReadMsgDelegate, HomeFilterMenu.OnMenuItemClickListener { - private static final String TAB_INDEX = KEY("tab_index"); private static final String PAGE_ONE_DATA = KEY("page_one_data"); private static final String PAGE_TWO_DATA = KEY("page_two_data"); private static final String PAGE_THREE_DATA = KEY("page_three_data"); + private static final String PAGE_FOUR_DATA = KEY("page_four_data"); private static final String TOPIC_IS_APPBAR_EXPANDED = KEY("toolbar_is_appbar_expanded"); public static boolean isAlive; - private final String[] TAB_TITLES = {" 全部", "消息", "节点"}; - @BindView(R.id.left_draw_layout) - DrawerLayout mDrawerLayout; - @BindView(R.id.navigationview_main) - NavigationView mNavigationView; - @BindView(R.id.tablayout_main) - CSlidingTabLayout mSlidingTabLayout; + private final int[] titles = {R.string.feed, R.string.explore, + R.string.message, R.string.mine}; + private final int[] bottomNavigationViewItemIds = {R.id.feed_page, R.id.explore_page, + R.id.message_page, R.id.mine_page}; + @BindView(R.id.main_logo) + ImageView mLogoView; + @BindView(R.id.main_bottom_navigation_view) + BottomNavigationView mBottomNavigationView; @BindView(R.id.viewpager_main) ViewPager mViewPager; @BindView(R.id.main_toolbar) BaseToolBar mToolbar; - @BindView(R.id.tab_menu_container) - ViewGroup mTabMenuContainer; + @BindView(R.id.main_container) + ViewGroup mMainContainer; @BindView(R.id.main_appbar) AppBarLayout mAppBarLayout; + private NewsFragment mNewsFragment; private MsgFragment mMsgFragment; private NodesNavFragment mNavFragment; - private View mNavHeaderView; - private ImageView mAvatarImg; - private TextView mUserNameTv; - private FollowProgressBtn mCheckInBtn; - private CheckInPresenter mCheckInPresenter; - private TextView mTab1View; - private MenuItem mNightMenuItem; - private SwitchCompat mNightSwitch; - private HomeFilterMenu mFilterMenu; - private boolean isAppbarExpanted = true; + private MineFragment mMineFragment; + private boolean isAppbarExpanded = true; + @Override protected int attachLayoutRes() { @@ -119,16 +81,10 @@ protected void configToolBar() { Utils.setPaddingForStatusBar(mAppBarLayout); mToolbar.setOnDoubleTapListener(this); mToolbar.setElevation(0); - mToolbar.setNavigationIcon(R.drawable.nav); - mToolbar.getNavigationIcon().setTint(Theme.getColor(R.attr.icon_tint_color, this)); mToolbar.inflateMenu(R.menu.main_toolbar_menu);//设置右上角的填充菜单 - mToolbar.setNavigationOnClickListener(v -> { - if (mDrawerLayout.isDrawerOpen(Gravity.START)) { - mDrawerLayout.closeDrawer(Gravity.START); - } else { - mDrawerLayout.openDrawer(Gravity.START); - } - }); + mToolbar.setTitle(""); + mLogoView.setVisibility(View.VISIBLE); + mToolbar.setViewTileCenter(mLogoView); mToolbar.setOnMenuItemClickListener(item -> { if (item.getItemId() == R.id.action_search) { pushFragment(SearchFragment.newInstance()); @@ -149,242 +105,106 @@ public boolean onToolbarDoubleTaped() { return false; } - - private void refreshDayNightItem() { - mNightMenuItem.setTitle(DarkModelUtils.isAutoModeEnabled() ? "深色模式(自动)" : "深色模式"); - mNightSwitch.setChecked(DarkModelUtils.isDarkMode()); + private void changeTitle(int position) { + switch (position) { + case 0: + mToolbar.setTitle(""); + mLogoView.setVisibility(View.VISIBLE); + mToolbar.setViewTileCenter(mLogoView); + break; + case 1: + case 2: + case 3: + mLogoView.setVisibility(View.GONE); + mToolbar.setTitle(titles[position]); + mToolbar.setTileCenter(true); + break; + } } @Override protected void init() { isAlive = true; configToolBar(); + mViewPager.setAdapter(new SlidePagerAdapter(getSupportFragmentManager())); + mViewPager.setOffscreenPageLimit(3); + mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { - mNavigationView.setItemIconTintList(null); - mNavHeaderView = mNavigationView.getHeaderView(0); - mAvatarImg = mNavHeaderView.findViewById(R.id.avatar_img); - mUserNameTv = mNavHeaderView.findViewById(R.id.user_name_tv); - mCheckInBtn = mNavHeaderView.findViewById(R.id.check_in_progress_btn); - mAvatarImg.setOnClickListener(this); - mUserNameTv.setOnClickListener(this); - mCheckInBtn.setOnClickListener(this); - mNightMenuItem = mNavigationView.getMenu().findItem(R.id.day_night_item); - - mAvatarImg.setOnLongClickListener(v -> { - new ConfirmDialog.Builder(getActivity()) - .title("退出登录") - .msg("确定退出吗?") - .positiveText(R.string.ok, dialog -> { - UserUtils.clearLogin(); - Navigator.from(getActivity()) - .setFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP) - .to(MainActivity.class).start(); - }) - .negativeText(R.string.cancel) - .build().show(); - return false; - }); + @Override + public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - mNightSwitch = mNightMenuItem.getActionView().findViewById(R.id.drawer_switch); - updateDrawLayout(); - mNavigationView.setNavigationItemSelectedListener(item -> { - switch (item.getItemId()) { - case R.id.hot_nav_item: - Navigator.from(getContext()).to(DailyHotActivity.class).start(); - break; - case R.id.care_nav_item: - Navigator.from(getContext()).to(SpecialCareActivity.class).start(); - break; - case R.id.star_nav_item: - Navigator.from(getContext()).to(StarActivity.class).start(); - break; - case R.id.setting_nav_item: - Navigator.from(getContext()).to(Page.SETTING).start(); - break; - case R.id.faq_nav_item: - startActivity(new Intent(getContext(), UserManualActivity.class)); - break; - case R.id.create_nav_item: - if (UserUtils.notLoginAndProcessToLogin(false, getContext())) return true; - Navigator.from(getContext()).to(CreateTopicActivity.class).start(); - break; - case R.id.day_night_item: - onNightMenuItemClicked(DarkModelUtils.isDarkMode()); - break; } - delay(50, () -> mDrawerLayout.closeDrawer(Gravity.START, false)); - return true; - }); - - - Menu menu = mNavigationView.getMenu(); - for (int i = 0; i < menu.size(); i++) { - menu.getItem(i).getIcon().setTint(Theme.getColor(R.attr.icon_tint_color, this)); - } - mDrawerLayout.addDrawerListener(new DrawerLayout.SimpleDrawerListener() { @Override - public void onDrawerOpened(View drawerView) { - updateDrawLayout(); + public void onPageSelected(int position) { + mBottomNavigationView.setSelectedItemId(bottomNavigationViewItemIds[position]); + changeTitle(position); } - }); - mAppBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { @Override - public void onStateChanged(AppBarLayout appBarLayout, AppBarStateChangeListener.State state) { - isAppbarExpanted = state == State.EXPANDED; + public void onPageScrollStateChanged(int state) { + } }); - - TAB_TITLES[0] = TabInfo.getSelectTab().title; - mViewPager.setAdapter(new SlidePagerAdapter(getSupportFragmentManager())); - mViewPager.setOffscreenPageLimit(2); - mSlidingTabLayout.setViewPager(mViewPager, TAB_TITLES); - mSlidingTabLayout.setOnTabSelectListener(this); - configNewsTabTitle(); - initCheckIn(); - - int index = getIntent().getIntExtra(TAB_INDEX, 0); - mSlidingTabLayout.setCurrentTab(index); - isAppbarExpanted = getIntent().getBooleanExtra(TOPIC_IS_APPBAR_EXPANDED, true); - mAppBarLayout.setExpanded(isAppbarExpanted); + mBottomNavigationView.setOnNavigationItemSelectedListener(item -> { + switch (item.getItemId()) { + case R.id.feed_page: + mViewPager.setCurrentItem(0); + break; + case R.id.explore_page: + mViewPager.setCurrentItem(1); + break; + case R.id.message_page: + mViewPager.setCurrentItem(2); + break; + case R.id.mine_page: + mViewPager.setCurrentItem(3); + break; + default: + return false; + } + return true; + }); + isAppbarExpanded = getIntent().getBooleanExtra(TOPIC_IS_APPBAR_EXPANDED, true); } @Override protected void reloadMode(int mode) { ActivityReloader.target(this) - .putExtra(TAB_INDEX, mSlidingTabLayout.getCurrentTab()) - .putExtra(TOPIC_IS_APPBAR_EXPANDED, isAppbarExpanted) + .putExtra(TOPIC_IS_APPBAR_EXPANDED, isAppbarExpanded) .putExtra(PAGE_ONE_DATA, mNewsFragment.getRestoreData()) .putExtra(PAGE_TWO_DATA, mMsgFragment.getRestoreData()) .putExtra(PAGE_THREE_DATA, mNavFragment.getRestoreData()) .reload(); } - private void onNightMenuItemClicked(boolean isNightMode) { - int wanttedMode = isNightMode ? DarkModelUtils.DEFAULT_MODE : DarkModelUtils.DARK_MODE; - if (DarkModelUtils.isAutoModeEnabled()) { - new ConfirmDialog.Builder(MainActivity.this) - .title("要关闭自动切换模式吗?") - .msg("当前为自动切换模式,确定关闭自动切换吗") - .positiveText("关闭", dialog -> { - DarkModelUtils.saveEnableAutoSwitch(false); - DarkModelUtils.saveModeMannually(wanttedMode); - reloadMode(wanttedMode); - }).negativeText("暂时不用") - .build().show(); - } else { - mNightSwitch.toggle(); - DarkModelUtils.saveModeMannually(wanttedMode); - reloadMode(wanttedMode); - } - } - - private void configNewsTabTitle() { - int padding = ScaleUtils.dp(6f); - mSlidingTabLayout.setTitleViewVerticalPadding(0, padding); - mSlidingTabLayout.setTitleViewVerticalPadding(1, padding); - mSlidingTabLayout.setTitleViewVerticalPadding(2, padding); - mTab1View = mSlidingTabLayout.getTitleView(0); - mTab1View.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.animate_triangle_down, 0); - mTab1View.setCompoundDrawablePadding(ScaleUtils.dp(6)); - } - - private void initCheckIn() { - mCheckInPresenter = new CheckInPresenter(this); - mCheckInPresenter.start(); - } - - private void updateDrawLayout() { - UserInfo userInfo = UserUtils.getUserInfo(); - if (userInfo != null) { - mUserNameTv.setText(userInfo.getUserName()); - GlideApp.with(getContext()) - .load(userInfo.getAvatar()) - .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) - .placeholder(R.drawable.avatar_placeholder_drawable) - .into(mAvatarImg); - } else { - mUserNameTv.setText("请先登录"); - mAvatarImg.setImageResource(R.drawable.default_avatar_drawable); - } - refreshDayNightItem(); - } - @Override - public void onClick(View v) { - switch (v.getId()) { - case R.id.avatar_img: - case R.id.user_name_tv: - if (UserUtils.isLogin()) { - UserHomeActivity.open(UserUtils.getUserInfo().getUserName(), this, null, UserUtils.getUserInfo().getAvatar()); - } else { - Navigator.from(this).to(LoginActivity.class).start(); - } - mDrawerLayout.closeDrawers(); - break; - case R.id.check_in_progress_btn: - if (!UserUtils.isLogin()) { - toast("请先登录!"); - return; - } - if (mCheckInBtn.isNormal()) { - mCheckInPresenter.checkIn(true); - } else if (mCheckInBtn.isFinished()) { - toast("已连续签到" + mCheckInPresenter.checkInDays() + "天"); - } else { - toast("正在签到请稍后..."); - } - break; - } - } - - private int getCurrentTab() { - return mSlidingTabLayout.getCurrentTab(); - } + public void onClick(View v) { } @SuppressLint("WrongConstant") @Override public void onBackPressed() { - if (mDrawerLayout.isDrawerOpen(Gravity.START)) { - mDrawerLayout.closeDrawer(Gravity.START); - return; - } - - if (!isBackableEmpty()) { - super.onBackPressed(); - return; - } - - if (getCurrentTab() != 0) { - mSlidingTabLayout.setCurrentTab(0); - return; - } - - if (mFilterMenu != null && mFilterMenu.isShowing()) { - mFilterMenu.hide(); - return; - } + isBackableEmpty(); super.onBackPressed(); } @Override public void updateUnReadMsg(int position, int count) { - if (count <= 0) {//hide - mSlidingTabLayout.hideMsg(position); - } else { - mSlidingTabLayout.showMsg(position, count); - //config sliding msgview - float padding = getResources().getDimension(R.dimen.mediumTextSize) / 2f; - mSlidingTabLayout.setMsgMargin(1, padding * 0.92f, padding * 0.28f); - MsgView msgView = mSlidingTabLayout.getMsgView(1); - float textSize = getResources().getDimension(R.dimen.tinyTextSize); - msgView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); - RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) msgView.getLayoutParams(); - lp.width = Math.round(textSize * (count + "").length() * 1.5f); - lp.height = Math.round(textSize * 1.5f); - msgView.setLayoutParams(lp); - } +// if (count <= 0) {//hide +// mSlidingTabLayout.hideMsg(position); +// } else { +// mSlidingTabLayout.showMsg(position, count); +// //config sliding msgview +// float padding = getResources().getDimension(R.dimen.mediumTextSize) / 2f; +// mSlidingTabLayout.setMsgMargin(1, padding * 0.92f, padding * 0.28f); +// MsgView msgView = mSlidingTabLayout.getMsgView(1); +// float textSize = getResources().getDimension(R.dimen.tinyTextSize); +// msgView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); +// RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) msgView.getLayoutParams(); +// lp.width = Math.round(textSize * (count + "").length() * 1.5f); +// lp.height = Math.round(textSize * 1.5f); +// msgView.setLayoutParams(lp); +// } } @Override @@ -401,48 +221,20 @@ protected void onDestroy() { } private Fragment getCurrentFragment() { - int pos = getCurrentTab(); + int pos = mViewPager.getCurrentItem(); switch (pos) { case 0: return mNewsFragment; case 1: - return mMsgFragment; - case 2: return mNavFragment; + case 2: + return mMsgFragment; + case 3: + return mMineFragment; } return null; } - @Override - public FollowProgressBtn checkInBtn() { - return mCheckInBtn; - } - - @Override - public void onTabSelect(int position) { - L.d("onTabSelect"); - if (position == 0) { - mTab1View.getCompoundDrawables()[2].setTint(Theme.getColor(R.attr.tablayout_selected_color, this)); - } else { - mTab1View.getCompoundDrawables()[2].setTint(Theme.getColor(R.attr.tablayout_unselected_color, this)); - if (mFilterMenu != null && mFilterMenu.isShowing()) { - mFilterMenu.hide(); - } - } - } - - @Override - public void onTabReselect(int position) { - L.d("onTabReSelect"); - if (position == 0) { - if (mFilterMenu == null) { - mFilterMenu = new HomeFilterMenu(mTabMenuContainer, mTab1View); - mFilterMenu.setOnItemClickListner(this); - } - mFilterMenu.toggle(); - } - } - @Override public void onMenuItemClicked(TabInfo tabInfo) { ChangeTabTypeDelegate delegate = mNewsFragment; @@ -477,15 +269,18 @@ public Fragment getItem(int position) { fragment = newsFragment; break; case 1: + restoreData = (BaseHomeFragment.RestoreData) getIntent().getSerializableExtra(PAGE_THREE_DATA); + fragment = NodesNavFragment.newInstance(restoreData); + break; + case 2: restoreData = (BaseHomeFragment.RestoreData) getIntent().getSerializableExtra(PAGE_TWO_DATA); MsgFragment msgFragment = MsgFragment.newInstance(restoreData); msgFragment.setUpdateUnReadMsgDelegate(MainActivity.this); fragment = msgFragment; break; - case 2: - restoreData = (BaseHomeFragment.RestoreData) getIntent().getSerializableExtra(PAGE_THREE_DATA); - fragment = NodesNavFragment.newInstance(restoreData); - break; + case 3: + restoreData = (BaseHomeFragment.RestoreData) getIntent().getSerializableExtra(PAGE_FOUR_DATA); + fragment = MineFragment.newInstance(restoreData); } return fragment; } @@ -498,20 +293,21 @@ public Object instantiateItem(ViewGroup container, int position) { mNewsFragment = (NewsFragment) fragment; break; case 1: - mMsgFragment = (MsgFragment) fragment; + mNavFragment = (NodesNavFragment) fragment; break; case 2: - mNavFragment = (NodesNavFragment) fragment; + mMsgFragment = (MsgFragment) fragment; break; + case 3: + mMineFragment = (MineFragment) fragment; } return fragment; } @Override public int getCount() { - return TAB_TITLES.length; + return titles.length; } - } - ; + }; } diff --git a/app/src/main/java/me/ghui/v2er/module/home/MineContract.java b/app/src/main/java/me/ghui/v2er/module/home/MineContract.java index 3164b197..ed7be974 100644 --- a/app/src/main/java/me/ghui/v2er/module/home/MineContract.java +++ b/app/src/main/java/me/ghui/v2er/module/home/MineContract.java @@ -7,15 +7,14 @@ * Created by ghui on 10/05/2017. */ -public class MsgContract { +public class MineContract { public interface IView extends BaseContract.IView { - void fillView(NotificationInfo info, boolean isLoadMore); +// void fillView(NotificationInfo info, boolean isLoadMore); } public interface IPresenter extends BaseContract.IPresenter { - void loadMore(int page); - int getPage(); + } } diff --git a/app/src/main/java/me/ghui/v2er/module/home/MineFragment.java b/app/src/main/java/me/ghui/v2er/module/home/MineFragment.java index 1df94597..297dfcbc 100644 --- a/app/src/main/java/me/ghui/v2er/module/home/MineFragment.java +++ b/app/src/main/java/me/ghui/v2er/module/home/MineFragment.java @@ -2,65 +2,207 @@ import android.os.Bundle; -import androidx.fragment.app.Fragment; - +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; + +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.bumptech.glide.request.target.Target; +import javax.inject.Inject; + +import butterknife.BindView; +import de.hdodenhof.circleimageview.CircleImageView; import me.ghui.v2er.R; +import me.ghui.v2er.adapter.base.MultiItemTypeAdapter; +import me.ghui.v2er.adapter.base.ViewHolder; +import me.ghui.v2er.general.GlideApp; +import me.ghui.v2er.general.Navigator; +import me.ghui.v2er.general.Page; +import me.ghui.v2er.injector.component.DaggerMineComponent; +import me.ghui.v2er.injector.module.MineModule; +import me.ghui.v2er.module.create.CreateTopicActivity; +import me.ghui.v2er.module.drawer.care.SpecialCareActivity; +import me.ghui.v2er.module.drawer.star.StarActivity; +import me.ghui.v2er.module.login.LoginActivity; +import me.ghui.v2er.module.user.UserHomeActivity; +import me.ghui.v2er.network.bean.NewsInfo; +import me.ghui.v2er.network.bean.NotificationInfo; +import me.ghui.v2er.network.bean.UserInfo; +import me.ghui.v2er.util.UserUtils; +import me.ghui.v2er.widget.BaseRecyclerView; +import me.ghui.v2er.widget.LoadMoreRecyclerView; +import me.ghui.v2er.widget.SectionItemView; /** - * A simple {@link Fragment} subclass. - * Use the {@link MineFragment#newInstance} factory method to - * create an instance of this fragment. + * 首页我的页面 */ -public class MineFragment extends Fragment { - - // TODO: Rename parameter arguments, choose names that match - // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER - private static final String ARG_PARAM1 = "param1"; - private static final String ARG_PARAM2 = "param2"; +public class MineFragment extends BaseHomeFragment implements MineContract.IView, + View.OnClickListener, SectionItemView.OnSectionClickListener { - // TODO: Rename and change types of parameters - private String mParam1; - private String mParam2; + @BindView(R.id.mine_root_layout) + ConstraintLayout mRootLayout; + @BindView(R.id.mine_avatar_img) + CircleImageView mAvatarImage; + @BindView(R.id.mine_username_button) + Button mUserNameButton; + @BindView(R.id.mine_user_info_page_button) + Button mUserInfoPageButton; - public MineFragment() { - // Required empty public constructor - } + @BindView(R.id.mine_sec_post) + SectionItemView mSecPost; + @BindView(R.id.mine_sec_themes) + SectionItemView mSecThemes; + @BindView(R.id.mine_sec_bookmark) + SectionItemView mSecBookmark; + @BindView(R.id.mine_sec_focus) + SectionItemView mSecFocus; + @BindView(R.id.mine_sec_settings) + SectionItemView mSecSettings; - /** - * Use this factory method to create a new instance of - * this fragment using the provided parameters. - * - * @param param1 Parameter 1. - * @param param2 Parameter 2. - * @return A new instance of fragment MineFragment. - */ - // TODO: Rename and change types and number of parameters - public static MineFragment newInstance(String param1, String param2) { - MineFragment fragment = new MineFragment(); + public static MineFragment newInstance(BaseHomeFragment.RestoreData restoreData) { Bundle args = new Bundle(); - args.putString(ARG_PARAM1, param1); - args.putString(ARG_PARAM2, param2); + if (restoreData != null) { + args.putSerializable(KEY_DATA, restoreData); + } + MineFragment fragment = new MineFragment(); 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); + protected int attachLayoutRes() { + return R.layout.fragment_mine; + } + + @Override + protected void startInject() { + DaggerMineComponent.builder() + .appComponent(getAppComponent()) + .mineModule(new MineModule(this)) + .build() + .inject(this); + } + + private UserInfo userInfo; + private void initDisplayUserName() { + userInfo = UserUtils.getUserInfo(); + if (userInfo == null) { + mUserNameButton.setText(R.string.please_login_first); + mAvatarImage.setImageResource(R.drawable.default_avatar_drawable); + } else { + mUserNameButton.setText(userInfo.getUserName()); + if (getContext() != null) { + GlideApp.with(getContext()) + .load(userInfo.getAvatar()) + .override(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL) + .placeholder(R.drawable.avatar_placeholder_drawable) + .into(mAvatarImage); + } } } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_mine, container, false); + protected void init() { + hideLoading(); + mRootLayout.setOnClickListener(this); + mAvatarImage.setOnClickListener(this); + mUserNameButton.setOnClickListener(this); + mUserInfoPageButton.setOnClickListener(this); + mSecPost.setOnSectionClickListener(this); + mSecThemes.setOnSectionClickListener(this); + mSecBookmark.setOnSectionClickListener(this); + mSecFocus.setOnSectionClickListener(this); + mSecSettings.setOnSectionClickListener(this); + initDisplayUserName(); + } + + private void goToUserInfoPage() { + if (UserUtils.isLogin()) { + if (getContext() != null) { + UserHomeActivity.open(userInfo.getUserName(), getContext(), + null, userInfo.getAvatar()); + } + } else { + if (getContext() != null) { + Navigator.from(getContext()).to(LoginActivity.class).start(); + } + } + } + + /** + * 发帖 + */ + private void goToPost() { + if (UserUtils.notLoginAndProcessToLogin(false, getContext())) { + return; + } + if (UserUtils.isLogin()) { + Navigator.from(getContext()).to(CreateTopicActivity.class).start(); + } + } + + /** + * 收藏 + */ + private void goToBookmark() { + if (UserUtils.notLoginAndProcessToLogin(false, getContext())) { + return; + } + if (UserUtils.isLogin()) { + Navigator.from(getContext()).to(StarActivity.class).start(); + } + } + + /** + * 关注 + */ + private void goToFocus() { + if (UserUtils.notLoginAndProcessToLogin(false, getContext())) { + return; + } + if (UserUtils.isLogin()) { + Navigator.from(getContext()).to(SpecialCareActivity.class).start(); + } + } + + /** + * 设置 + */ + private void goToSetting() { + Navigator.from(getContext()).to(Page.SETTING).start(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.mine_root_layout: + goToUserInfoPage(); + break; + case R.id.mine_avatar_img: + goToUserInfoPage(); + break; + case R.id.mine_username_button: + goToUserInfoPage(); + break; + case R.id.mine_user_info_page_button: + goToUserInfoPage(); + break; + case R.id.mine_sec_post: + goToPost(); + break; + case R.id.mine_sec_bookmark: + goToBookmark(); + break; + case R.id.mine_sec_focus: + goToFocus(); + break; + case R.id.mine_sec_settings: + goToSetting(); + break; + } } } \ No newline at end of file diff --git a/app/src/main/java/me/ghui/v2er/module/home/MinePresenter.java b/app/src/main/java/me/ghui/v2er/module/home/MinePresenter.java index 3086cef1..caab1ae7 100644 --- a/app/src/main/java/me/ghui/v2er/module/home/MinePresenter.java +++ b/app/src/main/java/me/ghui/v2er/module/home/MinePresenter.java @@ -1,2 +1,16 @@ -package me.ghui.v2er.module.home;public class MinePresenter { +package me.ghui.v2er.module.home; + +public class MinePresenter implements MineContract.IPresenter { + + private MineContract.IView mView; + + public MinePresenter(MineContract.IView mView) { + this.mView = mView; + } + + @Override + public void start() { + + } + } diff --git a/app/src/main/java/me/ghui/v2er/module/home/NewsFragment.java b/app/src/main/java/me/ghui/v2er/module/home/NewsFragment.java index f417ef28..81be2837 100644 --- a/app/src/main/java/me/ghui/v2er/module/home/NewsFragment.java +++ b/app/src/main/java/me/ghui/v2er/module/home/NewsFragment.java @@ -124,6 +124,19 @@ protected void init() { protected void lazyLoad() { if (mNewsInfo == null) { super.lazyLoad(); + } else { + RestoreData restoreData = getRestoreData(); + if (restoreData != null) { + mNewsInfo = restoreData.info; + mRecyclerView.setWillLoadPage(restoreData.page); + if (mNewsInfo.getItems() != null) { + fillView(mNewsInfo, false); + post(() -> mLayoutManager.scrollToPositionWithOffset(restoreData.scrollPos, restoreData.scrollOffset)); + hideLoading(); + } else { + mPresenter.start(); + } + } } } diff --git a/app/src/main/java/me/ghui/v2er/module/settings/SettingFragment.java b/app/src/main/java/me/ghui/v2er/module/settings/SettingFragment.java index ec0942bc..493a3585 100644 --- a/app/src/main/java/me/ghui/v2er/module/settings/SettingFragment.java +++ b/app/src/main/java/me/ghui/v2er/module/settings/SettingFragment.java @@ -56,6 +56,7 @@ public void onCreate(Bundle savedInstanceState) { loginPreference = findPreference(getString(R.string.pref_key_value_toggle_log)); loginPreference.setOnPreferenceClickListener(this); loginPreference.setTitle(UserUtils.isLogin() ? R.string.logout_str : R.string.login_str); + findPreference(getString(R.string.pref_key_help_and_feedback)).setOnPreferenceClickListener(this); findPreference(getString(R.string.pref_key_auto_checkin)).setOnPreferenceClickListener(this); findPreference(getString(R.string.pref_key_highlight_topic_owner_reply_item)).setOnPreferenceClickListener(this); findPreference(getString(R.string.pref_key_is_scan_in_reverse)).setOnPreferenceClickListener(this::onPreferenceClick); @@ -102,6 +103,9 @@ public boolean onPreferenceClick(Preference preference) { Voast.show("成功清理" + size + "缓存"); } return true; + } else if (key.equals(getString(R.string.pref_key_help_and_feedback))) { + startActivity(new Intent(getContext(), UserManualActivity.class)); + return true; } else if (key.equals(getString(R.string.pref_key_check_update))) { Utils.openStorePage(); return true; diff --git a/app/src/main/java/me/ghui/v2er/widget/BaseToolBar.java b/app/src/main/java/me/ghui/v2er/widget/BaseToolBar.java index a36dee70..fefae07b 100644 --- a/app/src/main/java/me/ghui/v2er/widget/BaseToolBar.java +++ b/app/src/main/java/me/ghui/v2er/widget/BaseToolBar.java @@ -1,14 +1,26 @@ package me.ghui.v2er.widget; +import android.annotation.SuppressLint; import android.content.Context; import android.graphics.drawable.Drawable; import androidx.annotation.Nullable; +import androidx.appcompat.widget.TintTypedArray; import androidx.appcompat.widget.Toolbar; import android.util.AttributeSet; +import android.util.Log; import android.view.GestureDetector; +import android.view.Gravity; import android.view.Menu; import android.view.MotionEvent; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ActionMenuView; +import android.widget.ImageButton; +import android.widget.TextView; +import com.google.android.material.appbar.AppBarLayout; + +import me.ghui.v2er.util.ScaleUtils; import me.ghui.v2er.util.Theme; import me.ghui.v2er.R; @@ -17,6 +29,12 @@ */ public class BaseToolBar extends Toolbar { + + static final int MIN_CELL_SIZE = 56; // dips + static final int MIN_NAVI_ICON_SIZE = 48; // dips + static final int GENERATED_ITEM_PADDING = 4; // dips + static final int GENERATED_ITEM_MARGIN = 16; // dips + public BaseToolBar(Context context) { super(context); init(); @@ -32,13 +50,90 @@ public BaseToolBar(Context context, @Nullable AttributeSet attrs, int defStyleAt init(); } - private void init() { - setContentInsetStartWithNavigation(0); - setContentInsetEndWithActions(0); - setNavigationIcon(R.drawable.ic_arrow_back_black); - getNavigationIcon().setTint(Theme.getColor(R.attr.icon_tint_color, getContext())); + private void init() { } + + public void setTitle(String title, String subtitle) { + super.setTitle(title); + super.setSubtitle(subtitle); + } + + @Override + public void setTitle(int resId) { + super.setTitle(resId); + } + + private TextView mTitleView; + private TextView mSubTitleView; + + private void initTitleViewAndSubTitleView() { + int childCount = getChildCount(); + if (childCount > 0) { + for (int i = 0; i < childCount; i++) { + View view = getChildAt(i); + if (view instanceof TextView) { + if (mTitleView != null) { + mSubTitleView = (TextView) view; + break; + } + mTitleView = (TextView) view; + } + } + } } + /** + * 必须有主标题标题剧中才会生效 + * @param isCenter + */ + public void setTileCenter(boolean isCenter) { + if (isCenter) { + initTitleViewAndSubTitleView(); + if (mTitleView != null) { + mTitleView.setGravity(Gravity.CENTER); + Toolbar.LayoutParams layoutParams = (Toolbar.LayoutParams) mTitleView.getLayoutParams(); + layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; + layoutParams.gravity = Gravity.CENTER; + mTitleView.setLayoutParams(layoutParams); + if (mSubTitleView != null) { + mSubTitleView.setGravity(Gravity.CENTER); + Toolbar.LayoutParams subTitleLayoutParams = (Toolbar.LayoutParams) mSubTitleView.getLayoutParams(); + subTitleLayoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; + subTitleLayoutParams.gravity = Gravity.CENTER; + mSubTitleView.setLayoutParams(subTitleLayoutParams); + } + float marginStart = 0; + float marginEnd = 0; + if (getNavigationIcon() != null) { + marginEnd = ScaleUtils.dp(GENERATED_ITEM_MARGIN + GENERATED_ITEM_PADDING * 3); + } else if (getMenu().size() > 0) { + marginStart = ScaleUtils.dp(MIN_CELL_SIZE - GENERATED_ITEM_PADDING * 3); + } + setTitleMargin((int) marginStart, 0, (int) marginEnd, 0); + } + } + } + + private View mViewTitleView; + + public void setViewTileCenter(View viewTitleView) { + this.mViewTitleView = viewTitleView; + if (mViewTitleView != null) { + Toolbar.LayoutParams layoutParams = (Toolbar.LayoutParams) mViewTitleView.getLayoutParams(); + layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; + layoutParams.gravity = Gravity.CENTER; + float marginStart = 0; + float marginEnd = 0; + if (getNavigationIcon() != null) { + marginEnd = ScaleUtils.dp(GENERATED_ITEM_MARGIN + GENERATED_ITEM_PADDING * 3); + } else if (getMenu().size() > 0) { + marginStart = ScaleUtils.dp(MIN_CELL_SIZE - GENERATED_ITEM_PADDING * 3); + } + layoutParams.setMargins((int) marginStart, 0, (int) marginEnd, 0); + mViewTitleView.setLayoutParams(layoutParams); + } + } + + @Override public void inflateMenu(int resId) { super.inflateMenu(resId); diff --git a/app/src/main/java/me/ghui/v2er/widget/SectionItemView.java b/app/src/main/java/me/ghui/v2er/widget/SectionItemView.java index 43b420cc..961182f4 100644 --- a/app/src/main/java/me/ghui/v2er/widget/SectionItemView.java +++ b/app/src/main/java/me/ghui/v2er/widget/SectionItemView.java @@ -1,2 +1,169 @@ -package me.ghui.v2er.widget;public class SectionItemView { +package me.ghui.v2er.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ImageView; +import android.widget.RelativeLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.constraintlayout.widget.ConstraintLayout; + +import me.ghui.v2er.R; +import me.ghui.v2er.util.ScaleUtils; +import me.ghui.v2er.util.Utils; + +public class SectionItemView extends RelativeLayout implements View.OnClickListener { + + private Drawable icon; + private String title; + private boolean showDivider; + private Button sectionButton; + private TextView sectionTitle; + private ImageView sectionIcon; + private DividerView sectionDivider; + + private OnSectionClickListener onSectionClickListener; + + public void setOnSectionClickListener(OnSectionClickListener onSectionClickListener) { + this.onSectionClickListener = onSectionClickListener; + } + + public interface OnSectionClickListener { + void onClick(View v); + } + +// public SectionItemView(@NonNull Context context) { +// super(context); +// initView(context, null); +// } + + public SectionItemView(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + initView(context, attrs); + } + +// public SectionItemView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { +// super(context, attrs, defStyleAttr); +// initView(context, attrs); +// } +// +// public SectionItemView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { +// super(context, attrs, defStyleAttr, defStyleRes); +// initView(context, attrs); +// } + + private void initAttrs(Context context, AttributeSet attrs) { + if (attrs != null) { + TypedArray styledAttrs = getContext().getTheme().obtainStyledAttributes(attrs, + R.styleable.SectionItemView, 0, 0); + icon = styledAttrs.getDrawable(R.styleable.SectionItemView_icon); + title = styledAttrs.getString(R.styleable.SectionItemView_title); + showDivider = styledAttrs.getBoolean(R.styleable.SectionItemView_show_divider, true); + styledAttrs.recycle(); + } + } + private ViewGroup rootView; + private ConstraintLayout sectionLayout; + + private void initView(Context context, AttributeSet attrs) { + initAttrs(context, attrs); + rootView = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.section_item_view_layout, this, true); + sectionLayout = rootView.findViewById(R.id.section_layout); + sectionButton = rootView.findViewById(R.id.section_button); + sectionTitle = rootView.findViewById(R.id.section_title); + sectionIcon = rootView.findViewById(R.id.section_icon); + sectionDivider = rootView.findViewById(R.id.section_divider); + if (icon != null) { + sectionIcon.setImageDrawable(icon); + } + if (!TextUtils.isEmpty(title)) { + sectionTitle.setText(title); + } + if (!showDivider) { + sectionDivider.setVisibility(View.INVISIBLE); + } + sectionButton.setOnClickListener(this); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + int childCount = sectionLayout.getChildCount(); + int desiredWidth = 0; + int desiredHeight = 0; + int childViewWidth = 0; + int childViewHeight = 0; + for (int i = 0; i < childCount; i++) { + View childView = sectionLayout.getChildAt(i); + Log.d(SectionItemView.this.getClass().getSimpleName(), "childView " + + childView.getClass().getSimpleName()); + if (childView instanceof ImageView) { + childViewWidth = childView.getMeasuredWidth(); + childViewHeight = childView.getMeasuredHeight(); + if (childViewWidth > desiredWidth) { + desiredWidth = childViewWidth; + } + if (childViewHeight > desiredHeight) { + desiredHeight = childViewHeight; + } + } + if (childView instanceof TextView) { + childViewWidth = (int) (((TextView)childView).getTextSize() * ((TextView)childView).getText().length() + + ((TextView)childView).getPaddingStart() + + ((TextView)childView).getPaddingEnd()); + childViewHeight = ((TextView)childView).getLineHeight() * ((TextView)childView) + .getLineCount() + ((TextView)childView).getPaddingTop() + + ((TextView)childView).getPaddingBottom(); + if (childViewWidth > desiredWidth) { + desiredWidth = childViewWidth; + } + if (childViewHeight > desiredHeight) { + desiredHeight = childViewHeight; + } + } + } + int widthMode = MeasureSpec.getMode(widthMeasureSpec); + int widthSize = MeasureSpec.getSize(widthMeasureSpec); + int heightMode = MeasureSpec.getMode(heightMeasureSpec); + int heightSize = MeasureSpec.getSize(heightMeasureSpec); + + int width; + int height; + + if (widthMode == MeasureSpec.EXACTLY) { + width = widthSize; + } else if (widthMode == MeasureSpec.AT_MOST) { + width = Math.min(desiredWidth, widthSize); + } else { + width = desiredWidth; + } + + if (heightMode == MeasureSpec.EXACTLY) { + height = heightSize; + } else if (heightMode == MeasureSpec.AT_MOST) { + height = Math.min(desiredHeight, heightSize); +// height = heightSize; + } else { + height = desiredHeight; + } + setMeasuredDimension(width, height); + } + + @Override + public void onClick(View v) { + if (onSectionClickListener != null) { + onSectionClickListener.onClick(this); + } + } + } diff --git a/app/src/main/res/drawable/ic_arrow_right.xml b/app/src/main/res/drawable/ic_arrow_right.xml index 92d3e811..82732e56 100755 --- a/app/src/main/res/drawable/ic_arrow_right.xml +++ b/app/src/main/res/drawable/ic_arrow_right.xml @@ -1,5 +1,5 @@ - + diff --git a/app/src/main/res/drawable/ic_bookmark.xml b/app/src/main/res/drawable/ic_bookmark.xml index 0d18ad3c..6e302829 100644 --- a/app/src/main/res/drawable/ic_bookmark.xml +++ b/app/src/main/res/drawable/ic_bookmark.xml @@ -1,9 +1,9 @@ + android:viewportWidth="24" + android:viewportHeight="24"> - + android:fillColor="?attr/icon_tint_color" + android:pathData="M17,3L7,3c-1.1,0 -1.99,0.9 -1.99,2L5,21l7,-3 7,3L19,5c0,-1.1 -0.9,-2 -2,-2zM17,18l-5,-2.18L7,18L7,5h10v13z"/> + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_favorites.xml b/app/src/main/res/drawable/ic_favorites.xml index b9a121b6..2ab4e6a6 100644 --- a/app/src/main/res/drawable/ic_favorites.xml +++ b/app/src/main/res/drawable/ic_favorites.xml @@ -4,6 +4,6 @@ android:viewportWidth="1024" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_paper_plane.xml b/app/src/main/res/drawable/ic_paper_plane.xml index 5e07f933..8153c365 100644 --- a/app/src/main/res/drawable/ic_paper_plane.xml +++ b/app/src/main/res/drawable/ic_paper_plane.xml @@ -4,6 +4,6 @@ android:viewportWidth="1024" android:viewportHeight="1024"> + android:fillColor="?attr/icon_tint_color" + android:pathData="M896,170.67a55.89,55.89 0,0 0,-2.56 -11.52v-3.84a42.67,42.67 0,0 0,-8.53 -12.8,42.67 42.67,0 0,0 -12.37,-8.11h-3.84a36.69,36.69 0,0 0,-13.23 -6.4L853.33,128a42.67,42.67 0,0 0,-12.8 0l-768,256a42.67,42.67 0,0 0,0 81.07l363.95,121.17 121.17,363.95a42.67,42.67 0,0 0,81.07 0l256,-768A42.67,42.67 0,0 0,896 170.67zM695.47,268.37l-237.65,237.65L220.16,426.67zM597.33,803.84l-79.36,-237.65 237.65,-237.65z"/> diff --git a/app/src/main/res/drawable/ic_pencil.xml b/app/src/main/res/drawable/ic_pencil.xml index 792e8127..5401933f 100644 --- a/app/src/main/res/drawable/ic_pencil.xml +++ b/app/src/main/res/drawable/ic_pencil.xml @@ -4,6 +4,6 @@ android:viewportWidth="1024" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/ic_sets.xml b/app/src/main/res/drawable/ic_sets.xml index ca1d0204..9be725d0 100644 --- a/app/src/main/res/drawable/ic_sets.xml +++ b/app/src/main/res/drawable/ic_sets.xml @@ -4,6 +4,6 @@ android:viewportWidth="1024" android:viewportHeight="1024"> diff --git a/app/src/main/res/drawable/main_bottom_navigation_selector.xml b/app/src/main/res/drawable/main_bottom_navigation_selector.xml index 17cf52d9..5a79c75c 100644 --- a/app/src/main/res/drawable/main_bottom_navigation_selector.xml +++ b/app/src/main/res/drawable/main_bottom_navigation_selector.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/layout/act_main.xml b/app/src/main/res/layout/act_main.xml index ee1f137a..09492f64 100644 --- a/app/src/main/res/layout/act_main.xml +++ b/app/src/main/res/layout/act_main.xml @@ -1,61 +1,61 @@ - - + android:layout_height="wrap_content" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toTopOf="@+id/main_container" + app:elevation="0dp"> + + + + - + - - - - - - - - - + + + + + android:layout_height="match_parent" /> + - - - - - - \ No newline at end of file + app:itemIconTint="@drawable/main_bottom_navigation_selector" + app:itemTextColor="@drawable/main_bottom_navigation_selector" + app:menu="@menu/bottom_menu_main" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index 17d2fe79..5543f7ad 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -3,12 +3,26 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="?attr/colorPrimary" tools:context=".module.home.MineFragment"> - - + android:scrollbars="none" + android:fillViewport="true"> + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/mine_section_layout.xml b/app/src/main/res/layout/mine_section_layout.xml index cdc89f25..54456a8a 100644 --- a/app/src/main/res/layout/mine_section_layout.xml +++ b/app/src/main/res/layout/mine_section_layout.xml @@ -1,6 +1,71 @@ - + - \ No newline at end of file + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/mine_user_info_simple_layout.xml b/app/src/main/res/layout/mine_user_info_simple_layout.xml index 41d2ef14..b2337f02 100644 --- a/app/src/main/res/layout/mine_user_info_simple_layout.xml +++ b/app/src/main/res/layout/mine_user_info_simple_layout.xml @@ -1,6 +1,64 @@ - + android:layout_height="wrap_content" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:id="@+id/mine_root_layout" + android:background="?attr/page_bg_color" + android:paddingTop="24dp" + android:paddingBottom="24dp" + android:paddingStart="8dp" + android:paddingEnd="8dp"> - \ No newline at end of file + + +