├── .gitignore ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro ├── src │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── example │ │ │ └── zane │ │ │ └── bookmanager │ │ │ └── ApplicationTest.java │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ │ └── litepal.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── zane │ │ │ │ └── bookmanager │ │ │ │ ├── app │ │ │ │ └── MyApplication.java │ │ │ │ ├── config │ │ │ │ ├── DoubanAPI.java │ │ │ │ ├── FirConfig.java │ │ │ │ └── RetrofitError.java │ │ │ │ ├── inject │ │ │ │ ├── component │ │ │ │ │ ├── ActivityComponent.java │ │ │ │ │ ├── ApplicationComponent.java │ │ │ │ │ └── FragmentComponent.java │ │ │ │ ├── module │ │ │ │ │ ├── ActivityModule.java │ │ │ │ │ ├── ApplicationModule.java │ │ │ │ │ ├── DoubanBookModule.java │ │ │ │ │ └── FragmentModule.java │ │ │ │ ├── qualifier │ │ │ │ │ └── ContextType.java │ │ │ │ └── scope │ │ │ │ │ ├── ActivityLife.java │ │ │ │ │ └── FragmentLife.java │ │ │ │ ├── model │ │ │ │ ├── bean │ │ │ │ │ ├── Book.java │ │ │ │ │ ├── Book_DB.java │ │ │ │ │ ├── Book_Read.java │ │ │ │ │ ├── Book_Recom.java │ │ │ │ │ ├── Book_Want_Read.java │ │ │ │ │ └── VersionApi.java │ │ │ │ └── data │ │ │ │ │ ├── DataManager.java │ │ │ │ │ └── remote │ │ │ │ │ ├── DoubanBookService.java │ │ │ │ │ └── DoubanRecommendBookService.java │ │ │ │ ├── presenters │ │ │ │ ├── MainActivity.java │ │ │ │ ├── activity │ │ │ │ │ ├── AboutActivity.java │ │ │ │ │ ├── AddIsbnActivity.java │ │ │ │ │ ├── BookInfoActivity.java │ │ │ │ │ ├── MyBookDetailInfoActivity.java │ │ │ │ │ ├── RecommendedBookActivity.java │ │ │ │ │ └── ZxingScannerActivity.java │ │ │ │ ├── adapter │ │ │ │ │ ├── FragmentViewPageAdapter.java │ │ │ │ │ ├── MyBookInfoAdapter.java │ │ │ │ │ ├── ReadPlaneAdapter.java │ │ │ │ │ ├── RecommendedBooklistAdapter.java │ │ │ │ │ └── WantReadAdapter.java │ │ │ │ └── fragment │ │ │ │ │ ├── AboutFragment.java │ │ │ │ │ ├── ChangePlaneDialogFragment.java │ │ │ │ │ ├── MyBookInfoFragment.java │ │ │ │ │ ├── ReadPlaneDialogFragment.java │ │ │ │ │ ├── ReadPlaneFragment.java │ │ │ │ │ ├── ReadPlaneViewPageFragment.java │ │ │ │ │ ├── RecommendedBookFragment.java │ │ │ │ │ └── TimeClockDialogFragment.java │ │ │ │ ├── utils │ │ │ │ ├── ChangeWindowsAlpha.java │ │ │ │ ├── FileUtils2.java │ │ │ │ ├── JudgeNetError.java │ │ │ │ ├── TextUtil.java │ │ │ │ ├── TimeCaluUtils.java │ │ │ │ └── VersionCheck.java │ │ │ │ └── view │ │ │ │ ├── AboutActivityView.java │ │ │ │ ├── AddIsbnView.java │ │ │ │ ├── BookInfoView.java │ │ │ │ ├── MainFragmentView.java │ │ │ │ ├── MainView.java │ │ │ │ ├── MyBookDetailInfoView.java │ │ │ │ ├── MyBookInfoTopViewHolder.java │ │ │ │ ├── MyBookInfoView.java │ │ │ │ ├── MyBookinfoViewHolder.java │ │ │ │ ├── ReadPlaneView.java │ │ │ │ ├── ReadPlaneViewHolder.java │ │ │ │ ├── ReadPlaneViewPageView.java │ │ │ │ ├── RecommendedBookActivityView.java │ │ │ │ ├── RecommendedBookView.java │ │ │ │ ├── RecommendedBookViewHolder.java │ │ │ │ ├── WantReadViewHolder.java │ │ │ │ └── WantReadViewpageView.java │ │ └── res │ │ │ ├── anim │ │ │ └── image_in.xml │ │ │ ├── drawable-v21 │ │ │ ├── ic_menu_camera.xml │ │ │ ├── ic_menu_gallery.xml │ │ │ ├── ic_menu_manage.xml │ │ │ ├── ic_menu_send.xml │ │ │ ├── ic_menu_share.xml │ │ │ └── ic_menu_slideshow.xml │ │ │ ├── drawable │ │ │ ├── check.png │ │ │ ├── check_choose_bg.xml │ │ │ ├── check_delet_bg.xml │ │ │ ├── checkbook_edittext_bg.xml │ │ │ ├── choose.png │ │ │ ├── choose_item_bg.xml │ │ │ ├── choosedelet.png │ │ │ ├── ic_launcher.png │ │ │ ├── select.xml │ │ │ ├── side_nav_bar.xml │ │ │ ├── star.png │ │ │ └── toolbar_image_background.xml │ │ │ ├── layout │ │ │ ├── activity_about_layout.xml │ │ │ ├── activity_addisbn_layout.xml │ │ │ ├── activity_bookinfo_layout.xml │ │ │ ├── activity_main.xml │ │ │ ├── activity_mybookdetailinfo_layout.xml │ │ │ ├── activity_recommended_layout.xml │ │ │ ├── app_bar_main.xml │ │ │ ├── content_main.xml │ │ │ ├── dialogfragment_changplane_layout.xml │ │ │ ├── dialogfragment_clock_layout.xml │ │ │ ├── dialogfragment_readplane_layout.xml │ │ │ ├── fragment_main_layout.xml │ │ │ ├── fragment_mybookinfo_layout.xml │ │ │ ├── fragment_popupwindows_mybookinfo.xml │ │ │ ├── fragment_readplane_layout.xml │ │ │ ├── fragment_recommendedbook_layout.xml │ │ │ ├── mybookinfo_item_layout.xml │ │ │ ├── mybookinfo_top_item_layout.xml │ │ │ ├── nav_header_main.xml │ │ │ ├── readplane_item_layout.xml │ │ │ ├── viewpager_readplane_layout.xml │ │ │ └── want_to_read_item_layout.xml │ │ │ ├── menu │ │ │ ├── activity_main_drawer.xml │ │ │ └── main.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 │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── drawables.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ │ └── xml │ │ │ └── about.xml │ └── test │ │ └── java │ │ └── com │ │ └── example │ │ └── zane │ │ └── bookmanager │ │ └── ExampleUnitTest.java └── version.properties ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io/api/android 2 | 3 | ### Android ### 4 | # Built application files 5 | *.apk 6 | *.ap_ 7 | 8 | # Files for the Dalvik VM 9 | *.dex 10 | 11 | # Java class files 12 | *.class 13 | 14 | # Generated files 15 | bin/ 16 | gen/ 17 | out/ 18 | 19 | # Gradle files 20 | .gradle/ 21 | build/ 22 | 23 | # Local configuration file (sdk path, etc) 24 | local.properties 25 | 26 | # Proguard folder generated by Eclipse 27 | proguard/ 28 | 29 | # Log Files 30 | *.log 31 | 32 | # Android Studio Navigation editor temp files 33 | .navigation/ 34 | 35 | # Android Studio captures folder 36 | captures/ 37 | 38 | # Intellij 39 | *.iml 40 | .idea 41 | 42 | # Keystore files 43 | *.jks 44 | 45 | ### Android Patch ### 46 | gen-external-apklibs 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # BookManager 2 | 个人练手项目:图书管理,阅读计划类型app by android。(Rxjava, Retrofit2, dagger2, EasyMVP, Datamanager, MD设计) 3 | 4 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply plugin: 'com.neenbedankt.android-apt' 3 | 4 | 5 | android { 6 | compileSdkVersion 23 7 | buildToolsVersion "23.0.2" 8 | def versionPropsFile = file('version.properties') 9 | 10 | if (versionPropsFile.canRead()) { 11 | def Properties versionProps = new Properties() 12 | 13 | versionProps.load(new FileInputStream(versionPropsFile)) 14 | 15 | def code = versionProps['VERSION_CODE'].toInteger() + 1 16 | 17 | versionProps['VERSION_CODE']=code.toString() 18 | versionProps.store(versionPropsFile.newWriter(), null) 19 | 20 | defaultConfig { 21 | versionCode code 22 | versionName "1.7.0" 23 | minSdkVersion 15 24 | targetSdkVersion 23 25 | } 26 | } 27 | else { 28 | throw new GradleException("Could not read version.properties!") 29 | } 30 | 31 | buildTypes { 32 | release { 33 | minifyEnabled false 34 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 35 | } 36 | } 37 | packagingOptions { 38 | exclude 'META-INF/services/javax.annotation.processing.Processor' 39 | } 40 | 41 | } 42 | 43 | dependencies { 44 | final RX_VERSION = '1.1.0' 45 | compile fileTree(include: ['*.jar'], dir: 'libs') 46 | testCompile 'junit:junit:4.12' 47 | compile 'com.android.support:appcompat-v7:23.1.1' 48 | compile 'com.android.support:design:23.1.1' 49 | compile 'com.squareup.okhttp3:okhttp:3.0.1' 50 | compile 'com.jude:utils:1.2.1' 51 | compile 'com.github.bumptech.glide:glide:3.6.1' 52 | compile 'com.android.support:support-v4:23.1.1' 53 | compile 'com.google.dagger:dagger:2.0.2' 54 | compile 'com.google.dagger:dagger-compiler:2.0.2' 55 | provided 'javax.annotation:jsr250-api:1.0' 56 | compile 'com.squareup.retrofit:retrofit:2.0.0-beta2' 57 | compile 'com.squareup.retrofit:converter-gson:2.0.0-beta2' 58 | compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta2' 59 | compile "io.reactivex:rxandroid:$RX_VERSION" 60 | compile "io.reactivex:rxjava:$RX_VERSION" 61 | compile 'com.github.Zane96:EasyMVP:v.1.3.1' 62 | compile 'me.dm7.barcodescanner:zxing:1.7.2' 63 | compile 'org.litepal.android:core:1.3.0' 64 | compile 'com.android.support:cardview-v7:23.1.1' 65 | compile('com.github.afollestad.material-dialogs:core:0.8.5.4@aar') { 66 | transitive = true 67 | } 68 | compile 'com.github.clans:fab:1.6.2' 69 | compile 'im.fir:fir-sdk:latest.integration@aar' 70 | } 71 | 72 | -------------------------------------------------------------------------------- /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 /Users/Zane/Library/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/example/zane/bookmanager/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 22 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 36 | 38 | 40 | 42 | 44 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /app/src/main/assets/litepal.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/app/MyApplication.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.app; 2 | 3 | import android.app.Application; 4 | 5 | import com.example.zane.bookmanager.inject.component.ApplicationComponent; 6 | import com.example.zane.bookmanager.inject.component.DaggerApplicationComponent; 7 | import com.example.zane.bookmanager.inject.module.ApplicationModule; 8 | import com.example.zane.bookmanager.inject.module.DoubanBookModule; 9 | import com.jude.utils.JUtils; 10 | 11 | import org.litepal.LitePalApplication; 12 | 13 | import im.fir.sdk.FIR; 14 | 15 | /** 16 | * Created by Zane on 16/2/14. 17 | */ 18 | public class MyApplication extends Application{ 19 | 20 | private static MyApplication application; 21 | 22 | 23 | @Override 24 | public void onCreate() { 25 | super.onCreate(); 26 | application = this; 27 | JUtils.initialize(this); 28 | LitePalApplication.initialize(this); 29 | FIR.init(this); 30 | } 31 | 32 | public ApplicationComponent getAppComponent(){ 33 | return DaggerApplicationComponent 34 | .builder() 35 | .applicationModule(new ApplicationModule(this)) 36 | .doubanBookModule(new DoubanBookModule()) 37 | .build(); 38 | } 39 | 40 | public static MyApplication getApplicationContext2(){ 41 | return application; 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/config/DoubanAPI.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.config; 2 | 3 | 4 | /** 5 | * Created by Zane on 16/2/14. 6 | */ 7 | public class DoubanAPI { 8 | 9 | public static final String bookApi = "https://api.douban.com/v2/book/isbn/"; 10 | 11 | public static final String bookRecomApi = "https://api.douban.com/v2/book/"; 12 | 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/config/FirConfig.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.config; 2 | 3 | /** 4 | * Created by Zane on 16/3/29. 5 | */ 6 | public class FirConfig { 7 | public static final String API_TOKEN = "693edb130c336a091b961d2a9e9fee9a"; 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/config/RetrofitError.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.config; 2 | 3 | /** 4 | * Created by Zane on 16/3/7. 5 | */ 6 | public class RetrofitError { 7 | public static final String NOT_FOUND = "retrofit.HttpException: HTTP 404 Not Found"; 8 | public static final String NO_NET = "java.net.UnknownHostException: Unable to resolve host \"api.douban.com\": No address associated with hostname"; 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/inject/component/ActivityComponent.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.inject.component; 2 | 3 | import android.app.Activity; 4 | 5 | import com.example.zane.bookmanager.inject.module.ActivityModule; 6 | import com.example.zane.bookmanager.inject.scope.ActivityLife; 7 | import com.example.zane.bookmanager.model.data.DataManager; 8 | import com.example.zane.bookmanager.presenters.activity.BookInfoActivity; 9 | import com.example.zane.bookmanager.presenters.MainActivity; 10 | import com.example.zane.bookmanager.presenters.activity.MyBookDetailInfoActivity; 11 | import com.example.zane.bookmanager.presenters.activity.RecommendedBookActivity; 12 | import com.example.zane.bookmanager.presenters.activity.ZxingScannerActivity; 13 | 14 | import dagger.Component; 15 | 16 | /** 17 | * Created by Zane on 16/2/14. 18 | */ 19 | @ActivityLife 20 | @Component(modules = ActivityModule.class, dependencies = ApplicationComponent.class) 21 | public interface ActivityComponent { 22 | 23 | void inject(MainActivity activity); 24 | void inject(ZxingScannerActivity activity); 25 | void inject(BookInfoActivity activity); 26 | void inject(RecommendedBookActivity activity); 27 | void inject(MyBookDetailInfoActivity activity); 28 | 29 | Activity provideActivity(); 30 | 31 | DataManager datamanger(); 32 | } 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/inject/component/ApplicationComponent.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.inject.component; 2 | 3 | import android.app.Application; 4 | import android.content.Context; 5 | 6 | import com.example.zane.bookmanager.inject.module.ApplicationModule; 7 | import com.example.zane.bookmanager.inject.module.DoubanBookModule; 8 | import com.example.zane.bookmanager.inject.qualifier.ContextType; 9 | import com.example.zane.bookmanager.model.data.DataManager; 10 | 11 | import javax.inject.Singleton; 12 | 13 | import dagger.Component; 14 | 15 | /** 16 | * Created by Zane on 16/2/14. 17 | */ 18 | @Singleton 19 | @Component(modules = {ApplicationModule.class, DoubanBookModule.class}) 20 | public interface ApplicationComponent { 21 | 22 | @ContextType("application")Context context(); 23 | 24 | DataManager datamanger(); 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/inject/component/FragmentComponent.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.inject.component; 2 | 3 | import com.example.zane.bookmanager.inject.module.FragmentModule; 4 | import com.example.zane.bookmanager.inject.scope.FragmentLife; 5 | import com.example.zane.bookmanager.presenters.fragment.MyBookInfoFragment; 6 | import com.example.zane.bookmanager.presenters.fragment.RecommendedBookFragment; 7 | 8 | import dagger.Component; 9 | 10 | /** 11 | * Created by Zane on 16/2/16. 12 | */ 13 | @FragmentLife 14 | @Component(modules = FragmentModule.class, dependencies = ActivityComponent.class) 15 | public interface FragmentComponent { 16 | 17 | void inject(MyBookInfoFragment fragment); 18 | void inject(RecommendedBookFragment fragment); 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/inject/module/ActivityModule.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.inject.module; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | 6 | import com.example.zane.bookmanager.inject.qualifier.ContextType; 7 | import com.example.zane.bookmanager.inject.scope.ActivityLife; 8 | 9 | import dagger.Module; 10 | import dagger.Provides; 11 | 12 | /** 13 | * Created by Zane on 16/2/14. 14 | */ 15 | @Module 16 | public class ActivityModule { 17 | 18 | private Activity activity; 19 | 20 | public ActivityModule(Activity activity){ 21 | this.activity = activity; 22 | } 23 | 24 | @Provides 25 | @ActivityLife 26 | Activity providesActivity(){ 27 | return activity; 28 | } 29 | 30 | @Provides 31 | @ActivityLife 32 | @ContextType("activity") 33 | Context providesContext(){ 34 | return activity; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/inject/module/ApplicationModule.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.inject.module; 2 | 3 | import android.content.Context; 4 | 5 | import com.example.zane.bookmanager.app.MyApplication; 6 | import com.example.zane.bookmanager.inject.qualifier.ContextType; 7 | 8 | import javax.inject.Singleton; 9 | 10 | import dagger.Module; 11 | import dagger.Provides; 12 | 13 | /** 14 | * Created by Zane on 16/2/14. 15 | */ 16 | @Module 17 | public class ApplicationModule { 18 | 19 | private MyApplication mApplication; 20 | 21 | public ApplicationModule(MyApplication application){ 22 | mApplication = application; 23 | } 24 | 25 | @Provides 26 | @Singleton 27 | MyApplication providesApplication(){ 28 | return mApplication; 29 | } 30 | 31 | @Provides 32 | @Singleton 33 | @ContextType("application") 34 | Context providesContext(){ 35 | return MyApplication.getApplicationContext2(); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/inject/module/DoubanBookModule.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.inject.module; 2 | 3 | import com.example.zane.bookmanager.config.DoubanAPI; 4 | import com.example.zane.bookmanager.model.data.remote.DoubanBookService; 5 | import com.example.zane.bookmanager.model.data.remote.DoubanRecommendBookService; 6 | import com.example.zane.bookmanager.utils.FileUtils2; 7 | import com.squareup.okhttp.Cache; 8 | import com.squareup.okhttp.Interceptor; 9 | import com.squareup.okhttp.OkHttpClient; 10 | import com.squareup.okhttp.Request; 11 | import com.squareup.okhttp.Response; 12 | 13 | import java.io.File; 14 | import java.io.IOException; 15 | 16 | import dagger.Module; 17 | import dagger.Provides; 18 | import retrofit.GsonConverterFactory; 19 | import retrofit.Retrofit; 20 | import retrofit.RxJavaCallAdapterFactory; 21 | 22 | /** 23 | * Created by Zane on 16/2/14. 24 | */ 25 | @Module 26 | public class DoubanBookModule { 27 | 28 | @Provides 29 | Interceptor providesIntercepter(){ 30 | return new Interceptor() { 31 | @Override 32 | public Response intercept(Chain chain) throws IOException { 33 | Request request = chain.request(); 34 | Response response = chain.proceed(request); 35 | //更改请求头 36 | String cacheControl = request.cacheControl().toString(); 37 | return response.newBuilder() 38 | .header("Cache-Control", cacheControl) 39 | .removeHeader("Pragma") 40 | .build(); 41 | } 42 | }; 43 | } 44 | 45 | @Provides 46 | Cache providesCache(){ 47 | File httpCacheFile = FileUtils2.getDiskCacheDir("response"); 48 | return new Cache(httpCacheFile, 1024 * 100 * 1024); 49 | } 50 | 51 | @Provides 52 | DoubanBookService providesDoubanBookService(Interceptor interceptor, Cache cache){ 53 | 54 | OkHttpClient client = new OkHttpClient(); 55 | client.networkInterceptors().add(interceptor); 56 | client.interceptors().add(interceptor); 57 | client.setCache(cache); 58 | 59 | 60 | Retrofit retrofit = new Retrofit.Builder() 61 | .baseUrl(DoubanAPI.bookApi) 62 | .client(client) 63 | .addConverterFactory(GsonConverterFactory.create()) 64 | .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 65 | .build(); 66 | 67 | return retrofit.create(DoubanBookService.class); 68 | 69 | } 70 | @Provides 71 | DoubanRecommendBookService providesDoubanRecommendBookService(Interceptor interceptor, Cache cache){ 72 | 73 | OkHttpClient client = new OkHttpClient(); 74 | client.networkInterceptors().add(interceptor); 75 | client.interceptors().add(interceptor); 76 | client.setCache(cache); 77 | 78 | Retrofit retrofit = new Retrofit.Builder() 79 | .baseUrl(DoubanAPI.bookRecomApi) 80 | .client(client) 81 | .addConverterFactory(GsonConverterFactory.create()) 82 | .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 83 | .build(); 84 | 85 | return retrofit.create(DoubanRecommendBookService.class); 86 | 87 | } 88 | 89 | } 90 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/inject/module/FragmentModule.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.inject.module; 2 | 3 | import dagger.Module; 4 | 5 | /** 6 | * Created by Zane on 16/2/16. 7 | */ 8 | @Module 9 | public class FragmentModule { 10 | public FragmentModule(){ 11 | 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/inject/qualifier/ContextType.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.inject.qualifier; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | import javax.inject.Qualifier; 7 | 8 | /** 9 | * Created by Zane on 16/2/14. 10 | */ 11 | @Qualifier 12 | @Retention(RetentionPolicy.RUNTIME) 13 | public @interface ContextType { 14 | String value()default "application"; 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/inject/scope/ActivityLife.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.inject.scope; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | import javax.inject.Scope; 7 | 8 | /** 9 | * Created by Zane on 16/2/14. 10 | */ 11 | @Scope 12 | @Retention(RetentionPolicy.RUNTIME) 13 | public @interface ActivityLife { 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/inject/scope/FragmentLife.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.inject.scope; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | import javax.inject.Scope; 7 | 8 | /** 9 | * Created by Zane on 16/2/16. 10 | */ 11 | @Scope 12 | @Retention(RetentionPolicy.RUNTIME) 13 | public @interface FragmentLife { 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/model/bean/Book_DB.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.model.bean; 2 | 3 | import com.example.zane.easymvp.base.IListModel; 4 | 5 | import org.litepal.crud.DataSupport; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * Created by Zane on 16/2/17. 11 | * litepal数据库操作中表对应的对象数据模型 12 | */ 13 | public class Book_DB extends DataSupport implements Serializable, IListModel{ 14 | 15 | private int id; 16 | private String subtitle; 17 | private String pubdate; 18 | private String pages; 19 | private String title; 20 | private String url; 21 | private String image; 22 | private String author_intro; 23 | private String summary; 24 | private String price; 25 | private String author; 26 | private String publisher; 27 | private String isbn13; 28 | private String tag1; 29 | private String tag2; 30 | private String tag3; 31 | //“在读”or“想读” 32 | private String readSituation; 33 | private String average; 34 | 35 | public String getAverage() { 36 | return average; 37 | } 38 | 39 | public void setAverage(String average) { 40 | this.average = average; 41 | } 42 | 43 | public String getReadSituation() { 44 | return readSituation; 45 | } 46 | 47 | public void setReadSituation(String readSituation) { 48 | this.readSituation = readSituation; 49 | } 50 | 51 | public String getTag1() { 52 | return tag1; 53 | } 54 | 55 | public void setTag1(String tag1) { 56 | this.tag1 = tag1; 57 | } 58 | 59 | public String getTag2() { 60 | return tag2; 61 | } 62 | 63 | public void setTag2(String tag2) { 64 | this.tag2 = tag2; 65 | } 66 | 67 | public String getTag3() { 68 | return tag3; 69 | } 70 | 71 | public void setTag3(String tag3) { 72 | this.tag3 = tag3; 73 | } 74 | 75 | public String getIsbn13() { 76 | return isbn13; 77 | } 78 | 79 | public void setIsbn13(String isbn13) { 80 | this.isbn13 = isbn13; 81 | } 82 | 83 | public String getPublisher() { 84 | return publisher; 85 | } 86 | 87 | public void setPublisher(String publisher) { 88 | this.publisher = publisher; 89 | } 90 | 91 | public int getId() { 92 | return id; 93 | } 94 | 95 | public void setId(int id) { 96 | this.id = id; 97 | } 98 | 99 | public String getPubdate() { 100 | return pubdate; 101 | } 102 | 103 | public void setPubdate(String pubdate) { 104 | this.pubdate = pubdate; 105 | } 106 | 107 | public String getSubtitle() { 108 | return subtitle; 109 | } 110 | 111 | public void setSubtitle(String subtitle) { 112 | this.subtitle = subtitle; 113 | } 114 | 115 | public String getPages() { 116 | return pages; 117 | } 118 | 119 | public void setPages(String pages) { 120 | this.pages = pages; 121 | } 122 | 123 | public String getTitle() { 124 | return title; 125 | } 126 | 127 | public void setTitle(String title) { 128 | this.title = title; 129 | } 130 | 131 | public String getUrl() { 132 | return url; 133 | } 134 | 135 | public void setUrl(String url) { 136 | this.url = url; 137 | } 138 | 139 | public String getImage() { 140 | return image; 141 | } 142 | 143 | public void setImage(String image) { 144 | this.image = image; 145 | } 146 | 147 | public String getAuthor_intro() { 148 | return author_intro; 149 | } 150 | 151 | public void setAuthor_intro(String author_intro) { 152 | this.author_intro = author_intro; 153 | } 154 | 155 | public String getSummary() { 156 | return summary; 157 | } 158 | 159 | public void setSummary(String summary) { 160 | this.summary = summary; 161 | } 162 | 163 | public String getPrice() { 164 | return price; 165 | } 166 | 167 | public void setPrice(String price) { 168 | this.price = price; 169 | } 170 | 171 | public String getAuthor() { 172 | return author; 173 | } 174 | 175 | public void setAuthor(String author) { 176 | this.author = author; 177 | } 178 | 179 | @Override 180 | public int getModelViewType() { 181 | return 0; 182 | } 183 | } 184 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/model/bean/Book_Read.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.model.bean; 2 | 3 | import com.example.zane.easymvp.base.IListModel; 4 | 5 | import org.litepal.crud.DataSupport; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * Created by Zane on 16/3/8. 11 | * 阅读计划存储表 12 | */ 13 | public class Book_Read extends DataSupport implements Serializable,IListModel{ 14 | 15 | private int id; 16 | private int planeDays;//计划天数 17 | private long firstDay;//第一天制定阅读计划的日子 18 | private String pages;//总页数 19 | private String readPages;//已读页数 20 | private String title; 21 | private String image; 22 | private String author; 23 | //是否读完,0表示还在读,1表示还在读 24 | private int isReaded; 25 | //在读或者想读 26 | private String readSituation; 27 | 28 | public int getId() { 29 | return id; 30 | } 31 | 32 | public void setId(int id) { 33 | this.id = id; 34 | } 35 | 36 | public int getIsReaded() { 37 | return isReaded; 38 | } 39 | 40 | public void setIsReaded(int isReaded) { 41 | this.isReaded = isReaded; 42 | } 43 | 44 | public String getReadSituation() { 45 | return readSituation; 46 | } 47 | 48 | public void setReadSituation(String readSituation) { 49 | this.readSituation = readSituation; 50 | } 51 | 52 | public String getAuthor() { 53 | return author; 54 | } 55 | 56 | public void setAuthor(String author) { 57 | this.author = author; 58 | } 59 | 60 | public String getReadPages() { 61 | return readPages; 62 | } 63 | 64 | public void setReadPages(String readPages) { 65 | this.readPages = readPages; 66 | } 67 | 68 | public int getPlaneDays() { 69 | return planeDays; 70 | } 71 | 72 | public void setPlaneDays(int planeDays) { 73 | this.planeDays = planeDays; 74 | } 75 | 76 | public long getFirstDay() { 77 | return firstDay; 78 | } 79 | 80 | public void setFirstDay(long firstDay) { 81 | this.firstDay = firstDay; 82 | } 83 | 84 | public String getPages() { 85 | return pages; 86 | } 87 | 88 | public void setPages(String pages) { 89 | this.pages = pages; 90 | } 91 | 92 | public String getTitle() { 93 | return title; 94 | } 95 | 96 | public void setTitle(String title) { 97 | this.title = title; 98 | } 99 | 100 | public String getImage() { 101 | return image; 102 | } 103 | 104 | public void setImage(String image) { 105 | this.image = image; 106 | } 107 | 108 | @Override 109 | public int getModelViewType() { 110 | return 0; 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/model/bean/Book_Want_Read.java: -------------------------------------------------------------------------------- 1 | //package com.example.zane.bookmanager.model.bean; 2 | // 3 | //import org.litepal.crud.DataSupport; 4 | // 5 | ///** 6 | // * Created by Zane on 16/3/8. 7 | // */ 8 | //public class Book_Want_Read extends DataSupport{ 9 | // 10 | // 11 | // private String title; 12 | // private String image; 13 | // private String author; 14 | // 15 | // public String getTitle() { 16 | // return title; 17 | // } 18 | // 19 | // public void setTitle(String title) { 20 | // this.title = title; 21 | // } 22 | // 23 | // public String getImage() { 24 | // return image; 25 | // } 26 | // 27 | // public void setImage(String image) { 28 | // this.image = image; 29 | // } 30 | // 31 | // public String getAuthor() { 32 | // return author; 33 | // } 34 | // 35 | // public void setAuthor(String author) { 36 | // this.author = author; 37 | // } 38 | // 39 | //} 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/model/bean/VersionApi.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.model.bean; 2 | 3 | /** 4 | * Created by Zane on 16/3/29. 5 | * 对应于fir项目的项目信息 6 | */ 7 | public class VersionApi { 8 | 9 | /** 10 | * name : BookManager 11 | * version : 376 12 | * changelog : 简单的完成了阅读计划和想读书单。下一步:添加阅读打卡提醒 13 | * updated_at : 1459063822 14 | * versionShort : 1.6.0 15 | * build : 376 16 | * installUrl : http://download.fir.im/v2/app/install/56c6cc07748aac70db00002e?download_token=94588dc954f72216f5847e6f75d4ff22 17 | * install_url : http://download.fir.im/v2/app/install/56c6cc07748aac70db00002e?download_token=94588dc954f72216f5847e6f75d4ff22 18 | * direct_install_url : http://download.fir.im/v2/app/install/56c6cc07748aac70db00002e?download_token=94588dc954f72216f5847e6f75d4ff22 19 | * update_url : http://fir.im/6z9 20 | * binary : {"fsize":3623739} 21 | */ 22 | 23 | private String name; 24 | private String version; 25 | private String changelog; 26 | private String versionShort; 27 | private String build; 28 | private String installUrl; 29 | private String install_url; 30 | private String update_url; 31 | 32 | public String getName() { 33 | return name; 34 | } 35 | 36 | public void setName(String name) { 37 | this.name = name; 38 | } 39 | 40 | public String getVersion() { 41 | return version; 42 | } 43 | 44 | public void setVersion(String version) { 45 | this.version = version; 46 | } 47 | 48 | public String getChangelog() { 49 | return changelog; 50 | } 51 | 52 | public void setChangelog(String changelog) { 53 | this.changelog = changelog; 54 | } 55 | 56 | public String getVersionShort() { 57 | return versionShort; 58 | } 59 | 60 | public void setVersionShort(String versionShort) { 61 | this.versionShort = versionShort; 62 | } 63 | 64 | public String getBuild() { 65 | return build; 66 | } 67 | 68 | public void setBuild(String build) { 69 | this.build = build; 70 | } 71 | 72 | public String getInstallUrl() { 73 | return installUrl; 74 | } 75 | 76 | public void setInstallUrl(String installUrl) { 77 | this.installUrl = installUrl; 78 | } 79 | 80 | public String getInstall_url() { 81 | return install_url; 82 | } 83 | 84 | public void setInstall_url(String install_url) { 85 | this.install_url = install_url; 86 | } 87 | 88 | public String getUpdate_url() { 89 | return update_url; 90 | } 91 | 92 | public void setUpdate_url(String update_url) { 93 | this.update_url = update_url; 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/model/data/DataManager.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.model.data; 2 | 3 | import android.content.Context; 4 | import android.text.TextUtils; 5 | 6 | import com.example.zane.bookmanager.inject.qualifier.ContextType; 7 | import com.example.zane.bookmanager.model.bean.Book; 8 | import com.example.zane.bookmanager.model.bean.Book_DB; 9 | import com.example.zane.bookmanager.model.bean.Book_Recom; 10 | import com.example.zane.bookmanager.model.data.remote.DoubanBookService; 11 | import com.example.zane.bookmanager.model.data.remote.DoubanRecommendBookService; 12 | 13 | import org.litepal.crud.DataSupport; 14 | 15 | import java.text.Collator; 16 | import java.util.ArrayList; 17 | import java.util.Collections; 18 | import java.util.HashMap; 19 | import java.util.List; 20 | import java.util.Locale; 21 | import java.util.Map; 22 | 23 | import javax.inject.Inject; 24 | import javax.inject.Singleton; 25 | 26 | import rx.Observable; 27 | import rx.functions.Action1; 28 | import rx.functions.Func1; 29 | 30 | /** 31 | * Created by Zane on 16/2/14. 32 | */ 33 | @Singleton 34 | public class DataManager { 35 | 36 | private DoubanBookService doubanBookService; 37 | private DoubanRecommendBookService doubanRecommendBookService; 38 | private Context context; 39 | 40 | @Inject 41 | public DataManager(@ContextType("application")Context context, DoubanBookService doubanBookService, DoubanRecommendBookService doubanRecommendBookService){ 42 | this.doubanBookService = doubanBookService; 43 | this.doubanRecommendBookService = doubanRecommendBookService; 44 | this.context = context; 45 | } 46 | 47 | 48 | //返回book的信息 49 | public Observable getBookInfo(String isbn){ 50 | return doubanBookService.getBookInfo(isbn); 51 | } 52 | 53 | //返回推荐书籍信息 54 | public Observable getRecomBoonInfo(String author_tag, String fields){ 55 | return doubanRecommendBookService.getRecomBookInfo(author_tag, fields); 56 | } 57 | 58 | //根据名字从数据库取出我的书单 59 | public List fetchDataByName(List myBooks){ 60 | Map maps = new HashMap<>(); 61 | List bookName = new ArrayList<>(); 62 | List books = new ArrayList<>(); 63 | 64 | myBooks = DataSupport.findAll(Book_DB.class); 65 | 66 | for (Book_DB book : myBooks) { 67 | maps.put(book.getTitle(), book); 68 | bookName.add(book.getTitle()); 69 | } 70 | 71 | Collections.sort(bookName, Collator.getInstance(Locale.CHINESE)); 72 | 73 | for (int i = 0; i < myBooks.size(); i++){ 74 | books.add(maps.get(bookName.get(i))); 75 | } 76 | 77 | return books; 78 | } 79 | 80 | //根据书名排序 81 | public List checkBookByName(List myBooks, final String book_name){ 82 | final Map maps = new HashMap<>(); 83 | final List books = new ArrayList<>(); 84 | for (int i = 0; i < book_name.length(); i++) { 85 | TextUtils.substring(book_name, 0, i + 1); 86 | final int I = i; 87 | Observable.from(myBooks) 88 | .map(new Func1() { 89 | @Override 90 | public String call(Book_DB book_db) { 91 | maps.put(book_db.getTitle(), book_db); 92 | return book_db.getTitle(); 93 | } 94 | }) 95 | .filter(new Func1() { 96 | @Override 97 | public Boolean call(String s) { 98 | String n = ""; 99 | for (int j = 0; j < s.length() - I; j++) { 100 | n = TextUtils.substring(s, j, I + j + 1); 101 | if (n.equals(book_name)) { 102 | break; 103 | } 104 | } 105 | return n.equals(book_name); 106 | } 107 | }) 108 | .map(new Func1() { 109 | @Override 110 | public Book_DB call(String s) { 111 | return maps.get(s); 112 | } 113 | }) 114 | .subscribe(new Action1() { 115 | @Override 116 | public void call(Book_DB book_db) { 117 | books.add(book_db); 118 | } 119 | }); 120 | } 121 | 122 | return books; 123 | } 124 | 125 | //根据作者名字来获取数据库书籍信息 126 | public List checkBookByAuthor(List myBooks, final String book_name){ 127 | final Map maps = new HashMap<>(); 128 | final List books = new ArrayList<>(); 129 | for (int i = 0; i < book_name.length(); i++) { 130 | TextUtils.substring(book_name, 0, i + 1); 131 | final int I = i; 132 | Observable.from(myBooks) 133 | .map(new Func1() { 134 | @Override 135 | public String call(Book_DB book_db) { 136 | maps.put(book_db.getAuthor(), book_db); 137 | return book_db.getAuthor(); 138 | } 139 | }) 140 | .filter(new Func1() { 141 | @Override 142 | public Boolean call(String s) { 143 | String n = ""; 144 | for (int j = 0; j < s.length() - I; j++) { 145 | n = TextUtils.substring(s, j, I + j + 1); 146 | if (n.equals(book_name)) { 147 | break; 148 | } 149 | } 150 | return n.equals(book_name); 151 | } 152 | }) 153 | .map(new Func1() { 154 | @Override 155 | public Book_DB call(String s) { 156 | return maps.get(s); 157 | } 158 | }) 159 | .subscribe(new Action1() { 160 | @Override 161 | public void call(Book_DB book_db) { 162 | books.add(book_db); 163 | } 164 | }); 165 | 166 | } 167 | 168 | return books; 169 | } 170 | 171 | public List checkBookByAll(List myBooks, final String book_name){ 172 | List books = new ArrayList<>(); 173 | for (int i = 0; i < book_name.length(); i++) { 174 | TextUtils.substring(book_name, 0, i + 1); 175 | books.addAll(checkBookByAuthor(myBooks, book_name)); 176 | books.addAll(checkBookByName(myBooks, book_name)); 177 | } 178 | return books; 179 | } 180 | } 181 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/model/data/remote/DoubanBookService.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.model.data.remote; 2 | 3 | import com.example.zane.bookmanager.model.bean.Book; 4 | import com.example.zane.bookmanager.model.bean.Book_DB; 5 | import com.example.zane.bookmanager.model.bean.Book_Recom; 6 | 7 | import retrofit.http.GET; 8 | import retrofit.http.Headers; 9 | import retrofit.http.Path; 10 | import rx.Observable; 11 | 12 | /** 13 | * Created by Zane on 16/2/14. 14 | */ 15 | public interface DoubanBookService { 16 | 17 | //根据书籍isbn号获取书籍信息 18 | @Headers("Cache-Control: public, max-age=3600") 19 | @GET("{isbn}") 20 | Observable getBookInfo(@Path("isbn") String isbn); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/model/data/remote/DoubanRecommendBookService.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.model.data.remote; 2 | 3 | import com.example.zane.bookmanager.model.bean.Book_DB; 4 | import com.example.zane.bookmanager.model.bean.Book_Recom; 5 | 6 | import java.util.List; 7 | 8 | import retrofit.http.Field; 9 | import retrofit.http.GET; 10 | import retrofit.http.Headers; 11 | import retrofit.http.Path; 12 | import retrofit.http.Query; 13 | import rx.Observable; 14 | 15 | /** 16 | * Created by Zane on 16/2/23. 17 | */ 18 | public interface DoubanRecommendBookService { 19 | 20 | //根据书籍作者名字获得相应的图书 21 | @Headers("Cache-Control: public, max-age=3600") 22 | @GET("search") 23 | Observable getRecomBookInfo(@Query("q") String q, @Query("fields") String fields); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.v4.view.GravityCompat; 6 | import android.support.v4.widget.DrawerLayout; 7 | import android.support.v4.widget.SwipeRefreshLayout; 8 | import android.support.v7.app.AppCompatActivity; 9 | import android.view.MotionEvent; 10 | import android.widget.Toast; 11 | 12 | import com.example.zane.bookmanager.R; 13 | import com.example.zane.bookmanager.app.MyApplication; 14 | import com.example.zane.bookmanager.inject.component.ActivityComponent; 15 | import com.example.zane.bookmanager.inject.component.DaggerActivityComponent; 16 | import com.example.zane.bookmanager.inject.module.ActivityModule; 17 | import com.example.zane.bookmanager.model.bean.Book; 18 | import com.example.zane.bookmanager.model.data.DataManager; 19 | import com.example.zane.bookmanager.presenters.activity.BookInfoActivity; 20 | import com.example.zane.bookmanager.presenters.fragment.MyBookInfoFragment; 21 | import com.example.zane.bookmanager.utils.JudgeNetError; 22 | import com.example.zane.bookmanager.view.MainView; 23 | import com.example.zane.easymvp.presenter.BaseActivityPresenter; 24 | import com.kermit.exutils.utils.ExUtils; 25 | 26 | import javax.inject.Inject; 27 | 28 | import rx.Observer; 29 | import rx.Subscriber; 30 | import rx.android.schedulers.AndroidSchedulers; 31 | import rx.schedulers.Schedulers; 32 | 33 | public class MainActivity extends BaseActivityPresenter { 34 | 35 | public static final int requestCode_1 = 1001; 36 | public static final int requestCode_2 = 1002; 37 | public static final String ISBN = "ISBN"; 38 | public static final String BOOK_INFO = "BOOKINFO"; 39 | public static final String TAG = "MainActivity"; 40 | private String isbn; 41 | private MyBookInfoFragment myBookInfoFragment; 42 | private ActivityComponent activityComponent; 43 | private SwipeRefreshLayout swipeRefreshLayout; 44 | 45 | @Inject 46 | DataManager datamanager; 47 | 48 | @Override 49 | public Class getRootViewClass() { 50 | return MainView.class; 51 | } 52 | 53 | @Override 54 | public void inCreat(Bundle bundle) { 55 | myBookInfoFragment = MyBookInfoFragment.newInstance(); 56 | v.init(this, myBookInfoFragment); 57 | initInject(); 58 | swipeRefreshLayout = v.get(R.id.swiperefreshlayout_main_activity); 59 | swipeRefreshLayout.setBackgroundResource(R.color.white); 60 | swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary); 61 | swipeRefreshLayout.setDistanceToTriggerSync(ExUtils.getScreenHeight()); 62 | 63 | } 64 | 65 | public void initInject(){ 66 | MyApplication app = MyApplication.getApplicationContext2(); 67 | activityComponent = DaggerActivityComponent.builder() 68 | .activityModule(new ActivityModule(this)) 69 | .applicationComponent(app.getAppComponent()) 70 | .build(); 71 | activityComponent.inject(this); 72 | } 73 | 74 | @Override 75 | public boolean onTouchEvent(MotionEvent event) { 76 | if (event.getAction() == MotionEvent.ACTION_MOVE){ 77 | v.interTouchEvent(event); 78 | } 79 | return true; 80 | } 81 | 82 | 83 | public ActivityComponent getActivityComponent(){ 84 | return activityComponent; 85 | } 86 | 87 | public void fetchData(String isbn){ 88 | datamanager.getBookInfo(isbn) 89 | .observeOn(AndroidSchedulers.mainThread()) 90 | .subscribeOn(Schedulers.io()) 91 | .subscribe(new Subscriber() { 92 | @Override 93 | public void onCompleted() { 94 | swipeRefreshLayout.setRefreshing(false); 95 | } 96 | 97 | @Override 98 | public void onError(Throwable e) { 99 | JudgeNetError.judgeWhitchNetError(e); 100 | swipeRefreshLayout.setRefreshing(false); 101 | Toast.makeText(MainActivity.this, "aaa", Toast.LENGTH_SHORT).show(); 102 | } 103 | 104 | @Override 105 | public void onNext(Book book) { 106 | swipeRefreshLayout.setRefreshing(false); 107 | Intent intent = new Intent(MainActivity.this, BookInfoActivity.class); 108 | intent.putExtra(BOOK_INFO, book); 109 | startActivity(intent); 110 | } 111 | }); 112 | } 113 | 114 | @Override 115 | protected void onActivityResult(int requestCode, int resultCode, Intent data) { 116 | if (data != null) { 117 | switch (requestCode) { 118 | case requestCode_1: 119 | isbn = data.getStringExtra(ISBN); 120 | swipeRefreshLayout.setRefreshing(true); 121 | fetchData(isbn); 122 | break; 123 | case requestCode_2: 124 | 125 | break; 126 | } 127 | }else { 128 | return; 129 | } 130 | } 131 | 132 | @Override 133 | public void inDestory() { 134 | } 135 | 136 | @Override 137 | public AppCompatActivity getContext() { 138 | return this; 139 | } 140 | 141 | @Override 142 | public void onBackPressed() { 143 | DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 144 | if (drawer.isDrawerOpen(GravityCompat.START)) { 145 | drawer.closeDrawer(GravityCompat.START); 146 | } else { 147 | super.onBackPressed(); 148 | } 149 | } 150 | 151 | // @Override 152 | // public boolean onCreateOptionsMenu(Menu menu) { 153 | // // Inflate the menu; this adds items to the action bar if it is present. 154 | // getMenuInflater().inflate(R.menu.main, menu); 155 | // return true; 156 | // } 157 | // 158 | // @Override 159 | // public boolean onOptionsItemSelected(MenuItem item) { 160 | // // Handle action bar item clicks here. The action bar will 161 | // // automatically handle clicks on the Home/Up button, so long 162 | // // as you specify a parent activity in AndroidManifest.xml. 163 | // int id = item.getItemId(); 164 | // 165 | // //noinspection SimplifiableIfStatement 166 | // if (id == R.id.action_settings) { 167 | // return true; 168 | // } 169 | // 170 | // return super.onOptionsItemSelected(item); 171 | // } 172 | 173 | } 174 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/activity/AboutActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters.activity; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.app.AppCompatActivity; 5 | 6 | import com.example.zane.bookmanager.presenters.fragment.AboutFragment; 7 | import com.example.zane.bookmanager.view.AboutActivityView; 8 | import com.example.zane.easymvp.presenter.BaseActivityPresenter; 9 | 10 | /** 11 | * Created by Zane on 16/3/29. 12 | */ 13 | public class AboutActivity extends BaseActivityPresenter{ 14 | 15 | 16 | @Override 17 | public Class getRootViewClass() { 18 | return AboutActivityView.class; 19 | } 20 | 21 | @Override 22 | public void inCreat(Bundle bundle) { 23 | v.setupToolbar(this); 24 | v.transToAboutFragment(new AboutFragment(), this); 25 | } 26 | 27 | @Override 28 | public void inDestory() { 29 | 30 | } 31 | 32 | @Override 33 | public AppCompatActivity getContext() { 34 | return this; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/activity/AddIsbnActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters.activity; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.view.View; 7 | import android.widget.Toast; 8 | 9 | import com.example.zane.bookmanager.R; 10 | import com.example.zane.bookmanager.presenters.MainActivity; 11 | import com.example.zane.bookmanager.view.AddIsbnView; 12 | import com.example.zane.easymvp.presenter.BaseActivityPresenter; 13 | 14 | /** 15 | * Created by Zane on 16/3/28. 16 | */ 17 | public class AddIsbnActivity extends BaseActivityPresenter{ 18 | 19 | private static final String TAG = "AddIsbnActivity"; 20 | public static final int resultCode = 1002; 21 | 22 | @Override 23 | public Class getRootViewClass() { 24 | return AddIsbnView.class; 25 | } 26 | 27 | @Override 28 | public void inCreat(Bundle bundle) { 29 | 30 | v.setupToolbar(); 31 | 32 | v.setOnClickListener(new View.OnClickListener() { 33 | @Override 34 | public void onClick(View v2) { 35 | if (v.getIsbn().equals("")){ 36 | Toast.makeText(AddIsbnActivity.this, "输入不能为空哦~", Toast.LENGTH_SHORT).show(); 37 | } else { 38 | Intent intent = new Intent(); 39 | intent.putExtra(MainActivity.ISBN, v.getIsbn()); 40 | setResult(resultCode, intent); 41 | finish(); 42 | } 43 | } 44 | }, R.id.button_addisbn); 45 | } 46 | 47 | @Override 48 | public void inDestory() { 49 | 50 | } 51 | 52 | @Override 53 | public AppCompatActivity getContext() { 54 | return this; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/activity/BookInfoActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters.activity; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.app.AppCompatActivity; 5 | import android.support.v7.widget.Toolbar; 6 | import android.view.View; 7 | import android.widget.Toast; 8 | 9 | import com.example.zane.bookmanager.R; 10 | import com.example.zane.bookmanager.app.MyApplication; 11 | import com.example.zane.bookmanager.inject.component.DaggerActivityComponent; 12 | import com.example.zane.bookmanager.inject.module.ActivityModule; 13 | import com.example.zane.bookmanager.model.bean.Book; 14 | import com.example.zane.bookmanager.model.bean.Book_DB; 15 | import com.example.zane.bookmanager.presenters.MainActivity; 16 | import com.example.zane.bookmanager.view.BookInfoView; 17 | import com.example.zane.easymvp.presenter.BaseActivityPresenter; 18 | import com.jude.utils.JUtils; 19 | 20 | 21 | import org.litepal.crud.DataSupport; 22 | 23 | import java.util.List; 24 | 25 | import rx.Observable; 26 | import rx.functions.Action1; 27 | 28 | /** 29 | * Created by Zane on 16/2/14. 30 | * 扫描出来的书的结果显示页面 31 | */ 32 | public class BookInfoActivity extends BaseActivityPresenter{ 33 | 34 | private Book book; 35 | private Toolbar toolbar; 36 | private boolean isAdded = false; 37 | 38 | 39 | @Override 40 | public Class getRootViewClass() { 41 | return BookInfoView.class; 42 | } 43 | 44 | @Override 45 | public void inCreat(Bundle bundle) { 46 | 47 | book = (Book)getIntent().getSerializableExtra(MainActivity.BOOK_INFO); 48 | initInject(); 49 | 50 | v.setupFabMenu(); 51 | v.setupNestScrollView(); 52 | 53 | v.setupToolbar(book.getTitle(), book.getImages().getLarge()); 54 | v.setBookInfo(book.getTitle(), book.getAuthor(), book.getPublisher(), book.getPrice()); 55 | 56 | //存储图书数据到数据库,并且保证现在是从mainactivity跳转而来 57 | v.setOnClickListener(new View.OnClickListener() { 58 | @Override 59 | public void onClick(View v2) { 60 | 61 | final StringBuilder builder = new StringBuilder(); 62 | Observable.from(book.getAuthor()) 63 | .subscribe(new Action1() { 64 | @Override 65 | public void call(String s) { 66 | builder.append(s).append(". "); 67 | } 68 | }); 69 | //当前数据库中所有的书籍,用来判断是否已经添加过这本书 70 | List books = DataSupport.findAll(Book_DB.class); 71 | for (int i = 0; i < books.size(); i++){ 72 | Book_DB book_db = books.get(i); 73 | if ((book_db.getAuthor()+book_db.getTitle()).equals(builder.toString()+book.getTitle())){ 74 | isAdded = true; 75 | break; 76 | }else { 77 | isAdded = false; 78 | } 79 | } 80 | 81 | if (isAdded) { 82 | v.closeMenu(); 83 | Toast.makeText(BookInfoActivity.this, "你已经添加过了哦~", Toast.LENGTH_SHORT).show(); 84 | } else { 85 | v.closeMenu(); 86 | Book_DB book_db = new Book_DB(); 87 | book_db.setAuthor(builder.toString()); 88 | book_db.setAuthor_intro(book.getAuthor_intro()); 89 | book_db.setImage(book.getImages().getLarge()); 90 | book_db.setPages(book.getPages()); 91 | book_db.setPrice(book.getPrice()); 92 | book_db.setPubdate(book.getPubdate()); 93 | book_db.setSubtitle(book.getSubtitle()); 94 | book_db.setSummary(book.getSummary()); 95 | book_db.setTitle(book.getTitle()); 96 | book_db.setUrl(book.getUrl()); 97 | book_db.setPublisher(book.getPublisher()); 98 | book_db.setIsbn13(book.getIsbn13()); 99 | book_db.setAverage(book.getRating().getAverage()); 100 | book_db.setReadSituation(""); 101 | if (book.getTags().size() >= 3) { 102 | book_db.setTag1(book.getTags().get(0).getName()); 103 | book_db.setTag2(book.getTags().get(1).getName()); 104 | book_db.setTag3(book.getTags().get(2).getName()); 105 | } else { 106 | switch (book.getTags().size()) { 107 | case 0: 108 | break; 109 | case 1: 110 | book_db.setTag1(book.getTags().get(0).getName()); 111 | break; 112 | case 2: 113 | book_db.setTag1(book.getTags().get(0).getName()); 114 | book_db.setTag2(book.getTags().get(1).getName()); 115 | break; 116 | } 117 | } 118 | 119 | if (book_db.save()) { 120 | JUtils.Toast("保存成功!"); 121 | finish(); 122 | } else { 123 | JUtils.Toast("保存失败!"); 124 | finish(); 125 | } 126 | } 127 | } 128 | }, R.id.fab_add_bookinfo_fragment); 129 | 130 | 131 | } 132 | 133 | public void initInject(){ 134 | MyApplication app = MyApplication.getApplicationContext2(); 135 | DaggerActivityComponent.builder() 136 | .activityModule(new ActivityModule(this)) 137 | .applicationComponent(app.getAppComponent()) 138 | .build() 139 | .inject(this); 140 | } 141 | 142 | @Override 143 | public void inDestory() { 144 | 145 | } 146 | 147 | @Override 148 | public AppCompatActivity getContext() { 149 | return this; 150 | } 151 | } 152 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/activity/RecommendedBookActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters.activity; 2 | 3 | import android.os.Bundle; 4 | import android.support.v4.view.ViewPager; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.support.v7.widget.Toolbar; 7 | import android.util.Log; 8 | import android.view.View; 9 | 10 | import com.example.zane.bookmanager.R; 11 | import com.example.zane.bookmanager.app.MyApplication; 12 | import com.example.zane.bookmanager.inject.component.ActivityComponent; 13 | import com.example.zane.bookmanager.inject.component.DaggerActivityComponent; 14 | import com.example.zane.bookmanager.inject.module.ActivityModule; 15 | import com.example.zane.bookmanager.model.bean.Book_DB; 16 | import com.example.zane.bookmanager.presenters.adapter.FragmentViewPageAdapter; 17 | import com.example.zane.bookmanager.presenters.fragment.RecommendedBookFragment; 18 | import com.example.zane.bookmanager.view.RecommendedBookActivityView; 19 | import com.example.zane.easymvp.presenter.BaseActivityPresenter; 20 | 21 | /** 22 | * Created by Zane on 16/2/23. 23 | */ 24 | public class RecommendedBookActivity extends BaseActivityPresenter{ 25 | 26 | private FragmentViewPageAdapter adapter; 27 | private Book_DB book_db; 28 | private ViewPager viewPager; 29 | private Toolbar toolbar; 30 | private ActivityComponent activityComponent; 31 | public static final String TAG = "RecommendedBookActivity"; 32 | 33 | 34 | @Override 35 | public Class getRootViewClass() { 36 | return RecommendedBookActivityView.class; 37 | } 38 | 39 | @Override 40 | public void inCreat(Bundle bundle) { 41 | initInject(); 42 | viewPager = v.get(R.id.viewpager_recommendedactivity); 43 | book_db = (Book_DB)getIntent().getSerializableExtra(MyBookDetailInfoActivity.BOOKDB); 44 | setViewPager(); 45 | v.init(this, viewPager); 46 | 47 | toolbar = v.get(R.id.toolbar_recommendedactivity); 48 | toolbar.setNavigationOnClickListener(new View.OnClickListener() { 49 | @Override 50 | public void onClick(View v) { 51 | finish(); 52 | } 53 | }); 54 | 55 | } 56 | public void initInject(){ 57 | MyApplication app = MyApplication.getApplicationContext2(); 58 | activityComponent = DaggerActivityComponent.builder() 59 | .activityModule(new ActivityModule(this)) 60 | .applicationComponent(app.getAppComponent()) 61 | .build(); 62 | activityComponent.inject(this); 63 | } 64 | 65 | public ActivityComponent getActivityComponent(){ 66 | return activityComponent; 67 | } 68 | 69 | public void setViewPager(){ 70 | adapter = new FragmentViewPageAdapter(getSupportFragmentManager()); 71 | Log.i(TAG, book_db.getAuthor()); 72 | adapter.addFragments(RecommendedBookFragment.newInstance(book_db.getAuthor(), false), "作者其他书籍"); 73 | StringBuilder stringBuilder = new StringBuilder(); 74 | stringBuilder.append(book_db.getTag1()) 75 | .append(".") 76 | .append(book_db.getTag2()) 77 | .append(".") 78 | .append(book_db.getTag3()) 79 | .append("."); 80 | adapter.addFragments(RecommendedBookFragment.newInstance(stringBuilder.toString(), true), "相关其他书籍"); 81 | viewPager.setAdapter(adapter); 82 | } 83 | 84 | @Override 85 | public void inDestory() { 86 | 87 | } 88 | 89 | @Override 90 | public AppCompatActivity getContext() { 91 | return this; 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/activity/ZxingScannerActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters.activity; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.v7.app.AppCompatActivity; 6 | 7 | import com.example.zane.bookmanager.app.MyApplication; 8 | import com.example.zane.bookmanager.presenters.MainActivity; 9 | import com.google.zxing.Result; 10 | 11 | import me.dm7.barcodescanner.zxing.ZXingScannerView; 12 | 13 | /** 14 | * Created by Zane on 16/2/14. 15 | * 条形码扫描,然后返回isbn码回去 16 | */ 17 | public class ZxingScannerActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler{ 18 | 19 | private ZXingScannerView mScannerView; 20 | public static final int resultCode = 1002; 21 | 22 | @Override 23 | protected void onCreate(Bundle savedInstanceState) { 24 | super.onCreate(savedInstanceState); 25 | mScannerView = new ZXingScannerView(MyApplication.getApplicationContext2()); 26 | setContentView(mScannerView); 27 | } 28 | 29 | @Override 30 | protected void onResume() { 31 | super.onResume(); 32 | mScannerView.setResultHandler(this); 33 | mScannerView.startCamera(); 34 | } 35 | 36 | @Override 37 | public void handleResult(Result result) { 38 | Intent intent = new Intent(); 39 | intent.putExtra(MainActivity.ISBN, result.getText()); 40 | setResult(resultCode, intent); 41 | finish(); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/adapter/FragmentViewPageAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters.adapter; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.support.v4.app.FragmentManager; 5 | import android.support.v4.app.FragmentPagerAdapter; 6 | 7 | import com.example.zane.bookmanager.presenters.fragment.ReadPlaneViewPageFragment; 8 | import com.example.zane.bookmanager.presenters.fragment.RecommendedBookFragment; 9 | 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | 13 | /** 14 | * Created by Zane on 16/2/23. 15 | * 所有fragment+viewpager的适配器,代码复用 16 | */ 17 | public class FragmentViewPageAdapter extends FragmentPagerAdapter{ 18 | 19 | private List fragments; 20 | private List readPlaneViewPageFragments; 21 | private List titles; 22 | 23 | public FragmentViewPageAdapter(FragmentManager fm) { 24 | super(fm); 25 | fragments = new ArrayList<>(); 26 | readPlaneViewPageFragments = new ArrayList<>(); 27 | titles = new ArrayList<>(); 28 | } 29 | 30 | public void addFragments(RecommendedBookFragment fragment, String title){ 31 | fragments.add(fragment); 32 | titles.add(title); 33 | } 34 | 35 | public void addReadPlaneFragments(ReadPlaneViewPageFragment fragment, String title){ 36 | readPlaneViewPageFragments.add(fragment); 37 | titles.add(title); 38 | } 39 | 40 | @Override 41 | public Fragment getItem(int position) { 42 | if (fragments.size() == 0){ 43 | return readPlaneViewPageFragments.get(position); 44 | } 45 | 46 | return fragments.get(position); 47 | } 48 | 49 | @Override 50 | public int getCount() { 51 | 52 | if (fragments.size() == 0){ 53 | return readPlaneViewPageFragments.size(); 54 | } 55 | 56 | return fragments.size(); 57 | } 58 | 59 | @Override 60 | public CharSequence getPageTitle(int position) { 61 | return titles.get(position); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/adapter/MyBookInfoAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters.adapter; 2 | 3 | import android.content.Context; 4 | import android.text.Editable; 5 | import android.text.TextWatcher; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | import android.widget.EditText; 9 | import android.widget.ImageButton; 10 | import android.widget.TextView; 11 | 12 | import com.example.zane.bookmanager.R; 13 | import com.example.zane.bookmanager.model.bean.Book_DB; 14 | import com.example.zane.bookmanager.view.MyBookInfoTopViewHolder; 15 | import com.example.zane.bookmanager.view.MyBookinfoViewHolder; 16 | import com.example.zane.easymvp.presenter.BaseListAdapterPresenter; 17 | import com.example.zane.easymvp.view.BaseListViewHolderImpl; 18 | 19 | import java.util.List; 20 | 21 | /** 22 | * Created by Zane on 16/2/18. 23 | */ 24 | public class MyBookInfoAdapter extends BaseListAdapterPresenter{ 25 | 26 | public static final int TOP_TYPE = 1166; 27 | public static final int NORMAL_TYPE = 1145; 28 | private List myBooks; 29 | private OnItemClickListener listener; 30 | private OnSortBookListener onSortBookListener; 31 | private OnCheckBookListener onCheckListener; 32 | private EditText editText_checkbook; 33 | private ImageButton checkChoose; 34 | private ImageButton checkDelet; 35 | private TextView sortByName; 36 | private TextView sortByDate; 37 | 38 | 39 | public interface OnCheckBookListener{ 40 | void onCheckBook(String writeName); 41 | void onCheckChoose(View v); 42 | } 43 | public void setOnCheckBookListener(OnCheckBookListener listener){ 44 | this.onCheckListener = listener; 45 | } 46 | 47 | public interface OnItemClickListener{ 48 | void onClick(int positon); 49 | void onLongClick(int positon, View view); 50 | } 51 | public void setOnItemClickListener(OnItemClickListener listener){ 52 | this.listener = listener; 53 | } 54 | 55 | public interface OnSortBookListener{ 56 | void onSortByName(); 57 | void onSortByDate(); 58 | } 59 | public void setOnSortBookListener(OnSortBookListener listener){ 60 | onSortBookListener = listener; 61 | } 62 | 63 | public MyBookInfoAdapter(Context mContext) { 64 | super(mContext); 65 | } 66 | 67 | public void setMyBooks(List books){ 68 | myBooks = books; 69 | } 70 | 71 | public void clear(){ 72 | myBooks.clear(); 73 | } 74 | 75 | @Override 76 | public int getItemViewType(int position) { 77 | if (position == 0){ 78 | return TOP_TYPE; 79 | } else{ 80 | return NORMAL_TYPE; 81 | } 82 | } 83 | 84 | @Override 85 | public BaseListViewHolderImpl OnCreatViewHolder(ViewGroup viewGroup, int i) { 86 | switch (i){ 87 | case TOP_TYPE: 88 | MyBookInfoTopViewHolder viewHolder = new MyBookInfoTopViewHolder(viewGroup, R.layout.mybookinfo_top_item_layout); 89 | editText_checkbook = viewHolder.getEditText_checkBook(); 90 | checkChoose = viewHolder.getCheckChoose(); 91 | checkDelet = viewHolder.getCheckDelet(); 92 | sortByDate = viewHolder.getTextView_date(); 93 | sortByName = viewHolder.getTextView_name(); 94 | return viewHolder; 95 | case NORMAL_TYPE: 96 | return new MyBookinfoViewHolder(viewGroup, R.layout.mybookinfo_item_layout); 97 | default: 98 | return new MyBookinfoViewHolder(viewGroup, R.layout.mybookinfo_item_layout); 99 | } 100 | } 101 | 102 | 103 | @Override 104 | public void OnBindViewHloder(BaseListViewHolderImpl holder, final int position) { 105 | if (position != 0){ 106 | holder.setData(myBooks.get(position-1)); 107 | 108 | holder.itemView.setOnClickListener(new View.OnClickListener() { 109 | @Override 110 | public void onClick(View v) { 111 | listener.onClick(position-1); 112 | } 113 | }); 114 | holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { 115 | @Override 116 | public boolean onLongClick(View v) { 117 | listener.onLongClick(position-1, v); 118 | return false; 119 | } 120 | }); 121 | } else { 122 | checkChoose.setOnClickListener(new View.OnClickListener() { 123 | @Override 124 | public void onClick(View v) { 125 | onCheckListener.onCheckChoose(v); 126 | } 127 | }); 128 | 129 | checkDelet.setOnClickListener(new View.OnClickListener() { 130 | @Override 131 | public void onClick(View v) { 132 | editText_checkbook.setText(""); 133 | } 134 | }); 135 | 136 | sortByDate.setOnClickListener(new View.OnClickListener() { 137 | @Override 138 | public void onClick(View v) { 139 | onSortBookListener.onSortByDate(); 140 | } 141 | }); 142 | 143 | sortByName.setOnClickListener(new View.OnClickListener() { 144 | @Override 145 | public void onClick(View v) { 146 | onSortBookListener.onSortByName(); 147 | } 148 | }); 149 | 150 | editText_checkbook.addTextChangedListener(new TextWatcher() { 151 | @Override 152 | public void beforeTextChanged(CharSequence s, int start, int count, int after) { 153 | } 154 | 155 | @Override 156 | public void onTextChanged(CharSequence s, int start, int before, int count) { 157 | onCheckListener.onCheckBook(editText_checkbook.getText().toString()); 158 | } 159 | 160 | @Override 161 | public void afterTextChanged(Editable s) { 162 | } 163 | }); 164 | } 165 | } 166 | 167 | @Override 168 | public int getItemCount() { 169 | return myBooks.size() + 1; 170 | } 171 | 172 | @Override 173 | public int setHeadNum() { 174 | return 0; 175 | } 176 | 177 | @Override 178 | public int setFootNum() { 179 | return 0; 180 | } 181 | } 182 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/adapter/ReadPlaneAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | import android.view.ViewGroup; 6 | 7 | import com.example.zane.bookmanager.R; 8 | import com.example.zane.bookmanager.model.bean.Book_Read; 9 | import com.example.zane.bookmanager.view.ReadPlaneViewHolder; 10 | import com.example.zane.bookmanager.view.WantReadViewHolder; 11 | import com.example.zane.easymvp.presenter.BaseListAdapterPresenter; 12 | import com.example.zane.easymvp.view.BaseListViewHolderImpl; 13 | 14 | import java.util.List; 15 | 16 | /** 17 | * Created by Zane on 16/3/9. 18 | */ 19 | public class ReadPlaneAdapter extends BaseListAdapterPresenter{ 20 | 21 | private List books; 22 | private List wantReadBooks; 23 | private OnItemClickListener listener; 24 | private boolean isReadingBook; 25 | 26 | public void setOnItemClickListener(OnItemClickListener listener){ 27 | this.listener = listener; 28 | } 29 | 30 | public interface OnItemClickListener{ 31 | void OnClick(int position, View view); 32 | void OnLongClick(int position, View view); 33 | } 34 | 35 | public ReadPlaneAdapter(Context mContext) { 36 | super(mContext); 37 | } 38 | 39 | public void setReadingBooks(List books){ 40 | this.books = books; 41 | isReadingBook = true; 42 | } 43 | 44 | public void setWantReadBooks(List books){ 45 | wantReadBooks = books; 46 | isReadingBook = false; 47 | } 48 | 49 | public void clear(){ 50 | books.clear(); 51 | } 52 | 53 | @Override 54 | public BaseListViewHolderImpl OnCreatViewHolder(ViewGroup viewGroup, int i) { 55 | if (isReadingBook){ 56 | return new ReadPlaneViewHolder(viewGroup, R.layout.readplane_item_layout); 57 | } else{ 58 | return new WantReadViewHolder(viewGroup, R.layout.want_to_read_item_layout); 59 | } 60 | } 61 | 62 | 63 | @Override 64 | public void OnBindViewHloder(BaseListViewHolderImpl holder, int i) { 65 | 66 | final int position = i; 67 | 68 | if (isReadingBook){ 69 | holder.setData(books.get(position)); 70 | 71 | holder.itemView.setOnClickListener(new View.OnClickListener() { 72 | @Override 73 | public void onClick(View v) { 74 | listener.OnClick(position, v); 75 | } 76 | }); 77 | 78 | holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { 79 | @Override 80 | public boolean onLongClick(View v) { 81 | listener.OnLongClick(position, v); 82 | return true; 83 | } 84 | }); 85 | 86 | } else{ 87 | holder.setData(wantReadBooks.get(position)); 88 | } 89 | } 90 | 91 | @Override 92 | public int getItemCount() { 93 | if (isReadingBook){ 94 | return books.size(); 95 | } else { 96 | return wantReadBooks.size(); 97 | } 98 | } 99 | 100 | @Override 101 | public int setHeadNum() { 102 | return 0; 103 | } 104 | 105 | @Override 106 | public int setFootNum() { 107 | return 0; 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/adapter/RecommendedBooklistAdapter.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters.adapter; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | import android.view.ViewGroup; 6 | 7 | import com.example.zane.bookmanager.R; 8 | import com.example.zane.bookmanager.model.bean.Book; 9 | import com.example.zane.bookmanager.view.RecommendedBookViewHolder; 10 | import com.example.zane.easymvp.presenter.BaseListAdapterPresenter; 11 | import com.example.zane.easymvp.view.BaseListViewHolderImpl; 12 | 13 | import java.util.ArrayList; 14 | import java.util.List; 15 | 16 | /** 17 | * Created by Zane on 16/2/23. 18 | */ 19 | public class RecommendedBooklistAdapter extends BaseListAdapterPresenter{ 20 | 21 | private List myBooks; 22 | private OnItemClickListener listener; 23 | 24 | 25 | public interface OnItemClickListener{ 26 | void onClick(int positon); 27 | void onLongClick(int positon); 28 | } 29 | 30 | public void setOnItemClickListener(OnItemClickListener listener){ 31 | this.listener = listener; 32 | } 33 | 34 | public RecommendedBooklistAdapter(Context mContext) { 35 | super(mContext); 36 | myBooks = new ArrayList<>(); 37 | } 38 | 39 | public void setMyBooks(List books){ 40 | myBooks = books; 41 | } 42 | 43 | public void clear(){ 44 | myBooks.clear(); 45 | } 46 | 47 | 48 | @Override 49 | public BaseListViewHolderImpl OnCreatViewHolder(ViewGroup viewGroup, int i) { 50 | return new RecommendedBookViewHolder(viewGroup, R.layout.mybookinfo_item_layout); 51 | } 52 | 53 | 54 | @Override 55 | public void OnBindViewHloder(BaseListViewHolderImpl holder, int i) { 56 | 57 | final int position = i; 58 | 59 | holder.setData(myBooks.get(position)); 60 | 61 | holder.itemView.setOnClickListener(new View.OnClickListener() { 62 | @Override 63 | public void onClick(View v) { 64 | listener.onClick(position); 65 | } 66 | }); 67 | 68 | holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { 69 | @Override 70 | public boolean onLongClick(View v) { 71 | listener.onLongClick(position); 72 | return true; 73 | } 74 | }); 75 | } 76 | 77 | @Override 78 | public int getItemCount() { 79 | return myBooks.size(); 80 | } 81 | 82 | @Override 83 | public int setHeadNum() { 84 | return 0; 85 | } 86 | 87 | @Override 88 | public int setFootNum() { 89 | return 0; 90 | } 91 | } -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/adapter/WantReadAdapter.java: -------------------------------------------------------------------------------- 1 | //package com.example.zane.bookmanager.presenters.adapter; 2 | // 3 | //import android.content.Context; 4 | //import android.view.View; 5 | //import android.view.ViewGroup; 6 | // 7 | //import com.example.zane.bookmanager.R; 8 | //import com.example.zane.bookmanager.model.bean.Book_Want_Read; 9 | //import com.example.zane.bookmanager.view.WantReadViewHolder; 10 | //import com.example.zane.easymvp.presenter.BaseListAdapterPresenter; 11 | //import com.example.zane.easymvp.view.BaseListViewHolderImpl; 12 | // 13 | //import java.util.List; 14 | // 15 | ///** 16 | // * Created by Zane on 16/3/21. 17 | // */ 18 | //public class WantReadAdapter extends BaseListAdapterPresenter{ 19 | // 20 | // private List books; 21 | // private OnItemClickListener listener; 22 | // 23 | // public void setOnItemClickListener(OnItemClickListener listener){ 24 | // this.listener = listener; 25 | // } 26 | // 27 | // public interface OnItemClickListener{ 28 | // void OnClick(int position); 29 | // void OnLongClick(int position); 30 | // } 31 | // 32 | // public WantReadAdapter(Context mContext) { 33 | // super(mContext); 34 | // } 35 | // 36 | // public void setBooks(List books){ 37 | // this.books = books; 38 | // } 39 | // 40 | // public void clear(){ 41 | // books.clear(); 42 | // } 43 | // 44 | // @Override 45 | // public BaseListViewHolderImpl OnCreatViewHolder(ViewGroup viewGroup, int i) { 46 | // return new WantReadViewHolder(viewGroup, R.layout.viewpager_readplane_layout); 47 | // } 48 | // 49 | // @Override 50 | // public void onBindViewHolder(BaseListViewHolderImpl holder, final int position) { 51 | // if (books != null){ 52 | // holder.setData(books.get(position)); 53 | // 54 | // holder.itemView.setOnClickListener(new View.OnClickListener() { 55 | // @Override 56 | // public void onClick(View v) { 57 | // listener.OnClick(position); 58 | // } 59 | // }); 60 | // 61 | // holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { 62 | // @Override 63 | // public boolean onLongClick(View v) { 64 | // listener.OnLongClick(position); 65 | // return true; 66 | // } 67 | // }); 68 | // } 69 | // } 70 | // 71 | // @Override 72 | // public int getItemCount() { 73 | // return books.size(); 74 | // } 75 | //} 76 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/fragment/ChangePlaneDialogFragment.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters.fragment; 2 | 3 | import android.app.AlertDialog; 4 | import android.app.Dialog; 5 | import android.app.DialogFragment; 6 | import android.content.DialogInterface; 7 | import android.os.Bundle; 8 | import android.view.Gravity; 9 | import android.view.LayoutInflater; 10 | import android.view.View; 11 | import android.view.Window; 12 | import android.widget.EditText; 13 | import android.widget.TextView; 14 | 15 | import com.example.zane.bookmanager.R; 16 | import com.example.zane.bookmanager.model.bean.Book_Read; 17 | 18 | import butterknife.Bind; 19 | import butterknife.ButterKnife; 20 | 21 | /** 22 | * Created by Zane on 16/3/23. 23 | */ 24 | public class ChangePlaneDialogFragment extends DialogFragment { 25 | 26 | @Bind(R.id.textview_planedays_changplane) 27 | TextView textviewPlanedaysChangplane; 28 | @Bind(R.id.edittext_newplane_changplane) 29 | EditText edittextNewplaneChangplane; 30 | 31 | public static final String BOOK_READ = "bookRead"; 32 | private static final String TAG = "ChangePlaneDialogFragment"; 33 | 34 | private OnPositiveClickListener listener; 35 | private Book_Read book_read; 36 | 37 | public interface OnPositiveClickListener { 38 | void onClick(String days); 39 | 40 | void onNaviClick(); 41 | } 42 | 43 | public void setOnPositiveClickListener(OnPositiveClickListener listener) { 44 | this.listener = listener; 45 | } 46 | 47 | public static ChangePlaneDialogFragment newInstance(Book_Read book_read){ 48 | ChangePlaneDialogFragment fragment = new ChangePlaneDialogFragment(); 49 | Bundle bundle = new Bundle(); 50 | bundle.putSerializable(BOOK_READ, book_read); 51 | fragment.setArguments(bundle); 52 | 53 | return fragment; 54 | } 55 | 56 | @Override 57 | public void onResume() { 58 | super.onResume(); 59 | } 60 | 61 | @Override 62 | public Dialog onCreateDialog(Bundle savedInstanceState) { 63 | AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 64 | book_read = (Book_Read)getArguments().getSerializable(BOOK_READ); 65 | 66 | LayoutInflater inflater = getActivity().getLayoutInflater(); 67 | View view = inflater.inflate(R.layout.dialogfragment_changplane_layout, null); 68 | ButterKnife.bind(this, view); 69 | 70 | textviewPlanedaysChangplane.setText(String.valueOf(book_read.getPlaneDays()) + "天"); 71 | 72 | builder.setView(view) 73 | //添加button 74 | .setPositiveButton("修改" 75 | , new DialogInterface.OnClickListener() { 76 | @Override 77 | public void onClick(DialogInterface dialog, int which) { 78 | listener.onClick(edittextNewplaneChangplane.getText().toString()); 79 | } 80 | }).setNegativeButton("取消", new DialogInterface.OnClickListener() { 81 | @Override 82 | public void onClick(DialogInterface dialog, int which) { 83 | listener.onNaviClick(); 84 | } 85 | }); 86 | 87 | return builder.create(); 88 | } 89 | 90 | 91 | @Override 92 | public void onDestroyView() { 93 | super.onDestroyView(); 94 | ButterKnife.unbind(this); 95 | } 96 | 97 | } 98 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/fragment/ReadPlaneDialogFragment.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters.fragment; 2 | 3 | import android.app.AlertDialog; 4 | import android.app.Dialog; 5 | import android.app.DialogFragment; 6 | import android.content.DialogInterface; 7 | import android.os.Bundle; 8 | import android.util.Log; 9 | import android.view.Gravity; 10 | import android.view.LayoutInflater; 11 | import android.view.View; 12 | import android.view.Window; 13 | import android.widget.EditText; 14 | 15 | import com.example.zane.bookmanager.R; 16 | 17 | import butterknife.Bind; 18 | import butterknife.ButterKnife; 19 | 20 | /** 21 | * Created by Zane on 16/3/10. 22 | */ 23 | public class ReadPlaneDialogFragment extends DialogFragment { 24 | 25 | 26 | @Bind(R.id.textview_readplane_planedays) 27 | EditText editText; 28 | 29 | private static final String TAG = "ReadPlaneDialogFragment"; 30 | 31 | private OnPositiveClickListener listener; 32 | 33 | public interface OnPositiveClickListener { 34 | void onClick(String days); 35 | 36 | void onNaviClick(); 37 | } 38 | 39 | public void setOnPositiveClickListener(OnPositiveClickListener listener) { 40 | this.listener = listener; 41 | } 42 | 43 | @Override 44 | public void onResume() { 45 | super.onResume(); 46 | // Window window = getDialog().getWindow(); 47 | // window.setLayout((int)(ExUtils.getScreenWidth() * 0.8), (int)(ExUtils.getScreenHeight() * 0.35)); 48 | // window.setGravity(Gravity.CENTER); 49 | } 50 | 51 | @Override 52 | public Dialog onCreateDialog(Bundle savedInstanceState) { 53 | AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 54 | Log.i(TAG, String.valueOf(getActivity())); 55 | LayoutInflater inflater = getActivity().getLayoutInflater(); 56 | View view = inflater.inflate(R.layout.dialogfragment_readplane_layout, null); 57 | ButterKnife.bind(this, view); 58 | //初始化控件 59 | 60 | 61 | builder.setView(view) 62 | //添加button 63 | .setPositiveButton("确定" 64 | , new DialogInterface.OnClickListener() { 65 | @Override 66 | public void onClick(DialogInterface dialog, int which) { 67 | listener.onClick(editText.getText().toString()); 68 | } 69 | }).setNegativeButton("取消", new DialogInterface.OnClickListener() { 70 | @Override 71 | public void onClick(DialogInterface dialog, int which) { 72 | listener.onNaviClick(); 73 | } 74 | }); 75 | 76 | return builder.create(); 77 | } 78 | 79 | @Override 80 | public void onDestroyView() { 81 | super.onDestroyView(); 82 | ButterKnife.unbind(this); 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/fragment/ReadPlaneFragment.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters.fragment; 2 | 3 | import android.os.Bundle; 4 | import android.support.v7.app.AppCompatActivity; 5 | import android.util.Log; 6 | import android.view.View; 7 | 8 | import com.example.zane.bookmanager.presenters.adapter.FragmentViewPageAdapter; 9 | import com.example.zane.bookmanager.view.ReadPlaneView; 10 | import com.example.zane.easymvp.presenter.BaseFragmentPresenter; 11 | 12 | /** 13 | * Created by Zane on 16/3/10. 14 | */ 15 | public class ReadPlaneFragment extends BaseFragmentPresenter{ 16 | 17 | private FragmentViewPageAdapter adapter; 18 | public static final String TAG = "ReadPlaneFragment"; 19 | 20 | @Override 21 | public Class getRootViewClass() { 22 | return ReadPlaneView.class; 23 | } 24 | 25 | @Override 26 | public AppCompatActivity getContext() { 27 | return null; 28 | } 29 | 30 | @Override 31 | public void onCreate(Bundle savedInstanceState) { 32 | super.onCreate(savedInstanceState); 33 | Log.i(TAG, "creat"); 34 | //安卓遇到的一个坑。不能返回getActivity().getSupportFragmentManager(). 35 | //因为这里是fragment里面嵌套的fragment。fuck 36 | adapter = new FragmentViewPageAdapter(this.getChildFragmentManager()); 37 | setupViewPage(); 38 | } 39 | 40 | @Override 41 | public void onViewCreated(View view, Bundle savedInstanceState) { 42 | super.onViewCreated(view, savedInstanceState); 43 | Log.i(TAG, "viewcreat"); 44 | v.init(adapter); 45 | } 46 | 47 | public void setupViewPage(){ 48 | adapter.addReadPlaneFragments(ReadPlaneViewPageFragment.newInstance(true), "阅读计划"); 49 | adapter.addReadPlaneFragments(ReadPlaneViewPageFragment.newInstance(false), "想读书单"); 50 | } 51 | 52 | @Override 53 | public void onDestroy() { 54 | super.onDestroy(); 55 | Log.i(TAG, "destory"); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/fragment/RecommendedBookFragment.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters.fragment; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.v4.widget.SwipeRefreshLayout; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.support.v7.widget.LinearLayoutManager; 8 | import android.util.Log; 9 | import android.view.View; 10 | 11 | import com.example.zane.bookmanager.R; 12 | import com.example.zane.bookmanager.app.MyApplication; 13 | import com.example.zane.bookmanager.inject.component.DaggerFragmentComponent; 14 | import com.example.zane.bookmanager.inject.module.FragmentModule; 15 | import com.example.zane.bookmanager.model.bean.Book; 16 | import com.example.zane.bookmanager.model.bean.Book_Recom; 17 | import com.example.zane.bookmanager.model.data.DataManager; 18 | import com.example.zane.bookmanager.presenters.MainActivity; 19 | import com.example.zane.bookmanager.presenters.activity.MyBookDetailInfoActivity; 20 | import com.example.zane.bookmanager.presenters.activity.RecommendedBookActivity; 21 | import com.example.zane.bookmanager.presenters.adapter.RecommendedBooklistAdapter; 22 | import com.example.zane.bookmanager.utils.JudgeNetError; 23 | import com.example.zane.bookmanager.view.RecommendedBookView; 24 | import com.example.zane.easymvp.presenter.BaseFragmentPresenter; 25 | import com.kermit.exutils.utils.ExUtils; 26 | 27 | import java.util.ArrayList; 28 | import java.util.List; 29 | 30 | import javax.inject.Inject; 31 | 32 | import rx.Observable; 33 | import rx.Subscriber; 34 | import rx.android.schedulers.AndroidSchedulers; 35 | import rx.functions.Func1; 36 | import rx.schedulers.Schedulers; 37 | 38 | 39 | /** 40 | * Created by Zane on 16/2/23. 41 | */ 42 | public class RecommendedBookFragment extends BaseFragmentPresenter{ 43 | 44 | public static final String AUTHOR_TAG = "AUTHOR_TAG"; 45 | public static final String ISBYTAGS = "ISBYTAGS"; 46 | public static final String ISBN = "ISBN"; 47 | public static final String TAG = "RecommendedBookFragment"; 48 | private RecommendedBooklistAdapter adapter; 49 | private List books_check; 50 | //为了做到代码复用,所以我需要判断现在是找作者其他书籍还是类似书籍 51 | private boolean isByTags; 52 | private String author_tag; 53 | private LinearLayoutManager linearLayoutManager; 54 | private SwipeRefreshLayout swipeRefreshLayout; 55 | 56 | @Inject 57 | DataManager dataManager; 58 | 59 | 60 | public static RecommendedBookFragment newInstance(String author_tag, boolean isByTags){ 61 | 62 | RecommendedBookFragment fragment = new RecommendedBookFragment(); 63 | 64 | Bundle bundle = new Bundle(); 65 | bundle.putSerializable(AUTHOR_TAG, author_tag); 66 | bundle.putBoolean(ISBYTAGS, isByTags); 67 | fragment.setArguments(bundle); 68 | 69 | return fragment; 70 | } 71 | 72 | 73 | @Override 74 | public Class getRootViewClass() { 75 | return RecommendedBookView.class; 76 | } 77 | 78 | @Override 79 | public AppCompatActivity getContext() { 80 | return (AppCompatActivity)getActivity(); 81 | } 82 | 83 | @Override 84 | public void onViewCreated(View view, Bundle savedInstanceState) { 85 | super.onViewCreated(view, savedInstanceState); 86 | init(); 87 | initInject(); 88 | v.setUpRecycleView(linearLayoutManager, adapter); 89 | swipeRefreshLayout = v.get(R.id.swiperefreshlayout_recommend_fragment); 90 | swipeRefreshLayout.setBackgroundResource(R.color.white); 91 | swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary); 92 | swipeRefreshLayout.setDistanceToTriggerSync(ExUtils.getScreenHeight()); 93 | 94 | adapter.setOnItemClickListener(new RecommendedBooklistAdapter.OnItemClickListener() { 95 | @Override 96 | public void onClick(int positon) { 97 | Intent intent = new Intent(getActivity(), MyBookDetailInfoActivity.class); 98 | intent.putExtra(MainActivity.TAG, TAG); 99 | intent.putExtra(ISBN, books_check.get(positon)); 100 | startActivity(intent); 101 | } 102 | 103 | @Override 104 | public void onLongClick(int positon) { 105 | 106 | } 107 | }); 108 | 109 | //根据不同的查询条件(作者或者类型)来分别组装出不同的url 110 | //like: https://api.douban.com/v2/book/search?tag=java&fields=id,title,isbn13 111 | //https://api.douban.com/v2/book/search?q=周志明&fields=id,title,isbn13,author 112 | if (isByTags){ 113 | String tags[] = author_tag.split("\\."); 114 | for (int i = 0; i < tags.length; i++){ 115 | if (tags[i] != null){ 116 | swipeRefreshLayout.setRefreshing(true); 117 | Log.i(TAG, String.valueOf(swipeRefreshLayout.isRefreshing())); 118 | fetchData(tags[i]); 119 | } 120 | } 121 | } else { 122 | String tags[] = author_tag.split("\\. "); 123 | for (int i = 0; i < tags.length; i++){ 124 | if(tags[i] != null){ 125 | swipeRefreshLayout.setRefreshing(true); 126 | fetchData(tags[i]); 127 | } 128 | } 129 | } 130 | } 131 | 132 | public void fetchData(String param){ 133 | dataManager.getRecomBoonInfo(param, "isbn13") 134 | .flatMap(new Func1>() { 135 | @Override 136 | public Observable call(Book_Recom book_recom) { 137 | return Observable.from(book_recom.getBooks()); 138 | } 139 | }) 140 | .map(new Func1() { 141 | @Override 142 | public String call(Book_Recom.BooksEntity booksEntity) { 143 | return booksEntity.getIsbn13(); 144 | } 145 | }) 146 | .flatMap(new Func1>() { 147 | @Override 148 | public Observable call(String s) { 149 | return dataManager.getBookInfo(s); 150 | } 151 | }) 152 | .observeOn(AndroidSchedulers.mainThread()) 153 | .subscribeOn(Schedulers.io()) 154 | .subscribe(new Subscriber() { 155 | @Override 156 | public void onCompleted() { 157 | adapter.setMyBooks(books_check); 158 | adapter.notifyDataSetChanged(); 159 | swipeRefreshLayout.setRefreshing(false); 160 | } 161 | 162 | @Override 163 | public void onError(Throwable e) { 164 | JudgeNetError.judgeWhitchNetError(e); 165 | swipeRefreshLayout.setRefreshing(false); 166 | } 167 | 168 | @Override 169 | public void onNext(Book book) { 170 | books_check.add(book); 171 | swipeRefreshLayout.setRefreshing(false); 172 | } 173 | }); 174 | 175 | } 176 | 177 | public void init(){ 178 | books_check = new ArrayList<>(); 179 | adapter = new RecommendedBooklistAdapter(MyApplication.getApplicationContext2()); 180 | author_tag = getArguments().getString(AUTHOR_TAG); 181 | isByTags = getArguments().getBoolean(ISBYTAGS); 182 | linearLayoutManager = new LinearLayoutManager(MyApplication.getApplicationContext2()); 183 | } 184 | 185 | public void initInject(){ 186 | RecommendedBookActivity activity = (RecommendedBookActivity)getActivity(); 187 | DaggerFragmentComponent.builder() 188 | .fragmentModule(new FragmentModule()) 189 | .activityComponent(activity.getActivityComponent()) 190 | .build() 191 | .inject(this); 192 | } 193 | 194 | 195 | @Override 196 | public void onDestroy() { 197 | super.onDestroy(); 198 | } 199 | } 200 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/presenters/fragment/TimeClockDialogFragment.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.presenters.fragment; 2 | 3 | import android.app.AlertDialog; 4 | import android.app.Dialog; 5 | import android.app.DialogFragment; 6 | import android.content.DialogInterface; 7 | import android.os.Bundle; 8 | import android.view.LayoutInflater; 9 | import android.view.View; 10 | import android.widget.EditText; 11 | import android.widget.TextView; 12 | 13 | import com.example.zane.bookmanager.R; 14 | import com.example.zane.bookmanager.model.bean.Book_Read; 15 | 16 | import butterknife.Bind; 17 | import butterknife.ButterKnife; 18 | 19 | /** 20 | * Created by Zane on 16/3/25. 21 | */ 22 | public class TimeClockDialogFragment extends DialogFragment { 23 | 24 | public static final String BOOK_READ = "bookRead"; 25 | private static final String TAG = "TimeClockDialogFragment"; 26 | 27 | @Bind(R.id.textview_readedpages_timeclock) 28 | TextView textviewReadedpagesTimeclock; 29 | @Bind(R.id.textview_progress_timeclock) 30 | TextView textviewProgressTimeclock; 31 | @Bind(R.id.edittext_newpages_timeclock) 32 | EditText edittextNewpagesTimeclock; 33 | 34 | private OnPositiveClickListener listener; 35 | private Book_Read book_read; 36 | 37 | public interface OnPositiveClickListener { 38 | void onClick(String pages); 39 | 40 | void onNaviClick(); 41 | } 42 | 43 | public void setOnPositiveClickListener(OnPositiveClickListener listener) { 44 | this.listener = listener; 45 | } 46 | 47 | public static TimeClockDialogFragment newInstance(Book_Read book_read) { 48 | TimeClockDialogFragment fragment = new TimeClockDialogFragment(); 49 | Bundle bundle = new Bundle(); 50 | bundle.putSerializable(BOOK_READ, book_read); 51 | fragment.setArguments(bundle); 52 | 53 | return fragment; 54 | } 55 | 56 | @Override 57 | public void onResume() { 58 | super.onResume(); 59 | // Window window = getDialog().getWindow(); 60 | // window.setLayout((int) (ExUtils.getScreenWidth() * 0.8), (int) (ExUtils.getScreenHeight() * 0.8)); 61 | // window.setGravity(Gravity.CENTER); 62 | } 63 | 64 | @Override 65 | public Dialog onCreateDialog(Bundle savedInstanceState) { 66 | AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 67 | book_read = (Book_Read) getArguments().getSerializable(BOOK_READ); 68 | 69 | LayoutInflater inflater = getActivity().getLayoutInflater(); 70 | View view = inflater.inflate(R.layout.dialogfragment_clock_layout, null); 71 | ButterKnife.bind(this, view); 72 | 73 | textviewReadedpagesTimeclock.setText(book_read.getReadPages()); 74 | 75 | String progress = String.valueOf((int)((Float.parseFloat(book_read.getReadPages()) / Float.parseFloat(book_read.getPages())) * 100)); 76 | textviewProgressTimeclock.setText(progress + "%"); 77 | 78 | builder.setView(view) 79 | //添加button 80 | .setPositiveButton("打卡" 81 | , new DialogInterface.OnClickListener() { 82 | @Override 83 | public void onClick(DialogInterface dialog, int which) { 84 | listener.onClick(edittextNewpagesTimeclock.getText().toString()); 85 | } 86 | }).setNegativeButton("取消", new DialogInterface.OnClickListener() { 87 | @Override 88 | public void onClick(DialogInterface dialog, int which) { 89 | listener.onNaviClick(); 90 | } 91 | }); 92 | 93 | return builder.create(); 94 | } 95 | 96 | 97 | @Override 98 | public void onDestroyView() { 99 | super.onDestroyView(); 100 | ButterKnife.unbind(this); 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/utils/ChangeWindowsAlpha.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.utils; 2 | 3 | import android.app.Activity; 4 | import android.view.WindowManager; 5 | 6 | /** 7 | * Created by Zane on 16/2/21. 8 | */ 9 | public class ChangeWindowsAlpha { 10 | public static void changeWindowsAlpha(Activity activity, float alpha){ 11 | 12 | WindowManager.LayoutParams params = activity.getWindow().getAttributes(); 13 | params.alpha = alpha; 14 | activity.getWindow().setAttributes(params); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/utils/FileUtils2.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.utils; 2 | 3 | import android.content.Context; 4 | import android.os.Environment; 5 | 6 | import com.example.zane.bookmanager.app.MyApplication; 7 | 8 | import java.io.File; 9 | 10 | /** 11 | * Created by Zane on 16/2/14. 12 | */ 13 | public class FileUtils2 { 14 | static Context mApplicationContext = MyApplication.getApplicationContext2(); 15 | 16 | public static File getDiskCacheDir(String uniqueName) { 17 | 18 | String cachePath; 19 | if(!"mounted".equals(Environment.getExternalStorageState()) && Environment.isExternalStorageRemovable()) { 20 | cachePath = mApplicationContext.getCacheDir().getPath(); 21 | } else { 22 | cachePath = mApplicationContext.getExternalCacheDir().getPath(); 23 | } 24 | 25 | return new File(cachePath + File.separator + uniqueName); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/utils/JudgeNetError.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.utils; 2 | 3 | import com.example.zane.bookmanager.config.RetrofitError; 4 | import com.jude.utils.JUtils; 5 | 6 | 7 | /** 8 | * Created by Zane on 16/3/7. 9 | */ 10 | public class JudgeNetError { 11 | private static String error; 12 | public static void judgeWhitchNetError(Throwable e){ 13 | error = String.valueOf(e); 14 | if (error.equals(RetrofitError.NOT_FOUND)){ 15 | JUtils.Toast("抱歉,未能找到这本书~"); 16 | } else if(error.equals(RetrofitError.NO_NET)){ 17 | JUtils.Toast("亲~检查您的网络设置"); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/utils/TextUtil.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.utils; 2 | 3 | /** 4 | * Created by Zane on 16/3/21. 5 | */ 6 | public class TextUtil { 7 | 8 | public static String getProcessText(String text){ 9 | StringBuilder sb = new StringBuilder(); 10 | int index = 0; 11 | sb.append(" "); 12 | for (int i = 0; i < text.length(); i++){ 13 | if (text.substring(i, i+1).equals("\n")){ 14 | String other = text; 15 | sb.append(other.substring(index, i+1)).append(" "); 16 | index = i+1; 17 | } 18 | if (i == (text.length() - 1)){ 19 | sb.append(text.substring(index, i)); 20 | } 21 | } 22 | return sb.toString(); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/utils/TimeCaluUtils.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.utils; 2 | 3 | import java.util.Calendar; 4 | 5 | /** 6 | * Created by Zane on 16/3/22. 7 | */ 8 | public class TimeCaluUtils { 9 | 10 | private static Calendar calendar_start = Calendar.getInstance(); 11 | private static Calendar calendar_now = Calendar.getInstance(); 12 | // private static Calendar calendar_day = Calendar.getInstance(); 13 | // private static Calendar calendar_month = Calendar.getInstance(); 14 | 15 | //返回现在距离开学第一天隔了多少天 16 | public static int CaluDays(long start){ 17 | 18 | calendar_start.setTimeInMillis(start); 19 | calendar_now.setTimeInMillis(System.currentTimeMillis()); 20 | 21 | return (int)((calendar_now.getTimeInMillis() - calendar_start.getTimeInMillis()) / (60 * 60 * 24 * 1000) + 1); 22 | } 23 | // 24 | // 25 | // //返回某天的日期 26 | // public static int getCurDay(int n){ 27 | // int days = n + 1; 28 | // calendar_day.setTimeInMillis(calendar_start.getTimeInMillis() + (long)days * 60 * 60 * 24 * 1000); 29 | // return calendar_day.get(Calendar.DAY_OF_MONTH); 30 | // } 31 | // 32 | // //返回当前周 33 | // public static int getCurWeek(int n){ 34 | // 35 | // int days = n; 36 | // int weekDay; 37 | // 38 | // if ((days % 7) == 0){ 39 | // weekDay = days / 7; 40 | // } else { 41 | // weekDay = (days / 7 + 1); 42 | // } 43 | // 44 | // return weekDay; 45 | // } 46 | // 47 | // //返回当前月 48 | // public static int getCurMonth(int n){ 49 | // int week_day = n; 50 | // calendar_month.setTimeInMillis(calendar_start.getTimeInMillis() + (long)week_day * 60 * 60 * 24 * 1000); 51 | // return calendar_month.get(Calendar.MONTH) + 1; 52 | // } 53 | } 54 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/utils/VersionCheck.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.utils; 2 | 3 | import android.content.Context; 4 | import android.content.DialogInterface; 5 | import android.content.Intent; 6 | import android.content.pm.PackageInfo; 7 | import android.content.pm.PackageManager; 8 | import android.net.Uri; 9 | import android.support.design.widget.Snackbar; 10 | import android.support.v7.app.AlertDialog; 11 | import android.view.View; 12 | 13 | import com.example.zane.bookmanager.app.MyApplication; 14 | import com.example.zane.bookmanager.model.bean.VersionApi; 15 | import com.jude.utils.JUtils; 16 | 17 | /** 18 | * Created by Zane on 16/3/29. 19 | */ 20 | public class VersionCheck { 21 | /** 22 | *返回当前下载app的 versioncode 23 | * @param context 24 | * @return 版本号 25 | */ 26 | private static int getVersionCode(Context context) { 27 | try { 28 | PackageManager manager = context.getPackageManager(); 29 | PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0); 30 | int version = info.versionCode; 31 | return version; 32 | } catch (Exception e) { 33 | e.printStackTrace(); 34 | return 0; 35 | } 36 | } 37 | 38 | /** 39 | * 根据fir上面的项目信息来重新判断是否需要更新版本 40 | * @param versionApi 41 | * @param context 42 | * @param view 43 | */ 44 | public static void checkVersion(VersionApi versionApi, Context context, View view){ 45 | //分别获得当前的版本号,版本名和fir目前最新的版本名和版本号 46 | int currentVersionCode = getVersionCode(MyApplication.getApplicationContext2()); 47 | String currentVersionName = JUtils.getAppVersionName(); 48 | int firVersionCode = Integer.parseInt(versionApi.getVersion()); 49 | String firVersionName = versionApi.getVersionShort(); 50 | 51 | //先判断版本号,传入activity类型的context 52 | if (currentVersionCode < firVersionCode){ 53 | showUpdateDialog(versionApi, context); 54 | } else if (currentVersionCode == firVersionCode){ 55 | if (!currentVersionName.equals(firVersionName)){ 56 | showUpdateDialog(versionApi, context); 57 | } 58 | } else { 59 | Snackbar.make(view, "已经是最新版本了~", Snackbar.LENGTH_SHORT).show(); 60 | } 61 | } 62 | 63 | public static void showUpdateDialog(final VersionApi versionApi, final Context context) { 64 | String title = "发现新版" + versionApi.getName() + "版本名:" + versionApi.getVersionShort(); 65 | 66 | new AlertDialog.Builder(context).setTitle(title) 67 | .setMessage(versionApi.getChangelog()) 68 | .setPositiveButton("下载", new DialogInterface.OnClickListener() { 69 | @Override public void onClick(DialogInterface dialog, int which) { 70 | Uri uri = Uri.parse(versionApi.getUpdate_url()); //指定网址 71 | Intent intent = new Intent(); 72 | intent.setAction(Intent.ACTION_VIEW); //指定Action 73 | intent.setData(uri); //设置Uri 74 | context.startActivity(intent); //启动Activity 75 | } 76 | }) 77 | .show(); 78 | } 79 | 80 | } 81 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/AboutActivityView.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.app.Activity; 4 | import android.support.v7.app.AppCompatActivity; 5 | import android.support.v7.widget.Toolbar; 6 | import android.view.View; 7 | import android.widget.FrameLayout; 8 | 9 | import com.example.zane.bookmanager.R; 10 | import com.example.zane.bookmanager.presenters.fragment.AboutFragment; 11 | import com.example.zane.easymvp.view.BaseViewImpl; 12 | 13 | import butterknife.Bind; 14 | 15 | /** 16 | * Created by Zane on 16/3/29. 17 | */ 18 | public class AboutActivityView extends BaseViewImpl { 19 | @Bind(R.id.toolbar_about_activity) 20 | Toolbar toolbarAboutActivity; 21 | @Bind(R.id.fragment_replace_about) 22 | FrameLayout fragmentReplaceAbout; 23 | 24 | @Override 25 | public int getRootViewId() { 26 | return R.layout.activity_about_layout; 27 | } 28 | 29 | @Override 30 | public void setActivityContext(AppCompatActivity appCompatActivity) { 31 | 32 | } 33 | 34 | public void transToAboutFragment(AboutFragment fragment, AppCompatActivity activity){ 35 | activity.getFragmentManager().beginTransaction().replace(R.id.fragment_replace_about, fragment).commit(); 36 | } 37 | 38 | public void setupToolbar(final AppCompatActivity activity){ 39 | toolbarAboutActivity.setTitle("关于"); 40 | activity.setSupportActionBar(toolbarAboutActivity); 41 | activity.getSupportActionBar().setHomeButtonEnabled(true); 42 | activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); 43 | 44 | toolbarAboutActivity.setNavigationOnClickListener(new View.OnClickListener() { 45 | @Override 46 | public void onClick(View v) { 47 | activity.finish(); 48 | } 49 | }); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/AddIsbnView.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.support.v7.widget.Toolbar; 7 | import android.view.View; 8 | import android.widget.Button; 9 | import android.widget.EditText; 10 | 11 | import com.example.zane.bookmanager.R; 12 | import com.example.zane.easymvp.view.BaseViewImpl; 13 | 14 | import butterknife.Bind; 15 | 16 | /** 17 | * Created by Zane on 16/3/28. 18 | */ 19 | public class AddIsbnView extends BaseViewImpl { 20 | 21 | 22 | @Bind(R.id.edittext_addisbn) 23 | EditText edittextAddisbn; 24 | @Bind(R.id.button_addisbn) 25 | Button buttonAddisbn; 26 | @Bind(R.id.toolbar_addisbn_activity) 27 | Toolbar toolbarAddisbnActivity; 28 | 29 | private AppCompatActivity context; 30 | 31 | @Override 32 | public int getRootViewId() { 33 | return R.layout.activity_addisbn_layout; 34 | } 35 | 36 | @Override 37 | public void setActivityContext(AppCompatActivity appCompatActivity) { 38 | context = appCompatActivity; 39 | } 40 | 41 | public String getIsbn() { 42 | return edittextAddisbn.getText().toString(); 43 | } 44 | 45 | public void setupToolbar(){ 46 | toolbarAddisbnActivity.setTitle(""); 47 | context.setSupportActionBar(toolbarAddisbnActivity); 48 | context.getSupportActionBar().setHomeButtonEnabled(true); 49 | context.getSupportActionBar().setDisplayHomeAsUpEnabled(true); 50 | 51 | toolbarAddisbnActivity.setNavigationOnClickListener(new View.OnClickListener() { 52 | @Override 53 | public void onClick(View v) { 54 | context.finish(); 55 | } 56 | }); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/BookInfoView.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.content.Context; 4 | import android.support.design.widget.AppBarLayout; 5 | import android.support.design.widget.CollapsingToolbarLayout; 6 | import android.support.v4.widget.NestedScrollView; 7 | import android.support.v7.app.AppCompatActivity; 8 | import android.support.v7.widget.Toolbar; 9 | import android.view.View; 10 | import android.widget.ImageView; 11 | import android.widget.TextView; 12 | 13 | import com.bumptech.glide.Glide; 14 | import com.bumptech.glide.load.engine.DiskCacheStrategy; 15 | import com.example.zane.bookmanager.R; 16 | import com.example.zane.bookmanager.app.MyApplication; 17 | import com.example.zane.easymvp.view.BaseViewImpl; 18 | import com.github.clans.fab.FloatingActionButton; 19 | import com.github.clans.fab.FloatingActionMenu; 20 | import com.kermit.exutils.utils.ExUtils; 21 | 22 | import java.util.List; 23 | 24 | import butterknife.Bind; 25 | import rx.Observable; 26 | import rx.functions.Action1; 27 | 28 | /** 29 | * Created by Zane on 16/2/14. 30 | */ 31 | public class BookInfoView extends BaseViewImpl { 32 | 33 | @Bind(R.id.imageview_bookinfo_activity) 34 | ImageView imageviewBookinfoActivity; 35 | @Bind(R.id.textview_bookname_bookinfoactivity) 36 | TextView textviewBooknameBookinfoactivity; 37 | @Bind(R.id.textview_authorname_bookinfoactivity) 38 | TextView textviewAuthornameBookinfoactivity; 39 | @Bind(R.id.textview_publishname_bookinfoactivity) 40 | TextView textviewPublishnameBookinfoactivity; 41 | @Bind(R.id.textview_price_bookinfoactivity) 42 | TextView textviewPriceBookinfoactivity; 43 | @Bind(R.id.toolbar_bookinfo_activity) 44 | Toolbar toolbarBookinfoActivity; 45 | @Bind(R.id.collapsing_toolbar_bookinfo) 46 | CollapsingToolbarLayout collapsingToolbarBookinfo; 47 | @Bind(R.id.appbar_bookinfo) 48 | AppBarLayout appbarBookinfo; 49 | @Bind(R.id.fab_add_bookinfo_fragment) 50 | FloatingActionButton fabAddBookinfoFragment; 51 | @Bind(R.id.fabmenu_down_bookinfo_fragment) 52 | FloatingActionMenu fabmenuDownBookinfoFragment; 53 | @Bind(R.id.nestedscrollview_bookinfo) 54 | NestedScrollView nestedscrollviewBookinfo; 55 | 56 | private AppCompatActivity context; 57 | 58 | 59 | @Override 60 | public int getRootViewId() { 61 | return R.layout.activity_bookinfo_layout; 62 | } 63 | 64 | @Override 65 | public void setActivityContext(AppCompatActivity appCompatActivity) { 66 | context = appCompatActivity; 67 | } 68 | 69 | public void setupToolbar(String title, String url) { 70 | collapsingToolbarBookinfo.setTitle(title); 71 | collapsingToolbarBookinfo.setExpandedTitleColor(context.getResources().getColor(R.color.transparent)); 72 | Glide.with(MyApplication.getApplicationContext2()) 73 | .load(url) 74 | .diskCacheStrategy(DiskCacheStrategy.ALL) 75 | .placeholder(R.mipmap.ic_launcher) 76 | .animate(R.anim.image_in) 77 | .override(ExUtils.getScreenWidth(), ExUtils.dip2px(256)) 78 | .error(R.mipmap.ic_launcher) 79 | .into(imageviewBookinfoActivity); 80 | 81 | context.setSupportActionBar(toolbarBookinfoActivity); 82 | context.getSupportActionBar().setDisplayHomeAsUpEnabled(true); 83 | 84 | toolbarBookinfoActivity.setNavigationOnClickListener(new View.OnClickListener() { 85 | @Override 86 | public void onClick(View v) { 87 | context.finish(); 88 | } 89 | }); 90 | } 91 | 92 | public void setBookInfo(String bookName, List authorName, String publishName, String price) { 93 | final StringBuilder builder = new StringBuilder(); 94 | textviewBooknameBookinfoactivity.setText(bookName); 95 | Observable.from(authorName) 96 | .subscribe(new Action1() { 97 | @Override 98 | public void call(String s) { 99 | builder.append(s).append(". "); 100 | } 101 | }); 102 | textviewAuthornameBookinfoactivity.setText(builder.toString()); 103 | textviewPublishnameBookinfoactivity.setText(publishName); 104 | textviewPriceBookinfoactivity.setText(price); 105 | } 106 | 107 | public void setupFabMenu() { 108 | fabmenuDownBookinfoFragment.setClosedOnTouchOutside(true); 109 | } 110 | 111 | public void setupNestScrollView() { 112 | nestedscrollviewBookinfo.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { 113 | @Override 114 | public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { 115 | if (scrollY > oldScrollY) { 116 | fabmenuDownBookinfoFragment.hideMenu(true); 117 | } else if (scrollY < oldScrollY) { 118 | fabmenuDownBookinfoFragment.showMenu(true); 119 | } 120 | } 121 | }); 122 | } 123 | 124 | public void closeMenu(){ 125 | fabmenuDownBookinfoFragment.close(true); 126 | } 127 | } 128 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/MainFragmentView.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.support.v7.app.AppCompatActivity; 4 | 5 | import com.example.zane.bookmanager.R; 6 | import com.example.zane.easymvp.view.BaseViewImpl; 7 | 8 | /** 9 | * Created by Zane on 16/2/16. 10 | */ 11 | public class MainFragmentView extends BaseViewImpl{ 12 | 13 | @Override 14 | public int getRootViewId() { 15 | return R.layout.fragment_main_layout; 16 | } 17 | 18 | @Override 19 | public void setActivityContext(AppCompatActivity appCompatActivity) { 20 | 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/MainView.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | 4 | import android.content.Intent; 5 | import android.support.design.widget.NavigationView; 6 | import android.support.v4.app.FragmentTransaction; 7 | import android.support.v4.view.GravityCompat; 8 | import android.support.v4.widget.DrawerLayout; 9 | import android.support.v4.widget.SwipeRefreshLayout; 10 | import android.support.v7.app.ActionBarDrawerToggle; 11 | import android.support.v7.app.AppCompatActivity; 12 | import android.support.v7.widget.Toolbar; 13 | import android.view.MenuItem; 14 | import android.view.MotionEvent; 15 | import android.widget.LinearLayout; 16 | 17 | import com.example.zane.bookmanager.R; 18 | import com.example.zane.bookmanager.presenters.activity.AboutActivity; 19 | import com.example.zane.bookmanager.presenters.fragment.MyBookInfoFragment; 20 | import com.example.zane.bookmanager.presenters.fragment.ReadPlaneFragment; 21 | import com.example.zane.easymvp.view.BaseViewImpl; 22 | 23 | import butterknife.Bind; 24 | 25 | /** 26 | * Created by Zane on 16/2/14. 27 | */ 28 | public class MainView extends BaseViewImpl implements NavigationView.OnNavigationItemSelectedListener { 29 | 30 | @Bind(R.id.toolbar) 31 | Toolbar toolbar; 32 | @Bind(R.id.nav_view) 33 | NavigationView navView; 34 | @Bind(R.id.drawer_layout) 35 | DrawerLayout drawer; 36 | @Bind(R.id.swiperefreshlayout_main_activity) 37 | SwipeRefreshLayout swipeRefreshLayout; 38 | 39 | public AppCompatActivity context; 40 | private MyBookInfoFragment fragment; 41 | private ReadPlaneFragment readPlaneFragment; 42 | 43 | 44 | @Override 45 | public int getRootViewId() { 46 | return R.layout.activity_main; 47 | } 48 | 49 | @Override 50 | public void setActivityContext(AppCompatActivity appCompatActivity) { 51 | 52 | } 53 | 54 | public void init(AppCompatActivity context, MyBookInfoFragment fragment) { 55 | 56 | this.context = context; 57 | this.fragment = fragment; 58 | readPlaneFragment = new ReadPlaneFragment(); 59 | 60 | 61 | //初始fragment 62 | FragmentTransaction transaction = context.getSupportFragmentManager().beginTransaction(); 63 | transaction.replace(R.id.fragment_replace, fragment); 64 | transaction.commit(); 65 | 66 | toolbar.setTitle("美味书架"); 67 | context.setSupportActionBar(toolbar); 68 | 69 | 70 | ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(context, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 71 | drawer.setDrawerListener(toggle); 72 | toggle.syncState(); 73 | 74 | navView.setNavigationItemSelectedListener(this); 75 | } 76 | 77 | public void transToMyBookInfoFragment() { 78 | FragmentTransaction transaction = context.getSupportFragmentManager().beginTransaction(); 79 | transaction.replace(R.id.fragment_replace, fragment); 80 | transaction.commit(); 81 | } 82 | 83 | public void transToReadPlaneFragment() { 84 | FragmentTransaction transaction = context.getSupportFragmentManager().beginTransaction(); 85 | transaction.replace(R.id.fragment_replace, readPlaneFragment); 86 | transaction.commit(); 87 | } 88 | 89 | public void interTouchEvent(MotionEvent event){ 90 | drawer.onInterceptTouchEvent(event); 91 | } 92 | 93 | // public void transToAboutFragment(){ 94 | // //这里我们不需要兼容低版本了 95 | // context.getFragmentManager().beginTransaction().replace(R.id.fragment_replace, aboutFragment).commit(); 96 | // } 97 | 98 | @Override 99 | public boolean onNavigationItemSelected(MenuItem item) { 100 | // Handle navigation view item clicks here. 101 | int id = item.getItemId(); 102 | 103 | if (id == R.id.my_all_book) { 104 | transToMyBookInfoFragment(); 105 | } else if (id == R.id.my_reading_book) { 106 | transToReadPlaneFragment(); 107 | } else if (id == R.id.nav_about) { 108 | context.startActivity(new Intent(context, AboutActivity.class)); 109 | } 110 | 111 | 112 | drawer.closeDrawer(GravityCompat.START); 113 | return true; 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/MyBookDetailInfoView.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.support.design.widget.AppBarLayout; 4 | import android.support.design.widget.CollapsingToolbarLayout; 5 | import android.support.v4.widget.NestedScrollView; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.support.v7.widget.Toolbar; 8 | import android.view.View; 9 | import android.widget.ImageView; 10 | import android.widget.TextView; 11 | 12 | import com.bumptech.glide.Glide; 13 | import com.bumptech.glide.load.engine.DiskCacheStrategy; 14 | import com.example.zane.bookmanager.R; 15 | import com.example.zane.bookmanager.app.MyApplication; 16 | import com.example.zane.easymvp.view.BaseViewImpl; 17 | import com.github.clans.fab.FloatingActionButton; 18 | import com.github.clans.fab.FloatingActionMenu; 19 | import com.kermit.exutils.utils.ExUtils; 20 | 21 | import butterknife.Bind; 22 | 23 | /** 24 | * Created by Zane on 16/2/18. 25 | */ 26 | public class MyBookDetailInfoView extends BaseViewImpl { 27 | 28 | @Bind(R.id.image_mybookdetailinfo_activity) 29 | ImageView imageviewMybookdetailActivity; 30 | @Bind(R.id.textview_bookname_mybookdetail) 31 | TextView textviewBooknameMybookdetail; 32 | @Bind(R.id.textview_authorname_mybookdetail) 33 | TextView textviewAuthornameMybookdetail; 34 | @Bind(R.id.textview_publishname_mybookdetail) 35 | TextView textviewPublishnameMybookdetail; 36 | @Bind(R.id.textview_price_mybookdetail) 37 | TextView textviewPriceMybookdetail; 38 | @Bind(R.id.textview_publishdate_mybookdetail) 39 | TextView textviewPublishdateMybookdetail; 40 | @Bind(R.id.textview_pages_mybookdetail) 41 | TextView textviewPagesMybookdetail; 42 | @Bind(R.id.textview_author_intro_mybookdetail) 43 | TextView textviewAuthorIntroMybookdetail; 44 | @Bind(R.id.textview_book_intro_mybookdetail) 45 | TextView textviewBookIntroMybookdetail; 46 | @Bind(R.id.toolbar_mybookdetailinfo_activity) 47 | Toolbar toolbarMybookdetailinfoActivity; 48 | @Bind(R.id.collapsing_toolbar) 49 | CollapsingToolbarLayout collapsingToolbar; 50 | @Bind(R.id.appbar_detail) 51 | AppBarLayout appbarDetail; 52 | @Bind(R.id.fabmenu_down_mybookinfo_fragment) 53 | FloatingActionMenu fabmenuDownMybookinfoFragment; 54 | @Bind(R.id.nestedscrollview_mydetailbook) 55 | NestedScrollView nestedscrollviewMydetailbook; 56 | @Bind(R.id.fab_checkRecommendedBook) 57 | FloatingActionButton fabCheckRecommendedBook; 58 | @Bind(R.id.fab_addto_read) 59 | FloatingActionButton fabAddtoRead; 60 | @Bind(R.id.fab_addwant_to_read) 61 | FloatingActionButton fabAddwantToRead; 62 | 63 | private FloatingActionButton fab_checkRecommendedBook; 64 | private FloatingActionButton fab_addto_read; 65 | private FloatingActionButton fab_addwant_to_read; 66 | private AppCompatActivity context; 67 | 68 | 69 | @Override 70 | public int getRootViewId() { 71 | return R.layout.activity_mybookdetailinfo_layout; 72 | } 73 | 74 | @Override 75 | public void setActivityContext(AppCompatActivity appCompatActivity) { 76 | context = appCompatActivity; 77 | } 78 | 79 | 80 | public void setupToolbar(String url, String title) { 81 | 82 | collapsingToolbar.setTitle(title); 83 | collapsingToolbar.setExpandedTitleColor(context.getResources().getColor(android.R.color.transparent)); 84 | Glide.with(MyApplication.getApplicationContext2()) 85 | .load(url) 86 | .diskCacheStrategy(DiskCacheStrategy.ALL) 87 | .placeholder(R.mipmap.ic_launcher) 88 | .animate(R.anim.image_in) 89 | .override(ExUtils.getScreenWidth(), ExUtils.dip2px(256)) 90 | .error(R.mipmap.ic_launcher) 91 | .into(imageviewMybookdetailActivity); 92 | context.setSupportActionBar(toolbarMybookdetailinfoActivity); 93 | context.getSupportActionBar().setDisplayHomeAsUpEnabled(true); 94 | 95 | toolbarMybookdetailinfoActivity.setNavigationOnClickListener(new View.OnClickListener() { 96 | @Override 97 | public void onClick(View v) { 98 | context.finish(); 99 | } 100 | }); 101 | } 102 | 103 | public void setTextviewBooknameMybookdetail(String bookName) { 104 | textviewBooknameMybookdetail.setText(bookName); 105 | } 106 | 107 | public void setTextviewAuthornameMybookdetail(String s) { 108 | textviewAuthornameMybookdetail.setText(s); 109 | } 110 | 111 | public void setTextviewPublishnameMybookdetail(String s) { 112 | textviewPublishnameMybookdetail.setText(s); 113 | } 114 | 115 | public void setTextviewPriceMybookdetail(String s) { 116 | textviewPriceMybookdetail.setText(s); 117 | } 118 | 119 | public void setTextviewPublishdateMybookdetail(String s) { 120 | textviewPublishdateMybookdetail.setText(s); 121 | } 122 | 123 | public void setTextviewPagesMybookdetail(String s) { 124 | textviewPagesMybookdetail.setText(s); 125 | } 126 | 127 | public void setTextviewAuthorIntroMybookdetail(String s) { 128 | textviewAuthorIntroMybookdetail.setText(s); 129 | } 130 | 131 | public void setTextviewBookIntroMybookdetail(String s) { 132 | textviewBookIntroMybookdetail.setText(s); 133 | } 134 | 135 | public void setupMyBookInfoFabMenuFromMainActivity() { 136 | // fabmenuDownMybookinfoFragment.setClosedOnTouchOutside(true); 137 | // fab_checkRecommendedBook = new FloatingActionButton(MyApplication.getApplicationContext2()); 138 | // fab_checkRecommendedBook.setButtonSize(FloatingActionButton.SIZE_MINI); 139 | // fab_checkRecommendedBook.setLabelText("查看相关书籍"); 140 | // fab_checkRecommendedBook.setColorNormal(R.color.fab_normal); 141 | // fab_checkRecommendedBook.setColorPressed(R.color.fab_press); 142 | // fab_checkRecommendedBook.setColorRipple(R.color.fab_ripple); 143 | // fab_checkRecommendedBook.setImageResource(R.drawable.ic_menu_send); 144 | // fabmenuDownMybookinfoFragment.addMenuButton(fab_checkRecommendedBook); 145 | // 146 | // fab_addto_read = new FloatingActionButton(MyApplication.getApplicationContext2()); 147 | // fab_addto_read.setButtonSize(FloatingActionButton.SIZE_MINI); 148 | // fab_addto_read.setLabelText("添加到阅读计划"); 149 | // fab_addto_read.setColorNormalResId(R.color.fab_press); 150 | // 151 | // fab_addto_read.setImageResource(R.drawable.ic_menu_send); 152 | // fabmenuDownMybookinfoFragment.addMenuButton(fab_addto_read); 153 | // 154 | // fab_addwant_to_read = new FloatingActionButton(MyApplication.getApplicationContext2()); 155 | // fab_addwant_to_read.setButtonSize(FloatingActionButton.SIZE_MINI); 156 | // fab_addwant_to_read.setLabelText("添加到想读书单"); 157 | // fab_addwant_to_read.setColorNormal(R.color.fab_normal); 158 | // fab_addwant_to_read.setColorPressed(R.color.fab_press); 159 | // fab_addwant_to_read.setColorRipple(R.color.fab_ripple); 160 | // fab_addwant_to_read.setImageResource(R.drawable.ic_menu_send); 161 | // fabmenuDownMybookinfoFragment.addMenuButton(fab_addwant_to_read); 162 | } 163 | 164 | public void clodeMenu() { 165 | fabmenuDownMybookinfoFragment.close(true); 166 | } 167 | 168 | public void setupNestScrollView() { 169 | nestedscrollviewMydetailbook.setOnScrollChangeListener(new NestedScrollView.OnScrollChangeListener() { 170 | @Override 171 | public void onScrollChange(NestedScrollView v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { 172 | if (scrollY > oldScrollY) { 173 | fabmenuDownMybookinfoFragment.hideMenu(true); 174 | } else if (scrollY < oldScrollY) { 175 | fabmenuDownMybookinfoFragment.showMenu(true); 176 | } 177 | } 178 | }); 179 | } 180 | 181 | //好像如果java代码添加控件的话,只能通过函数把控件暴露出去,不能用view的set方法!这点怎么解决? 182 | public FloatingActionButton getFab_checkRecommendedBook() { 183 | return fabCheckRecommendedBook; 184 | } 185 | 186 | public FloatingActionButton getFab_addto_read() { 187 | return fabAddtoRead; 188 | } 189 | 190 | public FloatingActionButton getFab_addwant_to_read() { 191 | return fabAddwantToRead; 192 | } 193 | } 194 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/MyBookInfoTopViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.media.Image; 4 | import android.view.ViewGroup; 5 | import android.widget.EditText; 6 | import android.widget.ImageButton; 7 | import android.widget.TextView; 8 | 9 | import com.example.zane.bookmanager.R; 10 | import com.example.zane.bookmanager.model.bean.Book_DB; 11 | import com.example.zane.easymvp.view.BaseListViewHolderImpl; 12 | 13 | /** 14 | * Created by Zane on 16/2/19. 15 | */ 16 | public class MyBookInfoTopViewHolder extends BaseListViewHolderImpl{ 17 | 18 | public EditText editText; 19 | public TextView textView_name; 20 | public TextView textView_date; 21 | public ImageButton checkChoose; 22 | public ImageButton checkDelet; 23 | 24 | public MyBookInfoTopViewHolder(ViewGroup parent, int res) { 25 | super(parent, res); 26 | } 27 | 28 | @Override 29 | public void initView() { 30 | editText = $(R.id.edit_checkbook); 31 | textView_date = $(R.id.sortbook_date); 32 | textView_name = $(R.id.sortbook_name); 33 | checkChoose = $(R.id.checkchoose); 34 | checkDelet = $(R.id.checkdelet); 35 | } 36 | 37 | @Override 38 | public void setData(Book_DB book_db) { 39 | } 40 | public TextView getTextView_name(){ 41 | return textView_name; 42 | } 43 | public TextView getTextView_date(){ 44 | return textView_date; 45 | } 46 | public EditText getEditText_checkBook(){ 47 | return editText; 48 | } 49 | public ImageButton getCheckChoose(){return checkChoose;} 50 | public ImageButton getCheckDelet(){ 51 | return checkDelet; 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/MyBookInfoView.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.support.v4.app.Fragment; 4 | import android.support.v4.widget.SwipeRefreshLayout; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.support.v7.widget.DefaultItemAnimator; 7 | import android.support.v7.widget.LinearLayoutManager; 8 | import android.support.v7.widget.RecyclerView; 9 | 10 | import com.example.zane.bookmanager.R; 11 | import com.example.zane.bookmanager.presenters.adapter.MyBookInfoAdapter; 12 | import com.example.zane.bookmanager.presenters.fragment.MyBookInfoFragment; 13 | import com.example.zane.easymvp.view.BaseViewImpl; 14 | import com.github.clans.fab.FloatingActionButton; 15 | import com.github.clans.fab.FloatingActionMenu; 16 | 17 | import butterknife.Bind; 18 | 19 | /** 20 | * Created by Zane on 16/2/18. 21 | */ 22 | public class MyBookInfoView extends BaseViewImpl { 23 | 24 | @Bind(R.id.recyclerview_mybookinfo_fragment) 25 | RecyclerView recyclerviewMybookinfoFragment; 26 | @Bind(R.id.fabmenu_mybookinfo_fragment) 27 | FloatingActionMenu fabmenuMybookinfoFragment; 28 | @Bind(R.id.fab_scanner_mybookinfo_fragment) 29 | FloatingActionButton fabScannerMybookinfoFragment; 30 | @Bind(R.id.fab_add_mybookinfo_fragment) 31 | FloatingActionButton fabAddMybookinfoFragment; 32 | 33 | 34 | 35 | @Override 36 | public int getRootViewId() { 37 | return R.layout.fragment_mybookinfo_layout; 38 | } 39 | 40 | @Override 41 | public void setActivityContext(AppCompatActivity appCompatActivity) { 42 | 43 | } 44 | 45 | 46 | public void initRecycleView(LinearLayoutManager manager, MyBookInfoAdapter adapter) { 47 | recyclerviewMybookinfoFragment.setLayoutManager(manager); 48 | recyclerviewMybookinfoFragment.setAdapter(adapter); 49 | recyclerviewMybookinfoFragment.setItemAnimator(new DefaultItemAnimator()); 50 | 51 | } 52 | 53 | public void showFab() { 54 | fabmenuMybookinfoFragment.showMenuButton(true); 55 | } 56 | 57 | public void hideFab() { 58 | fabmenuMybookinfoFragment.hideMenuButton(true); 59 | } 60 | 61 | public void setFabMenu() { 62 | fabmenuMybookinfoFragment.setClosedOnTouchOutside(true); 63 | } 64 | 65 | public void closeMenu() { 66 | fabmenuMybookinfoFragment.close(true); 67 | } 68 | 69 | } 70 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/MyBookinfoViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.view.View; 4 | import android.view.ViewGroup; 5 | import android.widget.ImageView; 6 | import android.widget.TextView; 7 | 8 | import com.bumptech.glide.Glide; 9 | import com.bumptech.glide.load.engine.DiskCacheStrategy; 10 | import com.example.zane.bookmanager.R; 11 | import com.example.zane.bookmanager.app.MyApplication; 12 | import com.example.zane.bookmanager.model.bean.Book; 13 | import com.example.zane.bookmanager.model.bean.Book_DB; 14 | import com.example.zane.easymvp.view.BaseListViewHolderImpl; 15 | 16 | import org.w3c.dom.Text; 17 | 18 | /** 19 | * Created by Zane on 16/2/18. 20 | */ 21 | public class MyBookinfoViewHolder extends BaseListViewHolderImpl{ 22 | 23 | private ImageView bookImage; 24 | private TextView bookName; 25 | private TextView authorName; 26 | private TextView read_situation; 27 | private TextView star; 28 | 29 | public MyBookinfoViewHolder(ViewGroup parent, int res) { 30 | super(parent, res); 31 | } 32 | 33 | @Override 34 | public void initView() { 35 | bookImage = $(R.id.item_img); 36 | bookName = $(R.id.item_bookname); 37 | authorName = $(R.id.item_authorname); 38 | read_situation = $(R.id.item_read_situation); 39 | star = $(R.id.textview_mybookinfo_star); 40 | } 41 | 42 | @Override 43 | public void setData(Book_DB book) { 44 | Glide.with(MyApplication.getApplicationContext2()) 45 | .load(book.getImage()) 46 | .fitCenter() 47 | .diskCacheStrategy(DiskCacheStrategy.ALL) 48 | .animate(R.anim.image_in) 49 | .placeholder(R.mipmap.ic_launcher) 50 | .error(R.mipmap.ic_launcher) 51 | .into(bookImage); 52 | 53 | bookName.setText(book.getTitle()); 54 | authorName.setText(book.getAuthor()); 55 | //阅读情况不为空就设置阅读情况 56 | if (book.getReadSituation() != null && book.getReadSituation() != " "){ 57 | read_situation.setText(book.getReadSituation()); 58 | } 59 | star.setText(book.getAverage()); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/ReadPlaneView.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.support.design.widget.AppBarLayout; 4 | import android.support.design.widget.TabLayout; 5 | import android.support.v4.app.FragmentPagerAdapter; 6 | import android.support.v4.view.ViewPager; 7 | import android.support.v7.app.AppCompatActivity; 8 | 9 | import com.example.zane.bookmanager.R; 10 | import com.example.zane.bookmanager.presenters.adapter.FragmentViewPageAdapter; 11 | import com.example.zane.easymvp.view.BaseViewImpl; 12 | 13 | import butterknife.Bind; 14 | 15 | /** 16 | * Created by Zane on 16/3/10. 17 | */ 18 | public class ReadPlaneView extends BaseViewImpl { 19 | 20 | @Bind(R.id.tablayout_readplane_fragment) 21 | TabLayout tablayoutReadplaneFragment; 22 | @Bind(R.id.viewpager_readplane_fragment) 23 | ViewPager viewpagerReadplaneFragment; 24 | 25 | @Override 26 | public int getRootViewId() { 27 | return R.layout.fragment_readplane_layout; 28 | } 29 | 30 | @Override 31 | public void setActivityContext(AppCompatActivity appCompatActivity) { 32 | 33 | } 34 | 35 | public void init(FragmentViewPageAdapter adapter){ 36 | viewpagerReadplaneFragment.setAdapter(adapter); 37 | tablayoutReadplaneFragment.setupWithViewPager(viewpagerReadplaneFragment); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/ReadPlaneViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.view.ViewGroup; 4 | import android.widget.ImageView; 5 | import android.widget.TextView; 6 | 7 | import com.bumptech.glide.Glide; 8 | import com.bumptech.glide.load.engine.DiskCacheStrategy; 9 | import com.example.zane.bookmanager.R; 10 | import com.example.zane.bookmanager.app.MyApplication; 11 | import com.example.zane.bookmanager.model.bean.Book_Read; 12 | import com.example.zane.bookmanager.utils.TimeCaluUtils; 13 | import com.example.zane.easymvp.view.BaseListViewHolderImpl; 14 | 15 | /** 16 | * Created by Zane on 16/3/9. 17 | */ 18 | public class ReadPlaneViewHolder extends BaseListViewHolderImpl{ 19 | 20 | private ImageView bookImage; 21 | private TextView bookName; 22 | private TextView readPages; 23 | private TextView readDays; 24 | 25 | public ReadPlaneViewHolder(ViewGroup parent, int res) { 26 | super(parent, res); 27 | } 28 | 29 | @Override 30 | public void initView() { 31 | bookImage = $(R.id.imageview_readplane); 32 | bookName = $(R.id.textview_readplane_bookname); 33 | readPages = $(R.id.textview_readplane_readpages); 34 | readDays = $(R.id.textview_readplane_readdays); 35 | } 36 | 37 | @Override 38 | public void setData(Book_Read book_read) { 39 | Glide.with(MyApplication.getApplicationContext2()) 40 | .load(book_read.getImage()) 41 | .diskCacheStrategy(DiskCacheStrategy.ALL) 42 | .placeholder(R.mipmap.ic_launcher) 43 | .error(R.mipmap.ic_launcher) 44 | .into(bookImage); 45 | bookName.setText(book_read.getTitle()); 46 | readPages.setText(book_read.getReadPages()); 47 | readDays.setText(String.valueOf(TimeCaluUtils.CaluDays(book_read.getFirstDay()))); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/ReadPlaneViewPageView.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.support.v7.app.AppCompatActivity; 4 | import android.support.v7.widget.RecyclerView; 5 | 6 | import com.example.zane.bookmanager.R; 7 | import com.example.zane.bookmanager.presenters.adapter.ReadPlaneAdapter; 8 | import com.example.zane.easymvp.view.BaseViewImpl; 9 | 10 | import butterknife.Bind; 11 | 12 | /** 13 | * Created by Zane on 16/3/10. 14 | */ 15 | public class ReadPlaneViewPageView extends BaseViewImpl { 16 | 17 | @Bind(R.id.recyclerview_readplane_fragment) 18 | RecyclerView recyclerviewReadplaneFragment; 19 | 20 | @Override 21 | public int getRootViewId() { 22 | return R.layout.viewpager_readplane_layout; 23 | } 24 | 25 | @Override 26 | public void setActivityContext(AppCompatActivity appCompatActivity) { 27 | 28 | } 29 | 30 | public void setupRecycleView(ReadPlaneAdapter adapter, RecyclerView.LayoutManager manager){ 31 | recyclerviewReadplaneFragment.setAdapter(adapter); 32 | recyclerviewReadplaneFragment.setLayoutManager(manager); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/RecommendedBookActivityView.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.support.design.widget.FloatingActionButton; 4 | import android.support.design.widget.TabLayout; 5 | import android.support.v4.view.ViewPager; 6 | import android.support.v4.widget.SwipeRefreshLayout; 7 | import android.support.v7.app.AppCompatActivity; 8 | import android.support.v7.widget.Toolbar; 9 | 10 | import com.example.zane.bookmanager.R; 11 | import com.example.zane.bookmanager.presenters.activity.RecommendedBookActivity; 12 | import com.example.zane.easymvp.view.BaseViewImpl; 13 | 14 | import butterknife.Bind; 15 | 16 | /** 17 | * Created by Zane on 16/2/23. 18 | */ 19 | public class RecommendedBookActivityView extends BaseViewImpl { 20 | 21 | @Bind(R.id.toolbar_recommendedactivity) 22 | Toolbar toolbarRecommendedactivity; 23 | @Bind(R.id.tablayout_recommendedactivity) 24 | TabLayout tablayoutRecommendedactivity; 25 | @Bind(R.id.fab) 26 | FloatingActionButton fab; 27 | 28 | @Override 29 | public void setActivityContext(AppCompatActivity appCompatActivity) { 30 | 31 | } 32 | 33 | 34 | @Override 35 | public int getRootViewId() { 36 | return R.layout.activity_recommended_layout; 37 | } 38 | 39 | public void init(RecommendedBookActivity activity, ViewPager viewPager) { 40 | activity.setSupportActionBar(toolbarRecommendedactivity); 41 | activity.getSupportActionBar().setHomeButtonEnabled(true); 42 | activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); 43 | tablayoutRecommendedactivity.setupWithViewPager(viewPager); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/RecommendedBookView.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.support.v7.app.AppCompatActivity; 4 | import android.support.v7.widget.LinearLayoutManager; 5 | import android.support.v7.widget.RecyclerView; 6 | 7 | import com.example.zane.bookmanager.R; 8 | import com.example.zane.bookmanager.presenters.adapter.RecommendedBooklistAdapter; 9 | import com.example.zane.easymvp.view.BaseViewImpl; 10 | 11 | import butterknife.Bind; 12 | 13 | /** 14 | * Created by Zane on 16/2/23. 15 | */ 16 | public class RecommendedBookView extends BaseViewImpl { 17 | 18 | 19 | @Bind(R.id.recyclerview_recommendedbook_fragment) 20 | RecyclerView recyclerviewRecommendedbookFragment; 21 | 22 | @Override 23 | public void setActivityContext(AppCompatActivity appCompatActivity) { 24 | 25 | } 26 | 27 | @Override 28 | public int getRootViewId() { 29 | return R.layout.fragment_recommendedbook_layout; 30 | } 31 | 32 | public void setUpRecycleView(LinearLayoutManager manager, RecommendedBooklistAdapter adapter){ 33 | recyclerviewRecommendedbookFragment.setLayoutManager(manager); 34 | recyclerviewRecommendedbookFragment.setAdapter(adapter); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/RecommendedBookViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.view.ViewGroup; 4 | import android.widget.ImageView; 5 | import android.widget.TextView; 6 | 7 | import com.bumptech.glide.Glide; 8 | import com.bumptech.glide.load.engine.DiskCacheStrategy; 9 | import com.example.zane.bookmanager.R; 10 | import com.example.zane.bookmanager.app.MyApplication; 11 | import com.example.zane.bookmanager.model.bean.Book; 12 | import com.example.zane.bookmanager.model.bean.Book_DB; 13 | import com.example.zane.bookmanager.model.bean.Book_Recom; 14 | import com.example.zane.easymvp.view.BaseListViewHolderImpl; 15 | 16 | /** 17 | * Created by Zane on 16/2/23. 18 | */ 19 | public class RecommendedBookViewHolder extends BaseListViewHolderImpl{ 20 | 21 | private ImageView bookImage; 22 | private TextView bookName; 23 | private TextView authorName; 24 | private TextView star; 25 | 26 | public RecommendedBookViewHolder(ViewGroup parent, int res) { 27 | super(parent, res); 28 | } 29 | 30 | @Override 31 | public void initView() { 32 | bookImage = $(R.id.item_img); 33 | bookName = $(R.id.item_bookname); 34 | authorName = $(R.id.item_authorname); 35 | star = $(R.id.textview_mybookinfo_star); 36 | } 37 | 38 | @Override 39 | public void setData(Book book) { 40 | 41 | Glide.with(MyApplication.getApplicationContext2()) 42 | .load(book.getImages().getLarge()) 43 | .diskCacheStrategy(DiskCacheStrategy.ALL) 44 | .placeholder(R.mipmap.ic_launcher) 45 | .error(R.mipmap.ic_launcher) 46 | .into(bookImage); 47 | 48 | bookName.setText(book.getTitle()); 49 | StringBuilder sb = new StringBuilder(); 50 | for(int i = 0; i < book.getAuthor().size(); i++){ 51 | sb.append(book.getAuthor().get(i)); 52 | } 53 | authorName.setText(sb.toString()); 54 | star.setText(book.getRating().getAverage()); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/WantReadViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.example.zane.bookmanager.view; 2 | 3 | import android.view.View; 4 | import android.view.ViewGroup; 5 | import android.widget.ImageView; 6 | import android.widget.TextView; 7 | 8 | import com.bumptech.glide.Glide; 9 | import com.bumptech.glide.load.engine.DiskCacheStrategy; 10 | import com.example.zane.bookmanager.R; 11 | import com.example.zane.bookmanager.app.MyApplication; 12 | import com.example.zane.bookmanager.model.bean.Book_Read; 13 | import com.example.zane.easymvp.view.BaseListViewHolderImpl; 14 | 15 | /** 16 | * Created by Zane on 16/3/21. 17 | */ 18 | public class WantReadViewHolder extends BaseListViewHolderImpl{ 19 | 20 | private ImageView bookImg; 21 | private TextView bookName; 22 | private TextView author; 23 | 24 | public WantReadViewHolder(ViewGroup parent, int res) { 25 | super(parent, res); 26 | } 27 | 28 | @Override 29 | public void initView() { 30 | bookImg = $(R.id.imageview_wantread); 31 | bookName = $(R.id.textview_wantread_bookname); 32 | author = $(R.id.textview_wantread_author); 33 | } 34 | 35 | @Override 36 | public void setData(Book_Read book_want_read) { 37 | Glide.with(MyApplication.getApplicationContext2()) 38 | .load(book_want_read.getImage()) 39 | .diskCacheStrategy(DiskCacheStrategy.ALL) 40 | .placeholder(R.mipmap.ic_launcher) 41 | .error(R.mipmap.ic_launcher) 42 | .into(bookImg); 43 | bookName.setText(book_want_read.getTitle()); 44 | author.setText(book_want_read.getAuthor()); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/zane/bookmanager/view/WantReadViewpageView.java: -------------------------------------------------------------------------------- 1 | //package com.example.zane.bookmanager.view; 2 | // 3 | //import android.support.v7.widget.RecyclerView; 4 | // 5 | //import com.example.zane.bookmanager.R; 6 | //import com.example.zane.bookmanager.presenters.adapter.ReadPlaneAdapter; 7 | //import com.example.zane.bookmanager.presenters.adapter.WantReadAdapter; 8 | //import com.example.zane.easymvp.view.BaseViewImpl; 9 | // 10 | //import butterknife.Bind; 11 | // 12 | ///** 13 | // * Created by Zane on 16/3/21. 14 | // */ 15 | //public class WantReadViewpageView extends BaseViewImpl { 16 | // 17 | // 18 | // @Bind(R.id.recyclerview_readplane_fragment) 19 | // RecyclerView recyclerviewReadplaneFragment; 20 | // 21 | // @Override 22 | // public int getRootViewId() { 23 | // return R.layout.viewpager_readplane_layout; 24 | // } 25 | // 26 | // public void setupRecycleView(WantReadAdapter adapter, RecyclerView.LayoutManager manager){ 27 | // recyclerviewReadplaneFragment.setAdapter(adapter); 28 | // recyclerviewReadplaneFragment.setLayoutManager(manager); 29 | // } 30 | //} 31 | -------------------------------------------------------------------------------- /app/src/main/res/anim/image_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /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/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zane96/BookManager/431d76f76e2b33fc97b5d46215ec2dc4b1d4a779/app/src/main/res/drawable/check.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/check_choose_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/check_delet_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/checkbook_edittext_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/choose.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zane96/BookManager/431d76f76e2b33fc97b5d46215ec2dc4b1d4a779/app/src/main/res/drawable/choose.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/choose_item_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/choosedelet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zane96/BookManager/431d76f76e2b33fc97b5d46215ec2dc4b1d4a779/app/src/main/res/drawable/choosedelet.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zane96/BookManager/431d76f76e2b33fc97b5d46215ec2dc4b1d4a779/app/src/main/res/drawable/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/select.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/side_nav_bar.xml: -------------------------------------------------------------------------------- 1 | 3 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Zane96/BookManager/431d76f76e2b33fc97b5d46215ec2dc4b1d4a779/app/src/main/res/drawable/star.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/toolbar_image_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_about_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 15 | 16 | 20 | 21 | 29 | 30 | 31 | 32 | 33 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_addisbn_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 16 | 17 | 27 | 28 |