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

Commit

Permalink
Merge pull request #17 from k0shk0sh/master [skip ci]
Browse files Browse the repository at this point in the history
Update from original repo
  • Loading branch information
dedepete committed Jun 18, 2017
2 parents 0ec7b14 + 6be26a8 commit 02e38a5
Show file tree
Hide file tree
Showing 84 changed files with 1,374 additions and 402 deletions.
2 changes: 1 addition & 1 deletion check_translations.cs → .github/check_translations.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ void Main(string[] args)
if (TotalIssues != 0) {
PowerShell ps = PowerShell.Create();
ps.AddCommand("Add-AppveyorMessage");
ps.AddArgument(@"Please, remove this/these string(s) and commit this change.");
ps.AddArgument(@"Please, remove the string(s) and commit again.");
ps.Invoke();
Environment.Exit(101);
}
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ Ads are no longer available until further notice
- [**Toasty**](https://github.com/GrenderG/Toasty) for displaying error/success messages
- [**ShapedImageView**](https://github.com/gavinliu/ShapedImageView) for round avatars
- [**MaterialTapTargetPrompt**](https://github.com/sjwall/MaterialTapTargetPrompt) for displaying tips throughout the app
- [**Material-About-Library**](https://github.com/daniel-stoneuk/material-about-library) for the about screen
- **Fabric** analytics & crash reporting.
- **Android Support Libraries**, the almighty ;-)

Expand All @@ -119,6 +120,7 @@ Read the [**contribution guide**](.github/CONTRIBUTING.md) for more detailed inf
- Italian [@Raffaele74](https://github.com/Raffaele74)
- Lithuanian [@mistermantas](https://github.com/mistermantas)
- Traditional Chinese [@maple3142](https://github.com/maple3142)
- Portuguese [@caiorrs](https://github.com/caiorrs)

# License

Expand Down
10 changes: 5 additions & 5 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,13 +23,13 @@ android {
}
}
compileSdkVersion 25
buildToolsVersion "26.0.0-rc2"
buildToolsVersion "26.0.0"
defaultConfig {
applicationId "com.fastaccess.github"
minSdkVersion 21
targetSdkVersion 26
versionCode 310
versionName "3.1.0"
versionCode 320
versionName "3.2.0"
signingConfig signingConfigs.signing
buildConfigString "GITHUB_CLIENT_ID", (buildProperties.secrets['github_client_id'] | buildProperties.notThere['github_client_id']).string
buildConfigString "GITHUB_SECRET", (buildProperties.secrets['github_secret'] | buildProperties.notThere['github_secret']).string
Expand Down Expand Up @@ -133,17 +133,17 @@ dependencies {
implementation 'com.github.GrenderG:Toasty:1.1.3'
implementation 'com.github.JediBurrell:MaterialTapTargetPrompt:-SNAPSHOT'
implementation 'com.github.k0shk0sh:RetainedDateTimePickers:1.0.2'
implementation 'com.github.daniel-stoneuk:material-about-library:1.8.1'
implementation 'com.github.k0shk0sh:material-about-library:master-SNAPSHOT'
implementation "io.requery:requery:${requery}"
implementation "io.requery:requery-android:${requery}"
implementation('com.mikepenz:aboutlibraries:5.9.5@aar') { transitive = true }
implementation 'com.github.nightwhistler:HtmlSpanner:0.4'
implementation 'net.sourceforge.htmlcleaner:htmlcleaner:2.2'
implementation 'com.github.matthiasrobbers:shortbread:1.0.1'
implementation 'com.atlassian.commonmark:commonmark:0.9.0'
implementation 'com.firebase:firebase-jobdispatcher:0.6.0'
implementation "com.google.firebase:firebase-messaging:${gms}"
implementation "com.google.android.gms:play-services-ads:${gms}"
implementation 'com.firebase:firebase-jobdispatcher:0.6.0'
implementation('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') { transitive = true }
implementation "com.github.miguelbcr:RxBillingService:0.0.3"
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
Expand Down
1 change: 1 addition & 0 deletions app/src/debug/res/values/secrets.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@
<string name="donation_product_4" translatable="false">android.test.item_unavailable</string>
<string name="amlod_theme_purchase" translatable="false">android.test.purchased</string>
<string name="midnight_blue_theme_purchase" translatable="false">android.test.purchased</string>
<string name="theme_bluish_purchase" translatable="false">android.test.purchased</string>
</resources>
12 changes: 7 additions & 5 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,8 @@
<activity
android:name=".ui.modules.trending.TrendingActivity"
android:label="@string/trending"
android:parentActivityName=".ui.modules.main.MainActivity">
android:parentActivityName=".ui.modules.main.MainActivity"
android:windowSoftInputMode="stateAlwaysHidden">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.main.MainActivity"/>
Expand All @@ -194,10 +195,10 @@
<activity
android:name=".ui.modules.repos.wiki.WikiActivity"
android:label="@string/gollum"
android:parentActivityName=".ui.modules.main.MainActivity">
android:parentActivityName=".ui.modules.repos.RepoPagerActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ui.modules.main.MainActivity"/>
android:value=".ui.modules.repos.RepoPagerActivity"/>
</activity>

<activity
Expand Down Expand Up @@ -235,12 +236,12 @@

<service
android:name=".provider.tasks.notification.NotificationSchedulerJobTask"
android:exported="true"
tools:ignore="ExportedService">
android:exported="false">
<intent-filter>
<action android:name="com.firebase.jobdispatcher.ACTION_EXECUTE"/>
</intent-filter>
</service>

<service android:name=".provider.tasks.notification.ReadNotificationService"/>
<service android:name=".provider.tasks.git.GithubActionService"/>
<service android:name=".provider.tasks.git.ReactionService"/>
Expand All @@ -257,6 +258,7 @@
<meta-data
android:name="io.fabric.ApiKey"
android:value="6ed82b6e0756853d7d782a3f547f84f9ecba217e"/>

</application>

</manifest>
6 changes: 6 additions & 0 deletions app/src/main/assets/md/github.css
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,12 @@ body h1 {
border-bottom: 1px solid #eee
}

.gh-header-meta {
padding-bottom: .3em;
margin-bottom: 6px;
border-bottom: 1px solid #eee
}

body h2 {
padding-bottom: .3em;
font-size: 1.5em;
Expand Down
6 changes: 6 additions & 0 deletions app/src/main/assets/md/github_dark.css
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,12 @@ body h1 {
border-bottom: 1px solid #656d78
}

.gh-header-meta {
padding-bottom: .3em;
margin-bottom: 6px;
border-bottom: 1px solid #656d78
}

body h2 {
padding-bottom: .3em;
font-size: 1.5em;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -214,8 +214,8 @@ public static List<FragmentPagerAdapterModel> buildForRepoCode(@NonNull Context
@NonNull public static List<FragmentPagerAdapterModel> buildForTheme() {
return Stream.of(new FragmentPagerAdapterModel("", ThemeFragment.Companion.newInstance(R.style.ThemeLight)),
new FragmentPagerAdapterModel("", ThemeFragment.Companion.newInstance(R.style.ThemeDark)),
new FragmentPagerAdapterModel("", ThemeFragment.Companion.newInstance(R.style.ThemeAmlod)))
// new FragmentPagerAdapterModel("", ThemeFragment.Companion.newInstance(R.style.ThemeMidNighBlue)))
new FragmentPagerAdapterModel("", ThemeFragment.Companion.newInstance(R.style.ThemeAmlod)),
new FragmentPagerAdapterModel("", ThemeFragment.Companion.newInstance(R.style.ThemeBluish)))
.collect(Collectors.toList());
}
}
8 changes: 8 additions & 0 deletions app/src/main/java/com/fastaccess/data/dao/LabelModel.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,12 @@ protected LabelModel(Parcel in) {
@Override public int hashCode() {
return name != null ? name.hashCode() : 0;
}

@Override public String toString() {
return "LabelModel{" +
"url='" + url + '\'' +
", name='" + name + '\'' +
", color='" + color + '\'' +
'}';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@
*/

@Getter @Setter @ToString public class LanguageColorModel implements Parcelable {
private String color;
private String url;
public String color;
public String url;

@Override public int describeContents() { return 0; }

Expand Down
100 changes: 38 additions & 62 deletions app/src/main/java/com/fastaccess/data/dao/TimelineModel.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.fastaccess.data.dao;

import android.graphics.Color;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
Expand All @@ -15,9 +14,6 @@
import com.fastaccess.data.dao.types.IssueEventType;
import com.fastaccess.data.dao.types.ReviewStateType;
import com.fastaccess.helper.InputHelper;
import com.fastaccess.helper.ParseDateFormat;
import com.fastaccess.ui.widgets.LabelSpan;
import com.fastaccess.ui.widgets.SpannableBuilder;

import java.util.ArrayList;
import java.util.Date;
Expand Down Expand Up @@ -180,64 +176,40 @@ private TimelineModel(GroupedReviewModel groupedReview) {
}
return issueEvent.getActor().getLogin();
}));
for (List<IssueEvent> issueEvents : issueEventMap.values()) {
IssueEvent toAdd = null;
SpannableBuilder spannableBuilder = SpannableBuilder.builder();
for (IssueEvent issueEventModel : issueEvents) {
if (issueEventModel != null) {
IssueEventType event = issueEventModel.getEvent();
if (event != null) {
if (issueEventMap != null && !issueEventMap.isEmpty()) {
for (Map.Entry<String, List<IssueEvent>> stringListEntry : issueEventMap.entrySet()) {
List<LabelModel> labelModels = new ArrayList<>();
List<IssueEvent> events = stringListEntry.getValue();
IssueEvent toAdd = null;
for (IssueEvent event : events) {
if (event.getEvent() == IssueEventType.labeled || event.getEvent() == IssueEventType.unlabeled) {
if (toAdd == null) {
toAdd = issueEventModel;
toAdd = event;
}
long time = toAdd.getCreatedAt().after(issueEventModel.getCreatedAt()) ? (toAdd.getCreatedAt().getTime() - issueEventModel
.getCreatedAt().getTime()) : (issueEventModel.getCreatedAt().getTime() - toAdd.getCreatedAt().getTime());
if (TimeUnit.MINUTES.toMinutes(time) <= 2 && toAdd.getEvent() == event) {
if (event == IssueEventType.labeled || event == IssueEventType.unlabeled) {
LabelModel labelModel = issueEventModel.getLabel();
int color = Color.parseColor("#" + labelModel.getColor());
spannableBuilder.append(" ")
.append(" " + labelModel.getName() + " ", new LabelSpan(color))
.append(" ");
} else if (event == IssueEventType.assigned || event == IssueEventType.unassigned) {
spannableBuilder.append(" ")
.bold(issueEventModel.getAssignee() != null ? issueEventModel.getAssignee().getLogin() : "",
new LabelSpan(Color.TRANSPARENT))
.append(" ");
}
long time = toAdd.getCreatedAt().after(event.getCreatedAt()) ? (toAdd.getCreatedAt().getTime() - event
.getCreatedAt().getTime()) : (event.getCreatedAt().getTime() - toAdd.getCreatedAt().getTime());
if (TimeUnit.MINUTES.toMinutes(time) <= 2 && toAdd.getEvent() == event.getEvent()) {
labelModels.add(event.getLabel());
} else {
models.add(new TimelineModel(issueEventModel));
models.add(new TimelineModel(event));
}
} else {
models.add(new TimelineModel(issueEventModel));
models.add(new TimelineModel(event));
}
}
}
if (toAdd != null) {
SpannableBuilder builder = SpannableBuilder.builder();
if (toAdd.getAssignee() != null && toAdd.getAssigner() != null) {
builder.bold(toAdd.getAssigner().getLogin(), new LabelSpan(Color.TRANSPARENT));
} else {
if (toAdd.getActor() != null) {
builder.bold(toAdd.getActor().getLogin(), new LabelSpan(Color.TRANSPARENT));
}
if (toAdd != null) {
toAdd.setLabels(labelModels);
models.add(new TimelineModel(toAdd));
}
builder.append(" ")
.append(toAdd.getEvent().name().replaceAll("_", " "), new LabelSpan(Color.TRANSPARENT));
toAdd.setLabels(SpannableBuilder.builder()
.append(builder)
.append(spannableBuilder)
.append(" ")
.append(ParseDateFormat.getTimeAgo(toAdd.getCreatedAt()), new LabelSpan(Color.TRANSPARENT)));
models.add(new TimelineModel(toAdd));
}
}
return Stream.of(models)
.sortBy(timelineModel -> timelineModel.getEvent().getCreatedAt())
.collect(Collectors.toList());
.sortBy(TimelineModel::getSortedDate)
.toList();
}

@NonNull private static List<TimelineModel> constructReviews(@NonNull List<ReviewModel> reviews, @Nullable List<ReviewCommentModel> comments) {
@NonNull private static List<TimelineModel> constructReviews
(@NonNull List<ReviewModel> reviews, @Nullable List<ReviewCommentModel> comments) {
List<TimelineModel> models = new ArrayList<>();
if (comments == null || comments.isEmpty()) {
models.addAll(Stream.of(reviews)
Expand All @@ -249,19 +221,23 @@ private TimelineModel(GroupedReviewModel groupedReview) {
Collectors.mapping(o -> o, toList())));
for (Map.Entry<Integer, List<ReviewCommentModel>> entry : mappedComments.entrySet()) {
List<ReviewCommentModel> reviewCommentModels = entry.getValue();
models.add(new TimelineModel(Stream.of(reviewCommentModels)
.filter(value -> value.getCreatedAt() != null)
.findFirst()
.map(reviewCommentModel -> {
GroupedReviewModel groupedReviewModel = new GroupedReviewModel();
groupedReviewModel.setPath(reviewCommentModel.getPath());
groupedReviewModel.setDiffText(reviewCommentModel.getDiffHunk());
groupedReviewModel.setDate(reviewCommentModel.getCreatedAt());
groupedReviewModel.setPosition(reviewCommentModel.getOriginalPosition());
groupedReviewModel.setId(reviewCommentModel.getId());
groupedReviewModel.setComments(reviewCommentModels);
return new GroupedReviewModel();
}).get()));
GroupedReviewModel groupedReviewModel = new GroupedReviewModel();
if (!reviewCommentModels.isEmpty()) {
ReviewCommentModel reviewCommentModel = reviewCommentModels.get(0);
groupedReviewModel.setPath(reviewCommentModel.getPath());
groupedReviewModel.setDiffText(reviewCommentModel.getDiffHunk());
groupedReviewModel.setDate(reviewCommentModel.getCreatedAt());
groupedReviewModel.setPosition(reviewCommentModel.getOriginalPosition());
groupedReviewModel.setId(reviewCommentModel.getId());
}
for (ReviewCommentModel reviewCommentModel : reviewCommentModels) {
if (reviewCommentModel.getCreatedAt() != null) {
groupedReviewModel.setDate(reviewCommentModel.getCreatedAt());
break;
}
}
groupedReviewModel.setComments(reviewCommentModels);
models.add(new TimelineModel(groupedReviewModel));
}
models.addAll(Stream.of(reviews)
.filter(reviewModel -> !InputHelper.isEmpty(reviewModel.getBody()) || reviewModel.getState() == ReviewStateType.APPROVED)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.text.TextUtils;

import com.fastaccess.App;
import com.fastaccess.data.dao.LabelModel;
Expand Down Expand Up @@ -58,7 +57,7 @@
String issueId;
String repoId;
String login;
@Transient CharSequence labels;
@Transient List<LabelModel> labels;

public Single save(IssueEvent entity) {
return RxHelper.getSingle(App.getInstance().getDataStore().upsert(entity));
Expand Down Expand Up @@ -116,7 +115,7 @@ public static Single<List<IssueEvent>> get(@NonNull String repoId, @NonNull Stri
dest.writeString(this.issueId);
dest.writeString(this.repoId);
dest.writeString(this.login);
TextUtils.writeToParcel(labels, dest, flags);
dest.writeTypedList(this.labels);
}

protected AbstractIssueEvent(Parcel in) {
Expand All @@ -139,7 +138,7 @@ protected AbstractIssueEvent(Parcel in) {
this.issueId = in.readString();
this.repoId = in.readString();
this.login = in.readString();
this.labels = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
this.labels = in.createTypedArrayList(LabelModel.CREATOR);
}

public static final Creator<IssueEvent> CREATOR = new Creator<IssueEvent>() {
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/com/fastaccess/helper/AppHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ public static void copyToClipboard(@NonNull Context context, @NonNull String uri
}

public static boolean isNightMode(@NonNull Resources resources) {
int themeType = PrefGetter.getThemeType(resources);
return themeType == PrefGetter.DARK || themeType == PrefGetter.AMLOD;
@PrefGetter.ThemeType int themeType = PrefGetter.getThemeType(resources);
return themeType == PrefGetter.DARK || themeType == PrefGetter.AMLOD || themeType == PrefGetter.BLUISH;
}

@SuppressWarnings("StringBufferReplaceableByString") public static String getFastHubIssueTemplate() {
Expand Down

0 comments on commit 02e38a5

Please sign in to comment.