├── .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 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
18 |
19 |
20 |
24 |
25 |
26 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_recommended_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
15 |
16 |
25 |
26 |
33 |
34 |
35 |
36 |
37 |
43 |
44 |
45 |
53 |
54 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/app_bar_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
15 |
16 |
20 |
21 |
22 |
31 |
32 |
33 |
34 |
39 |
40 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/content_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
22 |
23 |
32 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialogfragment_changplane_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
17 |
18 |
29 |
30 |
36 |
37 |
45 |
46 |
55 |
56 |
57 |
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialogfragment_clock_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
17 |
18 |
29 |
30 |
36 |
37 |
45 |
46 |
55 |
56 |
62 |
63 |
71 |
72 |
81 |
82 |
83 |
93 |
94 |
95 |
96 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialogfragment_readplane_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
17 |
29 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_main_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_mybookinfo_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
16 |
17 |
18 |
34 |
35 |
43 |
44 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_popupwindows_mybookinfo.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
19 |
23 |
34 |
38 |
49 |
50 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_readplane_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
17 |
18 |
19 |
20 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_recommendedbook_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/mybookinfo_item_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
24 |
25 |
32 |
33 |
39 |
48 |
49 |
57 |
58 |
64 |
65 |
72 |
73 |
79 |
80 |
81 |
82 |
83 |
84 |
94 |
95 |
96 |
97 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/mybookinfo_top_item_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
24 |
25 |
29 |
41 |
42 |
55 |
56 |
57 |
58 |
59 |
60 |
65 |
66 |
76 |
81 |
91 |
92 |
93 |
98 |
99 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/nav_header_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
20 |
21 |
27 |
28 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/readplane_item_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
16 |
20 |
21 |
25 |
26 |
31 |
32 |
43 |
44 |
45 |
46 |
51 |
52 |
58 |
59 |
66 |
75 |
76 |
77 |
78 |
84 |
85 |
92 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/viewpager_readplane_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/want_to_read_item_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
19 |
20 |
24 |
25 |
30 |
31 |
43 |
44 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/activity_main_drawer.xml:
--------------------------------------------------------------------------------
1 |
2 |
43 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/main.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zane96/BookManager/431d76f76e2b33fc97b5d46215ec2dc4b1d4a779/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zane96/BookManager/431d76f76e2b33fc97b5d46215ec2dc4b1d4a779/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zane96/BookManager/431d76f76e2b33fc97b5d46215ec2dc4b1d4a779/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zane96/BookManager/431d76f76e2b33fc97b5d46215ec2dc4b1d4a779/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zane96/BookManager/431d76f76e2b33fc97b5d46215ec2dc4b1d4a779/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/values-v21/styles.xml:
--------------------------------------------------------------------------------
1 | >
2 |
3 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 160dp
5 |
6 | 16dp
7 | 16dp
8 | 16dp
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values/drawables.xml:
--------------------------------------------------------------------------------
1 |
2 | - @android:drawable/ic_menu_camera
3 | - @android:drawable/ic_menu_gallery
4 | - @android:drawable/ic_menu_slideshow
5 | - @android:drawable/ic_menu_manage
6 | - @android:drawable/ic_menu_share
7 | - @android:drawable/ic_menu_send
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | BookManager
3 |
4 | Open navigation drawer
5 | Close navigation drawer
6 |
7 | Settings
8 | 请选择
9 |
10 | 在读
11 | 想读
12 | https://github.com/Zane96/BookManager/blob/master/README.md
13 | https://github.com/Zane96/BookManager
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
12 |
13 |
14 |
19 |
20 |
26 |
27 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/about.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
10 |
13 |
16 |
20 |
21 |
22 |
26 |
30 |
34 |
35 |
36 |
39 |
42 |
43 |
--------------------------------------------------------------------------------
/app/src/test/java/com/example/zane/bookmanager/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.example.zane.bookmanager;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * To work on unit tests, switch the Test Artifact in the Build Variants view.
9 | */
10 | public class ExampleUnitTest {
11 | @Test
12 | public void addition_isCorrect() throws Exception {
13 | assertEquals(4, 2 + 2);
14 | }
15 | }
--------------------------------------------------------------------------------
/app/version.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 24 18:35:27 CST 2016
2 | VERSION_CODE=506
3 |
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | repositories {
5 | jcenter()
6 | }
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:2.2.0-alpha1'
9 | classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
10 | // NOTE: Do not place your application dependencies here; they belong
11 | // in the individual module build.gradle files
12 | }
13 | }
14 |
15 | allprojects {
16 | repositories {
17 | jcenter()
18 | maven { url "https://jitpack.io" }
19 | maven {
20 | url "http://maven.bughd.com/public"
21 | }
22 | }
23 | }
24 |
25 | task clean(type: Delete) {
26 | delete rootProject.buildDir
27 | }
28 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m
13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Zane96/BookManager/431d76f76e2b33fc97b5d46215ec2dc4b1d4a779/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Sun Apr 10 13:13:49 CST 2016
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip
7 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # Attempt to set APP_HOME
46 | # Resolve links: $0 may be a link
47 | PRG="$0"
48 | # Need this for relative symlinks.
49 | while [ -h "$PRG" ] ; do
50 | ls=`ls -ld "$PRG"`
51 | link=`expr "$ls" : '.*-> \(.*\)$'`
52 | if expr "$link" : '/.*' > /dev/null; then
53 | PRG="$link"
54 | else
55 | PRG=`dirname "$PRG"`"/$link"
56 | fi
57 | done
58 | SAVED="`pwd`"
59 | cd "`dirname \"$PRG\"`/" >/dev/null
60 | APP_HOME="`pwd -P`"
61 | cd "$SAVED" >/dev/null
62 |
63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
64 |
65 | # Determine the Java command to use to start the JVM.
66 | if [ -n "$JAVA_HOME" ] ; then
67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
68 | # IBM's JDK on AIX uses strange locations for the executables
69 | JAVACMD="$JAVA_HOME/jre/sh/java"
70 | else
71 | JAVACMD="$JAVA_HOME/bin/java"
72 | fi
73 | if [ ! -x "$JAVACMD" ] ; then
74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
75 |
76 | Please set the JAVA_HOME variable in your environment to match the
77 | location of your Java installation."
78 | fi
79 | else
80 | JAVACMD="java"
81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
82 |
83 | Please set the JAVA_HOME variable in your environment to match the
84 | location of your Java installation."
85 | fi
86 |
87 | # Increase the maximum file descriptors if we can.
88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
89 | MAX_FD_LIMIT=`ulimit -H -n`
90 | if [ $? -eq 0 ] ; then
91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
92 | MAX_FD="$MAX_FD_LIMIT"
93 | fi
94 | ulimit -n $MAX_FD
95 | if [ $? -ne 0 ] ; then
96 | warn "Could not set maximum file descriptor limit: $MAX_FD"
97 | fi
98 | else
99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
100 | fi
101 | fi
102 |
103 | # For Darwin, add options to specify how the application appears in the dock
104 | if $darwin; then
105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
106 | fi
107 |
108 | # For Cygwin, switch paths to Windows format before running java
109 | if $cygwin ; then
110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
112 | JAVACMD=`cygpath --unix "$JAVACMD"`
113 |
114 | # We build the pattern for arguments to be converted via cygpath
115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
116 | SEP=""
117 | for dir in $ROOTDIRSRAW ; do
118 | ROOTDIRS="$ROOTDIRS$SEP$dir"
119 | SEP="|"
120 | done
121 | OURCYGPATTERN="(^($ROOTDIRS))"
122 | # Add a user-defined pattern to the cygpath arguments
123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
125 | fi
126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
127 | i=0
128 | for arg in "$@" ; do
129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
131 |
132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
134 | else
135 | eval `echo args$i`="\"$arg\""
136 | fi
137 | i=$((i+1))
138 | done
139 | case $i in
140 | (0) set -- ;;
141 | (1) set -- "$args0" ;;
142 | (2) set -- "$args0" "$args1" ;;
143 | (3) set -- "$args0" "$args1" "$args2" ;;
144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
150 | esac
151 | fi
152 |
153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154 | function splitJvmOpts() {
155 | JVM_OPTS=("$@")
156 | }
157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
159 |
160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
161 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------