Skip to content
This repository has been archived by the owner on Sep 30, 2021. It is now read-only.

Commit

Permalink
adding milestone to issues & pull request as well as creating milesto…
Browse files Browse the repository at this point in the history
…ne from FastHub #13
  • Loading branch information
Kosh committed Mar 4, 2017
1 parent a4699cb commit 818b6d7
Show file tree
Hide file tree
Showing 36 changed files with 830 additions and 30 deletions.
1 change: 1 addition & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ dependencies {
compile 'com.commonsware.cwac:anddown:0.3.0'
compile 'com.github.GrenderG:Toasty:1.1.3'
compile 'uk.co.samuelwall:material-tap-target-prompt:1.9.2'
compile 'com.github.k0shk0sh:RetainedDateTimePickers:1.0.2'
apt 'org.projectlombok:lombok:1.12.6'
apt 'frankiesardo:icepick-processor:3.1.0'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,10 @@
android:value=".ui.modules.main.MainView"/>
</activity>

<activity
android:name=".ui.modules.repos.extras.milestone.create.MilestoneActivityView"
android:theme="@style/WhenLargeTheme"/>

<activity
android:name=".ui.modules.parser.LinksParserActivity"
android:configChanges="keyboard|orientation|screenSize"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.fastaccess.data.dao;

import com.google.gson.annotations.SerializedName;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

/**
* Created by Kosh on 05 Mar 2017, 2:30 AM
*/

@Getter @Setter @NoArgsConstructor
public class CreateMilestoneModel {
private String title;
private String description;
@SerializedName("due_one") private String dueOn;
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,8 @@ Observable<Response<Boolean>> hasPullRequestBeenMerged(@Path("owner") String own
Observable<PullRequestModel> editPullRequest(@Path("owner") String owner, @Path("repo") String repo,
@Path("number") int number,
@Body IssueRequestModel issue);
@PATCH("repos/{owner}/{repo}/issues/{number}")
Observable<PullRequestModel> editIssue(@Path("owner") String owner, @Path("repo") String repo,
@Path("number") int number,
@Body IssueRequestModel issue);
}
11 changes: 11 additions & 0 deletions app/src/main/java/com/fastaccess/data/service/RepoService.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
import com.fastaccess.data.dao.CommentRequestModel;
import com.fastaccess.data.dao.CommentsModel;
import com.fastaccess.data.dao.CommitModel;
import com.fastaccess.data.dao.CreateMilestoneModel;
import com.fastaccess.data.dao.LabelModel;
import com.fastaccess.data.dao.MarkdownModel;
import com.fastaccess.data.dao.MilestoneModel;
import com.fastaccess.data.dao.Pageable;
import com.fastaccess.data.dao.ReleasesModel;
import com.fastaccess.data.dao.RepoFilesModel;
Expand Down Expand Up @@ -110,4 +112,13 @@ Observable<Response<Boolean>> isCollaborator(@NonNull @Path("owner") String owne
@GET("repos/{owner}/{repo}/branches")
Observable<Pageable<BranchesModel>> getBranches(@NonNull @Path("owner") String owner, @NonNull @Path("repo") String repo);

@GET("repos/{owner}/{repo}/milestones")
Observable<Pageable<MilestoneModel>> getMilestones(@Path("owner") String owner, @Path("repo") String repo);

@POST("repos/{owner}/{repo}/milestones")
Observable<MilestoneModel> createMilestone(@Path("owner") String owner, @Path("repo") String repo,
@Body CreateMilestoneModel create);

@GET("repos/{owner}/{repo}/assignees")
Observable<Pageable<UserModel>> getAssignees(@Path("owner") String owner, @Path("repo") String repo);
}
20 changes: 20 additions & 0 deletions app/src/main/java/com/fastaccess/helper/ParseDateFormat.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.fastaccess.helper;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.format.DateUtils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
Expand Down Expand Up @@ -43,4 +45,22 @@ public static CharSequence getTimeAgo(@Nullable Date parsedDate) {
}
return "N/A";
}

public static String toGithubDate(@NonNull Date date) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
return simpleDateFormat.format(date);
}

public static String prettifyDate(long timestamp) {
return new SimpleDateFormat("dd-MM-yyyy", Locale.US).format(new Date(timestamp));
}

@Nullable public static Date getDateFromString(@NonNull String date) {
try {
return new SimpleDateFormat("dd-MM-yyyy", Locale.US).parse(date);
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
2 changes: 2 additions & 0 deletions app/src/main/java/com/fastaccess/helper/PrefGetter.java
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ public static int getNotificationTaskDuration(@NonNull Context context) {
return 5 * 60;
} else if (s.equals(context.getString(R.string.one_minute))) {
return 60;
} else if (s.equals(context.getString(R.string.turn_off))) {
return -1;
}
}
return 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,17 @@ public class NotificationJobTask extends JobService {
}

public static void scheduleJob(@NonNull Context context) {
scheduleJob(context, PrefGetter.getNotificationTaskDuration(context) == 0 ? (30 * 60) : PrefGetter.getNotificationTaskDuration(context),
false);
int duration = PrefGetter.getNotificationTaskDuration(context);
scheduleJob(context, duration == 0 ? (30 * 60) : duration, false);
}

public static void scheduleJob(@NonNull Context context, int duration, boolean cancel) {
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));
if (cancel) dispatcher.cancel(EVERY_30_MINS);
if (duration == -1) {
dispatcher.cancel(EVERY_30_MINS);
return;
}
Job.Builder builder = dispatcher
.newJobBuilder()
.setTag(EVERY_30_MINS)
Expand Down
31 changes: 31 additions & 0 deletions app/src/main/java/com/fastaccess/ui/adapter/MilestonesAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.fastaccess.ui.adapter;

