├── .gitignore
├── .idea
├── .name
├── compiler.xml
├── copyright
│ └── profiles_settings.xml
├── encodings.xml
├── gradle.xml
├── misc.xml
├── modules.xml
├── runConfigurations.xml
└── vcs.xml
├── CodeHub.iml
├── README.md
├── app
├── .gitignore
├── app.iml
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── caij
│ │ └── codehub
│ │ ├── ApplicationTest.java
│ │ └── DataTest.java
│ ├── debug
│ ├── AndroidManifest.xml
│ └── java
│ │ └── com
│ │ └── caij
│ │ └── codehub
│ │ └── CodeHubDebugApplication.java
│ └── main
│ ├── AndroidManifest.xml
│ ├── assets
│ └── octicons.ttf
│ ├── java
│ └── com
│ │ └── caij
│ │ └── codehub
│ │ ├── API.java
│ │ ├── CodeHubApplication.java
│ │ ├── CodeHubPrefs.java
│ │ ├── Constant.java
│ │ ├── bean
│ │ ├── Comment.java
│ │ ├── Deployment.java
│ │ ├── DeploymentStatus.java
│ │ ├── Entity.java
│ │ ├── FileTreeItem.java
│ │ ├── Forkee.java
│ │ ├── Issue.java
│ │ ├── Org.java
│ │ ├── Page.java
│ │ ├── PullRequest.java
│ │ ├── Repository.java
│ │ ├── SearchRepository.java
│ │ ├── Team.java
│ │ ├── Token.java
│ │ ├── Tree.java
│ │ ├── User.java
│ │ └── event
│ │ │ ├── BaseEvent.java
│ │ │ ├── CommitCommentEvent.java
│ │ │ ├── CreateEvent.java
│ │ │ ├── DeleteEvent.java
│ │ │ ├── DeploymentEvent.java
│ │ │ ├── DeploymentStatusEvent.java
│ │ │ ├── DownloadEvent.java
│ │ │ ├── Event.java
│ │ │ ├── EventWrap.java
│ │ │ ├── ForkEvent.java
│ │ │ ├── IssueCommentEvent.java
│ │ │ ├── IssuesEvent.java
│ │ │ ├── MemberEvent.java
│ │ │ ├── MembershipEvent.java
│ │ │ ├── PullRequestEvent.java
│ │ │ ├── PullRequestReviewCommentEvent.java
│ │ │ ├── PushEvent.java
│ │ │ ├── RepositoryEvent.java
│ │ │ ├── TeamAddEvent.java
│ │ │ └── WatchEvent.java
│ │ ├── interactor
│ │ ├── AuthenticationInteractor.java
│ │ ├── CommentActionInteractor.java
│ │ ├── CommentsInteractor.java
│ │ ├── EventsInteractor.java
│ │ ├── FileTreeInteractor.java
│ │ ├── FollowActionInteractor.java
│ │ ├── Interactor.java
│ │ ├── InteractorCallBack.java
│ │ ├── InteractorFactory.java
│ │ ├── IssueInteractor.java
│ │ ├── IssueListInteractor.java
│ │ ├── RepositoryActionInteractor.java
│ │ ├── RepositoryInfoInteractor.java
│ │ ├── RepositoryListInteractor.java
│ │ ├── UserInteractor.java
│ │ ├── UserListInteractor.java
│ │ └── imp
│ │ │ ├── AuthenticationInteractorImp.java
│ │ │ ├── CommentActionInteractorImp.java
│ │ │ ├── CommentsInteractorImp.java
│ │ │ ├── EventsInteractorImp.java
│ │ │ ├── FileTreeInteractorImp.java
│ │ │ ├── FollowActionInteractorImp.java
│ │ │ ├── IssueInteractorImp.java
│ │ │ ├── IssueListInteractorImp.java
│ │ │ ├── RepositoryActionInteractorImp.java
│ │ │ ├── RepositoryInfoInteractorImp.java
│ │ │ ├── RepositoryListInteractorImp.java
│ │ │ ├── UserInteractorImp.java
│ │ │ └── UserListInteractorImp.java
│ │ ├── present
│ │ ├── CommentPresent.java
│ │ ├── CommentsPresent.java
│ │ ├── DefaultInteractorCallback.java
│ │ ├── EventsPresent.java
│ │ ├── FileTreePresent.java
│ │ ├── ListPresent.java
│ │ ├── LoadType.java
│ │ ├── MainPresent.java
│ │ ├── Present.java
│ │ ├── RepoIssuesPresent.java
│ │ ├── RepositoriesPresent.java
│ │ ├── RepositoryInfoPresent.java
│ │ ├── SettingPresent.java
│ │ ├── UserInfoPresent.java
│ │ ├── UserLoginPresent.java
│ │ ├── UsersPresent.java
│ │ └── ui
│ │ │ ├── BaseUi.java
│ │ │ ├── CommentUi.java
│ │ │ ├── ListUi.java
│ │ │ ├── MainUi.java
│ │ │ ├── RecyclerViewUi.java
│ │ │ ├── RepositoryInfoUi.java
│ │ │ ├── SettingUi.java
│ │ │ ├── SwipeRefreshUi.java
│ │ │ ├── UserAndActionUi.java
│ │ │ ├── UserInfoUi.java
│ │ │ ├── UserLoginUi.java
│ │ │ └── UserUi.java
│ │ ├── request
│ │ └── EventRequest.java
│ │ ├── ui
│ │ ├── activity
│ │ │ ├── AboutActivity.java
│ │ │ ├── BaseActivity.java
│ │ │ ├── BaseCodeHubActivity.java
│ │ │ ├── BaseCodeHubToolBarActivity.java
│ │ │ ├── CommentActivity.java
│ │ │ ├── FileTreeActivity.java
│ │ │ ├── FollowersActivity.java
│ │ │ ├── FollowingActivity.java
│ │ │ ├── InitActivity.java
│ │ │ ├── IssueInfoActivity.java
│ │ │ ├── LoginActivity.java
│ │ │ ├── MainActivity.java
│ │ │ ├── PictureReviewActivity.java
│ │ │ ├── RepoIssuesActivity.java
│ │ │ ├── RepositoryInfoActivity.java
│ │ │ ├── SearchActivity.java
│ │ │ ├── SettingActivity.java
│ │ │ ├── TrendingFilterActivity.java
│ │ │ ├── UserInfoActivity.java
│ │ │ ├── UserRepositoriesActivity.java
│ │ │ └── WebActivity.java
│ │ ├── adapter
│ │ │ ├── AvatarOnClickListener.java
│ │ │ ├── BaseAdapter.java
│ │ │ ├── CommentAdapter.java
│ │ │ ├── EventsAdapter.java
│ │ │ ├── FileTreeAdapter.java
│ │ │ ├── IAdapter.java
│ │ │ ├── IssueAdapter.java
│ │ │ ├── RepositoryAdapter.java
│ │ │ └── UserAdapter.java
│ │ ├── drawable
│ │ │ └── MorphDrawable.java
│ │ ├── fragment
│ │ │ ├── BaseCodeHubFragment.java
│ │ │ ├── BaseFragment.java
│ │ │ ├── EventsFragment.java
│ │ │ ├── FileTreeFragment.java
│ │ │ ├── FollowersFragment.java
│ │ │ ├── FollowingsFragment.java
│ │ │ ├── IssueInfoFragment.java
│ │ │ ├── LazyFragment.java
│ │ │ ├── RecyclerViewFragment.java
│ │ │ ├── RepoIssuesFragment.java
│ │ │ ├── RepositoriesFragment.java
│ │ │ ├── RepositoryPagesFragment.java
│ │ │ ├── SearchRepositoriesFragment.java
│ │ │ ├── SwipeRefreshRecyclerViewFragment.java
│ │ │ ├── TrendingRepositoriesFragment.java
│ │ │ ├── UserRepositoriesFragment.java
│ │ │ ├── UserStarredRepositoriesFragment.java
│ │ │ └── UsersFragment.java
│ │ └── transitions
│ │ │ ├── FabDialogMorphSetup.java
│ │ │ ├── MorphDialogToFab.java
│ │ │ └── MorphFabToDialog.java
│ │ ├── utils
│ │ ├── AnimUtils.java
│ │ ├── AvatarUrlUtil.java
│ │ ├── Base64.java
│ │ ├── CropCircleTransformation.java
│ │ ├── DensityUtil.java
│ │ ├── EventSpannedUtils.java
│ │ ├── MyGlideModule.java
│ │ ├── OkHttpClientProvider.java
│ │ ├── TextTypeFaceUtils.java
│ │ └── TimeUtils.java
│ │ └── widgets
│ │ ├── CollapsingToolbarLayout.java
│ │ ├── FixClickableSpanBugTextView.java
│ │ ├── FloatingActionButton.java
│ │ ├── GithubTypeFaceTextView.java
│ │ ├── LinearBreadcrumb.java
│ │ ├── recyclerview
│ │ ├── HeaderAndFooterRecyclerViewAdapter.java
│ │ ├── LoadMoreRecyclerView.java
│ │ ├── LoadMoreView.java
│ │ └── RecyclerViewOnItemClickListener.java
│ │ └── swipeback
│ │ ├── SwipeBackLayout.java
│ │ ├── Utils.java
│ │ ├── ViewDragHelper.java
│ │ └── app
│ │ ├── SwipeBackActivity.java
│ │ ├── SwipeBackActivityBase.java
│ │ ├── SwipeBackActivityHelper.java
│ │ └── SwipeBackPreferenceActivity.java
│ └── res
│ ├── anim
│ ├── finish_right_in.xml
│ ├── finish_right_out.xml
│ ├── start_right_in.xml
│ └── start_right_out.xml
│ ├── drawable-hdpi
│ ├── ic_add.png
│ └── ic_right_arrow.png
│ ├── drawable-mdpi
│ ├── ic_add.png
│ └── ic_right_arrow.png
│ ├── drawable-xhdpi
│ └── ic_right_arrow.png
│ ├── drawable-xxhdpi
│ ├── bg_init_page_img.png
│ ├── bg_shadow_bottom.png
│ ├── bg_shadow_left.png
│ ├── bg_shadow_right.png
│ ├── gif_loading1.png
│ ├── gif_loading2.png
│ ├── gif_loading3.png
│ ├── gif_loading4.png
│ ├── gif_loading5.png
│ ├── gif_loading6.png
│ ├── gif_loading7.png
│ ├── ic_action_search.png
│ ├── ic_add.png
│ ├── ic_default_circle_head_image.png
│ ├── ic_right_arrow.png
│ ├── source_data_load_error.png
│ └── source_no_data_image.png
│ ├── drawable
│ ├── animation_loading.xml
│ ├── dialog_background.xml
│ ├── fab_normal.xml
│ ├── fab_select.xml
│ ├── fab_selector.xml
│ ├── link_selector.xml
│ ├── nav_item_selector.xml
│ └── theme_color_btn_shape.xml
│ ├── layout
│ ├── activity_about.xml
│ ├── activity_base_codehub.xml
│ ├── activity_base_codehub_toolbar.xml
│ ├── activity_comment.xml
│ ├── activity_file_tree.xml
│ ├── activity_init.xml
│ ├── activity_issue.xml
│ ├── activity_login.xml
│ ├── activity_main.xml
│ ├── activity_picture.xml
│ ├── activity_repository_info.xml
│ ├── activity_search.xml
│ ├── activity_setting.xml
│ ├── activity_trending_filter.xml
│ ├── activity_user_info.xml
│ ├── activity_web.xml
│ ├── dialog_repository_filter.xml
│ ├── fragment_base_code_hub.xml
│ ├── fragment_issue_info.xml
│ ├── fragment_repository_viewpager.xml
│ ├── fragment_trending.xml
│ ├── include_anim_loading.xml
│ ├── include_empty_view.xml
│ ├── include_listview.xml
│ ├── include_load_error.xml
│ ├── include_navigation_main.xml
│ ├── include_progress_bar_loading.xml
│ ├── include_recycle_view.xml
│ ├── include_refresh_recycle_view.xml
│ ├── include_tool_bar.xml
│ ├── infinite_loading.xml
│ ├── item_comment.xml
│ ├── item_event.xml
│ ├── item_issue.xml
│ ├── item_issue_head.xml
│ ├── item_repository.xml
│ ├── item_treelist.xml
│ ├── item_user.xml
│ ├── widget_bread_crumb.xml
│ └── widget_swipeback_layout.xml
│ ├── menu
│ ├── menu.xml
│ ├── menu_drawer_view.xml
│ ├── menu_issue.xml
│ ├── menu_main.xml
│ ├── menu_repository_info.xml
│ ├── menu_trending.xml
│ ├── menu_user.xml
│ └── search.xml
│ ├── mipmap-hdpi
│ └── ic_launcher.png
│ ├── mipmap-mdpi
│ └── ic_launcher.png
│ ├── mipmap-xhdpi
│ └── ic_launcher.png
│ ├── mipmap-xxhdpi
│ └── ic_launcher.png
│ ├── values-w820dp
│ └── dimens.xml
│ └── values
│ ├── attrs.xml
│ ├── colors.xml
│ ├── dimens.xml
│ ├── drawables.xml
│ ├── ids.xml
│ ├── paths.xml
│ ├── strings.xml
│ └── styles.xml
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── introduce
├── chinese.md
├── event.png
├── followers.png
├── issue.png
├── main.png
├── nav.png
├── repository.png
└── user.png
├── lib
├── .gitignore
├── build.gradle
├── lib.iml
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── caij
│ │ └── lib
│ │ └── ApplicationTest.java
│ └── main
│ ├── AndroidManifest.xml
│ ├── java
│ └── com
│ │ └── caij
│ │ └── lib
│ │ ├── utils
│ │ ├── AppManager.java
│ │ ├── CheckValueUtil.java
│ │ ├── GsonUtils.java
│ │ ├── LogUtil.java
│ │ ├── SPUtils.java
│ │ ├── SystemBarTintManager.java
│ │ ├── ToastUtil.java
│ │ └── VolleyManager.java
│ │ └── volley
│ │ ├── request
│ │ ├── AbsRequest.java
│ │ ├── GsonRequest.java
│ │ ├── JsonParseError.java
│ │ ├── NetworkResponseRequest.java
│ │ └── StringRequest.java
│ │ └── stack
│ │ └── OkHttpStack.java
│ └── res
│ └── values
│ └── strings.xml
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | .gradle
2 | /local.properties
3 | /.idea/workspace.xml
4 | /.idea/libraries
5 | .DS_Store
6 | /build
7 | /captures
8 |
--------------------------------------------------------------------------------
/.idea/.name:
--------------------------------------------------------------------------------
1 | CodeHub
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/.idea/copyright/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/CodeHub.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # CodeHub
2 | Github client for android, include login, personal information , repository information, event, issue. Hope other developer join this project if you are interested. thanks.
3 |
4 |
5 |   
6 |
7 |   
8 |
9 | ###Thanks
10 | [CodeHub](https://github.com/thedillonb/CodeHub)
11 |
12 | ###Libs
13 | [butterknife](https://github.com/JakeWharton/butterknife)
14 |
15 | [glide](https://github.com/bumptech/glide)
16 |
17 | [stetho](https://github.com/facebook/stetho)
18 |
19 | [volley](https://github.com/mcxiaoke/android-volley)
20 |
21 | [leakcanary](https://github.com/square/leakcanary)
22 |
23 | ###Contact
24 | [worldcaij@gmail.com](mailto:worldcaij@gmail.com)
25 |
26 | ###License
27 | Copyright (C) 2015 Caij
28 |
29 | Licensed under the Apache License, Version 2.0 (the "License");
30 | you may not use this file except in compliance with the License.
31 | You may obtain a copy of the License at
32 |
33 | http://www.apache.org/licenses/LICENSE-2.0
34 |
35 | Unless required by applicable law or agreed to in writing, software
36 | distributed under the License is distributed on an "AS IS" BASIS,
37 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
38 | See the License for the specific language governing permissions and
39 | limitations under the License.
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in D:\android-studio\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 |
19 | # GSON
20 | # Gson uses generic type information stored in a class file when working with fields. Proguard
21 | # removes such information by default, so configure it to keep all of it.
22 | -keepattributes Signature
23 | # Gson specific classes
24 | -keep class sun.misc.Unsafe { *; }
25 | -keep class com.caij.codehub.bean.** { *; }
26 |
27 | #Glide
28 | -keep public class * implements com.bumptech.glide.module.GlideModule
29 | -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
30 | **[] $VALUES;
31 | public *;
32 | }
33 |
34 | # LeakCanary
35 | -keep class org.eclipse.mat.** { *; }
36 | -keep class com.squareup.leakcanary.** { *; }
37 |
38 | #UM
39 | -keepclassmembers class * {
40 | public (org.json.JSONObject);
41 | }
42 | -keep public class com.caij.codehub.R$*{
43 | public static final int *;
44 | }
45 | -keepclassmembers enum * {
46 | public static **[] values();
47 | public static ** valueOf(java.lang.String);
48 | }
49 |
50 | #butterknife
51 | -keep class butterknife.** { *; }
52 | -dontwarn butterknife.internal.**
53 | -keep class **$$ViewBinder { *; }
54 |
55 | -keepclasseswithmembernames class * {
56 | @butterknife.* ;
57 | }
58 |
59 | -keepclasseswithmembernames class * {
60 | @butterknife.* ;
61 | }
62 |
63 | ##
64 | -dontwarn org.apache.http.**
65 | -dontwarn com.android.volley.toolbox.**
66 |
67 | -dontwarn java.nio.file.Files
68 | -dontwarn java.nio.file.Path
69 | -dontwarn java.nio.file.OpenOption
70 | -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
--------------------------------------------------------------------------------
/app/src/androidTest/java/com/caij/codehub/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub;
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/androidTest/java/com/caij/codehub/DataTest.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub;
2 |
3 | import android.test.AndroidTestCase;
4 |
5 | import com.caij.codehub.utils.AvatarUrlUtil;
6 | import com.caij.lib.utils.LogUtil;
7 |
8 | /**
9 | * Created by Administrator on 2015/8/24.
10 | */
11 | public class DataTest extends AndroidTestCase{
12 | public final static String HTTPS = "https://";
13 | public final static String HOST = "api.github.com";
14 | public final static String URL_SPLITTER = "/";
15 | public final static String API_HOST = HTTPS + HOST + URL_SPLITTER;
16 | public final static String TOKEN_NOTE = "Github APP Token";
17 | private final static String[] SCOPES = {"public_repo","repo", "user", "gist"};
18 | public final static String CREATE_TOKEN = API_HOST + "authorizations"; // POST
19 |
20 | public static final String AUTHORIZATION = "Authorization";
21 |
22 | public final static String REPO = "user/repos";
23 |
24 | public void testAvatarUrlUtil() {
25 | String url = AvatarUrlUtil.restoreAvatarUrl("https://avatars.githubusercontent.com/u/10348598?v=2");
26 | LogUtil.d("AndroidTestCase", url);
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/debug/java/com/caij/codehub/CodeHubDebugApplication.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub;
2 |
3 | import android.content.Context;
4 |
5 | import com.facebook.stetho.Stetho;
6 | import com.squareup.leakcanary.LeakCanary;
7 | import com.squareup.leakcanary.RefWatcher;
8 |
9 |
10 | /**
11 | * Created by Caij on 15/11/03.
12 | */
13 | public class CodeHubDebugApplication extends CodeHubApplication {
14 |
15 | private RefWatcher refWatcher;
16 |
17 | @Override
18 | public void onCreate() {
19 | super.onCreate();
20 | Stetho.initialize(
21 | Stetho.newInitializerBuilder(this)
22 | .enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
23 | .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this))
24 | .build());
25 | refWatcher = LeakCanary.install(this);
26 | }
27 |
28 | public static RefWatcher getRefWatcher(Context context) {
29 | CodeHubDebugApplication application = (CodeHubDebugApplication) context.getApplicationContext();
30 | return application.refWatcher;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/app/src/main/assets/octicons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/assets/octicons.ttf
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/API.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub;
2 |
3 | import java.util.Map;
4 |
5 | /**
6 | * Created by Caij on 2015/8/25.
7 | */
8 | public class API {
9 |
10 | public final static String API_HOST ="https://api.github.com";
11 | public final static String TOKEN_NOTE = "Github APP Token";
12 | public final static String[] SCOPES = {"public_repo","repo", "user", "gist"};
13 | public final static String AUTHORIZATION_URL = API_HOST + "/authorizations"; // POST
14 |
15 | public final static String REPOSITORY_STARRED_URI = "/starred";
16 | public final static String REPOSITORY_REPOS_URI = "/repos";
17 |
18 | public final static String SEARCH_REPOSITORY_URI = "/search/repositories";
19 |
20 | public static final String AUTHORIZATION = "Authorization";
21 |
22 | public static final String PER_PAGE = "per_page";
23 | public static final String PAGE = "page";
24 |
25 | public static final String Q = "q";
26 | public static final String SORT = "sort";
27 | public static final String ORDER = "order";
28 |
29 | public static Map configAuthorizationHead(Map head, String token) {
30 | head.put(AUTHORIZATION, "Token " + token);
31 | return head;
32 | }
33 |
34 | public static final String TRENDING_REPOSITORY_HOST = "http://trending.codehub-app.com/v2/trending";
35 |
36 | public static final String TENDING_REPOSITORY_PARAM_LANGUAGE = "language";
37 |
38 | public static final String TENDING_REPOSITORY_PARAM_SINCE = "since";
39 |
40 | public static final String GITHUB_README = "https://github.com/%s/%s/blob/master/README.md";
41 |
42 | public static final String GITHUB_FILE = "https://github.com/%s/%s/%s/%s";
43 |
44 | public static final String PROJECT_README_URL = "https://github.com/Caij/CodeHub/blob/master/README.md";
45 |
46 | public static final String PROJECT_URL = "https://github.com/Caij/CodeHub";
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/CodeHubApplication.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub;
2 |
3 | import android.app.Application;
4 |
5 | import com.caij.codehub.utils.OkHttpClientProvider;
6 | import com.caij.lib.utils.LogUtil;
7 | import com.caij.lib.utils.SPUtils;
8 | import com.caij.lib.utils.VolleyManager;
9 | import com.caij.lib.volley.stack.OkHttpStack;
10 |
11 |
12 | /**
13 | * Created by Caij on 2015/8/25.
14 | */
15 | public class CodeHubApplication extends Application{
16 |
17 | private static final String SP_FILE_NAME = "profile";
18 |
19 | private static final int VOLLEY_DISK_MAX_SIZE = 1024 * 1024 * 5;
20 |
21 | @Override
22 | public void onCreate() {
23 | super.onCreate();
24 | SPUtils.init(this, SP_FILE_NAME);
25 | LogUtil.LOG_DEBUG = BuildConfig.LOG_DEBUG;
26 | VolleyManager.init(this, new OkHttpStack(OkHttpClientProvider.getOkHttpClient()), VOLLEY_DISK_MAX_SIZE);
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/Constant.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub;
2 |
3 | /**
4 | * Created by Caij on 2015/8/26.
5 | */
6 | public interface Constant {
7 |
8 | public static final String USER_TOKEN = "user_token";
9 |
10 | public static final String USER_NAME = "user_name";
11 |
12 | public static final String USER_INFO = "user_info";
13 |
14 | public static final String REPO_NAME = "repo_name";
15 |
16 | public static final String REPO_SEARCH_Q = "repo_search_q";
17 |
18 | public static final String REPO_SORT= "repo_sort";
19 |
20 | public static final String ORDER = "order";
21 |
22 | public static final String URL = "url";
23 |
24 | public static final String ISSUE_NUMBER = "issue_number";
25 |
26 | public static final String ISSUE = "issue";
27 |
28 | public static final String REPO_BRAN = "repo_bran";
29 |
30 | public static final String REPO_SHA= "repo_sha";
31 |
32 | public static final int ISSUE_COMMENT_REQUEST_CODE = 100;
33 |
34 | public static final int FILTER_REQUEST_CODE = 101;
35 |
36 | public static final String COMMENT = "comment";
37 |
38 | public static final String ISSUE_TITLE = "issue_title";
39 |
40 | public static final String ISSUE_BODY = "issue_body";
41 |
42 | public static final String USER_TOKEN_ID = "user_token_id";
43 |
44 | public static final String USER_PWD = "user_pwd";
45 |
46 | public static final String TITLE = "title";
47 |
48 | public static final String TRENDING_REPOSITORY_CHECK_SINCE_ID = "trending_repository_check_since_id";
49 |
50 | public static final String TRENDING_REPOSITORY_CHECK_LANGUAGE_ID = "trending_repository_check_language_id";
51 |
52 | public static final String TRANSIT_PIC = "transit_pic";
53 |
54 | public static final String AVATAR_URL = "AVATAR_URL";
55 | }
56 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/bean/Entity.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.bean;
2 |
3 | import java.io.Serializable;
4 |
5 | /**
6 | * Created by Caij on 2015/8/24.
7 | */
8 | public class Entity implements Serializable{
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/bean/FileTreeItem.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.bean;
2 |
3 | /**
4 | * Created by Caij on 2/11/15.
5 | */
6 | public class FileTreeItem extends Entity{
7 |
8 | private static final long serialVersionUID = 6518261551932913340L;
9 |
10 | public static final String MODE_TREE = "tree";
11 | public static final String MODE_BLOB = "blob";
12 |
13 | private String path;
14 | private String mode;
15 | private String type;
16 | private String sha;
17 | private long size;
18 | private String url;
19 |
20 | public FileTreeItem() {
21 |
22 | }
23 |
24 | public String getMode() {
25 | return mode;
26 | }
27 |
28 | public void setMode(String mode) {
29 | this.mode = mode;
30 | }
31 |
32 | public String getPath() {
33 | return path;
34 | }
35 |
36 | public void setPath(String path) {
37 | this.path = path;
38 | }
39 |
40 | public static long getSerialVersionUID() {
41 | return serialVersionUID;
42 | }
43 |
44 | public String getSha() {
45 | return sha;
46 | }
47 |
48 | public void setSha(String sha) {
49 | this.sha = sha;
50 | }
51 |
52 | public long getSize() {
53 | return size;
54 | }
55 |
56 | public void setSize(long size) {
57 | this.size = size;
58 | }
59 |
60 | public String getType() {
61 | return type;
62 | }
63 |
64 | public void setType(String type) {
65 | this.type = type;
66 | }
67 |
68 | public String getUrl() {
69 | return url;
70 | }
71 |
72 | public void setUrl(String url) {
73 | this.url = url;
74 | }
75 |
76 |
77 | @Override
78 | public String toString() {
79 | return "FileTreeItem{" +
80 | "mode='" + mode + '\'' +
81 | ", path='" + path + '\'' +
82 | ", type='" + type + '\'' +
83 | ", sha='" + sha + '\'' +
84 | ", size=" + size +
85 | ", url='" + url + '\'' +
86 | '}';
87 | }
88 | }
89 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/bean/Org.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.bean;
2 |
3 | /**
4 | * Created by Caij on 2015/10/30.
5 | */
6 | public class Org {
7 |
8 | private int id;
9 | private String login;
10 | private String gravatar_id;
11 | private String url;
12 | private String avatar_url;
13 |
14 | public void setId(int id) {
15 | this.id = id;
16 | }
17 |
18 | public void setLogin(String login) {
19 | this.login = login;
20 | }
21 |
22 | public void setGravatar_id(String gravatar_id) {
23 | this.gravatar_id = gravatar_id;
24 | }
25 |
26 | public void setUrl(String url) {
27 | this.url = url;
28 | }
29 |
30 | public void setAvatar_url(String avatar_url) {
31 | this.avatar_url = avatar_url;
32 | }
33 |
34 | public int getId() {
35 | return id;
36 | }
37 |
38 | public String getLogin() {
39 | return login;
40 | }
41 |
42 | public String getGravatar_id() {
43 | return gravatar_id;
44 | }
45 |
46 | public String getUrl() {
47 | return url;
48 | }
49 |
50 | public String getAvatar_url() {
51 | return avatar_url;
52 | }
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/bean/Page.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.bean;
2 |
3 | /**
4 | * Created by Caij on 2015/9/21.
5 | */
6 | public class Page {
7 |
8 | public final static int DEFAULT_PAGE_INDEX = 1;
9 |
10 | public final static int DEFAULT_PAGE_DATA_COUNT = 20;
11 |
12 | private int pageIndex;
13 | private final int pageDataCount;
14 |
15 | public Page() {
16 | this(DEFAULT_PAGE_INDEX, DEFAULT_PAGE_DATA_COUNT);
17 | }
18 |
19 | public Page(int pageIndex, int pageDataCount) {
20 | this.pageDataCount = pageDataCount;
21 | this.pageIndex = pageIndex;
22 | }
23 |
24 | public Page(int pageDataCount) {
25 | this(DEFAULT_PAGE_INDEX, pageDataCount);
26 | }
27 |
28 | public void next() {
29 | pageIndex ++;
30 | }
31 |
32 | public void reset() {
33 | pageIndex = 1;
34 | }
35 |
36 |
37 | public int getPageIndex() {
38 | return pageIndex;
39 | }
40 |
41 | public int getPageDataCount() {
42 | return pageDataCount;
43 | }
44 |
45 | public Page createRefreshPage() {
46 | return new Page(pageDataCount);
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/bean/SearchRepository.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.bean;
2 |
3 | import java.util.List;
4 |
5 | /**
6 | * Created by Caij on 2015/9/21.
7 | */
8 | public class SearchRepository {
9 |
10 | /**
11 | */
12 |
13 | private int total_count;
14 | private boolean incomplete_results;
15 | private List items;
16 |
17 | public void setTotal_count(int total_count) {
18 | this.total_count = total_count;
19 | }
20 |
21 | public void setIncomplete_results(boolean incomplete_results) {
22 | this.incomplete_results = incomplete_results;
23 | }
24 |
25 | public void setItems(List items) {
26 | this.items = items;
27 | }
28 |
29 | public int getTotal_count() {
30 | return total_count;
31 | }
32 |
33 | public boolean getIncomplete_results() {
34 | return incomplete_results;
35 | }
36 |
37 | public List getItems() {
38 | return items;
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/bean/Team.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.bean;
2 |
3 | /**
4 | * Created by Caij on 2015/10/30.
5 | */
6 | public class Team extends Entity{
7 |
8 | /**
9 | * name : Contractors
10 | * id : 123456
11 | * slug : contractors
12 | * permission : admin
13 | * url : https://api.github.com/teams/123456
14 | * members_url : https://api.github.com/teams/123456/members{/member}
15 | * repositories_url : https://api.github.com/teams/123456/repos
16 | */
17 |
18 | private String name;
19 | private int id;
20 | private String slug;
21 | private String permission;
22 | private String url;
23 | private String members_url;
24 | private String repositories_url;
25 |
26 | public void setName(String name) {
27 | this.name = name;
28 | }
29 |
30 | public void setId(int id) {
31 | this.id = id;
32 | }
33 |
34 | public void setSlug(String slug) {
35 | this.slug = slug;
36 | }
37 |
38 | public void setPermission(String permission) {
39 | this.permission = permission;
40 | }
41 |
42 | public void setUrl(String url) {
43 | this.url = url;
44 | }
45 |
46 | public void setMembers_url(String members_url) {
47 | this.members_url = members_url;
48 | }
49 |
50 | public void setRepositories_url(String repositories_url) {
51 | this.repositories_url = repositories_url;
52 | }
53 |
54 | public String getName() {
55 | return name;
56 | }
57 |
58 | public int getId() {
59 | return id;
60 | }
61 |
62 | public String getSlug() {
63 | return slug;
64 | }
65 |
66 | public String getPermission() {
67 | return permission;
68 | }
69 |
70 | public String getUrl() {
71 | return url;
72 | }
73 |
74 | public String getMembers_url() {
75 | return members_url;
76 | }
77 |
78 | public String getRepositories_url() {
79 | return repositories_url;
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/bean/Tree.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.bean;
2 |
3 | import java.util.List;
4 |
5 | /**
6 | * Created by Caij
7 | */
8 | public class Tree {
9 | private static final long serialVersionUID = -6181332657279059683L;
10 |
11 | private List tree;
12 | private String sha;
13 | private String url;
14 |
15 | public Tree() {
16 |
17 | }
18 |
19 |
20 | public String getSha() {
21 | return sha;
22 | }
23 |
24 | public void setSha(String sha) {
25 | this.sha = sha;
26 | }
27 |
28 | public List getTree() {
29 | return tree;
30 | }
31 |
32 | public void setTree(List tree) {
33 | this.tree = tree;
34 | }
35 |
36 | public String getUrl() {
37 | return url;
38 | }
39 |
40 | public void setUrl(String url) {
41 | this.url = url;
42 | }
43 |
44 |
45 | @Override
46 | public String toString() {
47 | return "Tree{" +
48 | "sha='" + sha + '\'' +
49 | ", tree=" + tree +
50 | ", url='" + url + '\'' +
51 | '}';
52 | }
53 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/bean/event/BaseEvent.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.bean.event;
2 |
3 | import com.caij.codehub.bean.Entity;
4 | import com.caij.codehub.bean.Repository;
5 | import com.caij.codehub.bean.User;
6 |
7 | /**
8 | * Created by Caij on 2015/10/30.
9 | */
10 | public class BaseEvent extends Entity{
11 |
12 | private User sender;
13 | private Repository repository;
14 |
15 | public User getSender() {
16 | return sender;
17 | }
18 |
19 | public void setSender(User sender) {
20 | this.sender = sender;
21 | }
22 |
23 | public Repository getRepository() {
24 | return repository;
25 | }
26 |
27 | public void setRepository(Repository repository) {
28 | this.repository = repository;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/bean/event/DeploymentStatusEvent.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.bean.event;
2 |
3 | import com.caij.codehub.bean.Deployment;
4 | import com.caij.codehub.bean.DeploymentStatus;
5 |
6 | /**
7 | * Created by Caij on 2015/10/30.
8 | */
9 | public class DeploymentStatusEvent extends BaseEvent{
10 |
11 | private DeploymentStatus deployment_status;
12 | private Deployment deployment;
13 |
14 | public void setDeployment_status(DeploymentStatus deployment_status) {
15 | this.deployment_status = deployment_status;
16 | }
17 |
18 | public DeploymentStatus getDeployment_status() {
19 | return deployment_status;
20 | }
21 |
22 | public Deployment getDeployment() {
23 | return deployment;
24 | }
25 |
26 | public void setDeployment(Deployment deployment) {
27 | this.deployment = deployment;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/bean/event/DownloadEvent.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.bean.event;
2 |
3 | import com.caij.codehub.bean.Forkee;
4 |
5 | /**
6 | * Created by Caij on 2015/10/30.
7 | */
8 | public class DownloadEvent extends BaseEvent{
9 |
10 | private Forkee forkee;
11 |
12 | public Forkee getForkee() {
13 | return forkee;
14 | }
15 |
16 | public void setForkee(Forkee forkee) {
17 | this.forkee = forkee;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/bean/event/TeamAddEvent.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.bean.event;
2 |
3 | import com.caij.codehub.bean.Org;
4 | import com.caij.codehub.bean.Team;
5 |
6 | /**
7 | * Created by Caij on 2015/10/30.
8 | */
9 | public class TeamAddEvent extends BaseEvent{
10 | private Team team;
11 | private Org organization;
12 |
13 | public Team getTeam() {
14 | return team;
15 | }
16 |
17 | public void setTeam(Team team) {
18 | this.team = team;
19 | }
20 |
21 | public Org getOrganization() {
22 | return organization;
23 | }
24 |
25 | public void setOrganization(Org organization) {
26 | this.organization = organization;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/AuthenticationInteractor.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 | import com.android.volley.NetworkResponse;
4 | import com.caij.codehub.bean.Token;
5 |
6 | import java.util.List;
7 |
8 | /**
9 | * Created by Caij on 2015/8/25.
10 | */
11 | public interface AuthenticationInteractor extends Interactor {
12 | public void login(String username, String pwd, Object requestTag, InteractorCallBack interactorCallBack);
13 |
14 | public void logout(String base64UsernameAndPwd, String tokenId, Object requestTag, InteractorCallBack interactorCallBack);
15 |
16 | public void getHaveTokens(final String username, final String pwd, Object requestTag, final InteractorCallBack> interactorCallBack);
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/CommentActionInteractor.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 | import com.caij.codehub.bean.Comment;
4 |
5 | /**
6 | * Created by Caij on 2015/11/3.
7 | */
8 | public interface CommentActionInteractor extends Interactor {
9 |
10 | public void createCommentForIssue(String comment, String owner, String repo, String num, String token, Object requestTag, InteractorCallBack interactorCallBack);
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/CommentsInteractor.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 | import com.caij.codehub.bean.Comment;
4 |
5 | import java.util.List;
6 |
7 | /**
8 | * Created by Caij on 2015/10/31.
9 | */
10 | public interface CommentsInteractor extends Interactor {
11 |
12 | public void getIssuesComments(String owner, String repo, String issueNumber, Object requestTag, InteractorCallBack> interactorCallBack);
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/EventsInteractor.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 | import com.caij.codehub.bean.Page;
4 | import com.caij.codehub.bean.event.Event;
5 | import com.caij.codehub.bean.event.EventWrap;
6 |
7 | import java.util.List;
8 |
9 | /**
10 | * Created by Caij on 2015/9/24.
11 | */
12 | public interface EventsInteractor extends Interactor {
13 |
14 | public void getReceivedEvents(String username, String token, Page page, Object requestTag, InteractorCallBack> interactorCallBack);
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/FileTreeInteractor.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 | import com.caij.codehub.bean.Tree;
4 |
5 | /**
6 | * Created by Caij on 2015/11/2.
7 | */
8 | public interface FileTreeInteractor extends Interactor {
9 |
10 | public void loadFileTree(String name, String repo, String ref, Object requestTag, InteractorCallBack interactorCallBack);
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/FollowActionInteractor.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 | import com.android.volley.NetworkResponse;
4 |
5 | /**
6 | * Created by Caij on 2015/11/1.
7 | */
8 | public interface FollowActionInteractor extends Interactor {
9 |
10 | public void getFollowState(String token, String username, Object requestTag, InteractorCallBack interactorCallBack);
11 |
12 | public void followUser(String token, String username, Object requestTag, InteractorCallBack interactorCallBack);
13 |
14 | public void unfollowUser(String token, String username, Object requestTag, InteractorCallBack interactorCallBack);
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/Interactor.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 | /**
4 | * Created by Administrator on 2015/8/26.
5 | */
6 | public interface Interactor {
7 |
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/InteractorCallBack.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 | import com.android.volley.VolleyError;
4 |
5 | /**
6 | * Created by Caij on 2015/11/4.
7 | */
8 | public interface InteractorCallBack {
9 |
10 | public void onSuccess(E e);
11 |
12 | public void onLoading();
13 |
14 | public void onError(VolleyError error);
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/IssueInteractor.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 |
4 | import com.caij.codehub.bean.Issue;
5 |
6 | /**
7 | * Created by Caij on 2015/10/31.
8 | */
9 | public interface IssueInteractor extends Interactor {
10 |
11 | public void getIssue(String owner, String repo, String issueNumber, Object requestTag, InteractorCallBack interactorCallBack);
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/IssueListInteractor.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 | import com.caij.codehub.bean.Issue;
4 | import com.caij.codehub.bean.Page;
5 |
6 | import java.util.List;
7 |
8 | /**
9 | * Created by Caij on 2015/11/3.
10 | */
11 | public interface IssueListInteractor extends Interactor {
12 |
13 | public void getIssueList(String owner, String repoName, Page page, Object requestTag, InteractorCallBack> interactorCallBack);
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/RepositoryActionInteractor.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 | import com.android.volley.NetworkResponse;
4 |
5 | /**
6 | * Created by Caij on 2015/10/31.
7 | */
8 | public interface RepositoryActionInteractor extends Interactor {
9 |
10 | public void hasStarRepo(String owner, String repo, String token, Object requestTag, InteractorCallBack interactorCallBack);
11 |
12 | public void starRepo(String owner, String repo, String token, Object requestTag, InteractorCallBack interactorCallBack);
13 |
14 | public void unstarRepo(String owner, String repo, String token, Object requestTag, InteractorCallBack interactorCallBack);
15 |
16 | public void forkRepo(String owner, String repo, String token, Object requestTag, InteractorCallBack interactorCallBack);
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/RepositoryInfoInteractor.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 | import com.caij.codehub.bean.Repository;
4 |
5 | /**
6 | * Created by Caij on 2015/9/19.
7 | */
8 | public interface RepositoryInfoInteractor extends Interactor {
9 |
10 | public void getRepositoryInfo(String repositoryName, String owner, String token, Object requestTag, InteractorCallBack interactorCallBack);
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/RepositoryListInteractor.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 | import com.caij.codehub.bean.Page;
4 | import com.caij.codehub.bean.Repository;
5 |
6 | import java.util.List;
7 |
8 | /**
9 | * Created by Caij on 2015/9/18.
10 | */
11 | public interface RepositoryListInteractor extends Interactor {
12 |
13 | public void getUserStarredRepositories(String username, String token, Page page, Object requestTag, InteractorCallBack> interactorCallBack);
14 |
15 | public void getUserRepositories(String username, String token, Page page, Object requestTag, InteractorCallBack> interactorCallBack);
16 |
17 | public void getSearchRepository(String q, String sort, String order, Page page, Object requestTag, InteractorCallBack> interactorCallBack);
18 |
19 | public void getTrendingRepository(String since, String language,Object requestTag, InteractorCallBack> interactorCallBack);
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/UserInteractor.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 | import com.caij.codehub.bean.User;
4 |
5 | /**
6 | * Created by Caij on 2015/9/18.
7 | */
8 | public interface UserInteractor extends Interactor {
9 |
10 | public void getUserInfo(String token, String username, Object requestTag, InteractorCallBack interactorCallBack);
11 |
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/UserListInteractor.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor;
2 |
3 | import com.caij.codehub.bean.Page;
4 | import com.caij.codehub.bean.User;
5 |
6 | import java.util.List;
7 |
8 | /**
9 | * Created by Caij on 2015/9/18.
10 | */
11 | public interface UserListInteractor extends Interactor {
12 |
13 | public void getFollowers(String token, String username, Page page, Object requestTag, InteractorCallBack> interactorCallBack);
14 |
15 | public void getFollowing(String token, String username, Page page, Object requestTag, InteractorCallBack> interactorCallBack);
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/imp/CommentsInteractorImp.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor.imp;
2 |
3 | import com.android.volley.Request;
4 | import com.android.volley.Response;
5 | import com.android.volley.VolleyError;
6 | import com.caij.codehub.API;
7 | import com.caij.codehub.bean.Comment;
8 | import com.caij.codehub.interactor.CommentsInteractor;
9 | import com.caij.codehub.interactor.InteractorCallBack;
10 | import com.caij.lib.utils.VolleyManager;
11 | import com.caij.lib.volley.request.GsonRequest;
12 | import com.google.gson.reflect.TypeToken;
13 |
14 | import java.util.List;
15 |
16 | /**
17 | * Created by Caij on 2015/10/31.
18 | */
19 | public class CommentsInteractorImp implements CommentsInteractor {
20 |
21 |
22 | @Override
23 | public void getIssuesComments(String owner, String repo, String issueNumber, Object requestTag, final InteractorCallBack> interactorCallBack) {
24 | interactorCallBack.onLoading();
25 | String url = new StringBuilder().append(API.API_HOST).append("/repos/")
26 | .append(owner).append("/").append(repo).append("/issues/")
27 | .append(issueNumber).append("/comments").toString();
28 | GsonRequest> request = new GsonRequest>(Request.Method.GET, url, new TypeToken>() {
29 | }.getType(),
30 | new Response.Listener>() {
31 | @Override
32 | public void onResponse(List response) {
33 | interactorCallBack.onSuccess(response);
34 | }
35 | }, new Response.ErrorListener() {
36 | @Override
37 | public void onErrorResponse(VolleyError error) {
38 | interactorCallBack.onError(error);
39 | }
40 | });
41 | VolleyManager.addRequest(request, requestTag);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/imp/EventsInteractorImp.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor.imp;
2 |
3 | import com.android.volley.Request;
4 | import com.android.volley.Response;
5 | import com.android.volley.VolleyError;
6 | import com.caij.codehub.API;
7 | import com.caij.codehub.bean.Page;
8 | import com.caij.codehub.bean.event.Event;
9 | import com.caij.codehub.interactor.EventsInteractor;
10 | import com.caij.codehub.interactor.InteractorCallBack;
11 | import com.caij.codehub.request.EventRequest;
12 | import com.caij.lib.utils.VolleyManager;
13 |
14 | import java.util.HashMap;
15 | import java.util.List;
16 | import java.util.Map;
17 |
18 | /**
19 | * Created by Caij on 2015/9/24.
20 | */
21 | public class EventsInteractorImp implements EventsInteractor {
22 | @Override
23 | public void getReceivedEvents(String username, String token, Page page, Object requestTag, final InteractorCallBack> interactorCallBack) {
24 | interactorCallBack.onLoading();
25 | String url = API.API_HOST + "/users/" + username + "/received_events";
26 | Map head = new HashMap<>();
27 | API.configAuthorizationHead(head, token);
28 | Map params = new HashMap<>();
29 | params.put(API.PAGE, String.valueOf(page.getPageIndex()));
30 | params.put(API.PER_PAGE, String.valueOf(page.getPageDataCount()));
31 | EventRequest request = new EventRequest(Request.Method.GET, url, params, head, new Response.Listener>() {
32 | @Override
33 | public void onResponse(List response) {
34 | interactorCallBack.onSuccess(response);
35 | }
36 | }, new Response.ErrorListener() {
37 | @Override
38 | public void onErrorResponse(VolleyError error) {
39 | interactorCallBack.onError(error);
40 | }
41 | });
42 | VolleyManager.addRequest(request, requestTag);
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/imp/FileTreeInteractorImp.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor.imp;
2 |
3 | import android.text.TextUtils;
4 |
5 | import com.android.volley.Request;
6 | import com.android.volley.Response;
7 | import com.android.volley.VolleyError;
8 | import com.caij.codehub.API;
9 | import com.caij.codehub.bean.Tree;
10 | import com.caij.codehub.interactor.FileTreeInteractor;
11 | import com.caij.codehub.interactor.InteractorCallBack;
12 | import com.caij.lib.utils.VolleyManager;
13 | import com.caij.lib.volley.request.GsonRequest;
14 | import com.google.gson.reflect.TypeToken;
15 |
16 | /**
17 | * Created by Caij on 2015/11/2.
18 | */
19 | public class FileTreeInteractorImp implements FileTreeInteractor {
20 |
21 | @Override
22 | public void loadFileTree(String name, String repo, String ref, Object requestTag, final InteractorCallBack interactorCallBack) {
23 | interactorCallBack.onLoading();
24 | StringBuilder builder = new StringBuilder();
25 | builder.append(API.API_HOST).append("/repos/").append(name).append("/").
26 | append(repo).append("/git/trees/");
27 | if (!TextUtils.isEmpty(ref)) {
28 | builder.append(ref);
29 | }
30 | String url = builder.toString();
31 | GsonRequest request = new GsonRequest(Request.Method.GET, url, new TypeToken() {
32 | }.getType(), new Response.Listener() {
33 | @Override
34 | public void onResponse(Tree response) {
35 | interactorCallBack.onSuccess(response);
36 | }
37 | }, new Response.ErrorListener() {
38 | @Override
39 | public void onErrorResponse(VolleyError error) {
40 | interactorCallBack.onError(error);
41 | }
42 | });
43 | VolleyManager.addRequest(request, null);
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/imp/IssueInteractorImp.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor.imp;
2 |
3 | import com.android.volley.Request;
4 | import com.android.volley.Response;
5 | import com.android.volley.VolleyError;
6 | import com.caij.codehub.API;
7 | import com.caij.codehub.bean.Issue;
8 | import com.caij.codehub.interactor.InteractorCallBack;
9 | import com.caij.codehub.interactor.IssueInteractor;
10 | import com.caij.lib.utils.VolleyManager;
11 | import com.caij.lib.volley.request.GsonRequest;
12 | import com.google.gson.reflect.TypeToken;
13 |
14 | /**
15 | * Created by Caij on 2015/10/31.
16 | */
17 | public class IssueInteractorImp implements IssueInteractor {
18 |
19 | @Override
20 | public void getIssue(String owner, String repo, String issueNumber, Object requestTag, final InteractorCallBack interactorCallBack) {
21 | interactorCallBack.onLoading();
22 | String url = new StringBuilder().append(API.API_HOST).append("/repos/").append(owner)
23 | .append("/").append(repo).append("/issues/")
24 | .append(issueNumber).toString();
25 | GsonRequest request = new GsonRequest(Request.Method.GET, url, new TypeToken() {
26 | }.getType(), new Response.Listener() {
27 | @Override
28 | public void onResponse(Issue response) {
29 | interactorCallBack.onSuccess(response);
30 | }
31 | }, new Response.ErrorListener() {
32 | @Override
33 | public void onErrorResponse(VolleyError error) {
34 | interactorCallBack.onError(error);
35 | }
36 | });
37 | VolleyManager.addRequest(request, requestTag);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/imp/IssueListInteractorImp.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor.imp;
2 |
3 | import com.android.volley.Request;
4 | import com.android.volley.Response;
5 | import com.android.volley.VolleyError;
6 | import com.caij.codehub.API;
7 | import com.caij.codehub.bean.Issue;
8 | import com.caij.codehub.bean.Page;
9 | import com.caij.codehub.interactor.IssueListInteractor;
10 | import com.caij.codehub.interactor.InteractorCallBack;
11 | import com.caij.lib.utils.VolleyManager;
12 | import com.caij.lib.volley.request.GsonRequest;
13 | import com.google.gson.reflect.TypeToken;
14 |
15 | import java.util.HashMap;
16 | import java.util.List;
17 | import java.util.Map;
18 |
19 | /**
20 | * Created by Caij on 2015/11/3.
21 | */
22 | public class IssueListInteractorImp implements IssueListInteractor {
23 |
24 | @Override
25 | public void getIssueList(String owner, String repoName, Page page, Object requestTag, final InteractorCallBack> interactorCallBack) {
26 | interactorCallBack.onLoading();
27 | StringBuilder builder = new StringBuilder(API.API_HOST);
28 | builder.append("/repos/").append(owner).append("/").append(repoName).append("/").append("issues");
29 | String url = builder.toString();
30 |
31 | Map params = new HashMap<>();
32 | params.put(API.PAGE, String.valueOf(page.getPageIndex()));
33 | params.put(API.PER_PAGE, String.valueOf(page.getPageDataCount()));
34 |
35 | GsonRequest> request = new GsonRequest>(Request.Method.GET, url, params, new TypeToken>() {
36 | }.getType(),
37 | new Response.Listener>() {
38 | @Override
39 | public void onResponse(List response) {
40 | interactorCallBack.onSuccess(response);
41 | }
42 | }, new Response.ErrorListener() {
43 | @Override
44 | public void onErrorResponse(VolleyError error) {
45 | interactorCallBack.onError(error);
46 | }
47 | });
48 | VolleyManager.addRequest(request, requestTag);
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/imp/RepositoryInfoInteractorImp.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor.imp;
2 |
3 | import com.android.volley.Request;
4 | import com.android.volley.Response;
5 | import com.android.volley.VolleyError;
6 | import com.caij.codehub.API;
7 | import com.caij.codehub.bean.Repository;
8 | import com.caij.codehub.interactor.InteractorCallBack;
9 | import com.caij.codehub.interactor.RepositoryInfoInteractor;
10 | import com.caij.lib.utils.VolleyManager;
11 | import com.caij.lib.volley.request.GsonRequest;
12 | import com.google.gson.reflect.TypeToken;
13 |
14 | import java.util.HashMap;
15 | import java.util.Map;
16 |
17 | /**
18 | * Created by Caij on 2015/9/19.
19 | */
20 | public class RepositoryInfoInteractorImp implements RepositoryInfoInteractor {
21 |
22 | @Override
23 | public void getRepositoryInfo(String repositoryName, String owner, String token, Object requestTag, final InteractorCallBack interactorCallBack) {
24 | interactorCallBack.onLoading();
25 | String url = API.API_HOST + API.REPOSITORY_REPOS_URI + "/" + owner + "/" + repositoryName;
26 | Map head = new HashMap<>();
27 | API.configAuthorizationHead(head, token);
28 | GsonRequest request = new GsonRequest(Request.Method.GET, url, "", head, new TypeToken() {}.getType(),
29 | new Response.Listener() {
30 | @Override
31 | public void onResponse(Repository response) {
32 | interactorCallBack.onSuccess(response);
33 | }
34 | }, new Response.ErrorListener() {
35 | @Override
36 | public void onErrorResponse(VolleyError error) {
37 | interactorCallBack.onError(error);
38 | }
39 | });
40 | VolleyManager.addRequest(request, requestTag);
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/interactor/imp/UserInteractorImp.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.interactor.imp;
2 |
3 | import com.android.volley.Request;
4 | import com.android.volley.Response;
5 | import com.android.volley.VolleyError;
6 | import com.caij.codehub.API;
7 | import com.caij.codehub.bean.User;
8 | import com.caij.codehub.interactor.InteractorCallBack;
9 | import com.caij.codehub.interactor.UserInteractor;
10 | import com.caij.lib.utils.VolleyManager;
11 | import com.caij.lib.volley.request.GsonRequest;
12 | import com.google.gson.reflect.TypeToken;
13 |
14 | import java.util.HashMap;
15 | import java.util.Map;
16 |
17 | /**
18 | * Created by Caij on 2015/9/18.
19 | */
20 | public class UserInteractorImp implements UserInteractor {
21 |
22 | @Override
23 | public void getUserInfo(String token, String username, Object requestTag, final InteractorCallBack interactorCallBack) {
24 | interactorCallBack.onLoading();
25 | String url = API.API_HOST + "/users/" + username;
26 | Map head = new HashMap<>();
27 | API.configAuthorizationHead(head, token);
28 | GsonRequest request = new GsonRequest(Request.Method.GET, url, "", head, new TypeToken() {}.getType(),new Response.Listener() {
29 | @Override
30 | public void onResponse(User response) {
31 | interactorCallBack.onSuccess(response);
32 | }
33 | }, new Response.ErrorListener() {
34 | @Override
35 | public void onErrorResponse(VolleyError error) {
36 | interactorCallBack.onError(error);
37 | }
38 | });
39 | VolleyManager.addRequest(request, requestTag);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/CommentPresent.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present;
2 |
3 | import com.caij.codehub.bean.Comment;
4 | import com.caij.codehub.interactor.CommentActionInteractor;
5 | import com.caij.codehub.interactor.InteractorFactory;
6 | import com.caij.codehub.present.ui.CommentUi;
7 |
8 | /**
9 | * Author Caij
10 | * Email worldcaij@gmail.com
11 | * Created by Caij on 2015/11/17.
12 | */
13 | public class CommentPresent extends Present{
14 |
15 | private CommentActionInteractor mCommentActionInteractor;
16 |
17 | public CommentPresent(CommentUi ui) {
18 | super(ui);
19 | mCommentActionInteractor = InteractorFactory.newInteractorInstance(CommentActionInteractor.class);
20 | }
21 |
22 | public void createCommentForIssue(String comment, String owner, String repo, String num, String token) {
23 | mCommentActionInteractor.createCommentForIssue(comment, owner, repo, num, token, this, new DefaultInteractorCallback(mUi) {
24 | @Override
25 | public void onError(int msgId) {
26 | mUi.showProgressBarLoading(false);
27 | mUi.showError(msgId);
28 | }
29 |
30 | @Override
31 | public void onSuccess(Comment comment) {
32 | mUi.showProgressBarLoading(false);
33 | mUi.commentSuccess(comment);
34 | }
35 |
36 | @Override
37 | public void onLoading() {
38 | mUi.showProgressBarLoading(true);
39 | }
40 | });
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/CommentsPresent.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present;
2 |
3 | import com.caij.codehub.bean.Comment;
4 | import com.caij.codehub.interactor.CommentsInteractor;
5 | import com.caij.codehub.interactor.InteractorFactory;
6 | import com.caij.codehub.present.ui.ListUi;
7 |
8 | import java.util.List;
9 |
10 | /**
11 | * Author Caij
12 | * Email worldcaij@gmail.com
13 | * Created by Caij on 2015/11/16.
14 | */
15 | public class CommentsPresent extends ListPresent, Comment>{
16 |
17 | private CommentsInteractor mCommentsInteractor;
18 |
19 | public CommentsPresent(ListUi ui) {
20 | super(ui);
21 | mCommentsInteractor = InteractorFactory.newInteractorInstance(CommentsInteractor.class);
22 | }
23 |
24 | public void getIssuesComments(String owner, String repo, String issueNumber) {
25 | mCommentsInteractor.getIssuesComments(owner, repo, issueNumber, this, new DefaultInteractorCallback>(mUi) {
26 | @Override
27 | public void onError(int msgId) {
28 | defaultDealWithError(msgId, LoadType.FIRST);
29 | }
30 |
31 | @Override
32 | public void onSuccess(List comments) {
33 | defaultDealWithSuccess(comments, LoadType.FIRST);
34 | }
35 |
36 | @Override
37 | public void onLoading() {
38 | defaultDealWithLoading(LoadType.FIRST);
39 | }
40 | });
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/DefaultInteractorCallback.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present;
2 |
3 | import com.android.volley.AuthFailureError;
4 | import com.android.volley.NetworkError;
5 | import com.android.volley.ServerError;
6 | import com.android.volley.TimeoutError;
7 | import com.android.volley.VolleyError;
8 | import com.caij.codehub.R;
9 | import com.caij.codehub.present.ui.BaseUi;
10 | import com.caij.codehub.interactor.InteractorCallBack;
11 | import com.caij.lib.utils.VolleyManager;
12 | import com.caij.lib.volley.request.JsonParseError;
13 |
14 | /**
15 | * Created by Caij on 2015/11/16.
16 | */
17 | public abstract class DefaultInteractorCallback implements InteractorCallBack {
18 |
19 | private BaseUi mUi;
20 |
21 | public DefaultInteractorCallback(BaseUi ui) {
22 | this.mUi = ui;
23 | }
24 |
25 | @Override
26 | public void onError(VolleyError error) {
27 | onError(dealWithVolleyError(error));
28 | }
29 |
30 | private int dealWithVolleyError(VolleyError error) {
31 | int msgId;
32 | if (error instanceof ServerError || error instanceof JsonParseError) {
33 | msgId = R.string.server_error_hint;
34 | }else if(error instanceof NetworkError || error instanceof TimeoutError) {
35 | msgId = R.string.network_error_hint;
36 | }else if (error instanceof AuthFailureError) {
37 | msgId = R.string.account_error_hint;
38 | VolleyManager.cancelAllRequest();
39 | mUi.onAuthError();
40 | }else {
41 | msgId = R.string.data_load_error_hint;
42 | }
43 | return msgId;
44 | }
45 |
46 | public abstract void onError(int msgId);
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/EventsPresent.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present;
2 |
3 | import com.caij.codehub.bean.Page;
4 | import com.caij.codehub.bean.event.Event;
5 | import com.caij.codehub.bean.event.EventWrap;
6 | import com.caij.codehub.interactor.EventsInteractor;
7 | import com.caij.codehub.interactor.InteractorFactory;
8 | import com.caij.codehub.present.ui.ListUi;
9 |
10 | import java.util.List;
11 |
12 | /**
13 | * Author Caij
14 | * Email worldcaij@gmail.com
15 | * Created by Caij on 2015/11/16.
16 | */
17 | public class EventsPresent extends ListPresent, Event>{
18 |
19 | private EventsInteractor mEventsInteractor;
20 |
21 | public EventsPresent(ListUi ui) {
22 | super(ui);
23 | mEventsInteractor = InteractorFactory.newInteractorInstance(EventsInteractor.class);
24 | }
25 |
26 | public void getReceivedEvents(final LoadType loadType, String username, String token, Page page) {
27 | mEventsInteractor.getReceivedEvents(username, token, page, this, new DefaultInteractorCallback>(mUi) {
28 | @Override
29 | public void onError(int msgId) {
30 | defaultDealWithError(msgId, loadType);
31 | }
32 |
33 | @Override
34 | public void onSuccess(List eventWraps) {
35 | defaultDealWithSuccess(eventWraps, loadType);
36 | }
37 |
38 | @Override
39 | public void onLoading() {
40 | defaultDealWithLoading(loadType);
41 | }
42 | });
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/FileTreePresent.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present;
2 |
3 | import com.caij.codehub.bean.FileTreeItem;
4 | import com.caij.codehub.bean.Tree;
5 | import com.caij.codehub.interactor.FileTreeInteractor;
6 | import com.caij.codehub.interactor.InteractorFactory;
7 | import com.caij.codehub.present.ui.ListUi;
8 |
9 | /**
10 | * Author Caij
11 | * Email worldcaij@gmail.com
12 | * Created by Caij on 2015/11/16.
13 | */
14 | public class FileTreePresent extends ListPresent, FileTreeItem>{
15 |
16 | private FileTreeInteractor mFileTreeInteractor;
17 |
18 | public FileTreePresent(ListUi ui) {
19 | super(ui);
20 | mFileTreeInteractor = InteractorFactory.newInteractorInstance(FileTreeInteractor.class);
21 | }
22 |
23 | public void loadFileTree(String name, String repo, String ref) {
24 | mFileTreeInteractor.loadFileTree(name, repo, ref, this, new DefaultInteractorCallback(mUi) {
25 | @Override
26 | public void onError(int msgId) {
27 | defaultDealWithError(msgId, LoadType.FIRST);
28 | }
29 |
30 | @Override
31 | public void onSuccess(Tree tree) {
32 | defaultDealWithSuccess(tree.getTree(), LoadType.FIRST);
33 | }
34 |
35 | @Override
36 | public void onLoading() {
37 | defaultDealWithLoading(LoadType.FIRST);
38 | }
39 | });
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/ListPresent.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present;
2 |
3 | import com.caij.codehub.bean.Entity;
4 | import com.caij.codehub.present.ui.ListUi;
5 |
6 | import java.util.List;
7 |
8 | /**
9 | * Author Caij
10 | * Email worldcaij@gmail.com
11 | * Created by Caij on 2015/11/16.
12 | */
13 | public abstract class ListPresent, E extends Entity> extends Present{
14 |
15 | public ListPresent(UI ui) {
16 | super(ui);
17 | }
18 |
19 | protected void defaultDealWithError(int msgId, LoadType loadType) {
20 | switch (loadType) {
21 | case FIRST:
22 | mUi.showContentAnimLoading(false);
23 | mUi.showContentError();
24 | mUi.onFirstLoadError(msgId);
25 | break;
26 |
27 | case REFRESH:
28 | mUi.onRefreshError(msgId);
29 | break;
30 |
31 | case LOADMORE:
32 | mUi.onLoadMoreError(msgId);
33 | break;
34 | }
35 | }
36 |
37 | protected void defaultDealWithSuccess(List entities, LoadType loadType) {
38 | switch (loadType) {
39 | case FIRST:
40 | mUi.showContentAnimLoading(false);
41 | mUi.onFirstLoadSuccess(entities);
42 | if (entities == null || entities.size() == 0) {
43 | mUi.showEmptyView(true);
44 | } else {
45 | mUi.showEmptyView(false);
46 | }
47 | break;
48 |
49 | case REFRESH:
50 | mUi.onRefreshSuccess(entities);
51 | if (entities == null || entities.size() == 0) {
52 | mUi.showEmptyView(true);
53 | } else {
54 | mUi.showEmptyView(false);
55 | }
56 | break;
57 |
58 | case LOADMORE:
59 | mUi.onLoadMoreSuccess(entities);
60 | break;
61 | }
62 | }
63 |
64 | protected void defaultDealWithLoading(LoadType loadType) {
65 | switch (loadType) {
66 | case FIRST:
67 | mUi.showContentAnimLoading(true);
68 | break;
69 |
70 | case REFRESH:
71 | break;
72 |
73 | case LOADMORE:
74 | break;
75 | }
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/LoadType.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present;
2 |
3 | /**
4 | * Author Caij
5 | * Email worldcaij@gmail.com
6 | * Created by Caij on 2015/11/16.
7 | */
8 | public enum LoadType {
9 | FIRST, REFRESH, LOADMORE
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/MainPresent.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present;
2 |
3 | import com.caij.codehub.bean.User;
4 | import com.caij.codehub.interactor.InteractorFactory;
5 | import com.caij.codehub.interactor.UserInteractor;
6 | import com.caij.codehub.present.ui.MainUi;
7 |
8 | /**
9 | * Author Caij
10 | * Email worldcaij@gmail.com
11 | * Created by Caij on 2015/11/16.
12 | */
13 | public class MainPresent extends Present{
14 |
15 | protected final UserInteractor mUserInterctor;
16 |
17 | public MainPresent(MainUi ui) {
18 | super(ui);
19 | mUserInterctor = InteractorFactory.newInteractorInstance(UserInteractor.class);
20 | }
21 |
22 | public void getUserInfo(String token, String username) {
23 | mUserInterctor.getUserInfo(token, username, this, new DefaultInteractorCallback(mUi) {
24 | @Override
25 | public void onSuccess(User user) {
26 | mUi.onGetUserInfoSuccess(user);
27 | }
28 |
29 | @Override
30 | public void onLoading() {
31 |
32 | }
33 |
34 | @Override
35 | public void onError(int msgId) {
36 | mUi.showError(msgId);
37 | }
38 | });
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/Present.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present;
2 |
3 | import com.caij.codehub.present.ui.BaseUi;
4 | import com.caij.lib.utils.VolleyManager;
5 |
6 | import java.lang.ref.WeakReference;
7 |
8 | /**
9 | * Created by Caij on 2015/11/16.
10 | */
11 | public abstract class Present {
12 |
13 | public UI mUi;
14 |
15 | public Present(UI ui) {
16 | this.mUi = ui;
17 | if (ui == null) throw new RuntimeException("ui is null");
18 | }
19 |
20 | public void onDeath() {
21 | VolleyManager.cancelRequestByTag(this);
22 | mUi = null;
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/RepoIssuesPresent.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present;
2 |
3 | import com.caij.codehub.bean.Issue;
4 | import com.caij.codehub.bean.Page;
5 | import com.caij.codehub.interactor.InteractorFactory;
6 | import com.caij.codehub.interactor.IssueListInteractor;
7 | import com.caij.codehub.present.ui.ListUi;
8 |
9 | import java.util.List;
10 |
11 | /**
12 | * Author Caij
13 | * Email worldcaij@gmail.com
14 | * Created by Caij on 2015/11/16.
15 | */
16 | public class RepoIssuesPresent extends ListPresent, Issue>{
17 |
18 | private IssueListInteractor mIssueListInteractor;
19 |
20 | public RepoIssuesPresent(ListUi ui) {
21 | super(ui);
22 | mIssueListInteractor = InteractorFactory.newInteractorInstance(IssueListInteractor.class);
23 | }
24 |
25 | public void getIssueList(final LoadType loadType, String owner, String repoName, Page page) {
26 | mIssueListInteractor.getIssueList(owner, repoName, page, this, new DefaultInteractorCallback>(mUi) {
27 | @Override
28 | public void onError(int msgId) {
29 | defaultDealWithError(msgId, loadType);
30 | }
31 |
32 | @Override
33 | public void onSuccess(List issues) {
34 | defaultDealWithSuccess(issues, loadType);
35 | }
36 |
37 | @Override
38 | public void onLoading() {
39 | defaultDealWithLoading(loadType);
40 | }
41 | });
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/SettingPresent.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present;
2 |
3 | import com.android.volley.NetworkResponse;
4 | import com.caij.codehub.interactor.InteractorFactory;
5 | import com.caij.codehub.interactor.AuthenticationInteractor;
6 | import com.caij.codehub.present.ui.SettingUi;
7 |
8 | /**
9 | * Author Caij
10 | * Email worldcaij@gmail.com
11 | * Created by Caij on 2015/11/17.
12 | */
13 | public class SettingPresent extends Present{
14 |
15 | private final AuthenticationInteractor mAuthenticationInteractor;
16 |
17 | public SettingPresent(SettingUi ui) {
18 | super(ui);
19 | mAuthenticationInteractor = InteractorFactory.newInteractorInstance(AuthenticationInteractor.class);
20 | }
21 |
22 | public void logout(String base64UsernameAndPwd, String tokenId){
23 | mAuthenticationInteractor.logout(base64UsernameAndPwd, tokenId, this, new DefaultInteractorCallback(mUi) {
24 | @Override
25 | public void onError(int msgId) {
26 | mUi.showLogoutLoading(false);
27 | mUi.showError(msgId);
28 | }
29 |
30 | @Override
31 | public void onSuccess(NetworkResponse response) {
32 | mUi.showLogoutLoading(false);
33 | mUi.logoutSuccess();
34 | }
35 |
36 | @Override
37 | public void onLoading() {
38 | mUi.showLogoutLoading(true);
39 | }
40 | });
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/UsersPresent.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present;
2 |
3 | import com.caij.codehub.bean.Page;
4 | import com.caij.codehub.bean.User;
5 | import com.caij.codehub.interactor.InteractorFactory;
6 | import com.caij.codehub.interactor.UserListInteractor;
7 | import com.caij.codehub.present.ui.ListUi;
8 |
9 | import java.util.List;
10 |
11 | /**
12 | * Author Caij
13 | * Email worldcaij@gmail.com
14 | * Created by Caij on 2015/11/16.
15 | */
16 | public class UsersPresent extends ListPresent, User>{
17 |
18 | private UserListInteractor mUserListInteractor;
19 |
20 | public UsersPresent(ListUi ui) {
21 | super(ui);
22 | mUserListInteractor = InteractorFactory.newInteractorInstance(UserListInteractor.class);
23 | }
24 |
25 | public void getFollowers(final LoadType loadType, String token, String username, Page page) {
26 | mUserListInteractor.getFollowers(token, username, page, this, new DefaultInteractorCallback>(mUi) {
27 | @Override
28 | public void onError(int msgId) {
29 | defaultDealWithError(msgId, loadType);
30 | }
31 |
32 | @Override
33 | public void onSuccess(List users) {
34 | defaultDealWithSuccess(users, loadType);
35 | }
36 |
37 | @Override
38 | public void onLoading() {
39 | defaultDealWithLoading(loadType);
40 | }
41 | });
42 | }
43 |
44 | public void getFollowing(final LoadType loadType, String token, String username, Page page){
45 | mUserListInteractor.getFollowing(token, username, page, this, new DefaultInteractorCallback>(mUi) {
46 | @Override
47 | public void onError(int msgId) {
48 | defaultDealWithError(msgId, loadType);
49 | }
50 |
51 | @Override
52 | public void onSuccess(List users) {
53 | defaultDealWithSuccess(users, loadType);
54 | }
55 |
56 | @Override
57 | public void onLoading() {
58 | defaultDealWithLoading(loadType);
59 | }
60 | });
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/ui/BaseUi.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present.ui;
2 |
3 | /**
4 | * Created by Caij on 2015/11/16.
5 | */
6 | public interface BaseUi {
7 |
8 | public void onAuthError();
9 |
10 | public void showContentAnimLoading(boolean isVisible);
11 |
12 | public void showError(int msgId);
13 |
14 | public void showContentError();
15 |
16 | public void showProgressBarLoading(boolean isVisible);
17 |
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/ui/CommentUi.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present.ui;
2 |
3 | import com.caij.codehub.bean.Comment;
4 |
5 | /**
6 | * Author Caij
7 | * Email worldcaij@gmail.com
8 | * Created by Caij on 2015/11/17.
9 | */
10 | public interface CommentUi extends BaseUi{
11 |
12 | public void commentSuccess(Comment comment);
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/ui/ListUi.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present.ui;
2 |
3 | import com.caij.codehub.bean.Entity;
4 |
5 | import java.util.List;
6 |
7 | /**
8 | * Created by Caij on 2015/11/2.
9 | */
10 | public interface ListUi extends RecyclerViewUi, SwipeRefreshUi{
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/ui/MainUi.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present.ui;
2 |
3 | /**
4 | * Author Caij
5 | * Email worldcaij@gmail.com
6 | * Created by Caij on 2015/11/16.
7 | */
8 | public interface MainUi extends UserUi{
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/ui/RecyclerViewUi.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present.ui;
2 |
3 | import java.util.List;
4 |
5 | /**
6 | * Author: Caij
7 | * Email: worldcaij@gmail.com
8 | * Date: 2015/11/21
9 | * Description:
10 | */
11 | public interface RecyclerViewUi extends BaseUi{
12 |
13 | public void onFirstLoadSuccess(List entities);
14 |
15 | public void onFirstLoadError(int msgId);
16 |
17 | public void onLoadMoreSuccess(List entities);
18 |
19 | public void onLoadMoreError(int msgId);
20 |
21 | public void showEmptyView(boolean isVisible);
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/ui/RepositoryInfoUi.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present.ui;
2 |
3 | import com.caij.codehub.bean.Repository;
4 |
5 | /**
6 | * Author Caij
7 | * Email worldcaij@gmail.com
8 | * Created by Caij on 2015/11/16.
9 | */
10 | public interface RepositoryInfoUi extends BaseUi{
11 |
12 | public void getRepositoryInfoSuccess(Repository repository);
13 |
14 | public void getStarStateSuccess(boolean isStar);
15 |
16 | public void starSuccess();
17 |
18 | public void unstarSuccess();
19 |
20 | public void forkSuccess();
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/ui/SettingUi.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present.ui;
2 |
3 | /**
4 | * Author Caij
5 | * Email worldcaij@gmail.com
6 | * Created by Caij on 2015/11/17.
7 | */
8 | public interface SettingUi extends BaseUi{
9 |
10 | public void logoutSuccess();
11 |
12 | public void showLogoutLoading(boolean isVisible);
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/ui/SwipeRefreshUi.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present.ui;
2 |
3 | import java.util.List;
4 |
5 | /**
6 | * Author: Caij
7 | * Email: worldcaij@gmail.com
8 | * Date: 2015/11/21
9 | * Description:
10 | */
11 | public interface SwipeRefreshUi extends BaseUi{
12 |
13 | public void onRefreshSuccess(List entities);
14 |
15 | public void onRefreshError(int msgId);
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/ui/UserAndActionUi.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present.ui;
2 |
3 | /**
4 | * Author Caij
5 | * Email worldcaij@gmail.com
6 | * Created by Caij on 2015/11/16.
7 | */
8 | public interface UserAndActionUi extends UserUi{
9 |
10 | public void onGetFollowInfoSuccess(boolean isFollow);
11 | public void onGetFollowInfoError(boolean isFollow);
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/ui/UserInfoUi.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present.ui;
2 |
3 | /**
4 | * Author Caij
5 | * Email worldcaij@gmail.com
6 | * Created by Caij on 2015/11/16.
7 | */
8 | public interface UserInfoUi extends UserUi{
9 |
10 | public void onGetFollowStateSuccess(boolean isFollow);
11 | public void onFollowSuccess();
12 | public void onUnfollowSuccess();
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/ui/UserLoginUi.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present.ui;
2 |
3 | import com.caij.codehub.bean.Token;
4 |
5 | /**
6 | * Created by Caij on 2015/11/16.
7 | */
8 | public interface UserLoginUi extends BaseUi{
9 |
10 | public void onLoginSuccess(Token token);
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/present/ui/UserUi.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.present.ui;
2 |
3 | import com.caij.codehub.bean.User;
4 |
5 | /**
6 | * Author Caij
7 | * Email worldcaij@gmail.com
8 | * Created by Caij on 2015/11/16.
9 | */
10 | public interface UserUi extends BaseUi{
11 | public void onGetUserInfoSuccess(User user);
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/activity/AboutActivity.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.activity;
2 |
3 | import android.content.Intent;
4 | import android.content.pm.PackageInfo;
5 | import android.content.pm.PackageManager;
6 | import android.os.Bundle;
7 | import android.widget.TextView;
8 |
9 | import com.caij.codehub.API;
10 | import com.caij.codehub.R;
11 |
12 | import butterknife.Bind;
13 | import butterknife.OnClick;
14 |
15 | /**
16 | * Created by Caij on 2015/11/7.
17 | */
18 | public class AboutActivity extends BaseCodeHubToolBarActivity {
19 |
20 | @Bind(R.id.tv_version)
21 | TextView mTvVersion;
22 | @Bind(R.id.tv_contact)
23 | TextView mTvContact;
24 |
25 | @Override
26 | protected int getAttachLayoutId() {
27 | return R.layout.activity_about;
28 | }
29 |
30 | @Override
31 | protected void handleIntent(Intent intent) {
32 | setTitle(getString(R.string.about));
33 | try {
34 | PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
35 | mTvVersion.setText(getString(R.string.current_version) + ":" + packageInfo.versionName);
36 | } catch (PackageManager.NameNotFoundException e) {
37 | mTvVersion.setText(getString(R.string.current_version) + ":" + "UnKnow");
38 | }
39 | mTvContact.setText(R.string.my_email);
40 | }
41 |
42 | @OnClick(R.id.ll_open_source)
43 | public void onOpenSourceClick() {
44 | Intent intent = WebActivity.newIntent(this, getString(R.string.app_name), API.PROJECT_README_URL);
45 | startActivity(intent);
46 | }
47 |
48 | @OnClick(R.id.ll_source_code)
49 | public void onSourceCodeClick() {
50 | Intent intent = WebActivity.newIntent(this, getString(R.string.app_name), API.PROJECT_URL);
51 | startActivity(intent);
52 | }
53 |
54 | @OnClick(R.id.ll_about_me)
55 | public void onAboutMeClick() {
56 | Intent intent = WebActivity.newIntent(this, getString(R.string.about_me), getString(R.string.about_me_github));
57 | startActivity(intent);
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/activity/BaseCodeHubToolBarActivity.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.activity;
2 |
3 | import android.content.Intent;
4 | import android.os.Bundle;
5 | import android.support.v7.widget.Toolbar;
6 | import android.text.TextUtils;
7 | import android.view.MenuItem;
8 | import com.caij.codehub.R;
9 |
10 | import butterknife.Bind;
11 |
12 | /**
13 | * Created by Caij on 2015/9/19.
14 | */
15 | public abstract class BaseCodeHubToolBarActivity extends BaseCodeHubActivity{
16 |
17 | @Bind(R.id.toolbar)
18 | protected Toolbar mToolbar;
19 |
20 | @Override
21 | protected void onCreate(Bundle savedInstanceState) {
22 | super.onCreate(savedInstanceState);
23 | setSystemBarTintColor(getResources().getColor(R.color.color_primary_dark));
24 | setSupportActionBar(mToolbar);
25 | getSupportActionBar().setDisplayHomeAsUpEnabled(true);
26 |
27 | handleIntent(getIntent());
28 | }
29 |
30 | protected abstract void handleIntent(Intent intent);
31 |
32 | @Override
33 | protected int getContentLayoutId() {
34 | return R.layout.activity_base_codehub_toolbar;
35 | }
36 |
37 | @Override
38 | protected int getContentContainerViewId() {
39 | return R.id.base_code_hub_container;
40 | }
41 |
42 | @Override
43 | public boolean onOptionsItemSelected(MenuItem item) {
44 | switch (item.getItemId()) {
45 | case android.R.id.home:
46 | finish();
47 | return true;
48 | }
49 | return super.onOptionsItemSelected(item);
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/activity/CommentActivity.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.activity;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 | import android.widget.EditText;
6 |
7 | import com.caij.codehub.CodeHubPrefs;
8 | import com.caij.codehub.Constant;
9 | import com.caij.codehub.R;
10 | import com.caij.codehub.bean.Comment;
11 | import com.caij.codehub.present.CommentPresent;
12 | import com.caij.codehub.present.ui.CommentUi;
13 | import com.caij.lib.utils.ToastUtil;
14 |
15 | import butterknife.Bind;
16 | import butterknife.OnClick;
17 |
18 | /**
19 | * Created by Caij on 2015/11/3.
20 | */
21 | public class CommentActivity extends BaseCodeHubToolBarActivity implements CommentUi {
22 |
23 | @Bind(R.id.edit_comment)
24 | EditText mEditComment;
25 |
26 | private CommentPresent mCommentPresent;
27 | private String mRepo;
28 | private String mIssueNumber;
29 | private String mOwner;
30 | private String mToken;
31 |
32 | public static Intent newIntent(Activity activity,String owner, String repo, String issueNumber) {
33 | Intent intent = new Intent(activity, CommentActivity.class);
34 | intent.putExtra(Constant.REPO_NAME, repo);
35 | intent.putExtra(Constant.USER_NAME, owner);
36 | intent.putExtra(Constant.ISSUE_NUMBER, issueNumber);
37 | return intent;
38 | }
39 |
40 | @Override
41 | protected int getAttachLayoutId() {
42 | return R.layout.activity_comment;
43 | }
44 |
45 | @Override
46 | protected void handleIntent(Intent intent) {
47 | setTitle(getString(R.string.comment));
48 | mCommentPresent = new CommentPresent(this);
49 | mRepo = intent.getStringExtra(Constant.REPO_NAME);
50 | mIssueNumber = intent.getStringExtra(Constant.ISSUE_NUMBER);
51 | mOwner = intent.getStringExtra(Constant.USER_NAME);
52 | mToken = CodeHubPrefs.get().getToken();
53 | }
54 |
55 | @OnClick(R.id.btn_comment)
56 | public void onCommentClick() {
57 | mCommentPresent.createCommentForIssue(mEditComment.getText().toString(), mOwner, mRepo, mIssueNumber, mToken);
58 | }
59 |
60 | @Override
61 | public void commentSuccess(Comment comment) {
62 | ToastUtil.show(CommentActivity.this, R.string.comment_success);
63 | Intent intent = new Intent();
64 | intent.putExtra(Constant.COMMENT, comment);
65 | setResult(RESULT_OK, intent);
66 | finish();
67 | }
68 |
69 | @Override
70 | protected void onDestroy() {
71 | mCommentPresent.onDeath();
72 | super.onDestroy();
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/activity/FollowersActivity.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.activity;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 |
6 | import com.caij.codehub.Constant;
7 | import com.caij.codehub.R;
8 | import com.caij.codehub.present.UsersPresent;
9 | import com.caij.codehub.ui.fragment.FollowersFragment;
10 | import com.caij.codehub.ui.fragment.FollowingsFragment;
11 |
12 | /**
13 | * Created by Caij on 2015/9/25.
14 | */
15 | public class FollowersActivity extends BaseCodeHubToolBarActivity{
16 |
17 | public static Intent newIntent(Activity activity, String username) {
18 | Intent intent = new Intent(activity, FollowersActivity.class);
19 | intent.putExtra(Constant.USER_NAME, username);
20 | return intent;
21 | }
22 |
23 | @Override
24 | protected void handleIntent(Intent intent) {
25 | setTitle(getString(R.string.follows));
26 | FollowersFragment fragment = FollowersFragment.newInstance(getIntent().getStringExtra(Constant.USER_NAME));
27 | fragment.setUserVisibleHint(true);
28 | getSupportFragmentManager().beginTransaction()
29 | .replace(R.id.base_code_hub_container, fragment)
30 | .commit();
31 | }
32 |
33 | @Override
34 | protected int getAttachLayoutId() {
35 | return 0;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/activity/FollowingActivity.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.activity;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 |
6 | import com.caij.codehub.Constant;
7 | import com.caij.codehub.R;
8 | import com.caij.codehub.ui.fragment.FollowingsFragment;
9 |
10 | /**
11 | * Created by Caij on 2015/9/25.
12 | */
13 | public class FollowingActivity extends BaseCodeHubToolBarActivity{
14 |
15 | public static Intent newIntent(Activity activity, String username) {
16 | Intent intent = new Intent(activity, FollowingActivity.class);
17 | intent.putExtra(Constant.USER_NAME, username);
18 | return intent;
19 | }
20 |
21 | @Override
22 | protected void handleIntent(Intent intent) {
23 | setTitle(getString(R.string.following));
24 | FollowingsFragment fragment = FollowingsFragment.newInstance(getIntent().getStringExtra(Constant.USER_NAME));
25 | fragment.setUserVisibleHint(true);
26 | getSupportFragmentManager().beginTransaction()
27 | .replace(R.id.base_code_hub_container, fragment)
28 | .commit();
29 | }
30 |
31 | @Override
32 | protected int getAttachLayoutId() {
33 | return 0;
34 | }
35 |
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/activity/InitActivity.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.activity;
2 |
3 | import android.content.Intent;
4 | import android.os.Handler;
5 | import android.os.Bundle;
6 | import android.text.TextUtils;
7 |
8 | import com.caij.codehub.CodeHubPrefs;
9 | import com.caij.codehub.Constant;
10 | import com.caij.codehub.R;
11 | import com.caij.lib.utils.SPUtils;
12 |
13 | public class InitActivity extends BaseCodeHubActivity {
14 |
15 | public static final long SKIP_DELAY_TIME = 3000;
16 |
17 | private Handler mHandler;
18 |
19 | @Override
20 | protected void onCreate(Bundle savedInstanceState) {
21 | super.onCreate(savedInstanceState);
22 | setFullScreen();
23 | mHandler = new Handler();
24 | }
25 |
26 | @Override
27 | protected int getAttachLayoutId() {
28 | return R.layout.activity_init;
29 | }
30 |
31 | @Override
32 | protected void onStart() {
33 | super.onStart();
34 | mHandler.postDelayed(new Runnable() {
35 | @Override
36 | public void run() {
37 | Intent intent;
38 | if (TextUtils.isEmpty(CodeHubPrefs.get().getToken())) {
39 | intent = new Intent(InitActivity.this, LoginActivity.class);
40 | } else {
41 | intent = new Intent(InitActivity.this, MainActivity.class);
42 | }
43 | startActivity(intent);
44 | finish();
45 | }
46 | }, SKIP_DELAY_TIME);
47 | }
48 |
49 | @Override
50 | protected void onStop() {
51 | super.onStop();
52 | mHandler.removeCallbacksAndMessages(null);
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/activity/IssueInfoActivity.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.activity;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 | import android.os.Bundle;
6 | import android.support.v7.widget.LinearLayoutManager;
7 | import android.view.Menu;
8 | import android.view.MenuItem;
9 | import android.view.View;
10 | import android.widget.TextView;
11 |
12 |
13 | import com.caij.codehub.Constant;
14 | import com.caij.codehub.R;
15 | import com.caij.codehub.bean.Comment;
16 | import com.caij.codehub.interactor.CommentsInteractor;
17 | import com.caij.codehub.interactor.InteractorFactory;
18 | import com.caij.codehub.present.CommentsPresent;
19 | import com.caij.codehub.ui.adapter.BaseAdapter;
20 | import com.caij.codehub.ui.adapter.CommentAdapter;
21 | import com.caij.codehub.ui.fragment.IssueInfoFragment;
22 | import com.caij.codehub.widgets.recyclerview.LoadMoreRecyclerView;
23 |
24 |
25 | /**
26 | * Created by Caij on 2015/10/31.
27 | */
28 | public class IssueInfoActivity extends BaseCodeHubToolBarActivity {
29 |
30 | public static Intent newIntent(Activity activity, String owner, String repo, String issueNumber, String issueTitle, String issueBody) {
31 | Intent intent = new Intent(activity, IssueInfoActivity.class);
32 | intent.putExtra(Constant.REPO_NAME, repo);
33 | intent.putExtra(Constant.USER_NAME, owner);
34 | intent.putExtra(Constant.ISSUE_NUMBER, issueNumber);
35 | intent.putExtra(Constant.ISSUE_TITLE, issueTitle);
36 | intent.putExtra(Constant.ISSUE_BODY, issueBody);
37 | return intent;
38 | }
39 |
40 | @Override
41 | protected void handleIntent(Intent intent) {
42 | String repoName = intent.getStringExtra(Constant.REPO_NAME);
43 | String issueNumber = intent.getStringExtra(Constant.ISSUE_NUMBER);
44 |
45 | setTitle(repoName + " #" + issueNumber);
46 |
47 | IssueInfoFragment fragment = IssueInfoFragment.newInstance(intent.getStringExtra(Constant.USER_NAME), repoName,
48 | issueNumber, intent.getStringExtra(Constant.ISSUE_TITLE), intent.getStringExtra(Constant.ISSUE_BODY));
49 | fragment.setUserVisibleHint(true);
50 | getSupportFragmentManager().beginTransaction().replace(R.id.base_code_hub_container, fragment).commit();
51 | }
52 |
53 | @Override
54 | protected int getAttachLayoutId() {
55 | return 0;
56 | }
57 |
58 | }
59 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/activity/LoginActivity.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.activity;
2 |
3 | import android.app.ProgressDialog;
4 | import android.content.Intent;
5 | import android.widget.EditText;
6 |
7 | import com.caij.codehub.CodeHubPrefs;
8 | import com.caij.codehub.R;
9 | import com.caij.codehub.bean.Token;
10 | import com.caij.codehub.present.UserLoginPresent;
11 | import com.caij.codehub.present.ui.UserLoginUi;
12 |
13 | import butterknife.Bind;
14 | import butterknife.OnClick;
15 |
16 | /**
17 | * Created by Caij on 2015/8/26.
18 | */
19 | public class LoginActivity extends BaseCodeHubToolBarActivity implements UserLoginUi {
20 |
21 | @Bind(R.id.edit_username)
22 | EditText mEditUsername;
23 | @Bind(R.id.edit_pwd)
24 | EditText mEditPassword;
25 | private ProgressDialog mLoginDialog;
26 | private UserLoginPresent mLoginPresent;
27 |
28 | @Override
29 | protected void handleIntent(Intent intent) {
30 | getSupportActionBar().setDisplayHomeAsUpEnabled(false);
31 | setTitle(getString(R.string.action_login));
32 | mLoginPresent = new UserLoginPresent(this);
33 | mLoginDialog = new ProgressDialog(this);
34 | mLoginDialog.setMessage(getString(R.string.logining));
35 | mLoginDialog.setCancelable(false);
36 | mLoginDialog.setProgressStyle(R.style.AppCompatAlertDialogStyle);
37 | }
38 |
39 | @Override
40 | protected int getAttachLayoutId() {
41 | return R.layout.activity_login;
42 | }
43 |
44 | @OnClick(R.id.button_login)
45 | public void onSubmit() {
46 | mLoginPresent.login(mEditUsername.getText().toString(), mEditPassword.getText().toString());
47 | }
48 |
49 | @Override
50 | public void onLoginSuccess(Token token) {
51 | CodeHubPrefs.get().setToken(token);
52 | CodeHubPrefs.get().setUsernameAndPwd(mEditUsername.getText().toString(), mEditPassword.getText().toString());
53 | Intent intent = MainActivity.newIntent(this);
54 | startActivity(intent);
55 | finish();
56 | }
57 |
58 |
59 | @Override
60 | public void showProgressBarLoading(boolean isVisible) {
61 | if (isVisible) {
62 | mLoginDialog.show();
63 | }else {
64 | mLoginDialog.dismiss();
65 | }
66 | }
67 |
68 |
69 |
70 | @Override
71 | protected void onDestroy() {
72 | mLoginDialog = null;
73 | mLoginPresent.onDeath();
74 | super.onDestroy();
75 | }
76 |
77 | }
78 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/activity/PictureReviewActivity.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.activity;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 | import android.os.Bundle;
6 | import android.support.v4.view.ViewCompat;
7 | import android.view.View;
8 | import android.widget.ImageView;
9 |
10 | import com.bumptech.glide.Glide;
11 | import com.bumptech.glide.load.engine.DiskCacheStrategy;
12 | import com.caij.codehub.Constant;
13 | import com.caij.codehub.R;
14 |
15 | import butterknife.Bind;
16 | import butterknife.ButterKnife;
17 | import butterknife.OnClick;
18 |
19 | /**
20 | * Created by Caij on 2015/12/4.
21 | */
22 | public class PictureReviewActivity extends BaseCodeHubActivity{
23 |
24 | @Bind(R.id.imageview)
25 | ImageView mImageView;
26 |
27 | public static Intent newIntent(Activity activity, String imageUrl) {
28 | Intent intent = new Intent(activity, PictureReviewActivity.class);
29 | intent.putExtra(Constant.URL, imageUrl);
30 | return intent;
31 | }
32 |
33 | @Override
34 | protected void onCreate(Bundle savedInstanceState) {
35 | super.onCreate(savedInstanceState);
36 | setFullScreen();
37 | mContentContainer.setFitsSystemWindows(false);
38 | ButterKnife.bind(this);
39 | ViewCompat.setTransitionName(mImageView, Constant.TRANSIT_PIC);
40 | String url = getIntent().getStringExtra(Constant.URL);
41 | Glide.with(PictureReviewActivity.this).load(url).diskCacheStrategy(DiskCacheStrategy.ALL).dontAnimate().into(mImageView);
42 | }
43 |
44 | @Override
45 | protected int getAttachLayoutId() {
46 | return R.layout.activity_picture;
47 | }
48 |
49 |
50 | @OnClick(R.id.imageview)
51 | public void imageViewOnclick(View view) {
52 | onBackPressed();
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/activity/RepoIssuesActivity.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.activity;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 |
6 | import com.caij.codehub.Constant;
7 | import com.caij.codehub.R;
8 | import com.caij.codehub.ui.fragment.RepoIssuesFragment;
9 |
10 | /**
11 | * Created by Caij on 2015/11/3.
12 | */
13 | public class RepoIssuesActivity extends BaseCodeHubToolBarActivity {
14 |
15 | public static Intent newIntent(Activity activity, String owner, String repo) {
16 | Intent intent = new Intent(activity, RepoIssuesActivity.class);
17 | intent.putExtra(Constant.USER_NAME, owner);
18 | intent.putExtra(Constant.REPO_NAME, repo);
19 | return intent;
20 | }
21 |
22 | @Override
23 | protected int getAttachLayoutId() {
24 | return 0;
25 | }
26 |
27 | @Override
28 | protected void handleIntent(Intent intent) {
29 | setTitle(getString(R.string.issue));
30 | String owner = getIntent().getStringExtra(Constant.USER_NAME);
31 | String repo = getIntent().getStringExtra(Constant.REPO_NAME);
32 | RepoIssuesFragment fragment = RepoIssuesFragment.newInstance(owner, repo);
33 | fragment.setUserVisibleHint(true);
34 | getSupportFragmentManager().beginTransaction().replace(R.id.base_code_hub_container, fragment).commit();
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/activity/UserRepositoriesActivity.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.activity;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 | import android.os.Bundle;
6 | import android.support.v4.app.Fragment;
7 |
8 | import com.caij.codehub.Constant;
9 | import com.caij.codehub.R;
10 | import com.caij.codehub.ui.fragment.UserRepositoriesFragment;
11 |
12 |
13 | /**
14 | * Created by Caij on 2015/9/24.
15 | */
16 | public class UserRepositoriesActivity extends BaseCodeHubToolBarActivity {
17 |
18 |
19 | public static Intent newIntent(Activity activity, String username) {
20 | Intent intent = new Intent(activity, UserRepositoriesActivity.class);
21 | intent.putExtra(Constant.USER_NAME, username);
22 | return intent;
23 | }
24 |
25 | @Override
26 | protected void handleIntent(Intent intent) {
27 | String username = intent.getStringExtra(Constant.USER_NAME);
28 | setTitle(username);
29 | Fragment fragment = UserRepositoriesFragment.newInstance(username);
30 | fragment.setUserVisibleHint(true);
31 | getSupportFragmentManager().beginTransaction().add(R.id.base_code_hub_container, fragment).commit();
32 | }
33 |
34 | @Override
35 | protected int getAttachLayoutId() {
36 | return 0;
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/adapter/AvatarOnClickListener.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.adapter;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 | import android.view.View;
6 |
7 | import com.caij.codehub.bean.User;
8 | import com.caij.codehub.ui.activity.UserInfoActivity;
9 |
10 | /**
11 | * Author: Caij
12 | * Email: worldcaij@gmail.com
13 | * Date: 2015/11/19
14 | * Description:
15 | */
16 | public interface AvatarOnClickListener {
17 |
18 | public void onAvatarClick(View view, int position);
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/adapter/FileTreeAdapter.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.adapter;
2 |
3 | import android.content.Context;
4 | import android.support.v7.widget.RecyclerView;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.TextView;
8 |
9 | import com.caij.codehub.R;
10 | import com.caij.codehub.bean.FileTreeItem;
11 | import com.caij.codehub.widgets.recyclerview.RecyclerViewOnItemClickListener;
12 |
13 | import java.util.List;
14 |
15 | /**
16 | * Created by Caij on 2015/11/2.
17 | */
18 | public class FileTreeAdapter extends BaseAdapter{
19 |
20 | public FileTreeAdapter(Context context) {
21 | this(context, null);
22 | }
23 |
24 | public FileTreeAdapter(Context context, List entities) {
25 | super(context, entities);
26 | }
27 |
28 | public void onBindViewHolderReal(FileItemViewHolder holder, int position) {
29 | FileTreeItem treeItem = getItem(position);
30 | holder.treeItemName.setText(treeItem.getPath());
31 | if(treeItem.getType().equals(FileTreeItem.MODE_BLOB)){
32 | holder.treeItemImg.setText(context.getString(R.string.icon_readme));
33 | }else{
34 | holder.treeItemImg.setText(context.getString(R.string.icon_owner));
35 | }
36 | }
37 |
38 | @Override
39 | public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
40 | View convertView = mInflater.inflate(R.layout.item_treelist, parent, false);
41 | FileItemViewHolder viewHolder = new FileItemViewHolder(convertView, mOnItemClickListener);
42 | return viewHolder;
43 | }
44 |
45 | @Override
46 | public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
47 | onBindViewHolderReal((FileItemViewHolder) holder, position);
48 | }
49 |
50 | public static class FileItemViewHolder extends ViewHolder{
51 |
52 | public TextView treeItemImg;
53 | public TextView treeItemName;
54 |
55 | public FileItemViewHolder(View itemView, RecyclerViewOnItemClickListener onItemClickListener) {
56 | super(itemView, onItemClickListener);
57 | treeItemImg = (TextView) itemView.findViewById(R.id.treeItemImg);
58 | treeItemName = (TextView) itemView.findViewById(R.id.treeItemName);
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/adapter/IAdapter.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.adapter;
2 |
3 | import com.caij.codehub.bean.Entity;
4 |
5 | import java.util.List;
6 |
7 | /**
8 | * Created by Caij on 2015/9/23.
9 | */
10 | public interface IAdapter {
11 | public void addEntity(E entity);
12 | public void removeEntity(E entiry);
13 | public void removeEntities(List entities);
14 | public void addEntities(List entities);
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/adapter/UserAdapter.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.adapter;
2 |
3 | import android.content.Context;
4 | import android.support.v7.widget.RecyclerView;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.ImageView;
8 | import android.widget.TextView;
9 |
10 | import com.bumptech.glide.Glide;
11 | import com.bumptech.glide.load.engine.DiskCacheStrategy;
12 | import com.caij.codehub.R;
13 | import com.caij.codehub.bean.User;
14 | import com.caij.codehub.utils.AvatarUrlUtil;
15 | import com.caij.codehub.utils.CropCircleTransformation;
16 | import com.caij.codehub.widgets.recyclerview.RecyclerViewOnItemClickListener;
17 |
18 | import java.util.List;
19 |
20 | import butterknife.Bind;
21 | import butterknife.ButterKnife;
22 |
23 | /**
24 | * Created by Caij on 2015/9/24.
25 | */
26 | public class UserAdapter extends BaseAdapter {
27 |
28 | private final CropCircleTransformation cropCircleTransformation;
29 |
30 | public UserAdapter(Context context) {
31 | this(context, null);
32 | }
33 |
34 | public UserAdapter(Context context, List entities) {
35 | super(context, entities);
36 | cropCircleTransformation = new CropCircleTransformation(context);
37 | }
38 |
39 | public void onBindViewHolderReal(UserViewHolder holder, int i) {
40 | User user = getItem(i);
41 | holder.tvUserName.setText(user.getLogin());
42 | Glide.with(context).load(AvatarUrlUtil.restoreAvatarUrl(user.getAvatar_url())).placeholder(R.drawable.ic_default_circle_head_image).diskCacheStrategy(DiskCacheStrategy.ALL).
43 | bitmapTransform(cropCircleTransformation).into(holder.imgUserAvatar);
44 | }
45 |
46 | @Override
47 | public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
48 | View view = mInflater.inflate(R.layout.item_user, parent, false);
49 | UserViewHolder holder= new UserViewHolder(view, mOnItemClickListener);
50 | return holder;
51 | }
52 |
53 | @Override
54 | public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
55 | onBindViewHolderReal((UserViewHolder) holder, position);
56 | }
57 |
58 | public static class UserViewHolder extends ViewHolder{
59 |
60 | @Bind(R.id.img_user_avatar)
61 | ImageView imgUserAvatar;
62 | @Bind(R.id.tv_user_name)
63 | TextView tvUserName;
64 |
65 | public UserViewHolder(View itemView, RecyclerViewOnItemClickListener onItemClickListener) {
66 | super(itemView, onItemClickListener);
67 | ButterKnife.bind(this, itemView);
68 | }
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/fragment/BaseFragment.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.fragment;
2 |
3 |
4 | import android.support.v4.app.Fragment;
5 |
6 |
7 | /**
8 | * Created by Administrator on 2015/8/24.
9 | */
10 | public class BaseFragment extends Fragment{
11 |
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/fragment/FollowersFragment.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.fragment;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.view.View;
6 |
7 | import com.caij.codehub.CodeHubPrefs;
8 | import com.caij.codehub.Constant;
9 | import com.caij.codehub.present.LoadType;
10 | import com.caij.codehub.present.UsersPresent;
11 |
12 | /**
13 | * Author Caij
14 | * Email worldcaij@gmail.com
15 | * Created by Caij on 2015/11/18.
16 | */
17 | public class FollowersFragment extends UsersFragment{
18 |
19 |
20 | private String mUsername;
21 | private String mToken;
22 | private UsersPresent mUsersPresent;
23 |
24 | public static FollowersFragment newInstance(String username) {
25 | FollowersFragment followersFragment = new FollowersFragment();
26 | Bundle bundle = new Bundle();
27 | bundle.putString(Constant.USER_NAME, username);
28 | followersFragment.setArguments(bundle);
29 | return followersFragment;
30 | }
31 |
32 | @Override
33 | public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
34 | super.onViewCreated(view, savedInstanceState);
35 | mUsername = getArguments().getString(Constant.USER_NAME);
36 | mToken = CodeHubPrefs.get().getToken();
37 | mUsersPresent = new UsersPresent(this);
38 | }
39 |
40 | @Override
41 | protected void onUserFirstVisible() {
42 | mUsersPresent.getFollowers(LoadType.FIRST, mToken, mUsername, mPage);
43 | }
44 |
45 | @Override
46 | public void onLoadMore() {
47 | mUsersPresent.getFollowers(LoadType.LOADMORE, mToken, mUsername, mPage);
48 | }
49 |
50 | @Override
51 | public void onRefresh() {
52 | mUsersPresent.getFollowers(LoadType.REFRESH, mToken, mUsername, mPage.createRefreshPage());
53 | }
54 |
55 | @Override
56 | public void onReFreshBtnClick(View view) {
57 | super.onReFreshBtnClick(view);
58 | mUsersPresent.getFollowers(LoadType.FIRST, mToken, mUsername, mPage);
59 | }
60 |
61 | @Override
62 | public void onDestroyView() {
63 | mUsersPresent.onDeath();
64 | super.onDestroyView();
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/fragment/FollowingsFragment.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.fragment;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.view.View;
6 |
7 | import com.caij.codehub.CodeHubPrefs;
8 | import com.caij.codehub.Constant;
9 | import com.caij.codehub.present.LoadType;
10 | import com.caij.codehub.present.UsersPresent;
11 |
12 | /**
13 | * Author Caij
14 | * Email worldcaij@gmail.com
15 | * Created by Caij on 2015/11/18.
16 | */
17 | public class FollowingsFragment extends UsersFragment{
18 |
19 | private String mUsername;
20 | private String mToken;
21 | private UsersPresent mUsersPresent;
22 |
23 | public static FollowingsFragment newInstance(String username) {
24 | FollowingsFragment followingsFragment = new FollowingsFragment();
25 | Bundle bundle = new Bundle();
26 | bundle.putString(Constant.USER_NAME, username);
27 | followingsFragment.setArguments(bundle);
28 | return followingsFragment;
29 | }
30 |
31 | @Override
32 | public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
33 | super.onViewCreated(view, savedInstanceState);
34 | mUsername = getArguments().getString(Constant.USER_NAME);
35 | mToken = CodeHubPrefs.get().getToken();
36 | mUsersPresent = new UsersPresent(this);
37 | }
38 |
39 | @Override
40 | protected void onUserFirstVisible() {
41 | mUsersPresent.getFollowing(LoadType.FIRST, mToken, mUsername, mPage);
42 | }
43 |
44 | @Override
45 | public void onLoadMore() {
46 | mUsersPresent.getFollowing(LoadType.LOADMORE, mToken, mUsername, mPage);
47 | }
48 |
49 | @Override
50 | public void onRefresh() {
51 | mUsersPresent.getFollowing(LoadType.REFRESH, mToken, mUsername, mPage.createRefreshPage());
52 | }
53 |
54 | @Override
55 | public void onReFreshBtnClick(View view) {
56 | super.onReFreshBtnClick(view);
57 | mUsersPresent.getFollowing(LoadType.FIRST, mToken, mUsername, mPage);
58 | }
59 |
60 | @Override
61 | public void onDestroyView() {
62 | mUsersPresent.onDeath();
63 | super.onDestroyView();
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/fragment/LazyFragment.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.fragment;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 |
6 | /**
7 | * Created by Caij on 2015/9/18.
8 | */
9 | public abstract class LazyFragment extends BaseCodeHubFragment{
10 |
11 | private boolean isFirstVisible = true;
12 | private boolean isPrepared = false;
13 |
14 | @Override
15 | public void onActivityCreated(@Nullable Bundle savedInstanceState) {
16 | super.onActivityCreated(savedInstanceState);
17 | initPrepare();
18 | }
19 |
20 | @Override
21 | public void setUserVisibleHint(boolean isVisibleToUser) {
22 | super.setUserVisibleHint(isVisibleToUser);
23 | if (isVisibleToUser) {
24 | if (isFirstVisible) {
25 | isFirstVisible = false;
26 | initPrepare();
27 | }
28 | }
29 | }
30 |
31 | private synchronized void initPrepare() {
32 | if (isPrepared) {
33 | onUserFirstVisible();
34 | } else {
35 | isPrepared = true;
36 | }
37 | }
38 |
39 | protected abstract void onUserFirstVisible();
40 | }
41 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/fragment/SwipeRefreshRecyclerViewFragment.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.fragment;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.support.v4.app.Fragment;
6 | import android.support.v4.widget.SwipeRefreshLayout;
7 | import android.view.View;
8 | import android.view.ViewParent;
9 | import android.widget.FrameLayout;
10 |
11 | import com.caij.codehub.R;
12 | import com.caij.codehub.bean.Entity;
13 | import com.caij.codehub.present.ui.ListUi;
14 | import com.caij.codehub.present.ui.SwipeRefreshUi;
15 |
16 | import java.util.List;
17 |
18 | import butterknife.Bind;
19 |
20 | /**
21 | * Created by Caij on 2015/11/4.
22 | */
23 | public abstract class SwipeRefreshRecyclerViewFragment extends RecyclerViewFragment implements SwipeRefreshUi, ListUi, SwipeRefreshLayout.OnRefreshListener {
24 |
25 | @Bind(R.id.swipe_refresh_layout)
26 | SwipeRefreshLayout mSwipeRefreshLayout;
27 |
28 | @Override
29 | protected int getAttachLayoutId() {
30 | return R.layout.include_refresh_recycle_view;
31 | }
32 |
33 | @Override
34 | public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
35 | super.onViewCreated(view, savedInstanceState);
36 | mSwipeRefreshLayout.setOnRefreshListener(this);
37 | mSwipeRefreshLayout.setColorSchemeColors(
38 | getResources().getColor(R.color.gplus_color_1),
39 | getResources().getColor(R.color.gplus_color_2),
40 | getResources().getColor(R.color.gplus_color_3),
41 | getResources().getColor(R.color.gplus_color_4));
42 |
43 | }
44 |
45 | @Override
46 | public void onRefreshSuccess(List entities) {
47 | mSwipeRefreshLayout.setRefreshing(false);
48 | getRecyclerViewAdapter().setEntities(entities);
49 | getRecyclerViewAdapter().notifyDataSetChanged();
50 | }
51 |
52 | @Override
53 | public void onRefreshError(int msgId) {
54 | showError(msgId);
55 | mSwipeRefreshLayout.setRefreshing(false);
56 | }
57 |
58 | }
59 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/fragment/UserRepositoriesFragment.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.fragment;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.view.View;
6 |
7 | import com.caij.codehub.CodeHubPrefs;
8 | import com.caij.codehub.Constant;
9 | import com.caij.codehub.present.LoadType;
10 | import com.caij.codehub.present.RepositoriesPresent;
11 | import com.caij.lib.utils.CheckValueUtil;
12 |
13 | /**
14 | * Created by Caij on 2015/9/21.
15 | */
16 | public class UserRepositoriesFragment extends RepositoriesFragment {
17 |
18 | protected String mUsername;
19 | protected String mToken;
20 | private RepositoriesPresent mRepositoriesPresent;
21 |
22 | public static RepositoriesFragment newInstance(String username) {
23 | CheckValueUtil.check(username);
24 | Bundle bundle = new Bundle();
25 | bundle.putString(Constant.USER_NAME, username);
26 | RepositoriesFragment fragment = new UserRepositoriesFragment();
27 | fragment.setArguments(bundle);
28 | return fragment;
29 | }
30 |
31 | @Override
32 | public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
33 | super.onViewCreated(view, savedInstanceState);
34 | mUsername = getArguments().getString(Constant.USER_NAME);
35 | mToken = CodeHubPrefs.get().getToken();
36 | mRepositoriesPresent = new RepositoriesPresent(this);
37 | }
38 |
39 | @Override
40 | protected void onUserFirstVisible() {
41 | mRepositoriesPresent.getUserRepositories(LoadType.FIRST, mUsername, mToken, mPage);
42 | }
43 |
44 | @Override
45 | public void onRefresh() {
46 | mRepositoriesPresent.getUserRepositories(LoadType.REFRESH, mUsername, mToken, mPage.createRefreshPage());
47 | }
48 |
49 | @Override
50 | public void onReFreshBtnClick(View view) {
51 | super.onReFreshBtnClick(view);
52 | mRepositoriesPresent.getUserRepositories(LoadType.FIRST, mUsername, mToken, mPage);
53 | }
54 |
55 | @Override
56 | public void onLoadMore() {
57 | mRepositoriesPresent.getUserRepositories(LoadType.LOADMORE, mUsername, mToken, mPage);
58 | }
59 |
60 | @Override
61 | public void onDestroyView() {
62 | mRepositoriesPresent.onDeath();
63 | super.onDestroyView();
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/ui/fragment/UserStarredRepositoriesFragment.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.ui.fragment;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.view.View;
6 |
7 | import com.caij.codehub.CodeHubPrefs;
8 | import com.caij.codehub.Constant;
9 | import com.caij.codehub.present.LoadType;
10 | import com.caij.codehub.present.RepositoriesPresent;
11 | import com.caij.lib.utils.CheckValueUtil;
12 |
13 |
14 | /**
15 | * Created by Caij on 2015/9/21.
16 | */
17 | public class UserStarredRepositoriesFragment extends RepositoriesFragment {
18 |
19 | protected String mUsername;
20 | protected String mToken;
21 | private RepositoriesPresent mRepositoriesPresent;
22 |
23 | public static RepositoriesFragment newInstance(String username) {
24 | CheckValueUtil.check(username);
25 | Bundle bundle = new Bundle();
26 | bundle.putString(Constant.USER_NAME, username);
27 | RepositoriesFragment fragment = new UserStarredRepositoriesFragment();
28 | fragment.setArguments(bundle);
29 | return fragment;
30 | }
31 |
32 |
33 | @Override
34 | public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
35 | super.onViewCreated(view, savedInstanceState);
36 | mUsername = getArguments().getString(Constant.USER_NAME);
37 | mToken = CodeHubPrefs.get().getToken();
38 | mRepositoriesPresent = new RepositoriesPresent(this);
39 | }
40 |
41 | @Override
42 | protected void onUserFirstVisible() {
43 | mRepositoriesPresent.getUserStarredRepositories(LoadType.FIRST, mUsername, mToken, mPage);
44 | }
45 |
46 | @Override
47 | public void onRefresh() {
48 | mRepositoriesPresent.getUserStarredRepositories(LoadType.REFRESH, mUsername, mToken, mPage.createRefreshPage());
49 | }
50 |
51 | @Override
52 | public void onReFreshBtnClick(View view) {
53 | super.onReFreshBtnClick(view);
54 | mRepositoriesPresent.getUserStarredRepositories(LoadType.FIRST, mUsername, mToken, mPage);
55 | }
56 |
57 | @Override
58 | public void onLoadMore() {
59 | mRepositoriesPresent.getUserStarredRepositories(LoadType.LOADMORE, mUsername, mToken, mPage);
60 | }
61 |
62 | @Override
63 | public void onDestroyView() {
64 | mRepositoriesPresent.onDeath();
65 | super.onDestroyView();
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/utils/AvatarUrlUtil.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.utils;
2 |
3 | import java.net.MalformedURLException;
4 | import java.net.URL;
5 |
6 | /**
7 | * Created by Caij on 2015/12/4.
8 | * https://avatars.githubusercontent.com/u/10348598?v=3 same as https://avatars.githubusercontent.com/u/10348598
9 | * lead to Glide load image twice
10 | */
11 | public class AvatarUrlUtil {
12 |
13 | public static String restoreAvatarUrl(String stringUrl) {
14 | try {
15 | StringBuilder sb = new StringBuilder();
16 | URL url = new URL(stringUrl);
17 | sb.append(url.getProtocol()).append("://").append(url.getHost()).append(url.getPath());
18 | return sb.toString();
19 | } catch (MalformedURLException e) {
20 | return stringUrl;
21 | }
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/utils/DensityUtil.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.utils;
2 |
3 | import android.content.Context;
4 |
5 | /**
6 | * Author: Caij
7 | * Email: worldcaij@gmail.com
8 | * Date: 2015/11/21
9 | * Description:
10 | */
11 | public class DensityUtil {
12 |
13 |
14 | public static int dip2px(Context context, float dpValue) {
15 | final float scale = context.getResources().getDisplayMetrics().density;
16 | return (int) (dpValue * scale + 0.5f);
17 | }
18 |
19 | public static int px2dip(Context context, float pxValue) {
20 | final float scale = context.getResources().getDisplayMetrics().density;
21 | return (int) (pxValue / scale + 0.5f);
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/utils/MyGlideModule.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.utils;
2 |
3 | import android.content.Context;
4 |
5 | import com.bumptech.glide.Glide;
6 | import com.bumptech.glide.GlideBuilder;
7 | import com.bumptech.glide.integration.okhttp.OkHttpUrlLoader;
8 | import com.bumptech.glide.load.model.GlideUrl;
9 | import com.bumptech.glide.module.GlideModule;
10 | import com.bumptech.glide.request.target.ViewTarget;
11 | import com.caij.codehub.R;
12 |
13 | import java.io.InputStream;
14 |
15 |
16 | /**
17 | * Created by Caij on 15/8/14.
18 | */
19 | public class MyGlideModule implements GlideModule {
20 |
21 | @Override
22 | public void applyOptions(Context context, GlideBuilder builder) {
23 | ViewTarget.setTagId(R.id.glide_view_tag_id);
24 | }
25 |
26 | @Override
27 | public void registerComponents(Context context, Glide glide) {
28 | glide.register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(OkHttpClientProvider.getOkHttpClient()));
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/utils/OkHttpClientProvider.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.utils;
2 |
3 | import com.caij.lib.utils.LogUtil;
4 | import com.squareup.okhttp.Interceptor;
5 | import com.squareup.okhttp.OkHttpClient;
6 |
7 | /**
8 | * Created by Caij on 2015/10/30.
9 | */
10 | public class OkHttpClientProvider {
11 |
12 | private static final String TAG = "OkHttpClientProvider";
13 |
14 | private static OkHttpClient mOkHttpClient;
15 |
16 | public static OkHttpClient getOkHttpClient() {
17 | if (mOkHttpClient == null) {
18 | mOkHttpClient = new OkHttpClient();
19 | try {
20 | // only debug use
21 | Class c = Class.forName("com.facebook.stetho.okhttp.StethoInterceptor");
22 | mOkHttpClient.networkInterceptors().add((Interceptor) c.newInstance());
23 | } catch (Exception e) {
24 | LogUtil.e(TAG, "com.facebook.stetho.okhttp.StethoInterceptor not found");
25 | }
26 | }
27 | return mOkHttpClient;
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/utils/TextTypeFaceUtils.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.utils;
2 |
3 | import android.content.Context;
4 | import android.graphics.Typeface;
5 |
6 | /**
7 | * Created by Caij on 2015/9/19.
8 | */
9 | public class TextTypeFaceUtils {
10 |
11 | private static Typeface mTypeface;
12 |
13 | public static Typeface getGithubTypeFace(Context context) {
14 | if (mTypeface == null) {
15 | mTypeface = Typeface.createFromAsset(context.getAssets(), "octicons.ttf");
16 | }
17 | return mTypeface;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/utils/TimeUtils.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.utils;
2 |
3 | import android.text.format.DateUtils;
4 |
5 | import java.text.SimpleDateFormat;
6 | import java.util.Date;
7 |
8 | import static android.text.format.DateUtils.FORMAT_NUMERIC_DATE;
9 | import static android.text.format.DateUtils.FORMAT_SHOW_DATE;
10 | import static android.text.format.DateUtils.FORMAT_SHOW_YEAR;
11 | import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
12 |
13 | /**
14 | * Utilities for dealing with dates and times
15 | */
16 | public class TimeUtils {
17 |
18 | public final static String PATTERN = "yyyy-MM-dd";
19 |
20 | /**
21 | * Get relative time for date
22 | *
23 | * @param date
24 | * @return relative time
25 | */
26 | public static CharSequence getRelativeTime(final Date date) {
27 | long now = System.currentTimeMillis();
28 | if (Math.abs(now - date.getTime()) > 60000)
29 | return DateUtils.getRelativeTimeSpanString(date.getTime(), now,
30 | MINUTE_IN_MILLIS, FORMAT_SHOW_DATE | FORMAT_SHOW_YEAR
31 | | FORMAT_NUMERIC_DATE);
32 | else
33 | return "just now";
34 | }
35 |
36 | /**
37 | * Get relative time for date
38 | *
39 | * @param date
40 | */
41 | public static CharSequence getStringTime(final Date date) {
42 | SimpleDateFormat dateFormat = new SimpleDateFormat(PATTERN);
43 | return dateFormat.format(date);
44 | }
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/widgets/CollapsingToolbarLayout.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.widgets;
2 |
3 | import android.content.Context;
4 | import android.support.v4.view.ViewCompat;
5 | import android.support.v4.view.WindowInsetsCompat;
6 | import android.util.AttributeSet;
7 | import android.view.View;
8 |
9 | /**
10 | * Created by Caij on 2015/12/9.
11 | */
12 | public class CollapsingToolbarLayout extends android.support.design.widget.CollapsingToolbarLayout{
13 |
14 | public CollapsingToolbarLayout(Context context) {
15 | super(context);
16 | }
17 |
18 | public CollapsingToolbarLayout(Context context, AttributeSet attrs) {
19 | super(context, attrs);
20 | }
21 |
22 | public CollapsingToolbarLayout(Context context, AttributeSet attrs, int defStyleAttr) {
23 | super(context, attrs, defStyleAttr);
24 |
25 |
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/widgets/FloatingActionButton.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.widgets;
2 |
3 | import android.content.Context;
4 | import android.support.annotation.Nullable;
5 | import android.util.AttributeSet;
6 |
7 | /**
8 | * Created by Caij on 2015/12/8.
9 | */
10 | public class FloatingActionButton extends android.support.design.widget.FloatingActionButton{
11 | public FloatingActionButton(Context context) {
12 | super(context);
13 | }
14 |
15 | public FloatingActionButton(Context context, AttributeSet attrs) {
16 | super(context, attrs);
17 | }
18 |
19 | public FloatingActionButton(Context context, AttributeSet attrs, int defStyleAttr) {
20 | super(context, attrs, defStyleAttr);
21 | }
22 |
23 | @Override
24 | public void hide() {
25 |
26 | }
27 |
28 | @Override
29 | public void hide(@Nullable OnVisibilityChangedListener listener) {
30 |
31 | }
32 |
33 | @Override
34 | public void show() {
35 | }
36 |
37 | @Override
38 | public void show(@Nullable OnVisibilityChangedListener listener) {
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/widgets/GithubTypeFaceTextView.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.widgets;
2 |
3 | import android.content.Context;
4 | import android.util.AttributeSet;
5 | import android.widget.TextView;
6 |
7 | import com.caij.codehub.utils.TextTypeFaceUtils;
8 |
9 | /**
10 | * Created by Caij on 2015/10/29.
11 | */
12 | public class GithubTypeFaceTextView extends TextView{
13 | public GithubTypeFaceTextView(Context context) {
14 | super(context);
15 | initTypeFace(context);
16 | }
17 |
18 | public GithubTypeFaceTextView(Context context, AttributeSet attrs) {
19 | super(context, attrs);
20 | initTypeFace(context);
21 | }
22 |
23 | public GithubTypeFaceTextView(Context context, AttributeSet attrs, int defStyleAttr) {
24 | super(context, attrs, defStyleAttr);
25 | initTypeFace(context);
26 | }
27 |
28 | private void initTypeFace(Context context) {
29 | setTypeface(TextTypeFaceUtils.getGithubTypeFace(context));
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/widgets/recyclerview/RecyclerViewOnItemClickListener.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.widgets.recyclerview;
2 |
3 | import android.view.View;
4 |
5 | /**
6 | * Created by Caij on 2015/11/5.
7 | */
8 | public interface RecyclerViewOnItemClickListener {
9 |
10 | public void onItemClick(View view, int position);
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/widgets/swipeback/app/SwipeBackActivity.java:
--------------------------------------------------------------------------------
1 |
2 | package com.caij.codehub.widgets.swipeback.app;
3 |
4 | import android.os.Bundle;
5 | import android.view.View;
6 |
7 | import com.caij.codehub.R;
8 | import com.caij.codehub.ui.activity.BaseActivity;
9 | import com.caij.codehub.widgets.swipeback.SwipeBackLayout;
10 | import com.caij.codehub.widgets.swipeback.Utils;
11 |
12 | public abstract class SwipeBackActivity extends BaseActivity implements SwipeBackActivityBase {
13 | private SwipeBackActivityHelper mHelper;
14 |
15 | @Override
16 | protected void onCreate(Bundle savedInstanceState) {
17 | if (isSwipeBackEnable()) {
18 | overridePendingTransition(R.anim.start_right_in, R.anim.start_right_out);
19 | mHelper = new SwipeBackActivityHelper(this);
20 | mHelper.onActivityCreate();
21 | }
22 | super.onCreate(savedInstanceState);
23 | }
24 |
25 | protected abstract boolean isSwipeBackEnable();
26 |
27 | @Override
28 | protected void onPostCreate(Bundle savedInstanceState) {
29 | super.onPostCreate(savedInstanceState);
30 | if (isSwipeBackEnable() && mHelper != null) {
31 | mHelper.onPostCreate();
32 | }
33 | }
34 |
35 | @Override
36 | public void finish() {
37 | super.finish();
38 | if (isSwipeBackEnable()) {
39 | overridePendingTransition(R.anim.finish_right_in, R.anim.finish_right_out);
40 | }
41 | }
42 |
43 | @Override
44 | public View findViewById(int id) {
45 | View v = super.findViewById(id);
46 | if (v == null && mHelper != null)
47 | return mHelper.findViewById(id);
48 | return v;
49 | }
50 |
51 | @Override
52 | public SwipeBackLayout getSwipeBackLayout() {
53 | if (mHelper != null) {
54 | return mHelper.getSwipeBackLayout();
55 | }
56 | return null;
57 | }
58 |
59 | @Override
60 | public void setSwipeBackEnable(boolean enable) {
61 | if (getSwipeBackLayout() != null) {
62 | getSwipeBackLayout().setEnableGesture(enable);
63 | }
64 | }
65 |
66 | @Override
67 | public void scrollToFinishActivity() {
68 | if (getSwipeBackLayout() != null) {
69 | Utils.convertActivityToTranslucent(this);
70 | getSwipeBackLayout().scrollToFinishActivity();
71 | }
72 | }
73 |
74 | }
75 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/widgets/swipeback/app/SwipeBackActivityBase.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.widgets.swipeback.app;
2 |
3 | import com.caij.codehub.widgets.swipeback.SwipeBackLayout;
4 |
5 | /**
6 | * @author Yrom
7 | */
8 | public interface SwipeBackActivityBase {
9 | /**
10 | * @return the SwipeBackLayout associated with this activity.
11 | */
12 | public abstract SwipeBackLayout getSwipeBackLayout();
13 |
14 | public abstract void setSwipeBackEnable(boolean enable);
15 |
16 | /**
17 | * Scroll out contentView and finish the activity
18 | */
19 | public abstract void scrollToFinishActivity();
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/widgets/swipeback/app/SwipeBackActivityHelper.java:
--------------------------------------------------------------------------------
1 | package com.caij.codehub.widgets.swipeback.app;
2 |
3 | import android.app.Activity;
4 | import android.graphics.Color;
5 | import android.graphics.drawable.ColorDrawable;
6 | import android.view.LayoutInflater;
7 | import android.view.View;
8 |
9 | import com.caij.codehub.R;
10 | import com.caij.codehub.widgets.swipeback.SwipeBackLayout;
11 | import com.caij.codehub.widgets.swipeback.Utils;
12 |
13 | /**
14 | * @author Yrom
15 | */
16 | public class SwipeBackActivityHelper {
17 | private Activity mActivity;
18 |
19 | private SwipeBackLayout mSwipeBackLayout;
20 |
21 | public SwipeBackActivityHelper(Activity activity) {
22 | mActivity = activity;
23 | }
24 |
25 | @SuppressWarnings("deprecation")
26 | public void onActivityCreate() {
27 | mActivity.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
28 | mActivity.getWindow().getDecorView().setBackgroundDrawable(null);
29 | mSwipeBackLayout = (SwipeBackLayout) LayoutInflater.from(mActivity).inflate(
30 | R.layout.widget_swipeback_layout, null);
31 | mSwipeBackLayout.addSwipeListener(new SwipeBackLayout.SwipeListener() {
32 | @Override
33 | public void onScrollStateChange(int state, float scrollPercent) {
34 | }
35 |
36 | @Override
37 | public void onEdgeTouch(int edgeFlag) {
38 | Utils.convertActivityToTranslucent(mActivity);
39 | }
40 |
41 | @Override
42 | public void onScrollOverThreshold() {
43 |
44 | }
45 | });
46 | }
47 |
48 | public void onPostCreate() {
49 | mSwipeBackLayout.attachToActivity(mActivity);
50 | }
51 |
52 | public View findViewById(int id) {
53 | if (mSwipeBackLayout != null) {
54 | return mSwipeBackLayout.findViewById(id);
55 | }
56 | return null;
57 | }
58 |
59 | public SwipeBackLayout getSwipeBackLayout() {
60 | return mSwipeBackLayout;
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/app/src/main/java/com/caij/codehub/widgets/swipeback/app/SwipeBackPreferenceActivity.java:
--------------------------------------------------------------------------------
1 |
2 | package com.caij.codehub.widgets.swipeback.app;
3 |
4 | import android.os.Bundle;
5 | import android.preference.PreferenceActivity;
6 | import android.view.View;
7 |
8 | import com.caij.codehub.widgets.swipeback.SwipeBackLayout;
9 |
10 | public class SwipeBackPreferenceActivity extends PreferenceActivity implements SwipeBackActivityBase {
11 | private SwipeBackActivityHelper mHelper;
12 |
13 | @Override
14 | protected void onCreate(Bundle savedInstanceState) {
15 | super.onCreate(savedInstanceState);
16 | mHelper = new SwipeBackActivityHelper(this);
17 | mHelper.onActivityCreate();
18 | }
19 |
20 | @Override
21 | protected void onPostCreate(Bundle savedInstanceState) {
22 | super.onPostCreate(savedInstanceState);
23 | mHelper.onPostCreate();
24 | }
25 |
26 | @Override
27 | public View findViewById(int id) {
28 | View v = super.findViewById(id);
29 | if (v == null && mHelper != null)
30 | return mHelper.findViewById(id);
31 | return v;
32 | }
33 |
34 | @Override
35 | public SwipeBackLayout getSwipeBackLayout() {
36 | return mHelper.getSwipeBackLayout();
37 | }
38 | @Override
39 | public void setSwipeBackEnable(boolean enable) {
40 | getSwipeBackLayout().setEnableGesture(enable);
41 | }
42 |
43 | @Override
44 | public void scrollToFinishActivity() {
45 | getSwipeBackLayout().scrollToFinishActivity();
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/finish_right_in.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/finish_right_out.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/start_right_in.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/start_right_out.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-hdpi/ic_add.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-hdpi/ic_right_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-hdpi/ic_right_arrow.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-mdpi/ic_add.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-mdpi/ic_right_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-mdpi/ic_right_arrow.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/ic_right_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xhdpi/ic_right_arrow.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/bg_init_page_img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/bg_init_page_img.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/bg_shadow_bottom.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/bg_shadow_bottom.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/bg_shadow_left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/bg_shadow_left.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/bg_shadow_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/bg_shadow_right.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/gif_loading1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/gif_loading1.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/gif_loading2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/gif_loading2.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/gif_loading3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/gif_loading3.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/gif_loading4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/gif_loading4.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/gif_loading5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/gif_loading5.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/gif_loading6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/gif_loading6.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/gif_loading7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/gif_loading7.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_action_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/ic_action_search.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/ic_add.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_default_circle_head_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/ic_default_circle_head_image.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_right_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/ic_right_arrow.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/source_data_load_error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/source_data_load_error.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/source_no_data_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/drawable-xxhdpi/source_no_data_image.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/animation_loading.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/dialog_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/fab_normal.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
18 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/fab_select.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
18 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/fab_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/link_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/nav_item_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/theme_color_btn_shape.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_base_codehub.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
14 |
15 |
21 |
22 |
28 |
29 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_base_codehub_toolbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
12 |
13 |
18 |
19 |
20 |
21 |
27 |
28 |
34 |
35 |
41 |
42 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_comment.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
13 |
14 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_file_tree.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
12 |
13 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_init.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_issue.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
9 |
10 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_login.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
14 |
15 |
22 |
23 |
29 |
30 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
11 |
12 |
16 |
17 |
18 |
19 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_picture.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_search.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_setting.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
18 |
19 |
26 |
27 |
28 |
29 |
36 |
37 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_trending_filter.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
17 |
18 |
24 |
25 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_web.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_base_code_hub.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
14 |
15 |
21 |
22 |
28 |
29 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_issue_info.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_repository_viewpager.xml:
--------------------------------------------------------------------------------
1 |
16 |
17 |
21 |
22 |
29 |
30 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_trending.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
11 |
12 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/include_anim_loading.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
15 |
16 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/include_empty_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
14 |
15 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/include_listview.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/include_load_error.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
19 |
20 |
29 |
30 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/include_progress_bar_loading.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/include_recycle_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/include_refresh_recycle_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/include_tool_bar.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/infinite_loading.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
14 |
15 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_comment.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
14 |
15 |
20 |
21 |
28 |
29 |
36 |
37 |
42 |
43 |
44 |
45 |
46 |
47 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_issue_head.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
16 |
17 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_treelist.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
15 |
16 |
23 |
24 |
31 |
32 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_user.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
17 |
18 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/widget_bread_crumb.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
15 |
22 |
23 |
24 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/widget_swipeback_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu.xml:
--------------------------------------------------------------------------------
1 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_drawer_view.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
43 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_issue.xml:
--------------------------------------------------------------------------------
1 |
5 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_main.xml:
--------------------------------------------------------------------------------
1 |
16 |
18 |
19 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_repository_info.xml:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
10 |
11 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_trending.xml:
--------------------------------------------------------------------------------
1 |
5 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/menu_user.xml:
--------------------------------------------------------------------------------
1 |
5 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/search.xml:
--------------------------------------------------------------------------------
1 |
16 |
18 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #333
4 | #333
5 | #000000
6 | #2196f3
7 | #FF4081
8 |
9 | #ffffff
10 | #eeeeee
11 |
12 | #F0F0F0
13 |
14 | #EBEBEB
15 |
16 | #009900
17 | #66CC66
18 |
19 | #999999
20 | #CCCCCC
21 |
22 | #3e802f
23 | #f4b400
24 | #427fed
25 | #b23424
26 |
27 | #fff
28 | #73ffffff
29 |
30 | #ffffffff
31 | #00000000
32 |
33 | #99000000
34 | #40808080
35 | #99323232
36 | #CCCCCC
37 |
38 |
39 | #71ca52
40 | #569e3d
41 |
42 | #0066B3
43 | #CCCCCC
44 |
45 | #0066B3
46 | #fafafa
47 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 8dp
5 | 4dp
6 | 24dp
7 | 32dp
8 |
9 | 256dp
10 | 60dp
11 | 45dp
12 |
13 | 30dp
14 |
15 | 20dp
16 |
17 | 32dp
18 |
19 | 12sp
20 | 14sp
21 | 16sp
22 | 20sp
23 |
24 | 40sp
25 |
26 | 32dp
27 |
28 | 3dp
29 | 42dp
30 | 48dp
31 | 6dp
32 |
33 | 60dp
34 | 1px
35 | 2dp
36 |
37 | 58dp
38 |
39 |
--------------------------------------------------------------------------------
/app/src/main/res/values/drawables.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 | @color/color_primary
21 | @android:color/transparent
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ids.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values/paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 | M44,8c0-2.2-1.8-4-4-4H8C5.8,4,4,5.8,4,8v24c0,2.2,1.8,4,4,4h28l8,8L44,8z M36,28H12v-4h24V28z M36,22H12v-4h24V22z M36,16H12v-4h24V16z
20 | M38,26H26v12h-4V26H10v-4h12V10h4v12h12V26z
21 | M20,36h8v-4h-8V36z M6,12v4h36v-4H6z M12,26h24v-4H12V26z
22 | M13.3843083,13.3956843 C11.233862,15.5399983 7.7581039,15.5381046 5.61000013,13.3900003 C3.46000004,11.2399998 3.46000004,7.76000023 5.61000013,5.61000013 C7.76000023,3.46000004 11.2400007,3.46000004 13.3900003,5.61000013 C15.54,7.76000023 15.5400009,11.2400007 13.3900003,13.3900003 C13.388104,13.3918967 13.3862067,13.3937913 13.3843083,13.3956843 C15.1427975,15.1834093 19.6826174,19.798706 19.6826172,19.7987061 L13.3843085,13.3956846 L13.3843083,13.3956843 Z
23 |
--------------------------------------------------------------------------------
/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:1.3.0'
9 | // classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
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 | }
19 | }
20 |
--------------------------------------------------------------------------------
/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/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Thu Dec 24 14:02:21 CST 2015
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip
7 |
--------------------------------------------------------------------------------
/introduce/chinese.md:
--------------------------------------------------------------------------------
1 | # CodeHub
2 | Github Android平台第三方客户端,暂时支持登录、个人信息浏览,仓库信息浏览等部分功能, Event浏览, issue评论。希望有兴趣的同鞋加入这个项目。
3 |
4 |   
5 |
6 |   
7 |
8 | ###感谢
9 | [CodeHub](https://github.com/thedillonb/CodeHub)
10 | [WeGit](https://github.com/Leaking/WeGit)
11 |
12 | ###使用的开源库
13 | [butterknife](https://github.com/JakeWharton/butterknife)
14 |
15 | [glide](https://github.com/bumptech/glide)
16 |
17 | [dagger](https://github.com/google/dagger)
18 |
19 | [volley](https://github.com/mcxiaoke/android-volley)
20 |
21 | ###联系
22 | [worldcaij@gmail.com](mailto:worldcaij@gmail.com)
23 |
24 | ###License
25 | Copyright (C) 2015 Caij
26 |
27 | Licensed under the Apache License, Version 2.0 (the "License");
28 | you may not use this file except in compliance with the License.
29 | You may obtain a copy of the License at
30 |
31 | http://www.apache.org/licenses/LICENSE-2.0
32 |
33 | Unless required by applicable law or agreed to in writing, software
34 | distributed under the License is distributed on an "AS IS" BASIS,
35 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
36 | See the License for the specific language governing permissions and
37 | limitations under the License.
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/introduce/event.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/introduce/event.png
--------------------------------------------------------------------------------
/introduce/followers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/introduce/followers.png
--------------------------------------------------------------------------------
/introduce/issue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/introduce/issue.png
--------------------------------------------------------------------------------
/introduce/main.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/introduce/main.png
--------------------------------------------------------------------------------
/introduce/nav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/introduce/nav.png
--------------------------------------------------------------------------------
/introduce/repository.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/introduce/repository.png
--------------------------------------------------------------------------------
/introduce/user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Caij/CodeHub/20d0f667eb4ef0ccfd0bbbb361a815e744e87bef/introduce/user.png
--------------------------------------------------------------------------------
/lib/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/lib/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion 23
5 | buildToolsVersion '23.0.2'
6 |
7 | //only if you use Apache packages
8 | useLibrary 'org.apache.http.legacy'
9 |
10 | defaultConfig {
11 | minSdkVersion 14
12 | targetSdkVersion 23
13 | versionCode 1
14 | versionName "1.0"
15 | }
16 | buildTypes {
17 | release {
18 | minifyEnabled false
19 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
20 | }
21 | }
22 | }
23 |
24 | dependencies {
25 | compile fileTree(dir: 'libs', include: ['*.jar'])
26 | compile 'com.google.code.gson:gson:2.4'
27 | compile 'com.mcxiaoke.volley:library:1.0.19'
28 | compile 'com.squareup.okhttp:okhttp:2.5.0'
29 | }
30 |
--------------------------------------------------------------------------------
/lib/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in D:\android-studio\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 |
--------------------------------------------------------------------------------
/lib/src/androidTest/java/com/caij/lib/ApplicationTest.java:
--------------------------------------------------------------------------------
1 | package com.caij.lib;
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 | }
--------------------------------------------------------------------------------
/lib/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/caij/lib/utils/AppManager.java:
--------------------------------------------------------------------------------
1 | package com.caij.lib.utils;
2 |
3 | import android.app.Activity;
4 |
5 | import java.util.Stack;
6 |
7 | /**
8 | * Created by Caij on 2015/8/25.
9 | */
10 | public class AppManager {
11 |
12 | private static AppManager appManager = new AppManager();
13 |
14 | private Stack mActivityStack;
15 |
16 | public static AppManager getInstance() {
17 | return appManager;
18 | }
19 |
20 | private AppManager() {
21 | mActivityStack = new Stack<>();
22 | }
23 |
24 | public void push(Activity activity) {
25 | mActivityStack.push(activity);
26 | }
27 |
28 | public Activity pop() {
29 | return mActivityStack.pop();
30 | }
31 |
32 | public void finishAllActivity() {
33 | while (!mActivityStack.empty()) {
34 | mActivityStack.pop().finish();
35 | }
36 | }
37 |
38 | public void finishAllActivityExcept(Activity activity) {
39 | Activity removeActivity;
40 | while (!mActivityStack.empty()) {
41 | removeActivity = mActivityStack.pop();
42 | if (removeActivity != activity) {
43 | removeActivity.finish();
44 | }
45 | }
46 | }
47 |
48 | public void remove(Activity activity) {
49 | mActivityStack.remove(activity);
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/caij/lib/utils/CheckValueUtil.java:
--------------------------------------------------------------------------------
1 | package com.caij.lib.utils;
2 |
3 | import android.text.TextUtils;
4 |
5 | /**
6 | * Created by Caij on 2015/9/18.
7 | */
8 | public class CheckValueUtil {
9 |
10 | public static void check(Object object) {
11 | if (object == null) {
12 | throw new IllegalArgumentException("the value not be null");
13 | }
14 | if (object instanceof CharSequence && TextUtils.isEmpty((CharSequence) object)) {
15 | throw new IllegalArgumentException("the value not be null");
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/caij/lib/utils/GsonUtils.java:
--------------------------------------------------------------------------------
1 | package com.caij.lib.utils;
2 |
3 | import com.google.gson.Gson;
4 |
5 | /**
6 | * Created by Caij on 2015/8/24.
7 | */
8 | public class GsonUtils {
9 |
10 | private static Gson gson = new Gson();
11 |
12 | public static Gson getGson() {
13 | return gson;
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/caij/lib/utils/SPUtils.java:
--------------------------------------------------------------------------------
1 | package com.caij.lib.utils;
2 |
3 | import android.content.Context;
4 | import android.content.SharedPreferences;
5 |
6 | /**
7 | * Created by Caij on 2015/8/26.
8 | */
9 | public class SPUtils {
10 |
11 | private static SharedPreferences sp;
12 |
13 | public static void init(Context context, String spName) {
14 | sp = context.getSharedPreferences(spName, Context.MODE_PRIVATE);
15 | }
16 |
17 | public static void saveString(String name, String value) {
18 | SharedPreferences.Editor editor = sp.edit();
19 | editor.putString(name, value);
20 | editor.commit();
21 | }
22 |
23 | public static void saveString(String name, long value) {
24 | SharedPreferences.Editor editor = sp.edit();
25 | editor.putLong(name, value);
26 | editor.commit();
27 | }
28 |
29 | public static String getString(String name, String defaultValue) {
30 | return sp.getString(name, defaultValue);
31 | }
32 |
33 | public static long getLong(String name, long defaultValue) {
34 | return sp.getLong(name, defaultValue);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/caij/lib/utils/ToastUtil.java:
--------------------------------------------------------------------------------
1 | package com.caij.lib.utils;
2 |
3 | import android.content.Context;
4 | import android.widget.Toast;
5 |
6 | /**
7 | * Created by Caij on 2015/8/25.
8 | */
9 | public class ToastUtil {
10 |
11 | private static Toast mToast ;
12 |
13 | public static void show(Context context, String msg) {
14 | if (mToast == null) {
15 | synchronized (ToastUtil.class) {
16 | if (mToast == null) {
17 | mToast = Toast.makeText(context.getApplicationContext(), msg, Toast.LENGTH_SHORT);
18 | }else {
19 | mToast.setText(msg);
20 | }
21 | }
22 | }else {
23 | mToast.setText(msg);
24 | }
25 | mToast.show();
26 | }
27 |
28 | public static void show(Context context, int id) {
29 | show(context, context.getString(id));
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/caij/lib/utils/VolleyManager.java:
--------------------------------------------------------------------------------
1 | package com.caij.lib.utils;
2 |
3 | import android.content.Context;
4 |
5 | import com.android.volley.Request;
6 | import com.android.volley.RequestQueue;
7 | import com.android.volley.toolbox.HttpStack;
8 | import com.android.volley.toolbox.Volley;
9 | import com.caij.lib.volley.request.AbsRequest;
10 |
11 | /**
12 | * Created by Caij on 2015/8/25.
13 | */
14 | public class VolleyManager {
15 |
16 | private static RequestQueue mQueue;
17 |
18 | public static void init(Context context, HttpStack stack, int diskCacheSize) {
19 | if (mQueue == null) {
20 | synchronized (VolleyManager.class) {
21 | if (mQueue == null) {
22 | mQueue = Volley.newRequestQueue(context, stack, diskCacheSize);
23 | }
24 | }
25 | }
26 | }
27 |
28 | public static void addRequest(Request request, Object tag) {
29 | checkQueue();
30 | request.setTag(tag);
31 | mQueue.add(request);
32 | }
33 |
34 | public static void cancelRequestByTag(Object tag) {
35 | checkQueue();
36 | mQueue.cancelAll(tag);
37 | }
38 |
39 | public static void cancelAllRequest() {
40 | checkQueue();
41 | mQueue.cancelAll(new RequestQueue.RequestFilter() {
42 | @Override
43 | public boolean apply(Request> request) {
44 | return true;
45 | }
46 | });
47 | }
48 |
49 | private static void checkQueue() {
50 | if (mQueue == null) {
51 | throw new IllegalArgumentException("RequestQueue not init");
52 | }
53 | }
54 |
55 | }
56 |
--------------------------------------------------------------------------------
/lib/src/main/java/com/caij/lib/volley/request/JsonParseError.java:
--------------------------------------------------------------------------------
1 | package com.caij.lib.volley.request;
2 |
3 | import com.android.volley.VolleyError;
4 |
5 | /**
6 | * Created by Administrator on 2015/8/24.
7 | */
8 | public class JsonParseError extends VolleyError{
9 | }
10 |
--------------------------------------------------------------------------------
/lib/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | lib
3 |
4 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', ':lib'
2 |
--------------------------------------------------------------------------------