├── .gitignore ├── .idea ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── dictionaries │ └── PetterChen.xml ├── encodings.xml ├── gradle.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── peter │ │ └── schoolmarket │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ └── mock_img │ │ │ ├── apple_phone.jpg │ │ │ ├── battledore.jpg │ │ │ ├── book.jpg │ │ │ ├── mac_computer.jpg │ │ │ ├── sort_avater_cluo.jpg │ │ │ ├── sort_body.jpg │ │ │ ├── sort_clothes.jpeg │ │ │ └── table_lamp.jpeg │ ├── ic_launcher-web.png │ ├── java │ │ └── com │ │ │ └── peter │ │ │ └── schoolmarket │ │ │ ├── adapter │ │ │ └── recycler │ │ │ │ ├── DividerItemGridDecoration.java │ │ │ │ ├── DividerItemNormalDecoration.java │ │ │ │ ├── RecyclerCommonAdapter.java │ │ │ │ └── RecyclerViewHolder.java │ │ │ ├── application │ │ │ ├── AppConf.java │ │ │ └── MarketApp.java │ │ │ ├── data │ │ │ ├── dto │ │ │ │ └── Result.java │ │ │ ├── pojo │ │ │ │ ├── Msg.java │ │ │ │ ├── Notice.java │ │ │ │ ├── Order.java │ │ │ │ ├── Trade.java │ │ │ │ ├── TradeTag.java │ │ │ │ └── User.java │ │ │ └── storage │ │ │ │ ├── LoginInfoExecutor.java │ │ │ │ └── ManageLoginInfo.java │ │ │ ├── di │ │ │ ├── components │ │ │ │ ├── FindFragmentComponent.java │ │ │ │ ├── LoginRegisterComponent.java │ │ │ │ └── RegisterNextComponent.java │ │ │ ├── modules │ │ │ │ ├── FindFragmentModule.java │ │ │ │ ├── LoginRegisterModule.java │ │ │ │ └── RegisterNextModule.java │ │ │ └── qualifiers │ │ │ │ ├── LoginProgress.java │ │ │ │ └── RegisterProgress.java │ │ │ ├── mock │ │ │ ├── NoticeMock.java │ │ │ ├── TradeMock.java │ │ │ └── UserMock.java │ │ │ ├── mvp │ │ │ ├── base │ │ │ │ ├── BaseActivity.java │ │ │ │ └── BaseFragment.java │ │ │ ├── find │ │ │ │ ├── FindFragment.java │ │ │ │ ├── FindModel.java │ │ │ │ ├── FindPresenter.java │ │ │ │ ├── IFindModel.java │ │ │ │ ├── IFindPresenter.java │ │ │ │ ├── IFindView.java │ │ │ │ └── IGainListener.java │ │ │ ├── login │ │ │ │ ├── ILoginRegisterPresenter.java │ │ │ │ ├── ILoginRegisterView.java │ │ │ │ ├── IUserModel.java │ │ │ │ ├── LoginActivity.java │ │ │ │ ├── LoginRegisterPresenter.java │ │ │ │ ├── OnLoginListener.java │ │ │ │ ├── OnRegisterListener.java │ │ │ │ ├── UserModel.java │ │ │ │ └── register │ │ │ │ │ └── next │ │ │ │ │ ├── IRegisterNextModel.java │ │ │ │ │ ├── IRegisterNextPresenter.java │ │ │ │ │ ├── IRegisterNextView.java │ │ │ │ │ ├── OnRegisterNextListener.java │ │ │ │ │ ├── RegisterNextActivity.java │ │ │ │ │ ├── RegisterNextModel.java │ │ │ │ │ └── RegisterNextPresenter.java │ │ │ ├── main │ │ │ │ ├── IMainListener.java │ │ │ │ ├── IMainModel.java │ │ │ │ ├── IMainPresenter.java │ │ │ │ ├── IMainView.java │ │ │ │ ├── MainActivity.java │ │ │ │ ├── MainModel.java │ │ │ │ ├── MainPresenter.java │ │ │ │ ├── about │ │ │ │ │ └── AboutActivity.java │ │ │ │ └── trade │ │ │ │ │ ├── DrawerTradeActivity.java │ │ │ │ │ ├── DrawerTradeModel.java │ │ │ │ │ ├── DrawerTradePresenter.java │ │ │ │ │ ├── IDrawerTradeListener.java │ │ │ │ │ ├── IDrawerTradeModel.java │ │ │ │ │ ├── IDrawerTradePresenter.java │ │ │ │ │ └── IDrawerTradeView.java │ │ │ ├── more │ │ │ │ ├── IMoreListener.java │ │ │ │ ├── IMoreModel.java │ │ │ │ ├── IMorePresenter.java │ │ │ │ ├── IMoreView.java │ │ │ │ ├── MoreFragment.java │ │ │ │ ├── MoreModel.java │ │ │ │ ├── MorePresenter.java │ │ │ │ └── notice │ │ │ │ │ ├── add │ │ │ │ │ ├── INoticeAddListener.java │ │ │ │ │ ├── INoticeAddModel.java │ │ │ │ │ ├── INoticeAddPresenter.java │ │ │ │ │ ├── INoticeAddView.java │ │ │ │ │ ├── NoticeAddActivity.java │ │ │ │ │ ├── NoticeAddModel.java │ │ │ │ │ └── NoticeAddPresenter.java │ │ │ │ │ ├── detail │ │ │ │ │ └── NoticeDetailActivity.java │ │ │ │ │ └── my │ │ │ │ │ ├── INoticeMyListener.java │ │ │ │ │ ├── INoticeMyModel.java │ │ │ │ │ ├── INoticeMyPresenter.java │ │ │ │ │ ├── INoticeMyView.java │ │ │ │ │ ├── NoticeMyActivity.java │ │ │ │ │ ├── NoticeMyModel.java │ │ │ │ │ └── NoticeMyPresenter.java │ │ │ ├── msg │ │ │ │ ├── IMsgListener.java │ │ │ │ ├── IMsgModel.java │ │ │ │ ├── IMsgPresenter.java │ │ │ │ ├── IMsgView.java │ │ │ │ ├── ManageMsgCount.java │ │ │ │ ├── MsgFragment.java │ │ │ │ ├── MsgModel.java │ │ │ │ ├── MsgPresenter.java │ │ │ │ ├── MsgService.java │ │ │ │ └── detail │ │ │ │ │ └── MsgDetailActivity.java │ │ │ ├── sort │ │ │ │ ├── ITradeSortPresenter.java │ │ │ │ ├── ITradeSortView.java │ │ │ │ ├── TradeSortFragment.java │ │ │ │ ├── TredeSortPresenter.java │ │ │ │ └── trades │ │ │ │ │ ├── ITradeTagDetailListener.java │ │ │ │ │ ├── ITradeTagDetailModel.java │ │ │ │ │ ├── ITradeTagDetailPresenter.java │ │ │ │ │ ├── ITradeTagDetailView.java │ │ │ │ │ ├── TradeTagDetailActivity.java │ │ │ │ │ ├── TradeTagDetailModel.java │ │ │ │ │ └── TradeTagDetailPresenter.java │ │ │ ├── splash │ │ │ │ └── SplashActivity.java │ │ │ ├── test │ │ │ │ ├── TestActivity.java │ │ │ │ └── TestFragment.java │ │ │ └── trade │ │ │ │ ├── add │ │ │ │ ├── ITradeAddListener.java │ │ │ │ ├── ITradeAddModel.java │ │ │ │ ├── ITradeAddPresenter.java │ │ │ │ ├── ITradeAddView.java │ │ │ │ ├── TradeAddActivity.java │ │ │ │ ├── TradeAddModel.java │ │ │ │ └── TradeAddPresenter.java │ │ │ │ └── detail │ │ │ │ ├── ITradeDetailListener.java │ │ │ │ ├── ITradeDetailModel.java │ │ │ │ ├── ITradeDetailPresenter.java │ │ │ │ ├── ITradeDetailView.java │ │ │ │ ├── TradeDetailActivity.java │ │ │ │ ├── TradeDetailModel.java │ │ │ │ └── TradeDetailPresenter.java │ │ │ ├── network │ │ │ ├── NetReturn.java │ │ │ ├── NoticeReq.java │ │ │ ├── ReqExecutor.java │ │ │ ├── RetrofitConf.java │ │ │ ├── RetrofitUtils.java │ │ │ ├── TradeReq.java │ │ │ └── UserReq.java │ │ │ └── util │ │ │ ├── BroadUtils.java │ │ │ ├── MsgUtil.java │ │ │ ├── PollingUtils.java │ │ │ ├── ResultInterceptor.java │ │ │ ├── SocketUtils.java │ │ │ ├── TimeUtils.java │ │ │ └── TradeTagUtils.java │ └── res │ │ ├── drawable-hdpi │ │ ├── ic_empty.png │ │ ├── ic_search.png │ │ ├── sort_book.jpg │ │ ├── sort_computer.jpg │ │ ├── sort_esercise.jpg │ │ ├── sort_life.jpg │ │ └── sort_phone.jpg │ │ ├── drawable-v21 │ │ ├── ic_back.png │ │ ├── ic_menu_camera.xml │ │ ├── ic_menu_gallery.xml │ │ ├── ic_menu_manage.xml │ │ ├── ic_menu_send.xml │ │ ├── ic_menu_share.xml │ │ ├── ic_menu_slideshow.xml │ │ └── ic_small_cancel.png │ │ ├── drawable-xhdpi │ │ ├── ic_action_navigation_chevron_left.png │ │ ├── ic_search.png │ │ └── main_bottom_wish.png │ │ ├── drawable-xxhdpi │ │ ├── ic_arrow_left.png │ │ ├── ic_launcher.png │ │ ├── ic_search.png │ │ ├── ic_send_msg.png │ │ ├── ic_submit.png │ │ ├── icon_placeholder.png │ │ └── trade_add_img.jpg │ │ ├── drawable-xxxhdpi │ │ └── phone_splash.png │ │ ├── drawable │ │ ├── button_background.xml │ │ ├── circle_pic_press.png │ │ ├── circle_pic_selector.xml │ │ ├── divider_bg.xml │ │ ├── ic_back.png │ │ ├── ic_plus_black.png │ │ ├── ic_plus_white.png │ │ ├── ic_register.png │ │ ├── ic_right_enter.png │ │ ├── ic_search.png │ │ ├── ic_search_back.png │ │ ├── ic_search_cancel.png │ │ ├── ic_small_cancel.png │ │ ├── main_about.png │ │ ├── main_author.png │ │ ├── main_bottom_find.png │ │ ├── main_bottom_more.png │ │ ├── main_bottom_msg.png │ │ ├── main_bottom_trade.png │ │ ├── main_bought.png │ │ ├── main_boy.png │ │ ├── main_buying.png │ │ ├── main_exit.png │ │ ├── main_girl.png │ │ ├── main_like.png │ │ ├── main_notice.png │ │ ├── main_person.png │ │ ├── main_selling.png │ │ ├── main_setting.png │ │ ├── main_share.png │ │ ├── main_sold.png │ │ ├── msg_pic_selector.xml │ │ ├── search_cursor.xml │ │ ├── side_nav_bar.xml │ │ ├── sort_pic_selector.xml │ │ ├── splash_loading.gif │ │ ├── square_default.png │ │ ├── square_pic_selector.xml │ │ ├── square_press.png │ │ ├── trade_tag_detail_next.png │ │ └── trade_tag_search_cursor.xml │ │ ├── layout │ │ ├── about_activity.xml │ │ ├── about_content.xml │ │ ├── drawer_trade_activity.xml │ │ ├── drawer_trade_bought_item.xml │ │ ├── drawer_trade_buying_item.xml │ │ ├── drawer_trade_content.xml │ │ ├── drawer_trade_selling_item.xml │ │ ├── drawer_trade_sold_item.xml │ │ ├── find_fragment.xml │ │ ├── find_item.xml │ │ ├── login_activity.xml │ │ ├── login_login_view.xml │ │ ├── login_register_view.xml │ │ ├── main_activity.xml │ │ ├── main_bar.xml │ │ ├── main_content.xml │ │ ├── main_nav_header.xml │ │ ├── message_fragment.xml │ │ ├── message_item.xml │ │ ├── more_fragment.xml │ │ ├── more_item.xml │ │ ├── msg_detail_activity.xml │ │ ├── msg_detail_content.xml │ │ ├── notice_add_activity.xml │ │ ├── notice_add_content.xml │ │ ├── notice_detail_activity.xml │ │ ├── notice_detail_content.xml │ │ ├── notice_my_activity.xml │ │ ├── notice_my_content.xml │ │ ├── notice_my_item.xml │ │ ├── register_next_activity.xml │ │ ├── sort_fragment.xml │ │ ├── sort_item.xml │ │ ├── splash_activity.xml │ │ ├── test_activity.xml │ │ ├── test_fragment.xml │ │ ├── test_msg_fragment.xml │ │ ├── test_msg_item.xml │ │ ├── trade_add_activity.xml │ │ ├── trade_add_content.xml │ │ ├── trade_detail_activity.xml │ │ ├── trade_detail_content.xml │ │ ├── trade_tag_detail_activity.xml │ │ ├── trade_tag_detail_content.xml │ │ └── trade_tag_detail_item.xml │ │ ├── menu │ │ ├── main.xml │ │ ├── main_activity_drawer.xml │ │ └── search_item.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── android_material_design_colours.xml │ │ ├── arrays.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── drawables.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── peter │ └── schoolmarket │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/dictionaries/PetterChen.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | Android 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 62 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in D:\Programs\Android\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/peter/schoolmarket/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumentation test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("com.peter.schoolmarket", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/assets/mock_img/apple_phone.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/assets/mock_img/apple_phone.jpg -------------------------------------------------------------------------------- /app/src/main/assets/mock_img/battledore.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/assets/mock_img/battledore.jpg -------------------------------------------------------------------------------- /app/src/main/assets/mock_img/book.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/assets/mock_img/book.jpg -------------------------------------------------------------------------------- /app/src/main/assets/mock_img/mac_computer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/assets/mock_img/mac_computer.jpg -------------------------------------------------------------------------------- /app/src/main/assets/mock_img/sort_avater_cluo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/assets/mock_img/sort_avater_cluo.jpg -------------------------------------------------------------------------------- /app/src/main/assets/mock_img/sort_body.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/assets/mock_img/sort_body.jpg -------------------------------------------------------------------------------- /app/src/main/assets/mock_img/sort_clothes.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/assets/mock_img/sort_clothes.jpeg -------------------------------------------------------------------------------- /app/src/main/assets/mock_img/table_lamp.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/assets/mock_img/table_lamp.jpeg -------------------------------------------------------------------------------- /app/src/main/ic_launcher-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/ic_launcher-web.png -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/application/AppConf.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.application; 2 | 3 | /** 4 | * Created by PetterChen on 2017/4/13. 5 | */ 6 | 7 | public interface AppConf { 8 | 9 | boolean useMock=true;//是否使用本地离线数据,不与服务器进行交互;true表示使用离线,false使用服务器数据 10 | 11 | String IP = "127.0.0.1";//服务器地址 12 | 13 | int PORT = 8080;//服务器端口号 14 | 15 | String BASE_URL="http://118.202.41.83:8080/";//服务器的地址及端口118.202.41.83 16 | 17 | long Msg_Interval=30L;//轮询获取消息的时间间隔.(秒) 18 | 19 | int size=8;//每个页面加载的数据长度 20 | 21 | } -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/application/MarketApp.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.application; 2 | 3 | import android.app.Application; 4 | 5 | import com.facebook.drawee.backends.pipeline.Fresco; 6 | 7 | import io.realm.Realm; 8 | import io.realm.RealmConfiguration; 9 | 10 | /** 11 | * Created by PetterChen on 2017/4/10. 12 | */ 13 | 14 | public class MarketApp extends Application { 15 | private static final String TAG = "MarketApp"; 16 | private static MarketApp instance; 17 | public static MarketApp getInstance() { 18 | return instance; 19 | } 20 | 21 | @Override 22 | public void onCreate() { 23 | super.onCreate(); 24 | instance = this; 25 | initialize(); 26 | } 27 | 28 | private void initialize() { 29 | //fresco初始化 30 | Fresco.initialize(this); 31 | //Realm初始化 32 | Realm.init(this); 33 | RealmConfiguration config = new RealmConfiguration.Builder().build(); 34 | Realm.setDefaultConfiguration(config); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/data/dto/Result.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.data.dto; 2 | 3 | import com.peter.schoolmarket.network.NetReturn; 4 | 5 | /** 6 | * Created by PetterChen on 2017/4/13. 7 | */ 8 | 9 | public class Result { 10 | private int code;//返回码 11 | private String msg;//返回信息 12 | private T data;//返回数据 13 | public Result(T data, int code, String msg) { 14 | this.data = data; 15 | this.code = code; 16 | this.msg = msg; 17 | } 18 | 19 | public Result() { 20 | } 21 | 22 | public Result result(NetReturn netReturn){ 23 | this.code=netReturn.code(); 24 | this.msg=netReturn.msg(); 25 | return this; 26 | } 27 | 28 | @Override 29 | public String toString() { 30 | return "Result{" + 31 | "code=" + code + 32 | ", msg='" + msg + '\'' + 33 | ", data=" + data + 34 | '}'; 35 | } 36 | 37 | public void setCode(int code) { 38 | this.code = code; 39 | } 40 | 41 | public void setMsg(String msg) { 42 | this.msg = msg; 43 | } 44 | 45 | public void setData(T data) { 46 | this.data = data; 47 | } 48 | 49 | public int getCode() { 50 | return code; 51 | } 52 | 53 | public String getMsg() { 54 | return msg; 55 | } 56 | 57 | public T getData() { 58 | return data; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/data/pojo/Msg.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.data.pojo; 2 | 3 | import java.io.Serializable; 4 | 5 | import io.realm.RealmObject; 6 | import io.realm.annotations.PrimaryKey; 7 | 8 | /** 9 | * Created by PetterChen on 2017/5/17. 10 | */ 11 | 12 | public class Msg extends RealmObject implements Serializable { 13 | @PrimaryKey 14 | private int id; 15 | private int tradeId; 16 | private int authorId; 17 | private String title; 18 | private String content; 19 | private long createTime; 20 | 21 | public int getId() { 22 | return id; 23 | } 24 | 25 | public void setId(int id) { 26 | this.id = id; 27 | } 28 | 29 | public int getTradeId() { 30 | return tradeId; 31 | } 32 | 33 | public void setTradeId(int tradeId) { 34 | this.tradeId = tradeId; 35 | } 36 | 37 | public int getAuthorId() { 38 | return authorId; 39 | } 40 | 41 | public void setAuthorId(int authorId) { 42 | this.authorId = authorId; 43 | } 44 | 45 | public String getTitle() { 46 | return title; 47 | } 48 | 49 | public void setTitle(String title) { 50 | this.title = title; 51 | } 52 | 53 | public String getContent() { 54 | return content; 55 | } 56 | 57 | public void setContent(String content) { 58 | this.content = content; 59 | } 60 | 61 | public long getCreateTime() { 62 | return createTime; 63 | } 64 | 65 | public void setCreateTime(long createTime) { 66 | this.createTime = createTime; 67 | } 68 | 69 | @Override 70 | public String toString() { 71 | return "Msg{" + 72 | "id=" + id + 73 | ", authorId=" + authorId + 74 | ", title='" + title + '\'' + 75 | ", content='" + content + '\'' + 76 | ", createTime=" + createTime + 77 | '}'; 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/data/pojo/Notice.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.data.pojo; 2 | 3 | import java.io.Serializable; 4 | 5 | import io.realm.RealmObject; 6 | import io.realm.annotations.Ignore; 7 | import io.realm.annotations.PrimaryKey; 8 | 9 | /** 10 | * Created by PetterChen on 2017/5/5. 11 | */ 12 | 13 | public class Notice extends RealmObject implements Serializable { 14 | @PrimaryKey 15 | private int id;//N001 16 | private int authorId; 17 | private String title; 18 | private String content; 19 | private long createTime; 20 | @Ignore 21 | private boolean releaseCheck;//为了在发布时方便检查数据完整性,不存储在数据库中 22 | 23 | public int getId() { 24 | return id; 25 | } 26 | 27 | public void setId(int id) { 28 | this.id = id; 29 | } 30 | 31 | public int getAuthorId() { 32 | return authorId; 33 | } 34 | 35 | public void setAuthorId(int authorId) { 36 | this.authorId = authorId; 37 | } 38 | 39 | public String getTitle() { 40 | return title; 41 | } 42 | 43 | public void setTitle(String title) { 44 | this.title = title; 45 | } 46 | 47 | public String getContent() { 48 | return content; 49 | } 50 | 51 | public void setContent(String content) { 52 | this.content = content; 53 | } 54 | 55 | public long getCreateTime() { 56 | return createTime; 57 | } 58 | 59 | public void setCreateTime(long createTime) { 60 | this.createTime = createTime; 61 | } 62 | 63 | public boolean isReleaseCheck() { 64 | return releaseCheck; 65 | } 66 | 67 | public void setReleaseCheck(boolean releaseCheck) { 68 | this.releaseCheck = releaseCheck; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/data/pojo/Order.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.data.pojo; 2 | 3 | /** 4 | * Created by PetterChen on 2017/5/16. 5 | */ 6 | 7 | public class Order { 8 | private int id; 9 | private int tradeId; 10 | private int authorId; 11 | private int payId; 12 | private long createTime; 13 | 14 | public int getId() { 15 | return id; 16 | } 17 | 18 | public void setId(int id) { 19 | this.id = id; 20 | } 21 | 22 | public int getTradeId() { 23 | return tradeId; 24 | } 25 | 26 | public void setTradeId(int tradeId) { 27 | this.tradeId = tradeId; 28 | } 29 | 30 | public int getAuthorId() { 31 | return authorId; 32 | } 33 | 34 | public void setAuthorId(int authorId) { 35 | this.authorId = authorId; 36 | } 37 | 38 | public int getPayId() { 39 | return payId; 40 | } 41 | 42 | public void setPayId(int payId) { 43 | this.payId = payId; 44 | } 45 | 46 | public long getCreateTime() { 47 | return createTime; 48 | } 49 | 50 | public void setCreateTime(long createTime) { 51 | this.createTime = createTime; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/data/pojo/TradeTag.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.data.pojo; 2 | 3 | import com.peter.schoolmarket.R; 4 | 5 | import java.io.Serializable; 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | import io.realm.RealmObject; 10 | import io.realm.annotations.PrimaryKey; 11 | 12 | /** 13 | * Created by PetterChen on 2017/4/29. 14 | */ 15 | 16 | public class TradeTag implements Serializable { 17 | private int rId;//分类的id 18 | private String name;//分类的名称 19 | 20 | public TradeTag() { 21 | } 22 | 23 | public int getRId() { 24 | return rId; 25 | } 26 | 27 | public String getName() { 28 | return name; 29 | } 30 | 31 | public void setRId(int rId) { 32 | this.rId = rId; 33 | } 34 | 35 | public void setName(String name) { 36 | this.name = name; 37 | } 38 | 39 | } -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/data/pojo/User.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.data.pojo; 2 | 3 | import java.io.Serializable; 4 | 5 | import io.realm.RealmObject; 6 | import io.realm.annotations.PrimaryKey; 7 | import io.realm.annotations.Required; 8 | 9 | /** 10 | * Created by PetterChen on 2017/4/10. 11 | */ 12 | 13 | public class User extends RealmObject implements Serializable { 14 | @PrimaryKey 15 | private int id;//U001 16 | private String username;//用户名 17 | private String password;//用户密码 18 | private String phone;//手机号 19 | private String imgUrl;//头像地址 20 | 21 | public User() { 22 | // 23 | } 24 | 25 | public void setId(int id) { 26 | this.id = id; 27 | } 28 | 29 | public void setUsername(String username) { 30 | this.username = username; 31 | } 32 | 33 | public void setPassword(String password) { 34 | this.password = password; 35 | } 36 | 37 | public void setPhone(String phone) { 38 | this.phone = phone; 39 | } 40 | 41 | public void setImgUrl(String imgUrl) { 42 | this.imgUrl = imgUrl; 43 | } 44 | 45 | public int getId() { 46 | return id; 47 | } 48 | 49 | public String getUsername() { 50 | return username; 51 | } 52 | 53 | public String getPassword() { 54 | return password; 55 | } 56 | 57 | public String getPhone() { 58 | return phone; 59 | } 60 | 61 | public String getImgUrl() { 62 | return imgUrl; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/data/storage/LoginInfoExecutor.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.data.storage; 2 | 3 | import android.content.Context; 4 | 5 | import com.peter.schoolmarket.data.pojo.User; 6 | 7 | /** 8 | * Created by PetterChen on 2017/4/20. 9 | */ 10 | 11 | public class LoginInfoExecutor { 12 | 13 | public static User getUser(final Context context) { 14 | return ManageLoginInfo.getInstance().getUser(context); 15 | } 16 | 17 | public static void logIn(final Context context, User user){ 18 | ManageLoginInfo.getInstance().saveUser(context, user); 19 | } 20 | 21 | public static void logOut(final Context context){ 22 | ManageLoginInfo.getInstance().clear(context); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/data/storage/ManageLoginInfo.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.data.storage; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | 6 | import com.peter.schoolmarket.data.pojo.User; 7 | 8 | import static android.content.Context.MODE_PRIVATE; 9 | 10 | /** 11 | * Created by PetterChen on 2017/4/20. 12 | */ 13 | 14 | public class ManageLoginInfo { 15 | 16 | private final String SP="userInfo"; 17 | private static ManageLoginInfo instance; 18 | 19 | private ManageLoginInfo(){ 20 | 21 | } 22 | 23 | //获取唯一实例函数 24 | public static ManageLoginInfo getInstance() { 25 | if (instance == null) { 26 | synchronized (ManageLoginInfo.class) { 27 | if (instance == null) { 28 | instance = new ManageLoginInfo(); 29 | } 30 | } 31 | } 32 | return instance; 33 | } 34 | 35 | public void saveUser(final Context context, final User user){ 36 | SharedPreferences sp = context.getSharedPreferences(SP, MODE_PRIVATE); 37 | SharedPreferences.Editor editor = sp.edit(); 38 | if (user.getId()!=0){ 39 | editor.putInt("userId",user.getId()); 40 | } 41 | if (user.getUsername()!=null){ 42 | editor.putString("username",user.getUsername()); 43 | } 44 | if (user.getPassword()!=null){ 45 | editor.putString("password",user.getPassword()); 46 | } 47 | if (user.getPhone()!=null){ 48 | editor.putString("phone",user.getPhone()); 49 | } 50 | if (user.getImgUrl()!=null){ 51 | editor.putString("avatarUrl",user.getImgUrl()); 52 | } 53 | editor.apply(); 54 | } 55 | 56 | void clear(final Context context){ 57 | SharedPreferences sp = context.getSharedPreferences(SP,MODE_PRIVATE); 58 | SharedPreferences.Editor editor = sp.edit(); 59 | editor.clear(); 60 | editor.apply(); 61 | } 62 | 63 | public User getUser(final Context context){ 64 | SharedPreferences sp = context.getSharedPreferences(SP, MODE_PRIVATE); 65 | final User user=new User(); 66 | user.setId(sp.getInt("userId",0)); 67 | user.setUsername(sp.getString("username","")); 68 | user.setPassword(sp.getString("password","")); 69 | user.setPhone(sp.getString("phone","")); 70 | user.setImgUrl(sp.getString("avatarUrl","")); 71 | if (user.getId() == 0) { 72 | return null; 73 | } 74 | return user; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/di/components/FindFragmentComponent.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.di.components; 2 | 3 | import com.peter.schoolmarket.di.modules.FindFragmentModule; 4 | import com.peter.schoolmarket.mvp.find.FindFragment; 5 | import com.peter.schoolmarket.mvp.find.IFindPresenter; 6 | 7 | import javax.inject.Singleton; 8 | 9 | import dagger.Component; 10 | 11 | /** 12 | * Created by PetterChen on 2017/4/28. 13 | */ 14 | 15 | @Singleton 16 | @Component(modules = FindFragmentModule.class) 17 | public interface FindFragmentComponent { 18 | IFindPresenter provideIFindPresenter(); 19 | 20 | void inject(FindFragment fragment); 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/di/components/LoginRegisterComponent.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.di.components; 2 | 3 | import com.afollestad.materialdialogs.MaterialDialog; 4 | import com.peter.schoolmarket.di.modules.LoginRegisterModule; 5 | import com.peter.schoolmarket.di.qualifiers.LoginProgress; 6 | import com.peter.schoolmarket.di.qualifiers.RegisterProgress; 7 | import com.peter.schoolmarket.mvp.login.ILoginRegisterPresenter; 8 | import com.peter.schoolmarket.mvp.login.LoginActivity; 9 | 10 | import javax.inject.Singleton; 11 | 12 | import dagger.Component; 13 | 14 | /** 15 | * Created by PetterChen on 2017/4/19. 16 | */ 17 | 18 | @Singleton 19 | @Component(modules = LoginRegisterModule.class) 20 | public interface LoginRegisterComponent { 21 | //注意:下面这三个方法,返回值必须是从上面指定的依赖库LoginRegisterModule.class中取得的对象 22 | //注意:而方法名不一致也行,但是方便阅读,建议一致,因为它主要是根据返回值类型来找依赖的 23 | //★注意:下面这三个方法也可以不写,但是如果要写,就按照这个格式来 24 | //但是当Component要被别的Component依赖时, 25 | //这里就必须写这个方法,不写代表不向别的Component暴露此依赖 26 | ILoginRegisterPresenter provideILoginRegisterPresenter(); 27 | @LoginProgress 28 | MaterialDialog provideLoginProgress(); 29 | @RegisterProgress 30 | MaterialDialog provideRegisterProgress(); 31 | 32 | //注意:下面的这个方法,表示要将以上的三个依赖注入到某个类中 33 | //这里我们把上面的三个依赖注入到Salad中 34 | void inject(LoginActivity activity); 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/di/components/RegisterNextComponent.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.di.components; 2 | 3 | import android.support.v4.media.VolumeProviderCompat; 4 | 5 | import com.afollestad.materialdialogs.MaterialDialog; 6 | import com.peter.schoolmarket.di.modules.RegisterNextModule; 7 | import com.peter.schoolmarket.mvp.login.register.next.IRegisterNextPresenter; 8 | import com.peter.schoolmarket.mvp.login.register.next.RegisterNextActivity; 9 | 10 | import javax.inject.Singleton; 11 | 12 | import dagger.Component; 13 | 14 | /** 15 | * Created by PetterChen on 2017/4/19. 16 | */ 17 | 18 | @Singleton 19 | @Component(modules = RegisterNextModule.class) 20 | public interface RegisterNextComponent { 21 | 22 | IRegisterNextPresenter provideIRegisterNextPresenter(); 23 | MaterialDialog provideRegisterNextProgress(); 24 | 25 | void inject(RegisterNextActivity activity); 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/di/modules/FindFragmentModule.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.di.modules; 2 | 3 | import android.content.Context; 4 | 5 | import com.peter.schoolmarket.mvp.find.FindPresenter; 6 | import com.peter.schoolmarket.mvp.find.IFindPresenter; 7 | import com.peter.schoolmarket.mvp.find.IFindView; 8 | 9 | import javax.inject.Singleton; 10 | 11 | import dagger.Module; 12 | import dagger.Provides; 13 | 14 | /** 15 | * Created by PetterChen on 2017/4/28. 16 | */ 17 | 18 | @Module 19 | public class FindFragmentModule { 20 | 21 | Context context; 22 | IFindView view; 23 | 24 | public FindFragmentModule(Context context, IFindView view) { 25 | this.context = context; 26 | this.view = view; 27 | } 28 | 29 | @Singleton 30 | @Provides 31 | public IFindPresenter provideIFindPresenter() { 32 | return new FindPresenter(context, view); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/di/modules/LoginRegisterModule.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.di.modules; 2 | 3 | import android.content.Context; 4 | 5 | import com.afollestad.materialdialogs.MaterialDialog; 6 | import com.peter.schoolmarket.di.qualifiers.LoginProgress; 7 | import com.peter.schoolmarket.di.qualifiers.RegisterProgress; 8 | import com.peter.schoolmarket.mvp.login.ILoginRegisterPresenter; 9 | import com.peter.schoolmarket.mvp.login.ILoginRegisterView; 10 | import com.peter.schoolmarket.mvp.login.LoginRegisterPresenter; 11 | 12 | import javax.inject.Singleton; 13 | 14 | import dagger.Module; 15 | import dagger.Provides; 16 | 17 | /** 18 | * Created by PetterChen on 2017/4/19. 19 | */ 20 | 21 | @Module 22 | public class LoginRegisterModule { 23 | 24 | private ILoginRegisterView loginRegisterView; 25 | private Context context; 26 | 27 | public LoginRegisterModule(ILoginRegisterView view, Context context) { 28 | this.loginRegisterView = view; 29 | this.context = context; 30 | } 31 | 32 | @Singleton @Provides 33 | public ILoginRegisterPresenter provideILoginRegisterPresenter() { 34 | return new LoginRegisterPresenter(loginRegisterView, context); 35 | } 36 | 37 | @LoginProgress 38 | @Singleton @Provides 39 | public MaterialDialog provideLoginProgress() { 40 | return new MaterialDialog.Builder(context) 41 | .content("正在登录...") 42 | .progress(true, 0) 43 | .progressIndeterminateStyle(false)//是否水平放置 44 | .title("请稍等") 45 | .build(); 46 | } 47 | 48 | @RegisterProgress 49 | @Singleton @Provides 50 | public MaterialDialog provideRegisterProgress() { 51 | return new MaterialDialog.Builder(context) 52 | .content("正在注册...") 53 | .progress(true, 0) 54 | .progressIndeterminateStyle(false)//是否水平放置 55 | .title("请稍等") 56 | .build(); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/di/modules/RegisterNextModule.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.di.modules; 2 | 3 | import android.content.Context; 4 | 5 | import com.afollestad.materialdialogs.MaterialDialog; 6 | import com.peter.schoolmarket.mvp.login.register.next.IRegisterNextPresenter; 7 | import com.peter.schoolmarket.mvp.login.register.next.IRegisterNextView; 8 | import com.peter.schoolmarket.mvp.login.register.next.RegisterNextPresenter; 9 | 10 | import javax.inject.Singleton; 11 | 12 | import dagger.Module; 13 | import dagger.Provides; 14 | 15 | /** 16 | * Created by PetterChen on 2017/4/19. 17 | */ 18 | 19 | @Module 20 | public class RegisterNextModule { 21 | 22 | private Context context; 23 | private IRegisterNextView iRegisterNextView; 24 | 25 | public RegisterNextModule(Context context, IRegisterNextView iRegisterNextView) { 26 | this.context = context; 27 | this.iRegisterNextView = iRegisterNextView; 28 | } 29 | 30 | @Singleton @Provides 31 | public IRegisterNextPresenter provideIRegisterNextPresenter() { 32 | return new RegisterNextPresenter(context, iRegisterNextView); 33 | } 34 | 35 | @Singleton @Provides 36 | public MaterialDialog provideRegisterNextProgress() { 37 | return new MaterialDialog.Builder(context) 38 | .content("正在添加手机号码...") 39 | .progress(true, 0) 40 | .progressIndeterminateStyle(false)//是否水平放置 41 | .title("请稍等") 42 | .build(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/di/qualifiers/LoginProgress.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.di.qualifiers; 2 | 3 | import javax.inject.Qualifier; 4 | 5 | /** 6 | * Created by PetterChen on 2017/4/19. 7 | */ 8 | 9 | @Qualifier 10 | public @interface LoginProgress { 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/di/qualifiers/RegisterProgress.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.di.qualifiers; 2 | 3 | import javax.inject.Qualifier; 4 | 5 | /** 6 | * Created by PetterChen on 2017/4/19. 7 | */ 8 | 9 | @Qualifier 10 | public @interface RegisterProgress { 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mock/UserMock.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mock; 2 | 3 | import com.google.gson.Gson; 4 | import com.google.gson.reflect.TypeToken; 5 | import com.peter.schoolmarket.data.dto.Result; 6 | import com.peter.schoolmarket.data.pojo.User; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * Created by PetterChen on 2017/5/2. 12 | */ 13 | 14 | public class UserMock { 15 | public Result register(){ 16 | String json="{\"code\":100,\"msg\":\"操作成功\",\"data\":\"U001\"}"; 17 | return new Gson().fromJson(json, new TypeToken>() {}.getType()); 18 | } 19 | 20 | public Result loginOrRegisterNext(){ 21 | String json="{\"code\":100,\"msg\":\"操作成功\",\"data\":{\"id\":\"U001\",\"username\":\"admin\",\"password\":" + 22 | "\"admin\",\"phone\":\"18202429136\",\"avatarUrl\":\"http://opeuvb611.bkt.clouddn.com/sort_clothes.jpeg\"}}";//"null"表示传值为String = "null"; 23 | //Gson g = new GsonBuilder().serializeNulls().create();字段为空 24 | return new Gson().fromJson(json, new TypeToken>() {}.getType()); 25 | } 26 | 27 | public Result getUserInfo(){ 28 | String json="{\"code\":100,\"msg\":\"操作成功\",\"data\":{\"id\":\"U002\",\"username\":" + 29 | "\"admin\",\"phone\":\"18202429136\",\"avatarUrl\":\"http://opeuvb611.bkt.clouddn.com/sort_clothes.jpeg\"}}";//"null"表示传值为String = "null"; 30 | //Gson g = new GsonBuilder().serializeNulls().create();字段为空 31 | return new Gson().fromJson(json, new TypeToken>() {}.getType()); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/base/BaseActivity.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.base; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.app.AppCompatActivity; 5 | 6 | /** 7 | * Created by PetterChen on 2017/4/11. 8 | */ 9 | 10 | public abstract class BaseActivity extends AppCompatActivity { 11 | protected String TAG = "BaseActivity"; 12 | protected abstract void initViews(Bundle savedInstanceState); 13 | 14 | @Override 15 | protected void onCreate(Bundle savedInstanceState) { 16 | super.onCreate(savedInstanceState); 17 | TAG = getClass().getSimpleName(); 18 | initViews(savedInstanceState); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/base/BaseFragment.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.base; 2 | 3 | import android.app.Activity; 4 | import android.app.Fragment; 5 | import android.content.Context; 6 | import android.os.Bundle; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | 11 | import com.peter.schoolmarket.application.MarketApp; 12 | 13 | /** 14 | * Created by PetterChen on 2017/4/18. 15 | */ 16 | 17 | public abstract class BaseFragment extends Fragment { 18 | 19 | //private Activity activity; 20 | 21 | protected abstract int getLayoutResId(); 22 | 23 | protected abstract void initViews(View view, Bundle savedInstanceState); 24 | 25 | 26 | @Override 27 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 28 | View view = inflater.inflate(getLayoutResId(), container, false); 29 | initViews(view, savedInstanceState); 30 | return view; 31 | } 32 | 33 | /*public Context getContext(){ 34 | if(activity == null){ 35 | return MarketApp.getInstance(); 36 | } 37 | return activity; 38 | }*/ 39 | 40 | /*@Override 41 | public void onAttach(Activity activity) { 42 | super.onAttach(activity); 43 | activity = getActivity(); 44 | }*/ 45 | } -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/find/IFindModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.find; 2 | 3 | import java.util.List; 4 | 5 | import io.realm.Realm; 6 | 7 | /** 8 | * Created by PetterChen on 2017/4/28. 9 | */ 10 | 11 | public interface IFindModel { 12 | void tradesDataReq(final IGainListener listener,final int page); 13 | void searchDataReq(final IGainListener listener,final String query); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/find/IFindPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.find; 2 | 3 | import io.realm.Realm; 4 | 5 | /** 6 | * Created by PetterChen on 2017/4/28. 7 | */ 8 | 9 | public interface IFindPresenter { 10 | 11 | void initView(Realm realm); 12 | 13 | void refreshView(); 14 | 15 | void loadNextPage(); 16 | 17 | void loadSearchPage(String query); 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/find/IFindView.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.find; 2 | 3 | import com.peter.schoolmarket.adapter.recycler.RecyclerCommonAdapter; 4 | 5 | /** 6 | * Created by PetterChen on 2017/4/28. 7 | */ 8 | 9 | public interface IFindView { 10 | void loadDataSuccess(RecyclerCommonAdapter adapter);//当数据获取成功 11 | void hideRefresh();//隐藏下拉刷新 12 | void showProgress(); 13 | void hideProgress(); 14 | void showRefresh(); 15 | void onSuccess(String msg); 16 | void onFail(String msg); 17 | void setSearchFlag(boolean flag); 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/find/IGainListener.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.find; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | import com.peter.schoolmarket.data.pojo.Trade; 5 | import com.peter.schoolmarket.data.pojo.User; 6 | 7 | import java.util.List; 8 | 9 | import io.realm.Realm; 10 | 11 | /** 12 | * Created by PetterChen on 2017/4/28. 13 | */ 14 | 15 | public interface IGainListener { 16 | void onReqComplete(Result> result);//从服务器中得到数据后的操作 17 | void onSearchReqComplete(Result> result);//从服务器中得到数据后的操作 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/login/ILoginRegisterPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.login; 2 | 3 | /** 4 | * Created by PetterChen on 2017/4/11. 5 | */ 6 | 7 | public interface ILoginRegisterPresenter { 8 | //view和model的交互是登录和注册 9 | void login(String username,String password); 10 | void register(String username,String password); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/login/ILoginRegisterView.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.login; 2 | 3 | /** 4 | * Created by PetterChen on 2017/4/11. 5 | */ 6 | 7 | public interface ILoginRegisterView { 8 | //界面友好交互 9 | void showLoginLoading();//登录进度框 10 | void hideLoginLoading();//隐藏登录进度框 11 | void showRegisterLoading();//注册进度框 12 | void hideRegisterLoading();//隐藏进度框 13 | //结果 14 | void loginSuccess();//登录成功 15 | void loginFailed(String msg);//登录失败 16 | void registerSuccess(String userId);//注册成功 17 | void registerFailed(String msg);//注册失败 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/login/IUserModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.login; 2 | 3 | /** 4 | * Created by PetterChen on 2017/4/11. 5 | */ 6 | 7 | public interface IUserModel { 8 | void login(String userName, String password, OnLoginListener loginListener); 9 | void register(String userName, String password, OnRegisterListener registerListener); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/login/LoginRegisterPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.login; 2 | 3 | import android.content.Context; 4 | 5 | import com.peter.schoolmarket.data.dto.Result; 6 | import com.peter.schoolmarket.data.pojo.User; 7 | import com.peter.schoolmarket.data.storage.LoginInfoExecutor; 8 | 9 | /** 10 | * Created by PetterChen on 2017/4/19. 11 | * 登录注册界面的交互器,有两个操作,登录和注册 12 | * 13 | */ 14 | 15 | public class LoginRegisterPresenter implements ILoginRegisterPresenter, OnLoginListener, OnRegisterListener { 16 | 17 | private IUserModel userModel; 18 | private ILoginRegisterView loginRegisterView; 19 | private Context context; 20 | 21 | public LoginRegisterPresenter(ILoginRegisterView loginRegisterView, Context context) { 22 | this.context = context; 23 | this.userModel = new UserModel(); 24 | this.loginRegisterView = loginRegisterView; 25 | } 26 | 27 | 28 | //登录操作:打开加载进度框,进行登录 29 | @Override 30 | public void login(String username, String password) { 31 | loginRegisterView.showLoginLoading(); 32 | userModel.login(username, password, this); 33 | } 34 | 35 | //注册操作:打开加载进度框,进行注册 36 | @Override 37 | public void register(String username, String password) { 38 | loginRegisterView.showRegisterLoading(); 39 | userModel.register(username, password, this); 40 | } 41 | 42 | //登录结果:隐藏加载进度框,进行返回值判断是否登录成功或者失败 43 | @Override 44 | public void loginResult(Result result) { 45 | loginRegisterView.hideLoginLoading(); 46 | 47 | switch (result.getCode()) { 48 | case 100://操作成功 49 | LoginInfoExecutor.logIn(context, result.getData()); 50 | loginRegisterView.loginSuccess(); 51 | break; 52 | case 99://网络异常或者系统错误 53 | case 201://用户名错误 54 | case 202://密码错误 55 | loginRegisterView.loginFailed(result.getMsg()); 56 | break; 57 | default: 58 | break; 59 | } 60 | } 61 | 62 | //注册结果:隐藏加载进度框,进行返回值判断是否注册成功 63 | @Override 64 | public void registerResult(Result result) { 65 | loginRegisterView.hideRegisterLoading(); 66 | switch (result.getCode()) { 67 | case 100://操作成功 68 | loginRegisterView.registerSuccess(result.getMsg()); 69 | break; 70 | case 99://网络异常或者系统错误 71 | case 203://该用户名已经存在 72 | loginRegisterView.registerFailed(result.getMsg()); 73 | break; 74 | default: 75 | break; 76 | } 77 | } 78 | 79 | } 80 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/login/OnLoginListener.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.login; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | import com.peter.schoolmarket.data.pojo.User; 5 | 6 | /** 7 | * Created by PetterChen on 2017/4/11. 8 | * 登录结果监听 9 | */ 10 | 11 | public interface OnLoginListener { 12 | void loginResult(Result result); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/login/OnRegisterListener.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.login; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | import com.peter.schoolmarket.data.pojo.User; 5 | 6 | /** 7 | * Created by PetterChen on 2017/4/11. 8 | * 注册结果监听 9 | */ 10 | 11 | public interface OnRegisterListener { 12 | void registerResult(Result result); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/login/register/next/IRegisterNextModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.login.register.next; 2 | 3 | /** 4 | * Created by PetterChen on 2017/4/19. 5 | */ 6 | 7 | public interface IRegisterNextModel { 8 | void addPhoneNumber(String phoneNumber, String username, String password, OnRegisterNextListener onRegisterNextListener); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/login/register/next/IRegisterNextPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.login.register.next; 2 | 3 | /** 4 | * Created by PetterChen on 2017/4/19. 5 | */ 6 | 7 | public interface IRegisterNextPresenter { 8 | void addPhoneNum(String phoneNumber, String username, String password); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/login/register/next/IRegisterNextView.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.login.register.next; 2 | 3 | /** 4 | * Created by PetterChen on 2017/4/19. 5 | */ 6 | 7 | public interface IRegisterNextView { 8 | //操作需要什么 9 | String getPhoneNumber();//取得手机号码 10 | //界面友好交互 11 | void showLoading();//显示进度框 12 | void hideLoading();//隐藏进度框 13 | //结果 14 | void addSuccess();//添加成功 15 | void addFailed();//添加失败 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/login/register/next/OnRegisterNextListener.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.login.register.next; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | import com.peter.schoolmarket.data.pojo.User; 5 | 6 | /** 7 | * Created by PetterChen on 2017/4/19. 8 | */ 9 | 10 | public interface OnRegisterNextListener { 11 | void registerNextResult(Result result); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/login/register/next/RegisterNextModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.login.register.next; 2 | 3 | import com.peter.schoolmarket.application.AppConf; 4 | import com.peter.schoolmarket.data.dto.Result; 5 | import com.peter.schoolmarket.data.pojo.User; 6 | import com.peter.schoolmarket.mock.UserMock; 7 | import com.peter.schoolmarket.network.NetReturn; 8 | import com.peter.schoolmarket.network.ReqExecutor; 9 | 10 | import rx.Subscriber; 11 | import rx.android.schedulers.AndroidSchedulers; 12 | import rx.schedulers.Schedulers; 13 | 14 | /** 15 | * Created by PetterChen on 2017/4/19. 16 | */ 17 | 18 | public class RegisterNextModel implements IRegisterNextModel { 19 | @Override 20 | public void addPhoneNumber(String phoneNumber, final String username, final String password, final OnRegisterNextListener onRegisterNextListener) { 21 | /*if (AppConf.useMock){ 22 | onRegisterNextListener.registerNextResult(new UserMock().loginOrRegisterNext()); 23 | return; 24 | }*/ 25 | 26 | final Result result=new Result().result(NetReturn.SERVER_ERROR); 27 | //此网络请求等服务器搭好再调整 28 | ReqExecutor 29 | .INSTANCE() 30 | .userReq() 31 | .registerNext(username, password, phoneNumber) 32 | .subscribeOn(Schedulers.io())//在工作线程请求网络 33 | .observeOn(AndroidSchedulers.mainThread())//在主线程处理结果 34 | .subscribe(new Subscriber>() { 35 | 36 | //此方法在onNext()方法后执行 37 | @Override 38 | public void onCompleted() { 39 | onRegisterNextListener.registerNextResult(result); 40 | } 41 | 42 | @Override 43 | public void onError(Throwable e) { 44 | onRegisterNextListener.registerNextResult(result); 45 | } 46 | 47 | //相当与onClick() 48 | @Override 49 | public void onNext(Result resultData) { 50 | result.setCode(resultData.getCode()); 51 | result.setMsg(resultData.getMsg()); 52 | result.setData(resultData.getData()); 53 | } 54 | }); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/login/register/next/RegisterNextPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.login.register.next; 2 | 3 | import android.content.Context; 4 | import android.widget.Toast; 5 | 6 | import com.peter.schoolmarket.data.dto.Result; 7 | import com.peter.schoolmarket.data.pojo.User; 8 | import com.peter.schoolmarket.data.storage.LoginInfoExecutor; 9 | 10 | /** 11 | * Created by PetterChen on 2017/4/19. 12 | */ 13 | 14 | public class RegisterNextPresenter implements IRegisterNextPresenter, OnRegisterNextListener { 15 | 16 | private IRegisterNextModel iRegisterNextModel; 17 | private Context context; 18 | private IRegisterNextView iRegisterNextView; 19 | 20 | public RegisterNextPresenter(Context context, IRegisterNextView iRegisterNextView) { 21 | iRegisterNextModel = new RegisterNextModel(); 22 | this.context = context; 23 | this.iRegisterNextView = iRegisterNextView; 24 | } 25 | 26 | @Override 27 | public void addPhoneNum(String phoneNumber, String username, String password) { 28 | iRegisterNextView.showLoading(); 29 | iRegisterNextModel.addPhoneNumber(phoneNumber, username, password, this); 30 | } 31 | 32 | @Override 33 | public void registerNextResult(Result result) { 34 | iRegisterNextView.hideLoading(); 35 | switch (result.getCode()) { 36 | case 99://网络异常或者系统错误 37 | iRegisterNextView.addFailed(); 38 | break; 39 | case 100://操作成功 40 | LoginInfoExecutor.logIn(context, result.getData()); 41 | iRegisterNextView.addSuccess(); 42 | break; 43 | default: 44 | break; 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/main/IMainListener.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.main; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | import com.peter.schoolmarket.data.pojo.User; 5 | 6 | import java.util.List; 7 | 8 | import io.realm.Realm; 9 | 10 | /** 11 | * Created by PetterChen on 2017/5/16. 12 | */ 13 | 14 | public interface IMainListener { 15 | void onUsersReqComplete(Result> result, Realm realm); 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/main/IMainModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.main; 2 | 3 | import io.realm.Realm; 4 | 5 | /** 6 | * Created by PetterChen on 2017/5/16. 7 | */ 8 | 9 | public interface IMainModel { 10 | void getUsers(final IMainListener listener, Realm realm); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/main/IMainPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.main; 2 | 3 | import android.support.v4.widget.DrawerLayout; 4 | import android.view.View; 5 | 6 | import com.miguelcatalan.materialsearchview.MaterialSearchView; 7 | 8 | import io.realm.Realm; 9 | 10 | /** 11 | * Created by PetterChen on 2017/4/20. 12 | */ 13 | 14 | public interface IMainPresenter { 15 | void initMain(View header, Realm realm);//初始化 16 | void sideJump(int id);//侧边栏点击跳转 17 | void searchSubmit(String query); 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/main/IMainView.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.main; 2 | 3 | /** 4 | * Created by PetterChen on 2017/5/5. 5 | */ 6 | 7 | public interface IMainView { 8 | void hideDrawer(); 9 | void exit(); 10 | void showSearch(); 11 | void hideSearch(); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/main/MainModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.main; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | import com.peter.schoolmarket.data.pojo.User; 5 | import com.peter.schoolmarket.network.NetReturn; 6 | import com.peter.schoolmarket.network.ReqExecutor; 7 | 8 | import java.util.List; 9 | 10 | import io.realm.Realm; 11 | import rx.Subscriber; 12 | import rx.android.schedulers.AndroidSchedulers; 13 | import rx.schedulers.Schedulers; 14 | 15 | /** 16 | * Created by PetterChen on 2017/5/16. 17 | */ 18 | 19 | public class MainModel implements IMainModel { 20 | @Override 21 | public void getUsers(final IMainListener listener, final Realm realm) { 22 | final Result> result = new Result>().result(NetReturn.SERVER_ERROR); 23 | ReqExecutor 24 | .INSTANCE() 25 | .userReq() 26 | .getUsers() 27 | .subscribeOn(Schedulers.io()) 28 | .observeOn(AndroidSchedulers.mainThread()) 29 | .subscribe(new Subscriber>>() { 30 | @Override 31 | public void onCompleted() { 32 | listener.onUsersReqComplete(result, realm); 33 | } 34 | 35 | @Override 36 | public void onError(Throwable e) { 37 | listener.onUsersReqComplete(result, realm); 38 | } 39 | @Override 40 | public void onNext(Result> listResult) { 41 | result.setCode(listResult.getCode()); 42 | result.setMsg(listResult.getMsg()); 43 | result.setData(listResult.getData()); 44 | } 45 | }); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/main/about/AboutActivity.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.main.about; 2 | 3 | import android.os.Bundle; 4 | import android.view.View; 5 | import android.widget.LinearLayout; 6 | import android.widget.Toast; 7 | 8 | import com.afollestad.materialdialogs.MaterialDialog; 9 | import com.facebook.drawee.view.SimpleDraweeView; 10 | import com.peter.schoolmarket.R; 11 | import com.peter.schoolmarket.mvp.base.BaseActivity; 12 | 13 | /** 14 | * Created by PetterChen on 2017/5/7. 15 | */ 16 | 17 | public class AboutActivity extends BaseActivity { 18 | SimpleDraweeView back; 19 | LinearLayout feedback; 20 | LinearLayout help; 21 | LinearLayout version; 22 | LinearLayout introduce; 23 | 24 | @Override 25 | protected void initViews(Bundle savedInstanceState) { 26 | setContentView(R.layout.about_activity); 27 | initVariate(); 28 | manageVariate(); 29 | } 30 | 31 | private void initVariate() { 32 | back = (SimpleDraweeView) findViewById(R.id.about_toolbar_back); 33 | version = (LinearLayout) findViewById(R.id.about_version); 34 | introduce = (LinearLayout) findViewById(R.id.about_introduce); 35 | help = (LinearLayout) findViewById(R.id.about_help); 36 | feedback = (LinearLayout) findViewById(R.id.about_feedback); 37 | } 38 | 39 | private void manageVariate() { 40 | back.setOnClickListener(new View.OnClickListener() { 41 | @Override 42 | public void onClick(View v) { 43 | AboutActivity.this.finish(); 44 | } 45 | }); 46 | version.setOnClickListener(new View.OnClickListener() { 47 | @Override 48 | public void onClick(View v) { 49 | Toast.makeText(AboutActivity.this, "版本更新", Toast.LENGTH_SHORT).show(); 50 | } 51 | }); 52 | introduce.setOnClickListener(new View.OnClickListener() { 53 | @Override 54 | public void onClick(View v) { 55 | Toast.makeText(AboutActivity.this, "功能介绍", Toast.LENGTH_SHORT).show(); 56 | } 57 | }); 58 | help.setOnClickListener(new View.OnClickListener() { 59 | @Override 60 | public void onClick(View v) { 61 | Toast.makeText(AboutActivity.this, "帮助", Toast.LENGTH_SHORT).show(); 62 | } 63 | }); 64 | feedback.setOnClickListener(new View.OnClickListener() { 65 | @Override 66 | public void onClick(View v) { 67 | Toast.makeText(AboutActivity.this, "反馈", Toast.LENGTH_SHORT).show(); 68 | } 69 | }); 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/main/trade/IDrawerTradeListener.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.main.trade; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | import com.peter.schoolmarket.data.pojo.Trade; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Created by PetterChen on 2017/5/7. 10 | */ 11 | 12 | public interface IDrawerTradeListener { 13 | void onComplete(Result> result); 14 | void confirmComplete(Result result); 15 | void cancelTradeComplete(Result result); 16 | /*void onSellingComplete(Result> result); 17 | void onBoughtComplete(Result> result); 18 | void onSoldComplete(Result> result);*/ 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/main/trade/IDrawerTradeModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.main.trade; 2 | 3 | import com.peter.schoolmarket.mvp.sort.trades.ITradeTagDetailListener; 4 | 5 | /** 6 | * Created by PetterChen on 2017/5/7. 7 | */ 8 | 9 | public interface IDrawerTradeModel { 10 | void drawerTradeDataReq(final IDrawerTradeListener listener, final int typeId, final int page, int myId); 11 | void confirmReceiveTrade(final IDrawerTradeListener listener, final int myId, final int tradeId); 12 | void confirmReceiveMoney(final IDrawerTradeListener listener, final int myId, final int tradeId); 13 | void cancelOrder(final IDrawerTradeListener listener, final int tradeId); 14 | void cancelTradeReq(final IDrawerTradeListener listener, final int tradeId); 15 | /*void sellingDataReq(final IDrawerTradeListener listener, final String tagName, final int page); 16 | void boughtDataReq(final IDrawerTradeListener listener, final String tagName, final int page); 17 | void soldDataReq(final IDrawerTradeListener listener, final String tagName, final int page);*/ 18 | 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/main/trade/IDrawerTradePresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.main.trade; 2 | 3 | /** 4 | * Created by PetterChen on 2017/5/7. 5 | */ 6 | 7 | public interface IDrawerTradePresenter { 8 | void init(int typeId); 9 | void refresh(); 10 | void loadNextPage(); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/main/trade/IDrawerTradeView.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.main.trade; 2 | 3 | import com.peter.schoolmarket.adapter.recycler.RecyclerCommonAdapter; 4 | 5 | /** 6 | * Created by PetterChen on 2017/5/7. 7 | */ 8 | 9 | public interface IDrawerTradeView { 10 | void loadDataSuccess(RecyclerCommonAdapter adapter);//当数据获取成功 11 | void loadDataFail(String errorMsg);//当数据获取失败 12 | void showRefresh(); 13 | void hideRefresh(); 14 | void showProgress(); 15 | void hideProgress(); 16 | void onSuccess(String msg); 17 | void onFail(String msg); 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/IMoreListener.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | import com.peter.schoolmarket.data.pojo.Notice; 5 | 6 | import java.util.List; 7 | 8 | import io.realm.Realm; 9 | 10 | /** 11 | * Created by PetterChen on 2017/5/5. 12 | */ 13 | 14 | public interface IMoreListener { 15 | void onReqComplete(Result> result, Realm realm);//从服务器中得到数据后的操作 16 | void onSearchReqComplete(Result> result);//从服务器中得到数据后的操作 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/IMoreModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more; 2 | 3 | import io.realm.Realm; 4 | 5 | /** 6 | * Created by PetterChen on 2017/5/5. 7 | */ 8 | 9 | public interface IMoreModel { 10 | void noticeDataReq(final IMoreListener listener,final int page,final Realm realm); 11 | void searchDataReq(final IMoreListener listener,final String query); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/IMorePresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more; 2 | 3 | import io.realm.Realm; 4 | 5 | /** 6 | * Created by PetterChen on 2017/5/5. 7 | */ 8 | 9 | public interface IMorePresenter { 10 | void refresh(Realm realm); 11 | void init(Realm realm); 12 | void loadNextPage(); 13 | void loadSearchPage(String query); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/IMoreView.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more; 2 | 3 | import com.peter.schoolmarket.adapter.recycler.RecyclerCommonAdapter; 4 | 5 | /** 6 | * Created by PetterChen on 2017/5/5. 7 | */ 8 | 9 | public interface IMoreView { 10 | void loadDataSuccess(RecyclerCommonAdapter adapter);//当数据获取成功 11 | void hideRefresh();//隐藏下拉刷新 12 | void showProgress(); 13 | void hideProgress(); 14 | void showRefresh(); 15 | void onSuccess(String msg); 16 | void onFail(String msg); 17 | void setSearchFlag(boolean flag); 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/notice/add/INoticeAddListener.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more.notice.add; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | 5 | /** 6 | * Created by PetterChen on 2017/5/7. 7 | */ 8 | 9 | public interface INoticeAddListener { 10 | void addNoticeResult(Result result);//执行发布notice请求,得到请求结果 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/notice/add/INoticeAddModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more.notice.add; 2 | 3 | import com.peter.schoolmarket.mvp.trade.add.ITradeAddListener; 4 | 5 | import okhttp3.MultipartBody; 6 | import okhttp3.RequestBody; 7 | 8 | /** 9 | * Created by PetterChen on 2017/5/7. 10 | */ 11 | 12 | public interface INoticeAddModel { 13 | void addNoticeReq(RequestBody noticeJson, INoticeAddListener listener); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/notice/add/INoticeAddPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more.notice.add; 2 | 3 | import android.widget.EditText; 4 | import android.widget.TextView; 5 | 6 | /** 7 | * Created by PetterChen on 2017/5/7. 8 | */ 9 | 10 | public interface INoticeAddPresenter { 11 | void releaseNotice(EditText title, EditText content);//调用该方法正式发布notice 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/notice/add/INoticeAddView.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more.notice.add; 2 | 3 | /** 4 | * Created by PetterChen on 2017/5/7. 5 | */ 6 | 7 | public interface INoticeAddView { 8 | void noticeAddSuccess();//发布商品成功 9 | 10 | void whenFail(String errorMsg);//发生异常 11 | 12 | void showProgress();//显示进度条 13 | 14 | void hideProgress();//隐藏进度条 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/notice/add/NoticeAddModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more.notice.add; 2 | 3 | import com.peter.schoolmarket.application.AppConf; 4 | import com.peter.schoolmarket.data.dto.Result; 5 | import com.peter.schoolmarket.mock.NoticeMock; 6 | import com.peter.schoolmarket.mvp.trade.add.ITradeAddListener; 7 | import com.peter.schoolmarket.network.NetReturn; 8 | import com.peter.schoolmarket.network.ReqExecutor; 9 | 10 | import okhttp3.RequestBody; 11 | import rx.Subscriber; 12 | import rx.android.schedulers.AndroidSchedulers; 13 | import rx.schedulers.Schedulers; 14 | 15 | /** 16 | * Created by PetterChen on 2017/5/7. 17 | */ 18 | 19 | public class NoticeAddModel implements INoticeAddModel { 20 | @Override 21 | public void addNoticeReq(final RequestBody noticeJson, final INoticeAddListener listener) { 22 | /*if (AppConf.useMock){ 23 | listener.addNoticeResult(new NoticeMock().getReleaseNoticeResult()); 24 | return; 25 | }*/ 26 | 27 | final Result result= new Result().result(NetReturn.SERVER_ERROR); 28 | ReqExecutor 29 | .INSTANCE() 30 | .noticeReq() 31 | .addNotice(noticeJson) 32 | .subscribeOn(Schedulers.io()) 33 | .observeOn(AndroidSchedulers.mainThread()) 34 | .subscribe(new Subscriber>() { 35 | @Override 36 | public void onCompleted() { 37 | listener.addNoticeResult(result); 38 | } 39 | 40 | @Override 41 | public void onError(Throwable e) { 42 | listener.addNoticeResult(result); 43 | } 44 | 45 | @Override 46 | public void onNext(Result resultData) { 47 | result.setCode(resultData.getCode()); 48 | result.setMsg(resultData.getMsg()); 49 | } 50 | }); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/notice/add/NoticeAddPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more.notice.add; 2 | 3 | import android.content.Context; 4 | import android.widget.EditText; 5 | 6 | import com.google.gson.Gson; 7 | import com.peter.schoolmarket.data.dto.Result; 8 | import com.peter.schoolmarket.data.pojo.Notice; 9 | import com.peter.schoolmarket.data.pojo.User; 10 | import com.peter.schoolmarket.data.storage.LoginInfoExecutor; 11 | import com.peter.schoolmarket.network.NetReturn; 12 | import com.peter.schoolmarket.network.RetrofitUtils; 13 | import com.peter.schoolmarket.util.ResultInterceptor; 14 | 15 | import okhttp3.RequestBody; 16 | 17 | /** 18 | * Created by PetterChen on 2017/5/7. 19 | */ 20 | 21 | class NoticeAddPresenter implements INoticeAddPresenter, INoticeAddListener { 22 | private INoticeAddView view; 23 | private INoticeAddModel model; 24 | private Context context; 25 | 26 | NoticeAddPresenter(Context context, INoticeAddView view) { 27 | this.view = view; 28 | this.context = context; 29 | model = new NoticeAddModel(); 30 | } 31 | 32 | @Override 33 | public void releaseNotice(EditText title, EditText content) { 34 | Notice notice = checkForm(title, content); 35 | if (!notice.isReleaseCheck()){ 36 | return; 37 | } 38 | view.showProgress(); 39 | String tradeJsonStr=new Gson().toJson(notice); 40 | RequestBody tradeJson=RetrofitUtils.createPartFromString(tradeJsonStr); 41 | model.addNoticeReq(tradeJson ,this); 42 | } 43 | 44 | @Override 45 | public void addNoticeResult(Result result) { 46 | view.hideProgress(); 47 | if (ResultInterceptor.instance.resultHandler(result)){ 48 | view.noticeAddSuccess(); 49 | }else { 50 | view.whenFail(NetReturn.SERVER_ERROR.msg()); 51 | } 52 | } 53 | 54 | private Notice checkForm(EditText title, EditText content) { 55 | Notice notice = new Notice(); 56 | notice.setReleaseCheck(false); 57 | 58 | String titleData = title.getText().toString().trim(); 59 | if (titleData.isEmpty()) { 60 | view.whenFail("标题不可以为空"); 61 | return notice; 62 | } 63 | notice.setTitle(titleData); 64 | 65 | String contentData = content.getText().toString().trim(); 66 | if (contentData.isEmpty()) { 67 | view.whenFail("内容不可以为空"); 68 | return notice; 69 | } 70 | notice.setContent(contentData); 71 | 72 | notice.setCreateTime(System.currentTimeMillis());//设置商品发布时间 73 | 74 | User authorOld= LoginInfoExecutor.getUser(context); 75 | if (authorOld == null || authorOld.getId() == 0 ){ 76 | return notice; 77 | } 78 | notice.setAuthorId(authorOld.getId()); 79 | 80 | notice.setReleaseCheck(true); 81 | return notice; 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/notice/detail/NoticeDetailActivity.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more.notice.detail; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.view.View; 6 | import android.widget.TextView; 7 | 8 | import com.facebook.drawee.view.SimpleDraweeView; 9 | import com.peter.schoolmarket.R; 10 | import com.peter.schoolmarket.application.AppConf; 11 | import com.peter.schoolmarket.data.pojo.Notice; 12 | import com.peter.schoolmarket.data.pojo.User; 13 | import com.peter.schoolmarket.mvp.base.BaseActivity; 14 | import com.peter.schoolmarket.util.TimeUtils; 15 | 16 | import io.realm.Realm; 17 | 18 | /** 19 | * Created by PetterChen on 2017/5/6. 20 | */ 21 | 22 | public class NoticeDetailActivity extends BaseActivity { 23 | private SimpleDraweeView back; 24 | private TextView title; 25 | private TextView name; 26 | private TextView time; 27 | private TextView content; 28 | private Notice notice; 29 | private Realm realm; 30 | 31 | @Override 32 | protected void initViews(Bundle savedInstanceState) { 33 | setContentView(R.layout.notice_detail_activity); 34 | initVariate(); 35 | manageVariate(); 36 | } 37 | 38 | private void initVariate() { 39 | Intent intent=getIntent(); 40 | Bundle bundle=intent.getExtras(); 41 | notice = (Notice) bundle.getSerializable("notice"); 42 | back = (SimpleDraweeView) findViewById(R.id.notice_detail_toolbar_back); 43 | title = (TextView) findViewById(R.id.notice_detail_title); 44 | name = (TextView) findViewById(R.id.notice_detail_name); 45 | time = (TextView) findViewById(R.id.notice_detail_time); 46 | content = (TextView) findViewById(R.id.notice_detail_content); 47 | realm = Realm.getDefaultInstance(); 48 | } 49 | 50 | private void manageVariate() { 51 | back.setOnClickListener(new View.OnClickListener() { 52 | @Override 53 | public void onClick(View v) { 54 | (NoticeDetailActivity.this).finish(); 55 | } 56 | }); 57 | title.setText(notice.getTitle()); 58 | User user = realm.where(User.class).equalTo("id",notice.getAuthorId()).findFirst(); 59 | if (user != null) { 60 | name.setText(user.getUsername()); 61 | } 62 | String tem = TimeUtils.getDate(notice.getCreateTime()); 63 | time.setText(tem); 64 | content.setText(notice.getContent()); 65 | } 66 | 67 | @Override 68 | protected void onDestroy() { 69 | super.onDestroy(); 70 | realm.close(); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/notice/my/INoticeMyListener.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more.notice.my; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | import com.peter.schoolmarket.data.pojo.Notice; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Created by PetterChen on 2017/5/22. 10 | */ 11 | 12 | public interface INoticeMyListener { 13 | void onNoticeReqComplete(Result> result); 14 | void onDeleteReqComplete(Result result); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/notice/my/INoticeMyModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more.notice.my; 2 | 3 | /** 4 | * Created by PetterChen on 2017/5/22. 5 | */ 6 | 7 | public interface INoticeMyModel { 8 | void myNoticeReq(INoticeMyListener listener, int userId, int page); 9 | void deleteNoticeReq(INoticeMyListener listener, int noticeId); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/notice/my/INoticeMyPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more.notice.my; 2 | 3 | import io.realm.Realm; 4 | 5 | /** 6 | * Created by PetterChen on 2017/5/22. 7 | */ 8 | 9 | public interface INoticeMyPresenter { 10 | void initMain(Realm realm); 11 | void refresh(); 12 | void loadNextPage(); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/more/notice/my/INoticeMyView.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.more.notice.my; 2 | 3 | import com.peter.schoolmarket.adapter.recycler.RecyclerCommonAdapter; 4 | 5 | /** 6 | * Created by PetterChen on 2017/5/22. 7 | */ 8 | 9 | public interface INoticeMyView { 10 | void loadDataSuccess(RecyclerCommonAdapter adapter);//当数据获取成功 11 | void loadDataFail(String errorMsg);//当数据获取失败 12 | void showRefresh(); 13 | void hideRefresh(); 14 | void showProgress(); 15 | void hideProgress(); 16 | void onSuccess(String msg); 17 | void onFail(String msg); 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/msg/IMsgListener.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.msg; 2 | 3 | /** 4 | * Created by PetterChen on 2017/5/6. 5 | */ 6 | 7 | public interface IMsgListener { 8 | void msgReqComplete(boolean flag); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/msg/IMsgModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.msg; 2 | 3 | import android.content.Context; 4 | 5 | import io.realm.Realm; 6 | 7 | /** 8 | * Created by PetterChen on 2017/5/6. 9 | */ 10 | 11 | public interface IMsgModel { 12 | void msgDataReq(IMsgListener listener, Realm realm, int userId, final Context context); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/msg/IMsgPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.msg; 2 | 3 | import java.net.Socket; 4 | 5 | import io.realm.Realm; 6 | 7 | /** 8 | * Created by PetterChen on 2017/5/6. 9 | */ 10 | 11 | public interface IMsgPresenter { 12 | void refresh();//刷新功能,但是好像不太需要,因为消息是实时的,断网之后重新连接还是需要的 13 | void init();//初始化消息数据 14 | void updateList(); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/msg/IMsgView.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.msg; 2 | 3 | import com.peter.schoolmarket.adapter.recycler.RecyclerCommonAdapter; 4 | 5 | /** 6 | * Created by PetterChen on 2017/5/6. 7 | */ 8 | 9 | public interface IMsgView { 10 | void showProgress(); 11 | void hideProgress(); 12 | void hideRefresh(); 13 | void loadDataSuccess(RecyclerCommonAdapter adapter); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/msg/ManageMsgCount.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.msg; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | 6 | import static android.content.Context.MODE_PRIVATE; 7 | 8 | /** 9 | * Created by PetterChen on 2017/5/17. 10 | */ 11 | 12 | public class ManageMsgCount { 13 | private final String SP="msgCountInfo"; 14 | private static ManageMsgCount instance; 15 | 16 | private ManageMsgCount(){ 17 | 18 | } 19 | 20 | //获取唯一实例函数 21 | public static ManageMsgCount getInstance() { 22 | if (instance == null) { 23 | synchronized (ManageMsgCount.class) { 24 | if (instance == null) { 25 | instance = new ManageMsgCount(); 26 | } 27 | } 28 | } 29 | return instance; 30 | } 31 | 32 | public void saveCount(final Context context, final int count) { 33 | SharedPreferences sp = context.getSharedPreferences(SP, MODE_PRIVATE); 34 | SharedPreferences.Editor editor = sp.edit(); 35 | editor.putInt("count", count); 36 | editor.apply(); 37 | } 38 | 39 | public void clear(final Context context){ 40 | SharedPreferences sp = context.getSharedPreferences(SP,MODE_PRIVATE); 41 | SharedPreferences.Editor editor = sp.edit(); 42 | editor.clear(); 43 | editor.apply(); 44 | } 45 | 46 | public int getCount(final Context context){ 47 | SharedPreferences sp = context.getSharedPreferences(SP, MODE_PRIVATE); 48 | int count = sp.getInt("count", 0); 49 | if (count == 0) { 50 | count = 1; 51 | } 52 | return count; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/msg/MsgService.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.msg; 2 | 3 | import android.app.Service; 4 | import android.content.Intent; 5 | import android.os.IBinder; 6 | import android.support.annotation.Nullable; 7 | import android.util.Log; 8 | 9 | import com.peter.schoolmarket.application.AppConf; 10 | import com.peter.schoolmarket.data.storage.LoginInfoExecutor; 11 | 12 | import java.util.concurrent.TimeUnit; 13 | 14 | import io.realm.Realm; 15 | import rx.Observable; 16 | import rx.Subscription; 17 | import rx.android.schedulers.AndroidSchedulers; 18 | import rx.functions.Action1; 19 | import rx.schedulers.Schedulers; 20 | 21 | /** 22 | * Created by PetterChen on 2017/5/17. 23 | */ 24 | 25 | public class MsgService extends Service implements IMsgListener { 26 | public static final String ACTION = "com.peter.schoolmarket.mvp.msg.MsgService"; 27 | private Realm realm; 28 | private IMsgModel model; 29 | private Subscription ms; 30 | 31 | @Nullable 32 | @Override 33 | public IBinder onBind(Intent intent) { 34 | return null; 35 | } 36 | @Override 37 | public void onCreate() { 38 | super.onCreate(); 39 | realm=Realm.getDefaultInstance(); 40 | model=new MsgModel(); 41 | } 42 | 43 | @Override 44 | public int onStartCommand(Intent intent, int flags, int startId) { 45 | final int userId = LoginInfoExecutor.getUser(this).getId(); 46 | ms = Observable.interval(1L, AppConf.Msg_Interval, TimeUnit.SECONDS) 47 | .subscribeOn(Schedulers.io()) 48 | .observeOn(AndroidSchedulers.mainThread()) 49 | .subscribe(new Action1() { 50 | @Override 51 | public void call(Long aLong) { 52 | model.msgDataReq(MsgService.this, realm, userId, MsgService.this); 53 | } 54 | }); 55 | return START_NOT_STICKY;//如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。 56 | } 57 | @Override 58 | public void onDestroy() { 59 | super.onDestroy(); 60 | ms.unsubscribe(); 61 | realm.close(); 62 | } 63 | 64 | @Override 65 | public void msgReqComplete(boolean flag) { 66 | /*if (flag) { 67 | Log.d("getMsgsmsgs", "Service发送广播"); 68 | Intent intent = new Intent(MsgFragment.MY_BROADCAST_ACTION); 69 | sendBroadcast(intent); 70 | }*/ 71 | Intent intent = new Intent(MsgFragment.MY_BROADCAST_ACTION); 72 | sendBroadcast(intent); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/msg/detail/MsgDetailActivity.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.msg.detail; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.view.View; 6 | import android.widget.TextView; 7 | 8 | import com.facebook.drawee.view.SimpleDraweeView; 9 | import com.peter.schoolmarket.R; 10 | import com.peter.schoolmarket.data.pojo.Msg; 11 | import com.peter.schoolmarket.mvp.base.BaseActivity; 12 | import com.peter.schoolmarket.util.TimeUtils; 13 | 14 | /** 15 | * Created by PetterChen on 2017/5/17. 16 | */ 17 | 18 | public class MsgDetailActivity extends BaseActivity { 19 | private SimpleDraweeView back; 20 | private TextView title; 21 | private TextView time; 22 | private TextView content; 23 | private Msg msg; 24 | 25 | @Override 26 | protected void initViews(Bundle savedInstanceState) { 27 | setContentView(R.layout.msg_detail_activity); 28 | initVariate(); 29 | manageVariate(); 30 | } 31 | 32 | private void initVariate() { 33 | Intent intent=getIntent(); 34 | Bundle bundle=intent.getExtras(); 35 | msg = (Msg) bundle.getSerializable("msg"); 36 | back = (SimpleDraweeView) findViewById(R.id.msg_detail_toolbar_back); 37 | title = (TextView) findViewById(R.id.msg_detail_title); 38 | time = (TextView) findViewById(R.id.msg_detail_time); 39 | content = (TextView) findViewById(R.id.msg_detail_content); 40 | } 41 | 42 | private void manageVariate() { 43 | back.setOnClickListener(new View.OnClickListener() { 44 | @Override 45 | public void onClick(View v) { 46 | (MsgDetailActivity.this).finish(); 47 | } 48 | }); 49 | title.setText(msg.getTitle()); 50 | String tem = TimeUtils.getDate(msg.getCreateTime()); 51 | time.setText(tem); 52 | content.setText(msg.getContent()); 53 | } 54 | 55 | @Override 56 | protected void onDestroy() { 57 | super.onDestroy(); 58 | } 59 | } -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/sort/ITradeSortPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.sort; 2 | 3 | import io.realm.Realm; 4 | 5 | /** 6 | * Created by PetterChen on 2017/4/29. 7 | */ 8 | 9 | public interface ITradeSortPresenter { 10 | void initView(); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/sort/ITradeSortView.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.sort; 2 | 3 | import android.widget.AdapterView; 4 | import android.widget.BaseAdapter; 5 | 6 | import com.peter.schoolmarket.adapter.recycler.RecyclerCommonAdapter; 7 | 8 | /** 9 | * Created by PetterChen on 2017/4/29. 10 | */ 11 | 12 | public interface ITradeSortView { 13 | 14 | //void jumpTradeDetail(String TagName); 15 | 16 | void loadTradeTagData(RecyclerCommonAdapter adapter); 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/sort/TradeSortFragment.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.sort; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.design.widget.FloatingActionButton; 6 | import android.support.v7.widget.DefaultItemAnimator; 7 | import android.support.v7.widget.GridLayoutManager; 8 | import android.support.v7.widget.RecyclerView; 9 | import android.view.View; 10 | 11 | import com.peter.schoolmarket.R; 12 | import com.peter.schoolmarket.adapter.recycler.DividerItemGridDecoration; 13 | import com.peter.schoolmarket.adapter.recycler.RecyclerCommonAdapter; 14 | import com.peter.schoolmarket.mvp.base.BaseFragment; 15 | import com.peter.schoolmarket.mvp.trade.add.TradeAddActivity; 16 | 17 | /** 18 | * Created by PetterChen on 2017/4/29. 19 | */ 20 | 21 | public class TradeSortFragment extends BaseFragment implements ITradeSortView { 22 | 23 | private ITradeSortPresenter presenter; 24 | 25 | private RecyclerView recyclerView; 26 | private FloatingActionButton tradeAdd; 27 | 28 | @Override 29 | protected int getLayoutResId() { 30 | return R.layout.sort_fragment; 31 | } 32 | 33 | @Override 34 | protected void initViews(View view, Bundle savedInstanceState) { 35 | recyclerView = (RecyclerView) view.findViewById(R.id.sort_grid); 36 | tradeAdd = (FloatingActionButton) view.findViewById(R.id.sort_deal_plus); 37 | presenter = new TredeSortPresenter(getActivity(), this); 38 | 39 | tradeAdd.setOnClickListener(new View.OnClickListener() { 40 | @Override 41 | public void onClick(View v) { 42 | //跳转到添加商品界面 43 | Intent intent = new Intent(getActivity(), TradeAddActivity.class); 44 | getActivity().startActivity(intent); 45 | } 46 | }); 47 | 48 | recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),3)); 49 | recyclerView.setItemAnimator(new DefaultItemAnimator()); 50 | recyclerView.addItemDecoration(new DividerItemGridDecoration(getActivity())); 51 | 52 | presenter.initView(); 53 | } 54 | 55 | @Override 56 | public void loadTradeTagData(RecyclerCommonAdapter adapter) { 57 | recyclerView.setAdapter(adapter); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/sort/TredeSortPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.sort; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.net.Uri; 6 | import android.view.View; 7 | import android.widget.Toast; 8 | 9 | import com.peter.schoolmarket.R; 10 | import com.peter.schoolmarket.adapter.recycler.RecyclerCommonAdapter; 11 | import com.peter.schoolmarket.adapter.recycler.RecyclerViewHolder; 12 | import com.peter.schoolmarket.data.pojo.TradeTag; 13 | import com.peter.schoolmarket.mvp.sort.trades.TradeTagDetailActivity; 14 | import com.peter.schoolmarket.util.TradeTagUtils; 15 | 16 | import java.util.ArrayList; 17 | import java.util.List; 18 | 19 | /** 20 | * Created by PetterChen on 2017/4/29. 21 | */ 22 | 23 | public class TredeSortPresenter implements ITradeSortPresenter { 24 | private static int TAG_NUM = 5; 25 | private List tagList; 26 | 27 | private ITradeSortView view; 28 | private Context context; 29 | 30 | public TredeSortPresenter(Context context,ITradeSortView view) { 31 | this.context = context; 32 | this.view = view; 33 | } 34 | 35 | 36 | @Override 37 | public void initView() { 38 | initData(); 39 | initList(tagList); 40 | } 41 | 42 | private void initData() { 43 | tagList = TradeTagUtils.getTradeTag(); 44 | } 45 | 46 | public void initList(final List tags) { 47 | RecyclerCommonAdapter adapter=new RecyclerCommonAdapter(context,tags, R.layout.sort_item) { 48 | @Override 49 | public void convert(RecyclerViewHolder holder, TradeTag item) { 50 | holder.setText(R.id.grid_tv,item.getName()); 51 | holder.setFrescoImg(R.id.grid_iv, Uri.parse("res://drawable/" + item.getRId())); 52 | } 53 | }; 54 | view.loadTradeTagData(adapter); 55 | adapter.setClickListener(new RecyclerCommonAdapter.OnItemClickListener() { 56 | @Override 57 | public void onItemClick(View view, int position) { 58 | TradeTag item=tags.get(position); 59 | String tagName = item.getName(); 60 | //跳转到分类商品详情页面 61 | //Toast.makeText(context, "jump to " + tagName, Toast.LENGTH_SHORT).show(); 62 | Intent intent=new Intent(context,TradeTagDetailActivity.class); 63 | intent.putExtra("tagName", tagName); 64 | context.startActivity(intent); 65 | } 66 | }); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/sort/trades/ITradeTagDetailListener.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.sort.trades; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | import com.peter.schoolmarket.data.pojo.Trade; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * Created by PetterChen on 2017/4/29. 10 | */ 11 | 12 | public interface ITradeTagDetailListener { 13 | void onComplete(Result> result); 14 | void onSearchReqComplete(Result> result);//从服务器中得到数据后的操作 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/sort/trades/ITradeTagDetailModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.sort.trades; 2 | 3 | /** 4 | * Created by PetterChen on 2017/4/29. 5 | */ 6 | 7 | public interface ITradeTagDetailModel { 8 | void tradesDataReq(final ITradeTagDetailListener listener, final String tagName, final int page); 9 | void searchDataReq(final ITradeTagDetailListener listener, final String query, final String tagName); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/sort/trades/ITradeTagDetailPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.sort.trades; 2 | 3 | import com.miguelcatalan.materialsearchview.MaterialSearchView; 4 | 5 | /** 6 | * Created by PetterChen on 2017/4/29. 7 | */ 8 | 9 | public interface ITradeTagDetailPresenter { 10 | void init(String tagName); 11 | void refresh(); 12 | void loadNextPage(); 13 | void loadSearchPage(String query); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/sort/trades/ITradeTagDetailView.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.sort.trades; 2 | 3 | import com.peter.schoolmarket.adapter.recycler.RecyclerCommonAdapter; 4 | 5 | /** 6 | * Created by PetterChen on 2017/4/29. 7 | */ 8 | 9 | public interface ITradeTagDetailView { 10 | void loadDataSuccess(RecyclerCommonAdapter adapter);//当数据获取成功 11 | 12 | void loadDataFail(String errorMsg);//当数据获取失败 13 | 14 | void hideRefresh(); 15 | void showProgress(); 16 | void hideProgress(); 17 | 18 | void showRefresh(); 19 | void onSuccess(String msg); 20 | void onFail(String msg); 21 | void setSearchFlag(boolean flag); 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/splash/SplashActivity.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.splash; 2 | 3 | import android.content.Intent; 4 | import android.net.Uri; 5 | import android.os.Bundle; 6 | import android.os.Handler; 7 | import android.util.Log; 8 | import android.view.WindowManager; 9 | 10 | import com.facebook.drawee.backends.pipeline.Fresco; 11 | import com.facebook.drawee.interfaces.DraweeController; 12 | import com.facebook.drawee.view.SimpleDraweeView; 13 | import com.peter.schoolmarket.R; 14 | import com.peter.schoolmarket.data.dto.Result; 15 | import com.peter.schoolmarket.data.pojo.User; 16 | import com.peter.schoolmarket.data.storage.LoginInfoExecutor; 17 | import com.peter.schoolmarket.mock.UserMock; 18 | import com.peter.schoolmarket.mvp.base.BaseActivity; 19 | import com.peter.schoolmarket.mvp.login.LoginActivity; 20 | import com.peter.schoolmarket.mvp.main.MainActivity; 21 | 22 | /** 23 | * Created by PetterChen on 2017/4/11. 24 | */ 25 | 26 | public class SplashActivity extends BaseActivity { 27 | 28 | SimpleDraweeView view; 29 | 30 | @Override 31 | protected void initViews(Bundle savedInstanceState) { 32 | //设置窗体全屏 33 | getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 34 | WindowManager.LayoutParams.FLAG_FULLSCREEN); 35 | setContentView(R.layout.splash_activity); 36 | splashAction(); 37 | initVariate(); 38 | } 39 | 40 | private void initVariate() { 41 | view = (SimpleDraweeView) findViewById(R.id.loading_gif); 42 | DraweeController builder = Fresco.newDraweeControllerBuilder() 43 | .setAutoPlayAnimations(true) 44 | .setUri(Uri.parse("res://drawable/" + R.drawable.phone_splash)) 45 | .build(); 46 | view.setController(builder); 47 | } 48 | 49 | private void manageVariate() { 50 | 51 | } 52 | 53 | private void splashAction() { 54 | //判断是否登录,登录则跳转主界面,否则到注册登录界面 55 | User user= LoginInfoExecutor.getUser(SplashActivity.this); 56 | if(user == null){ 57 | //跳转到注册登录界面 58 | new Handler().postDelayed(new Runnable() { 59 | @Override 60 | public void run() { 61 | Intent intent = new Intent(SplashActivity.this, LoginActivity.class); 62 | startActivity(intent); 63 | finish(); 64 | } 65 | }, 2500); 66 | }else { 67 | //跳转到主界面 68 | new Handler().postDelayed(new Runnable() { 69 | @Override 70 | public void run() { 71 | Intent intent = new Intent(SplashActivity.this,MainActivity.class); 72 | startActivity(intent); 73 | finish(); 74 | } 75 | }, 2500); 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/test/TestActivity.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.test; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.annotation.VisibleForTesting; 6 | import android.support.v7.widget.Toolbar; 7 | import android.view.View; 8 | import android.view.Window; 9 | import android.widget.ImageView; 10 | import android.widget.TextView; 11 | 12 | import com.facebook.drawee.view.SimpleDraweeView; 13 | import com.peter.schoolmarket.R; 14 | import com.peter.schoolmarket.data.pojo.Trade; 15 | import com.peter.schoolmarket.mvp.base.BaseActivity; 16 | import com.peter.schoolmarket.util.TimeUtils; 17 | 18 | /** 19 | * Created by PetterChen on 2017/5/2. 20 | */ 21 | 22 | public class TestActivity extends BaseActivity { 23 | TextView text; 24 | TextView title; 25 | SimpleDraweeView back; 26 | @Override 27 | protected void initViews(Bundle savedInstanceState) { 28 | setContentView(R.layout.test_activity); 29 | 30 | //设置标题栏 31 | //toolbar = (Toolbar) findViewById(R.id.test_toolbar); 32 | //toolbar.setTitle(this.getResources().getString(R.string.main_title)); 33 | //setSupportActionBar(toolbar); 34 | 35 | text = (TextView) findViewById(R.id.test_text); 36 | title = (TextView) findViewById(R.id.test_toolbar_title); 37 | back = (SimpleDraweeView) findViewById(R.id.test_toolbar_back); 38 | Intent intent=getIntent(); 39 | text.setText(intent.getStringExtra("textString")); 40 | /*String tem = TimeUtils.getDateAndTime(System.currentTimeMillis()) + "||" 41 | + TimeUtils.getDate(System.currentTimeMillis()) + "||" 42 | + TimeUtils.getTime(System.currentTimeMillis()); 43 | text.setText(tem);*/ 44 | back.setOnClickListener(new View.OnClickListener() { 45 | @Override 46 | public void onClick(View v) { 47 | (TestActivity.this).finish(); 48 | } 49 | }); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/trade/add/ITradeAddListener.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.trade.add; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | 5 | /** 6 | * Created by PetterChen on 2017/4/30. 7 | */ 8 | 9 | public interface ITradeAddListener { 10 | void addTradeResult(Result result);//执行发布商品请求,得到请求结果 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/trade/add/ITradeAddModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.trade.add; 2 | 3 | import java.util.List; 4 | 5 | import okhttp3.MultipartBody; 6 | import okhttp3.RequestBody; 7 | 8 | /** 9 | * Created by PetterChen on 2017/4/30. 10 | */ 11 | 12 | public interface ITradeAddModel { 13 | void addTradeReq(final RequestBody tradeBody, final RequestBody photoBody, 14 | ITradeAddListener listener); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/trade/add/ITradeAddPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.trade.add; 2 | 3 | import android.widget.EditText; 4 | import android.widget.TextView; 5 | 6 | import java.util.LinkedList; 7 | 8 | /** 9 | * Created by PetterChen on 2017/4/30. 10 | */ 11 | 12 | public interface ITradeAddPresenter { 13 | void releaseTrade(String picUrls, EditText titleContent, EditText nowPrice, 14 | EditText originalPrice, EditText descContent, TextView tag);//调用该方法正式发布商品 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/trade/add/ITradeAddView.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.trade.add; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * Created by PetterChen on 2017/4/30. 7 | */ 8 | 9 | public interface ITradeAddView { 10 | void tradeAddSuccess();//发布商品成功 11 | 12 | void whenFail(String errorMsg);//发生异常 13 | 14 | void showProgress();//显示进度条 15 | 16 | void hideProgress();//隐藏进度条 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/trade/add/TradeAddModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.trade.add; 2 | 3 | import com.peter.schoolmarket.application.AppConf; 4 | import com.peter.schoolmarket.data.dto.Result; 5 | import com.peter.schoolmarket.mock.TradeMock; 6 | import com.peter.schoolmarket.network.NetReturn; 7 | import com.peter.schoolmarket.network.ReqExecutor; 8 | 9 | import okhttp3.MultipartBody; 10 | import okhttp3.RequestBody; 11 | import rx.Subscriber; 12 | import rx.android.schedulers.AndroidSchedulers; 13 | import rx.schedulers.Schedulers; 14 | 15 | /** 16 | * Created by PetterChen on 2017/4/30. 17 | */ 18 | 19 | public class TradeAddModel implements ITradeAddModel { 20 | @Override 21 | public void addTradeReq(final RequestBody tradeBody, final RequestBody photoBody, final ITradeAddListener listener) { 22 | /*if (AppConf.useMock){ 23 | listener.addTradeResult(new TradeMock().getReleaseTradeResult()); 24 | return; 25 | }*/ 26 | 27 | final Result result= new Result().result(NetReturn.SERVER_ERROR); 28 | ReqExecutor 29 | .INSTANCE() 30 | .tradeReq() 31 | .addTrade(tradeBody,photoBody) 32 | .subscribeOn(Schedulers.io()) 33 | .observeOn(AndroidSchedulers.mainThread()) 34 | .subscribe(new Subscriber>() { 35 | @Override 36 | public void onCompleted() { 37 | listener.addTradeResult(result); 38 | } 39 | 40 | @Override 41 | public void onError(Throwable e) { 42 | result.setCode(NetReturn.SERVER_ERROR.code()); 43 | listener.addTradeResult(result); 44 | } 45 | 46 | @Override 47 | public void onNext(Result resultData) { 48 | result.setCode(resultData.getCode()); 49 | result.setMsg(resultData.getMsg()); 50 | } 51 | }); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/trade/detail/ITradeDetailListener.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.trade.detail; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | 5 | /** 6 | * Created by PetterChen on 2017/4/30. 7 | */ 8 | 9 | public interface ITradeDetailListener { 10 | void placeOrderComplete(Result result); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/trade/detail/ITradeDetailModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.trade.detail; 2 | 3 | import com.peter.schoolmarket.data.pojo.Trade; 4 | import com.peter.schoolmarket.data.pojo.User; 5 | 6 | /** 7 | * Created by PetterChen on 2017/4/30. 8 | */ 9 | 10 | public interface ITradeDetailModel { 11 | void placeOrderReq(ITradeDetailListener listener, User user, int tradeId); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/trade/detail/ITradeDetailPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.trade.detail; 2 | 3 | import com.peter.schoolmarket.data.pojo.Trade; 4 | 5 | /** 6 | * Created by PetterChen on 2017/4/30. 7 | */ 8 | 9 | public interface ITradeDetailPresenter { 10 | void loadTradeData(final Trade trade); 11 | void placeOrder(int tradeId); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/trade/detail/ITradeDetailView.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.trade.detail; 2 | 3 | import com.peter.schoolmarket.data.pojo.Trade; 4 | 5 | /** 6 | * Created by PetterChen on 2017/4/30. 7 | */ 8 | 9 | public interface ITradeDetailView { 10 | void showPlaceOrderReqSuc(String msg); 11 | void showPlaceOrderReqFail(); 12 | void loadTradeSuccess(final Trade trade); 13 | void showProgress(); 14 | void hideProgress(); 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/trade/detail/TradeDetailModel.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.trade.detail; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | import com.peter.schoolmarket.data.pojo.User; 5 | import com.peter.schoolmarket.network.NetReturn; 6 | import com.peter.schoolmarket.network.ReqExecutor; 7 | 8 | import rx.Subscriber; 9 | import rx.android.schedulers.AndroidSchedulers; 10 | import rx.schedulers.Schedulers; 11 | 12 | /** 13 | * Created by PetterChen on 2017/4/30. 14 | */ 15 | 16 | public class TradeDetailModel implements ITradeDetailModel { 17 | @Override 18 | public void placeOrderReq(final ITradeDetailListener listener, User user, int tradeId) { 19 | /*if (AppConf.useMock){ 20 | return; 21 | }*/ 22 | 23 | final Result result =new Result().result(NetReturn.SERVER_ERROR); 24 | ReqExecutor 25 | .INSTANCE() 26 | .tradeReq() 27 | .placeOrder(user.getId(),tradeId) 28 | .subscribeOn(Schedulers.io()) 29 | .observeOn(AndroidSchedulers.mainThread()) 30 | .subscribe(new Subscriber>() { 31 | @Override 32 | public void onCompleted() { 33 | listener.placeOrderComplete(result); 34 | } 35 | 36 | @Override 37 | public void onError(Throwable e) { 38 | listener.placeOrderComplete(result); 39 | } 40 | @Override 41 | public void onNext(Result tradeResult) { 42 | result.setCode(tradeResult.getCode()); 43 | result.setMsg(tradeResult.getMsg()); 44 | result.setData(tradeResult.getData()); 45 | } 46 | }); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/mvp/trade/detail/TradeDetailPresenter.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.mvp.trade.detail; 2 | 3 | import android.content.Context; 4 | 5 | import com.peter.schoolmarket.data.dto.Result; 6 | import com.peter.schoolmarket.data.pojo.Trade; 7 | import com.peter.schoolmarket.data.pojo.User; 8 | import com.peter.schoolmarket.data.storage.LoginInfoExecutor; 9 | import com.peter.schoolmarket.mvp.sort.trades.ITradeTagDetailListener; 10 | import com.peter.schoolmarket.util.ResultInterceptor; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | * Created by PetterChen on 2017/4/30. 16 | */ 17 | 18 | public class TradeDetailPresenter implements ITradeDetailPresenter, ITradeDetailListener { 19 | 20 | private Context context; 21 | private ITradeDetailView view; 22 | private ITradeDetailModel model; 23 | 24 | public TradeDetailPresenter(Context context, ITradeDetailView view) { 25 | this.context = context; 26 | this.view = view; 27 | this.model=new TradeDetailModel(); 28 | } 29 | 30 | @Override 31 | public void loadTradeData(Trade trade) { 32 | //本来需要显示加载窗口的,但是由于数据不是从服务器来的 33 | view.loadTradeSuccess(trade); 34 | } 35 | 36 | @Override 37 | public void placeOrder(int tradeId) { 38 | view.showProgress(); 39 | User user= LoginInfoExecutor.getUser(context); 40 | model.placeOrderReq(this, user, tradeId); 41 | } 42 | 43 | @Override 44 | public void placeOrderComplete(Result result) { 45 | view.hideProgress(); 46 | if (ResultInterceptor.instance.resultHandler(result)){ 47 | view.showPlaceOrderReqSuc(result.getData()); 48 | }else { 49 | view.showPlaceOrderReqFail(); 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/network/NetReturn.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.network; 2 | 3 | /** 4 | * Created by PetterChen on 2017/4/13. 5 | */ 6 | 7 | public enum NetReturn { 8 | //普通操作相关 9 | SERVER_ERROR(99,"网络异常或者系统错误"), 10 | SUCCESS(100,"操作成功"), 11 | 12 | //用户相关 13 | USER_NOT_EXIST(201,"用户名错误"), 14 | USER_PASS_ERR(202,"密码错误"), 15 | USER_NAME_EXIST(203,"该用户名已经存在"), 16 | USER_PHONE_EXIST(204,"该手机号已经被注册"), 17 | USER_OLD_PASS_ERR(205,"原密码错误"), 18 | USER_MSG_LATEST(206,"消息数据已经最新"); 19 | 20 | //图片相关 21 | private int code; 22 | private String msg; 23 | 24 | NetReturn(int code, String msg) { 25 | this.code = code; 26 | this.msg = msg; 27 | } 28 | 29 | public int code() { 30 | return this.code; 31 | } 32 | 33 | public String msg() { 34 | return this.msg; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/network/NoticeReq.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.network; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | import com.peter.schoolmarket.data.pojo.Notice; 5 | 6 | import java.util.List; 7 | 8 | import okhttp3.MultipartBody; 9 | import okhttp3.RequestBody; 10 | import retrofit2.http.Field; 11 | import retrofit2.http.FormUrlEncoded; 12 | import retrofit2.http.GET; 13 | import retrofit2.http.Multipart; 14 | import retrofit2.http.POST; 15 | import retrofit2.http.Part; 16 | import retrofit2.http.Query; 17 | import rx.Observable; 18 | 19 | /** 20 | * Created by PetterChen on 2017/5/5. 21 | */ 22 | 23 | public interface NoticeReq { 24 | /** 25 | * 获取列表 26 | */ 27 | @GET(RetrofitConf.get_notices_data) 28 | Observable>> getNoticesData( 29 | @Query("page") int page, 30 | @Query("size") int size 31 | ); 32 | 33 | /** 34 | * 发布 35 | */ 36 | @Multipart 37 | @POST(RetrofitConf.create_notice) 38 | Observable> addNotice( 39 | @Part("notice") RequestBody notice); 40 | 41 | /** 42 | * 43 | */ 44 | @POST(RetrofitConf.get_my_notices) 45 | @FormUrlEncoded 46 | Observable>> getMyNotices( 47 | @Field("userId") int userId, 48 | @Field("page") int page, 49 | @Field("size") int size 50 | ); 51 | 52 | /** 53 | * 54 | */ 55 | @POST(RetrofitConf.delete_notice) 56 | @FormUrlEncoded 57 | Observable> deleteNotice( 58 | @Field("noticeId") int noticeId 59 | ); 60 | 61 | @POST(RetrofitConf.get_search_notices) 62 | @FormUrlEncoded 63 | Observable>> getSearchNotices( 64 | @Field("query") String query 65 | ); 66 | } 67 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/network/ReqExecutor.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.network; 2 | 3 | import com.peter.schoolmarket.BuildConfig; 4 | import com.peter.schoolmarket.application.AppConf; 5 | 6 | import java.util.concurrent.TimeUnit; 7 | 8 | import okhttp3.OkHttpClient; 9 | 10 | import okhttp3.logging.HttpLoggingInterceptor; 11 | import retrofit2.Converter; 12 | import retrofit2.Retrofit; 13 | import retrofit2.converter.gson.GsonConverterFactory; 14 | import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory; 15 | 16 | import static com.peter.schoolmarket.network.RetrofitConf.DEFAULT_TIMEOUT; 17 | 18 | /** 19 | * Created by PetterChen on 2017/4/18. 20 | */ 21 | 22 | public class ReqExecutor { 23 | private UserReq userReq; 24 | private TradeReq tradeReq; 25 | private NoticeReq noticeReq; 26 | 27 | 28 | private ReqExecutor(){} 29 | 30 | private static class ReqExecutorBuilder { 31 | private static ReqExecutor instance = new ReqExecutor(); 32 | } 33 | 34 | public static ReqExecutor INSTANCE() { 35 | return ReqExecutorBuilder.instance; 36 | } 37 | 38 | private Retrofit getRetrofit(Converter.Factory factory){ 39 | 40 | OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder(); 41 | 42 | if (BuildConfig.DEBUG) {//打印http日志 43 | HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); 44 | loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 45 | httpClientBuilder.addInterceptor(loggingInterceptor); 46 | } 47 | 48 | httpClientBuilder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS); 49 | 50 | return new Retrofit.Builder() 51 | .client(httpClientBuilder.build()) 52 | .addConverterFactory(factory) 53 | .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 54 | .baseUrl(AppConf.BASE_URL) 55 | .build(); 56 | } 57 | 58 | private Retrofit getGsonRetrofit(){ 59 | return getRetrofit(GsonConverterFactory.create()); 60 | } 61 | 62 | public UserReq userReq(){ 63 | if (userReq==null){ 64 | userReq=getGsonRetrofit().create(UserReq.class); 65 | } 66 | return userReq; 67 | } 68 | 69 | public TradeReq tradeReq() { 70 | if (tradeReq==null){ 71 | tradeReq=getGsonRetrofit().create(TradeReq.class); 72 | } 73 | return tradeReq; 74 | } 75 | 76 | public NoticeReq noticeReq() { 77 | if (noticeReq==null){ 78 | noticeReq=getGsonRetrofit().create(NoticeReq.class); 79 | } 80 | return noticeReq; 81 | } 82 | } -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/network/RetrofitConf.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.network; 2 | 3 | /** 4 | * Created by PetterChen on 2017/4/13. 5 | */ 6 | 7 | public interface RetrofitConf { 8 | int DEFAULT_TIMEOUT = 5; 9 | 10 | //-----------------------------显示图片------------------------ 11 | String base_img = "SchoolMarketServer/images/"; 12 | 13 | //-----------------------------用户相关--------------------------- 14 | String login="SchoolMarketServer/Login";//用户登录+ 15 | String register="SchoolMarketServer/Register";//用户注册+ 16 | String register_next="SchoolMarketServer/RegisterNext";//用户注册下一步,设置学校,手机号+ 17 | String get_users="SchoolMarketServer/GetUsers"; 18 | String get_msgs = "SchoolMarketServer/GetMsgs"; 19 | 20 | //----------------------------notice---------------------------- 21 | String get_notices_data = "SchoolMarketServer/GetNotices";//获取notice 数据 22 | String create_notice = "SchoolMarketServer/AddNotice"; //添加notice 23 | String get_my_notices = "SchoolMarketServer/GetMyNotices"; 24 | String delete_notice = "SchoolMarketServer/DeleteNotice"; 25 | String get_search_notices = "SchoolMarketServer/GetSearchNotices";//取得搜索数据 26 | 27 | 28 | //----------------------------商品相关---------------------------- 29 | String create_trade="SchoolMarketServer/AddTrade";//发布商品 30 | String get_trades="SchoolMarketServer/GetTrades";//获取该学校的商品列表 31 | String get_tag_trades="SchoolMarketServer/GetTagTrades";//获取该分类下所有商品列表 32 | String get_drawer_trades = "SchoolMarketServer/GetDrawerTrades"; 33 | String place_order = "SchoolMarketServer/PlaceOrder";//下单 34 | String confirm_trade = "SchoolMarketServer/ConfirmTrade";//确认收货 35 | String confirm_money = "SchoolMarketServer/ConfirmMoney";//确认收款 36 | String cancel_order = "SchoolMarketServer/CancelOrder";//取消订单 37 | String cancel_trade = "SchoolMarketServer/CancelTrade";//商品下架 38 | String get_search_trades = "SchoolMarketServer/GetSearchTrades";//取得搜索数据 39 | String get_tag_search_trades = "SchoolMarketServer/GetTagSearchTrades"; 40 | 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/network/UserReq.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.network; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | import com.peter.schoolmarket.data.pojo.Msg; 5 | import com.peter.schoolmarket.data.pojo.Order; 6 | import com.peter.schoolmarket.data.pojo.User; 7 | 8 | import java.util.List; 9 | 10 | import retrofit2.http.Field; 11 | import retrofit2.http.FormUrlEncoded; 12 | import retrofit2.http.GET; 13 | import retrofit2.http.POST; 14 | import retrofit2.http.Path; 15 | import retrofit2.http.Query; 16 | import rx.Observable; 17 | 18 | 19 | /** 20 | * Created by PetterChen on 2017/4/13. 21 | */ 22 | 23 | public interface UserReq { 24 | /** 25 | * 用户登录并获取用户信息 26 | */ 27 | @POST(RetrofitConf.login) 28 | @FormUrlEncoded 29 | Observable> login( 30 | @Field("username") String username, 31 | @Field("password") String password); 32 | 33 | /** 34 | * 用户注册请求 35 | */ 36 | @POST(RetrofitConf.register) 37 | @FormUrlEncoded 38 | Observable> register( 39 | @Field("username") String username, 40 | @Field("password") String password); 41 | 42 | /** 43 | * 注册下一步,设置手机号 44 | */ 45 | @POST(RetrofitConf.register_next) 46 | @FormUrlEncoded 47 | Observable> registerNext( 48 | @Field("username") String username, 49 | @Field("password") String password, 50 | @Field("phone") String phone); 51 | 52 | @GET(RetrofitConf.get_users) 53 | Observable>> getUsers(); 54 | 55 | @POST(RetrofitConf.get_msgs) 56 | @FormUrlEncoded 57 | Observable>> getMsgs( 58 | @Field("userId") int userId); 59 | 60 | 61 | } 62 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/util/BroadUtils.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.util; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.net.ConnectivityManager; 7 | import android.net.NetworkInfo; 8 | import android.widget.Toast; 9 | 10 | /** 11 | * Created by PetterChen on 2017/4/13. 12 | */ 13 | 14 | public class BroadUtils extends BroadcastReceiver { 15 | @Override 16 | public void onReceive(Context context, Intent intent) { 17 | String action = intent.getAction(); 18 | //表明发送端就是发送的是CONNECTIVITY_ACTION这个动作 19 | if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) { 20 | if (isNetConnected(context)) { 21 | //Toast.makeText(context, "连接上网络了", Toast.LENGTH_SHORT).show(); 22 | } else { 23 | Toast.makeText(context, "无网络连接", Toast.LENGTH_SHORT).show(); 24 | } 25 | 26 | 27 | } 28 | } 29 | public static boolean isNetConnected(Context context) { 30 | ConnectivityManager connectivityManager 31 | = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 32 | NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 33 | 34 | if (networkInfo == null) { 35 | return false; 36 | } else { 37 | return networkInfo.isAvailable() & networkInfo.isConnected(); 38 | } 39 | } 40 | public static boolean isPhoneNetConnected(Context context) { 41 | int typeMobile = ConnectivityManager.TYPE_MOBILE;//手机网络类型 42 | return isNetworkConnected(context, typeMobile); 43 | } 44 | public static boolean isWifiNetConnected(Context context) { 45 | int typeMobile = ConnectivityManager.TYPE_WIFI;//WIFI网络类型 46 | return isNetworkConnected(context, typeMobile); 47 | } 48 | private static boolean isNetworkConnected(Context context, int typeMobile) { 49 | if (!isNetConnected(context)) { 50 | return false; 51 | } 52 | ConnectivityManager connectManger = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 53 | NetworkInfo networkInfo = connectManger.getNetworkInfo(typeMobile); 54 | if (networkInfo == null) { 55 | return false; 56 | } else { 57 | return true; 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/util/MsgUtil.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.util; 2 | 3 | import com.peter.schoolmarket.data.pojo.Msg; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | /** 9 | * Created by PetterChen on 2017/5/17. 10 | */ 11 | 12 | public class MsgUtil { 13 | 14 | private static List msgsList; 15 | 16 | public static List getMsgs() { 17 | msgsList = new ArrayList<>(); 18 | for (int i = 0; i < 5; i++) { 19 | Msg tem = new Msg(); 20 | tem.setTitle("aa"); 21 | tem.setContent("aa"); 22 | tem.setCreateTime(System.currentTimeMillis()); 23 | msgsList.add(tem); 24 | } 25 | return msgsList; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/util/PollingUtils.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.util; 2 | 3 | import android.app.AlarmManager; 4 | import android.app.PendingIntent; 5 | import android.content.Context; 6 | import android.content.Intent; 7 | import android.os.SystemClock; 8 | 9 | /** 10 | * Created by PetterChen on 2017/5/16. 11 | */ 12 | 13 | public class PollingUtils { 14 | //开启轮询服务 15 | public static void startPollingService(Context context, int seconds, Class cls, String action) { 16 | //获取AlarmManager系统服务 17 | AlarmManager manager = (AlarmManager) context 18 | .getSystemService(Context.ALARM_SERVICE); 19 | 20 | //包装需要执行Service的Intent 21 | Intent intent = new Intent(context, cls); 22 | intent.setAction(action); 23 | PendingIntent pendingIntent = PendingIntent.getService(context, 0, 24 | intent, PendingIntent.FLAG_UPDATE_CURRENT); 25 | 26 | //触发服务的起始时间 27 | long triggerAtTime = SystemClock.elapsedRealtime(); 28 | 29 | //使用AlarmManger的setRepeating方法设置定期执行的时间间隔(seconds秒)和需要执行的Service 30 | manager.set(AlarmManager.ELAPSED_REALTIME, triggerAtTime, pendingIntent); 31 | /*manager.setRepeating(AlarmManager.ELAPSED_REALTIME, triggerAtTime, 32 | seconds * 1000, pendingIntent);*/ 33 | } 34 | //停止轮询服务 35 | public static void stopPollingService(Context context, Class cls,String action) { 36 | AlarmManager manager = (AlarmManager) context 37 | .getSystemService(Context.ALARM_SERVICE); 38 | Intent intent = new Intent(context, cls); 39 | intent.setAction(action); 40 | PendingIntent pendingIntent = PendingIntent.getService(context, 0, 41 | intent, PendingIntent.FLAG_UPDATE_CURRENT); 42 | //取消正在执行的服务 43 | manager.cancel(pendingIntent); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/util/ResultInterceptor.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.util; 2 | 3 | import com.peter.schoolmarket.data.dto.Result; 4 | 5 | /** 6 | * Created by PetterChen on 2017/4/28. 7 | */ 8 | 9 | public enum ResultInterceptor { 10 | instance; 11 | 12 | public boolean resultHandler(final Result result){ 13 | if (result==null){ 14 | return false; 15 | } 16 | 17 | switch (result.getCode()) { 18 | case 99: 19 | return false; 20 | case 100: 21 | return true; 22 | default: 23 | return false; 24 | } 25 | } 26 | 27 | public boolean resultDataHandler(final Result result){ 28 | 29 | if (result==null||result.getData()==null){ 30 | return false; 31 | } 32 | switch (result.getCode()) { 33 | case 100: 34 | return true; 35 | case 99: 36 | return false; 37 | default: 38 | return false; 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/util/SocketUtils.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.util; 2 | 3 | import java.io.BufferedReader; 4 | import java.io.BufferedWriter; 5 | import java.io.IOException; 6 | import java.io.InputStreamReader; 7 | import java.io.OutputStreamWriter; 8 | import java.net.Socket; 9 | 10 | /** 11 | * Created by PetterChen on 2017/5/6. 12 | */ 13 | 14 | public class SocketUtils { 15 | 16 | public static Socket initSocket(String site, int port){ 17 | try { 18 | return new Socket(site,port); 19 | } catch (Exception e){ 20 | e.printStackTrace(); 21 | return null; 22 | } 23 | } 24 | 25 | public static void sendMsg(Socket client, String msg){ 26 | try{ 27 | BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(client.getOutputStream(),"utf-8")); 28 | writer.write(msg); 29 | writer.flush(); 30 | writer.close(); 31 | }catch(Exception e){ 32 | e.printStackTrace(); 33 | } 34 | } 35 | public static String receiverMsg(Socket client){ 36 | String msg = null; 37 | try{ 38 | BufferedReader reader=new BufferedReader(new InputStreamReader(client.getInputStream(),"utf-8")); 39 | if(reader.ready()) { 40 | msg = reader.readLine(); 41 | } 42 | reader.close(); 43 | return msg; 44 | }catch(Exception e){ 45 | e.printStackTrace(); 46 | return null; 47 | } 48 | } 49 | 50 | public static void closeSocket(Socket client){ 51 | try{ 52 | client.close(); 53 | }catch(IOException e){ 54 | e.printStackTrace(); 55 | } 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/util/TimeUtils.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.util; 2 | 3 | import android.util.Log; 4 | 5 | import java.text.SimpleDateFormat; 6 | import java.util.Date; 7 | import java.util.Locale; 8 | 9 | /** 10 | * Created by PetterChen on 2017/5/6. 11 | */ 12 | 13 | public class TimeUtils { 14 | // yyMMdd hh:mm:ss yyyy-MM-dd hh:mm:ss dd-MM-yyyy hh:mm:ss 15 | public static String getDateAndTime(long millTime) { 16 | Date d = new Date(millTime); 17 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); 18 | //Log.d("time", "" + sdf.format(d)); 19 | return sdf.format(d); 20 | } 21 | 22 | public static String getDate(long millTime) { 23 | Date d = new Date(millTime); 24 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); 25 | String[] tem = sdf.format(d).split(" "); 26 | return tem[0]; 27 | } 28 | 29 | public static String getTime(long millTime) { 30 | Date d = new Date(millTime); 31 | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); 32 | String[] tem = sdf.format(d).split(" "); 33 | return tem[1]; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/peter/schoolmarket/util/TradeTagUtils.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket.util; 2 | 3 | import com.peter.schoolmarket.R; 4 | import com.peter.schoolmarket.data.pojo.TradeTag; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | 9 | /** 10 | * Created by PetterChen on 2017/4/30. 11 | */ 12 | 13 | public class TradeTagUtils { 14 | private static String[] nameList = {"学习资料", "体育用品", "生活用品", "手机相关", "电脑相关"}; 15 | private static int[] nameId = {R.drawable.sort_book, R.drawable.sort_esercise, R.drawable.sort_life, 16 | R.drawable.sort_phone, R.drawable.sort_computer}; 17 | 18 | private static List tradeTagList; 19 | 20 | public static List getTradeTag() { 21 | tradeTagList = new ArrayList<>(); 22 | for (int i = 0; i < nameList.length; i++) { 23 | TradeTag newTradeTag = new TradeTag(); 24 | newTradeTag.setRId(nameId[i]); 25 | newTradeTag.setName(nameList[i]); 26 | tradeTagList.add(newTradeTag); 27 | } 28 | return tradeTagList; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-hdpi/ic_empty.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-hdpi/ic_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/sort_book.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-hdpi/sort_book.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/sort_computer.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-hdpi/sort_computer.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/sort_esercise.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-hdpi/sort_esercise.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/sort_life.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-hdpi/sort_life.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/sort_phone.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-hdpi/sort_phone.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-v21/ic_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_menu_camera.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_menu_gallery.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_menu_manage.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_menu_send.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_menu_share.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_menu_slideshow.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v21/ic_small_cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-v21/ic_small_cancel.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_action_navigation_chevron_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-xhdpi/ic_action_navigation_chevron_left.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-xhdpi/ic_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/main_bottom_wish.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-xhdpi/main_bottom_wish.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-xxhdpi/ic_arrow_left.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-xxhdpi/ic_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_send_msg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-xxhdpi/ic_send_msg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_submit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-xxhdpi/ic_submit.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-xxhdpi/icon_placeholder.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/trade_add_img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-xxhdpi/trade_add_img.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/phone_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable-xxxhdpi/phone_splash.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_pic_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/circle_pic_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_pic_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/divider_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/ic_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_plus_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/ic_plus_black.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_plus_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/ic_plus_white.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_register.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/ic_register.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_right_enter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/ic_right_enter.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/ic_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/ic_search_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search_cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/ic_search_cancel.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_small_cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/ic_small_cancel.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_about.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_author.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_author.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_bottom_find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_bottom_find.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_bottom_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_bottom_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_bottom_msg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_bottom_msg.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_bottom_trade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_bottom_trade.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_bought.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_bought.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_boy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_boy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_buying.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_buying.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_exit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_exit.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_girl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_girl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_like.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_notice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_notice.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_person.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_person.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_selling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_selling.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_setting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_share.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/main_sold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/main_sold.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/msg_pic_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/search_cursor.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/side_nav_bar.xml: -------------------------------------------------------------------------------- 1 | 3 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/sort_pic_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/splash_loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/splash_loading.gif -------------------------------------------------------------------------------- /app/src/main/res/drawable/square_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/square_default.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/square_pic_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/square_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/square_press.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/trade_tag_detail_next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/drawable/trade_tag_detail_next.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/trade_tag_search_cursor.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/layout/about_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 19 | 20 | 29 | 38 | 39 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /app/src/main/res/layout/drawer_trade_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 19 | 20 | 29 | 38 | 39 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /app/src/main/res/layout/drawer_trade_bought_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 17 | 18 | 23 | 24 | 25 | 29 | 30 | 37 | 38 | 45 | 46 | 53 | 54 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /app/src/main/res/layout/drawer_trade_content.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 18 | 19 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/drawer_trade_sold_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | 17 | 18 | 23 | 24 | 25 | 29 | 30 | 37 | 38 | 45 | 46 | 53 | 54 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /app/src/main/res/layout/find_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 18 | 22 | 23 | 24 | 25 | 26 | 39 | -------------------------------------------------------------------------------- /app/src/main/res/layout/login_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/login_login_view.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/login_register_view.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/main_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 15 | 19 | 20 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/main_bar.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 19 | 24 | 33 | 34 | 39 | 40 | 46 | 47 | 48 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /app/src/main/res/layout/main_content.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 18 | 19 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/layout/main_nav_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 22 | 23 | 30 | 31 | 40 | 41 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /app/src/main/res/layout/message_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/more_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | 19 | 20 | 21 | 22 | 35 | 36 | -------------------------------------------------------------------------------- /app/src/main/res/layout/msg_detail_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 19 | 20 | 29 | 30 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/res/layout/msg_detail_content.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 27 | 28 | 37 | 38 | 44 | 45 | 46 | 47 | 51 | 52 | 67 | 68 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /app/src/main/res/layout/notice_add_content.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 25 | 26 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /app/src/main/res/layout/notice_detail_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 19 | 20 | 29 | 38 | 39 | 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /app/src/main/res/layout/notice_my_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 14 | 15 | 19 | 20 | 29 | 38 | 39 | 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /app/src/main/res/layout/notice_my_content.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/sort_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 19 | 20 | 24 | 25 | 26 | 27 | 28 | 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/res/layout/sort_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 13 | 19 | 23 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/res/layout/splash_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/test_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/test_msg_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 15 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/layout/test_msg_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 13 | 14 | 26 | 27 | 39 | 40 | 41 | 42 | 58 | 59 | 63 | 64 | -------------------------------------------------------------------------------- /app/src/main/res/layout/trade_tag_detail_activity.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 18 | 19 | 28 | 37 | 38 | 45 | 46 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /app/src/main/res/layout/trade_tag_detail_content.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 19 | 20 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/menu/main.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/main_activity_drawer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 11 | 15 | 19 | 23 | 27 | 31 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 45 | 49 | 53 | 57 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /app/src/main/res/menu/search_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/arrays.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Android 5 | 风扇 6 | 充电器 7 | 耳机 8 | 笔记本 9 | 键盘 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | #ffffff 6 | #9e9e9e 7 | #000000 8 | 9 | 10 | #e0e0e0 11 | #000000 12 | #ffffff 13 | #ffffff 14 | #000000 15 | #424242 16 | 17 | #fafafa 18 | #9e9e9e 19 | #FF4081 20 | 21 | #fafafa 22 | #000000 23 | #aaaaaa 24 | #666666 25 | #333333 26 | #eeeeee 27 | 28 | #e6e6e6 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | 16dp 7 | 116dp 8 | 16dp 9 | 10 | 11 | 12 | 10sp 13 | 16sp 14 | 18sp 15 | 20sp 16 | 22sp 17 | 18 | 19 | 20sp 20 | 18sp 21 | 16sp 22 | 20sp 23 | 14sp 24 | 25 | 56dp 26 | 34dp 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/values/drawables.xml: -------------------------------------------------------------------------------- 1 | 2 | @android:drawable/ic_menu_camera 3 | @android:drawable/ic_menu_gallery 4 | @android:drawable/ic_menu_slideshow 5 | @android:drawable/ic_menu_manage 6 | @android:drawable/ic_menu_share 7 | @android:drawable/ic_menu_send 8 | 9 | -------------------------------------------------------------------------------- /app/src/test/java/com/peter/schoolmarket/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.peter.schoolmarket; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() throws Exception { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:2.2.0' 9 | //添加realm插件 10 | classpath "io.realm:realm-gradle-plugin:2.2.1" 11 | //dagger2 12 | classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //添加apt 13 | 14 | // NOTE: Do not place your application dependencies here; they belong 15 | // in the individual module build.gradle files 16 | } 17 | } 18 | 19 | allprojects { 20 | repositories { 21 | maven { 22 | url "https://jitpack.io" 23 | } 24 | jcenter() 25 | } 26 | } 27 | 28 | task clean(type: Delete) { 29 | delete rootProject.buildDir 30 | } 31 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | 14 | # When configured, Gradle will run in incubating parallel mode. 15 | # This option should only be used with decoupled projects. More details, visit 16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 17 | # org.gradle.parallel=true 18 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenbd1001/SchoolMarket/31629cec56d006b411c082a7a5b378223e0bca9f/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Mon Dec 28 10:00:20 PST 2015 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip 7 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | --------------------------------------------------------------------------------