Skip to content

Commit ecf9e0c

Browse files
author
zhouxingrong
committed
fix add RepoDetail
1 parent 21c554f commit ecf9e0c

26 files changed

+1140
-72
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ dependencies {
138138
compile 'com.roughike:bottom-bar:1.4.0.1'
139139
compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:v1.8.5'
140140
compile 'com.mikepenz:devicon-typeface:2.0.0.2@aar'
141+
compile 'com.flyco.labelview:FlycoLabelView_Lib:1.0.2@aar'
141142
testCompile 'junit:junit:4.12'
142143
annotationProcessor 'com.google.dagger:dagger-compiler:2.10'
143144
annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'

app/src/main/AndroidManifest.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@
8484
<activity
8585
android:name=".home.ui.activity.RepoListActivity"
8686
android:screenOrientation="portrait"/>
87+
<activity
88+
android:name=".home.ui.activity.RepoDetailActivity"
89+
android:screenOrientation="portrait"/>
8790
</application>
8891

8992
</manifest>

app/src/main/java/com/jusenr/androidgithub/base/PTActivity.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.jusenr.androidgithub.base;
22

3+
import android.app.Activity;
34
import android.os.Bundle;
45
import android.support.annotation.Nullable;
56
import android.support.v4.view.LayoutInflaterCompat;
@@ -24,6 +25,7 @@ public abstract class PTActivity extends BaseActivity implements LoadView {
2425
private long exitTime = 0;
2526
private Unbinder unbinder;
2627

28+
protected Activity mActivity;
2729
protected PTApplication mApplication;
2830
protected Bundle mBundle;
2931
protected boolean isResume;
@@ -41,6 +43,7 @@ protected final void onCreate(@Nullable Bundle savedInstanceState) {
4143
LayoutInflaterCompat.setFactory(getLayoutInflater(), new IconicsLayoutInflater(getDelegate()));
4244
super.onCreate(savedInstanceState);
4345

46+
mActivity = this;
4447
mApplication = (PTApplication) getApplication();
4548
mBundle = getIntent().getExtras() != null ? getIntent().getExtras() : new Bundle();
4649
unbinder = ButterKnife.bind(this);

app/src/main/java/com/jusenr/androidgithub/guidance/AboutUsActivity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public void onViewClicked() {
7373
* 生成孩子的二维码
7474
*/
7575
private void createQRCode() {
76-
final String code = "https://github.com/Jusenr/androidgithubapp";
76+
final String code = "https://github.com/Jusenr/androidgithub";
7777
mLoadingView.show();
7878
Log.i("#####", "createQRCode: code=" + code);
7979
Observable.create(new Observable.OnSubscribe<Bitmap>() {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.jusenr.androidgithub.home.contract;
2+
3+
import com.jusenr.androidgithub.home.model.model.RepoDetail;
4+
import com.jusenr.androidlibrary.base.IInteractor;
5+
import com.jusenr.androidlibrary.base.loading.LoadView;
6+
7+
import rx.Observable;
8+
9+
public interface RepoDetailContract {
10+
11+
interface View extends LoadView {
12+
13+
void loadRepoDetailsResult(RepoDetail repoDetail);
14+
15+
void loadRepoDetailsFailed(int code, String msg);
16+
17+
void starRepoResult(boolean b);
18+
19+
void unstarRepoResult(boolean b);
20+
}
21+
22+
interface Interactor extends IInteractor {
23+
24+
Observable<RepoDetail> getRepoDetail(String owner, String name);
25+
26+
Observable<Boolean> starRepo(String owner, String repo);
27+
28+
Observable<Boolean> unstarRepo(String owner, String repo);
29+
}
30+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.jusenr.androidgithub.home.di.component;
2+
3+
import com.jusenr.androidgithub.base.di.component.AppComponent;
4+
import com.jusenr.androidgithub.home.di.module.RepoDetailModule;
5+
import com.jusenr.androidgithub.home.ui.activity.RepoDetailActivity;
6+
import com.jusenr.androidlibrary.di.scope.ActivityScope;
7+
8+
import dagger.Component;
9+
10+
@ActivityScope
11+
@Component(modules = RepoDetailModule.class, dependencies = AppComponent.class)
12+
public interface RepoDetailComponent {
13+
void inject(RepoDetailActivity arg);
14+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.jusenr.androidgithub.home.di.module;
2+
3+
import com.jusenr.androidgithub.home.contract.RepoDetailContract;
4+
import com.jusenr.androidgithub.home.model.interactor.RepoDetailInteractorImpl;
5+
import com.jusenr.androidlibrary.di.scope.ActivityScope;
6+
7+
import dagger.Module;
8+
import dagger.Provides;
9+
10+
@Module
11+
public class RepoDetailModule {
12+
private RepoDetailContract.View view;
13+
14+
public RepoDetailModule(RepoDetailContract.View view) {
15+
this.view = view;
16+
}
17+
18+
@ActivityScope
19+
@Provides
20+
RepoDetailContract.View provideUserView() {
21+
return this.view;
22+
}
23+
24+
@ActivityScope
25+
@Provides
26+
RepoDetailContract.Interactor provideUserModel(RepoDetailInteractorImpl interactor) {
27+
return interactor;
28+
}
29+
}
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
package com.jusenr.androidgithub.home.model.interactor;
2+
3+
import com.jusenr.androidgithub.home.contract.RepoDetailContract;
4+
import com.jusenr.androidgithub.home.model.model.Content;
5+
import com.jusenr.androidgithub.home.model.model.Repo;
6+
import com.jusenr.androidgithub.home.model.model.RepoDetail;
7+
import com.jusenr.androidgithub.retrofit.RxRetrofitComposer;
8+
import com.jusenr.androidgithub.retrofit.api.RepoApi;
9+
import com.jusenr.androidgithub.user.model.model.UserModel;
10+
import com.jusenr.androidgithub.utils.AccountHelper;
11+
import com.jusenr.androidgithub.utils.Constants;
12+
import com.jusenr.androidgithub.utils.StringUtil;
13+
import com.jusenr.androidlibrary.di.scope.ActivityScope;
14+
15+
import java.util.ArrayList;
16+
17+
import javax.inject.Inject;
18+
19+
import retrofit2.Response;
20+
import rx.Observable;
21+
import rx.android.schedulers.AndroidSchedulers;
22+
import rx.functions.Func1;
23+
import rx.functions.Func5;
24+
import rx.schedulers.Schedulers;
25+
26+
@ActivityScope
27+
public class RepoDetailInteractorImpl implements RepoDetailContract.Interactor {
28+
29+
private RepoApi repoApi;
30+
31+
@Inject
32+
public RepoDetailInteractorImpl(RepoApi repoApi) {
33+
this.repoApi = repoApi;
34+
}
35+
36+
@Override
37+
public void onDestroy() {
38+
39+
}
40+
41+
private Observable<Boolean> isStarred(String owner, final String repo) {
42+
return repoApi.checkIfRepoIsStarred(AccountHelper.getCurrentUid(), owner, repo)
43+
.subscribeOn(Schedulers.io())
44+
.observeOn(AndroidSchedulers.mainThread())
45+
.map(new Func1<Response, Boolean>() {
46+
@Override
47+
public Boolean call(Response response) {
48+
/**
49+
* Response if this repository is starred by you
50+
* Status: 204 No Content
51+
* Response if this repository is not starred by you
52+
* Status: 404 Not Found
53+
*/
54+
return response != null && response.code() == 204;
55+
}
56+
});
57+
}
58+
59+
@Override
60+
public Observable<RepoDetail> getRepoDetail(String owner, String name) {
61+
return Observable.zip(repoApi.get(AccountHelper.getCurrentUid(), owner, name),
62+
repoApi.contributors(AccountHelper.getCurrentUid(), owner, name),
63+
repoApi.listForks(AccountHelper.getCurrentUid(), owner, name, Constants.Value.NEWEST),
64+
repoApi.readme(AccountHelper.getCurrentUid(), owner, name),
65+
isStarred(owner, name),
66+
new Func5<Repo, ArrayList<UserModel>, ArrayList<Repo>, Content, Boolean, RepoDetail>() {
67+
@Override
68+
public RepoDetail call(Repo repo, ArrayList<UserModel> users, ArrayList<Repo> forks, Content readme, Boolean isStarred) {
69+
RepoDetail detail = new RepoDetail();
70+
repo.setStarred(isStarred);
71+
detail.setBaseRepo(repo);
72+
detail.setForks(forks);
73+
74+
// because the readme content is encode with Base64 by github.
75+
readme.content = StringUtil.base64Decode(readme.content);
76+
detail.setReadme(readme);
77+
detail.setContributors(users);
78+
return detail;
79+
}
80+
}).compose(RxRetrofitComposer.<RepoDetail>applySchedulers());
81+
}
82+
83+
@Override
84+
public Observable<Boolean> starRepo(String owner, String repo) {
85+
return repoApi.starRepo(AccountHelper.getCurrentUid(), owner, repo)
86+
.subscribeOn(Schedulers.io())
87+
.observeOn(AndroidSchedulers.mainThread())
88+
.map(new Func1<Response, Boolean>() {
89+
@Override
90+
public Boolean call(Response response) {
91+
return response != null && response.code() == 204;
92+
}
93+
});
94+
}
95+
96+
@Override
97+
public Observable<Boolean> unstarRepo(String owner, String repo) {
98+
return repoApi.unstarRepo(AccountHelper.getCurrentUid(), owner, repo)
99+
.subscribeOn(Schedulers.io())
100+
.observeOn(AndroidSchedulers.mainThread())
101+
.map(new Func1<Response, Boolean>() {
102+
@Override
103+
public Boolean call(Response response) {
104+
return response != null && response.code() == 204;
105+
}
106+
});
107+
}
108+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.jusenr.androidgithub.home.model.model;
2+
3+
import com.jusenr.androidgithub.user.model.model.UserModel;
4+
5+
import java.io.Serializable;
6+
import java.util.ArrayList;
7+
8+
/**
9+
* Created by mingjun on 16/7/29.
10+
*/
11+
public class RepoDetail implements Serializable {
12+
13+
private Repo baseRepo;
14+
private Content readme;
15+
private ArrayList<Repo> forks;
16+
private ArrayList<UserModel> contributors;
17+
18+
public Repo getBaseRepo() {
19+
return baseRepo;
20+
}
21+
22+
public void setBaseRepo(Repo baseRepo) {
23+
this.baseRepo = baseRepo;
24+
}
25+
26+
public Content getReadme() {
27+
return readme;
28+
}
29+
30+
public void setReadme(Content readme) {
31+
this.readme = readme;
32+
}
33+
34+
public ArrayList<Repo> getForks() {
35+
return forks;
36+
}
37+
38+
public void setForks(ArrayList<Repo> forks) {
39+
this.forks = forks;
40+
}
41+
42+
public ArrayList<UserModel> getContributors() {
43+
return contributors;
44+
}
45+
46+
public void setContributors(ArrayList<UserModel> contributors) {
47+
this.contributors = contributors;
48+
}
49+
50+
@Override
51+
public String toString() {
52+
return "RepoDetail{" +
53+
"baseRepo=" + baseRepo +
54+
", readme=" + readme +
55+
", forks=" + forks +
56+
", contributors=" + contributors +
57+
'}';
58+
}
59+
}

0 commit comments

Comments
 (0)