import android.support.annotation.NonNull;
import android.view.ViewGroup;

import com.fastaccess.data.dao.MilestoneModel;
import com.fastaccess.ui.adapter.viewholder.MilestonesViewHolder;
import com.fastaccess.ui.widgets.recyclerview.BaseRecyclerAdapter;
import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder;

import java.util.ArrayList;

/**
* Created by Kosh on 11 Nov 2016, 2:07 PM
*/

public class MilestonesAdapter extends BaseRecyclerAdapter<MilestoneModel, MilestonesViewHolder,
BaseViewHolder.OnItemClickListener<MilestoneModel>> {

public MilestonesAdapter(@NonNull ArrayList<MilestoneModel> eventsModels) {
super(eventsModels);
}

@Override protected MilestonesViewHolder viewHolder(ViewGroup parent, int viewType) {
return MilestonesViewHolder.newInstance(parent, this);
}

@Override protected void onBindView(MilestonesViewHolder holder, int position) {
holder.bind(getItem(position));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.fastaccess.ui.adapter.viewholder;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.View;
import android.view.ViewGroup;

import com.fastaccess.R;
import com.fastaccess.data.dao.MilestoneModel;
import com.fastaccess.helper.ParseDateFormat;
import com.fastaccess.ui.widgets.FontTextView;
import com.fastaccess.ui.widgets.recyclerview.BaseRecyclerAdapter;
import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder;

import butterknife.BindView;

/**
* Created by Kosh on 11 Nov 2016, 2:08 PM
*/

public class MilestonesViewHolder extends BaseViewHolder<MilestoneModel> {

@BindView(R.id.title) FontTextView title;
@BindView(R.id.date) FontTextView date;
@BindView(R.id.notificationTitle) FontTextView notificationTitle;

private MilestonesViewHolder(@NonNull View itemView, @Nullable BaseRecyclerAdapter adapter) {
super(itemView, adapter);
}

public static MilestonesViewHolder newInstance(@NonNull ViewGroup viewGroup, @Nullable BaseRecyclerAdapter adapter) {
return new MilestonesViewHolder(getView(viewGroup, R.layout.notifications_row_item), adapter);
}

@Override public void bind(@NonNull MilestoneModel milestoneModel) {
title.setText(milestoneModel.getTitle());
notificationTitle.setText(milestoneModel.getDescription());
if (milestoneModel.getDueOn() != null) {
date.setText(ParseDateFormat.getTimeAgo(milestoneModel.getDueOn()));
} else {
date.setText(ParseDateFormat.getTimeAgo(milestoneModel.getCreatedAt()));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ public abstract class BaseDialogFragment<V extends BaseMvp.FAView, P extends Bas

@Override public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_TITLE, 0);
if (savedInstanceState != null && !savedInstanceState.isEmpty()) {
Icepick.restoreInstanceState(this, savedInstanceState);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.fastaccess.ui.modules.repos.extras.milestone;

import android.support.annotation.NonNull;

import com.fastaccess.data.dao.MilestoneModel;
import com.fastaccess.ui.base.mvp.BaseMvp;
import com.fastaccess.ui.modules.repos.extras.milestone.create.CreateMilestoneMvp;
import com.fastaccess.ui.widgets.recyclerview.BaseViewHolder;

import java.util.ArrayList;

/**
* Created by Kosh on 04 Mar 2017, 9:38 PM
*/

public interface MilestoneMvp {


interface OnMilestoneSelected {
void onMilestoneSelected(@NonNull MilestoneModel milestoneModel);
}

interface View extends BaseMvp.FAView, CreateMilestoneMvp.OnMilestoneAdded {
void onNotifyAdapter();

void onMilestoneSelected(@NonNull MilestoneModel milestoneModel);
}

interface Presenter extends BaseViewHolder.OnItemClickListener<MilestoneModel> {
void onLoadMilestones(@NonNull String login, @NonNull String repo);

@NonNull ArrayList<MilestoneModel> getMilestones();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package com.fastaccess.ui.modules.repos.extras.milestone;

import android.support.annotation.NonNull;
import android.view.View;

import com.fastaccess.R;
import com.fastaccess.data.dao.MilestoneModel;
import com.fastaccess.provider.rest.RestProvider;
import com.fastaccess.ui.base.mvp.presenter.BasePresenter;

import java.util.ArrayList;

/**
* Created by Kosh on 04 Mar 2017, 9:41 PM
*/

public class MilestonePresenter extends BasePresenter<MilestoneMvp.View> implements MilestoneMvp.Presenter {
private ArrayList<MilestoneModel> milestoneModels = new ArrayList<>();

@Override public void onItemClick(int position, View v, MilestoneModel item) {
if (getView() != null) getView().onMilestoneSelected(item);
}

@Override public void onItemLongClick(int position, View v, MilestoneModel item) {
onItemClick(position, v, item);
}

@Override public void onLoadMilestones(@NonNull String login, @NonNull String repo) {
makeRestCall(RestProvider.getRepoService().getMilestones(login, repo),
response -> {
if (response == null || response.getItems() == null || response.getItems().isEmpty()) {
sendToView(view -> view.showMessage(R.string.error, R.string.no_milestones));
return;
}
if (response.getItems() != null) {
milestoneModels.clear();
milestoneModels.addAll(response.getItems());
sendToView(MilestoneMvp.View::onNotifyAdapter);
}
});
}

@NonNull @Override public ArrayList<MilestoneModel> getMilestones() {
return milestoneModels;
}
}

0 comments on commit 818b6d7

Please sign in to comment.