diff --git a/app/build.gradle b/app/build.gradle index 656dcd1a..29c53768 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,10 +8,10 @@ apply plugin: 'io.fabric' buildProperties { notThere { - file rootProject.file('debug_gradle.properties') + using rootProject.file('debug_gradle.properties') } secrets { - file rootProject.file('release_gradle.properties') + using rootProject.file('release_gradle.properties') } } @@ -29,8 +29,8 @@ android { applicationId "com.fastaccess.github" minSdkVersion 21 targetSdkVersion 29 - versionCode 469 - versionName "4.6.9" + versionCode 470 + versionName "4.7.0" 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 buildConfigString "IMGUR_CLIENT_ID", (buildProperties.secrets['imgur_client_id'] | buildProperties.notThere['imgur_client_id']).string @@ -38,7 +38,6 @@ android { buildConfigField "String", "REST_URL", '"https://api.github.com/"' buildConfigField "String", "IMGUR_URL", '"https://api.imgur.com/3/"' multiDexEnabled true - testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" javaCompileOptions { annotationProcessorOptions { includeCompileClasspath true @@ -54,14 +53,10 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { - if (!rootProject.file('gradle.properties').exists()) { - signingConfig signingConfigs.signing - } applicationIdSuffix ".debug" versionNameSuffix "-debug" ext.alwaysUpdateBuildId = false } - } sourceSets { @@ -99,14 +94,6 @@ android { jumboMode true javaMaxHeapSize "4g" } - - testOptions { - unitTests.returnDefaultValues = true - } -} - -kapt { - generateStubs = true } repositories { @@ -139,7 +126,7 @@ dependencies { implementation 'it.sephiroth.android.library.bottomnavigation:bottom-navigation:2.0.2' implementation 'io.reactivex.rxjava2:rxjava:2.2.15' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' - implementation 'com.squareup.okhttp3:logging-interceptor:4.2.1' + implementation 'com.squareup.okhttp3:logging-interceptor:4.2.2' implementation 'com.annimon:stream:1.1.9' implementation 'com.github.GrenderG:Toasty:1.1.3' implementation 'com.github.k0shk0sh:RetainedDateTimePickers:1.0.2' @@ -156,7 +143,8 @@ dependencies { implementation "com.atlassian.commonmark:commonmark-ext-gfm-tables:${commonmark}" implementation "com.atlassian.commonmark:commonmark-ext-ins:${commonmark}" implementation "com.atlassian.commonmark:commonmark-ext-yaml-front-matter:${commonmark}" - implementation "com.google.firebase:firebase-core:17.2.1" + implementation "com.google.firebase:firebase-analytics:17.2.1" + implementation "com.google.firebase:firebase-inappmessaging:19.0.2" implementation "com.google.firebase:firebase-messaging:20.1.0" implementation "com.google.firebase:firebase-database:19.2.0" implementation "com.google.android.gms:play-services-base:17.1.0" @@ -170,10 +158,11 @@ dependencies { implementation "petrov.kristiyan:colorpicker-library:1.1.4" implementation 'com.apollographql.apollo:apollo-rx2-support:1.2.2' implementation("com.apollographql.apollo:apollo-runtime:1.2.2") - implementation 'com.jaredrummler:android-device-names:1.1.5' + implementation 'com.jaredrummler:android-device-names:1.1.9' implementation 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:2.1.0' - implementation 'com.airbnb.android:lottie:3.0.7' + implementation 'com.airbnb.android:lottie:3.3.1' implementation 'com.firebase:firebase-jobdispatcher:0.8.2' + implementation 'com.google.guava:guava:27.0.1-android' /*to be removed*/ debugImplementation 'com.github.whataa:pandora:2.0.6' releaseImplementation 'com.github.whataa:pandora-no-op:2.0.3' @@ -185,7 +174,6 @@ dependencies { kapt 'com.github.matthiasrobbers:shortbread-compiler:1.0.1' kapt "io.requery:requery-processor:${requery}" kapt "com.github.bumptech.glide:compiler:$glideVersion" - } apply plugin: 'com.google.gms.google-services' \ No newline at end of file diff --git a/app/src/debug/google-services.json b/app/src/debug/google-services.json index 7f42a1cf..0ad69152 100644 --- a/app/src/debug/google-services.json +++ b/app/src/debug/google-services.json @@ -1,61 +1,37 @@ { "project_info": { - "project_id": "this-is-a-sample", - "project_number": "999999999999", - "name": "FastHub Sample", - "firebase_url": "https://this-is-a-sample-do-not-use.firebaseio.com", - "storage_bucket": "this-is-a-sample-do-not-use.storage.firebase.com" + "project_number": "535903042804", + "firebase_url": "https://fasthub-dev-a1309.firebaseio.com", + "project_id": "fasthub-dev-a1309", + "storage_bucket": "fasthub-dev-a1309.appspot.com" }, "client": [ { "client_info": { - "mobilesdk_app_id": "1:999999999999:android:0000000000000000", + "mobilesdk_app_id": "1:535903042804:android:516309017e0298c938b2a1", "android_client_info": { "package_name": "com.fastaccess.github.debug" } }, "oauth_client": [ { - "client_id": "this-is-a-sample-do-not-use.apps.googleusercontent.com", - "client_type": 1, - "android_info": { - "package_name": "com.fastaccess.github.debug", - "certificate_hash": "0000000000000000000000000000000000000000" - } - }, - { - "client_id": "this-is-a-sample-do-not-use.apps.googleusercontent.com", - "client_type": 1, - "android_info": { - "package_name": "com.fastaccess.github.debug", - "certificate_hash": "0000000000000000000000000000000000000000" - } - }, - { - "client_id": "this-is-a-sample-do-not-use.apps.googleusercontent.com", + "client_id": "535903042804-14481m7poceb7ojv5roddqm28pg4ch5n.apps.googleusercontent.com", "client_type": 3 } ], "api_key": [ { - "current_key": "000000000000000000000000000000000000000" + "current_key": "AIzaSyBbRQtQN1UxFRgeSSfjZwQ5TRulc2lZUzI" } ], "services": { - "analytics_service": { - "status": 1 - }, "appinvite_service": { - "status": 2, "other_platform_oauth_client": [ { - "client_id": "this-is-a-sample-do-not-use.apps.googleusercontent.com", + "client_id": "535903042804-14481m7poceb7ojv5roddqm28pg4ch5n.apps.googleusercontent.com", "client_type": 3 } ] - }, - "ads_service": { - "status": 2 } } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b0f438f5..796c4f31 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -317,10 +317,6 @@ - - diff --git a/app/src/main/java/com/fastaccess/data/dao/ReactionsModel.java b/app/src/main/java/com/fastaccess/data/dao/ReactionsModel.java index 16edfeca..ffcddd07 100644 --- a/app/src/main/java/com/fastaccess/data/dao/ReactionsModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/ReactionsModel.java @@ -2,11 +2,14 @@ package com.fastaccess.data.dao; import android.os.Parcel; import android.os.Parcelable; + import androidx.annotation.Nullable; import com.fastaccess.data.dao.model.User; import com.google.gson.annotations.SerializedName; +import org.jetbrains.annotations.NotNull; + import java.util.ArrayList; import java.util.List; @@ -24,12 +27,14 @@ import github.PullRequestTimelineQuery; public long id; public String url; public int total_count; - @SerializedName("+1") public int plusOne; - @SerializedName("-1") public int minusOne; + @SerializedName(value = "+1", alternate = "thumbs_up") public int plusOne; + @SerializedName(value = "-1", alternate = "thumbs_down") public int minusOne; public int laugh; public int hooray; public int confused; public int heart; + public int rocket; + public int eyes; public String content; public User user; public boolean viewerHasReacted; @@ -37,7 +42,7 @@ import github.PullRequestTimelineQuery; public ReactionsModel() {} - @Override public String toString() { + @NotNull @Override public String toString() { return "ReactionsModel{" + "id=" + id + ", url='" + url + '\'' + @@ -48,6 +53,8 @@ import github.PullRequestTimelineQuery; ", hooray=" + hooray + ", confused=" + confused + ", heart=" + heart + + ", rocket=" + rocket + + ", eyes=" + eyes + '}'; } @@ -63,6 +70,8 @@ import github.PullRequestTimelineQuery; dest.writeInt(this.hooray); dest.writeInt(this.confused); dest.writeInt(this.heart); + dest.writeInt(this.rocket); + dest.writeInt(this.eyes); dest.writeString(this.content); dest.writeParcelable(this.user, flags); dest.writeByte(this.isCallingApi ? (byte) 1 : (byte) 0); @@ -78,6 +87,8 @@ import github.PullRequestTimelineQuery; this.hooray = in.readInt(); this.confused = in.readInt(); this.heart = in.readInt(); + this.rocket = in.readInt(); + this.eyes = in.readInt(); this.content = in.readString(); this.user = in.readParcelable(User.class.getClassLoader()); this.isCallingApi = in.readByte() != 0; @@ -88,46 +99,4 @@ import github.PullRequestTimelineQuery; @Override public ReactionsModel[] newArray(int size) {return new ReactionsModel[size];} }; - - @NonNull public static List getReactionGroup(@Nullable List reactions) { - List models = new ArrayList<>(); - if (reactions != null && !reactions.isEmpty()) { - for (PullRequestTimelineQuery.ReactionGroup reaction : reactions) { - ReactionsModel model = new ReactionsModel(); - model.setContent(reaction.content().name()); - model.setViewerHasReacted(reaction.viewerHasReacted()); - model.setTotal_count(reaction.users().totalCount()); - models.add(model); - } - } - return models; - } - - @NonNull public static List getReaction(@Nullable List reactions) { - List models = new ArrayList<>(); - if (reactions != null && !reactions.isEmpty()) { - for (PullRequestTimelineQuery.ReactionGroup1 reaction : reactions) { - ReactionsModel model = new ReactionsModel(); - model.setContent(reaction.content().name()); - model.setViewerHasReacted(reaction.viewerHasReacted()); - model.setTotal_count(reaction.users().totalCount()); - models.add(model); - } - } - return models; - } - - @NonNull public static List getReaction2(@Nullable List reactions) { - List models = new ArrayList<>(); - if (reactions != null && !reactions.isEmpty()) { - for (PullRequestTimelineQuery.ReactionGroup2 reaction : reactions) { - ReactionsModel model = new ReactionsModel(); - model.setContent(reaction.content().name()); - model.setViewerHasReacted(reaction.viewerHasReacted()); - model.setTotal_count(reaction.users().totalCount()); - models.add(model); - } - } - return models; - } } diff --git a/app/src/main/java/com/fastaccess/data/dao/types/ReactionTypes.java b/app/src/main/java/com/fastaccess/data/dao/types/ReactionTypes.java index 7b075c26..2f21fd4b 100644 --- a/app/src/main/java/com/fastaccess/data/dao/types/ReactionTypes.java +++ b/app/src/main/java/com/fastaccess/data/dao/types/ReactionTypes.java @@ -14,10 +14,12 @@ public enum ReactionTypes { HEART("heart", R.id.heart, R.id.heartReaction), HOORAY("hooray", R.id.hurray, R.id.hurrayReaction), - PLUS_ONE("+1", R.id.thumbsUp, R.id.thumbsUpReaction), - MINUS_ONE("-1", R.id.thumbsDown, R.id.thumbsDownReaction), + PLUS_ONE("thumbs_up", R.id.thumbsUp, R.id.thumbsUpReaction), + MINUS_ONE("thumbs_down", R.id.thumbsDown, R.id.thumbsDownReaction), CONFUSED("confused", R.id.sad, R.id.sadReaction), - LAUGH("laugh", R.id.laugh, R.id.laughReaction); + LAUGH("laugh", R.id.laugh, R.id.laughReaction), + ROCKET("rocket", R.id.rocket, R.id.rocketReaction), + EYES("eyes", R.id.eyes, R.id.eyeReaction); private String content; private int vId; diff --git a/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java b/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java index a3e6bd66..94ae9800 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java +++ b/app/src/main/java/com/fastaccess/provider/rest/RestProvider.java @@ -120,7 +120,6 @@ public class RestProvider { public static int getErrorCode(Throwable throwable) { if (throwable instanceof HttpException) { return ((HttpException) throwable).code(); - } return -1; } diff --git a/app/src/main/java/com/fastaccess/provider/timeline/CommentsHelper.java b/app/src/main/java/com/fastaccess/provider/timeline/CommentsHelper.java index 1dde1391..727f3f49 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/CommentsHelper.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/CommentsHelper.java @@ -1,8 +1,10 @@ package com.fastaccess.provider.timeline; import android.content.Context; + import androidx.annotation.IdRes; import androidx.annotation.NonNull; + import android.view.View; import android.widget.TextView; @@ -16,6 +18,8 @@ import com.fastaccess.data.dao.types.ReactionTypes; import com.fastaccess.provider.tasks.git.ReactionService; import com.fastaccess.ui.widgets.SpannableBuilder; +import org.w3c.dom.Text; + import java.util.ArrayList; import java.util.List; @@ -31,41 +35,14 @@ public class CommentsHelper { private static final int THUMBS_DOWN = 0x1f44e; private static final int HOORAY = 0x1f389; private static final int HEART = 0x2764; + private static final int ROCKET = 0x1f680; + private static final int EYES = 0x1f440; public static boolean isOwner(@NonNull String currentLogin, @NonNull String repoOwner, @NonNull String commentUser) { return currentLogin.equalsIgnoreCase(repoOwner) || currentLogin.equalsIgnoreCase(commentUser); } - public static void handleReactions(@NonNull Context context, @NonNull String login, @NonNull String repoId, - @IdRes int id, long commentId, boolean commit, boolean isDelete, - boolean isEnterprise) { - ReactionTypes type = null; - switch (id) { - case R.id.heart: - type = ReactionTypes.HEART; - break; - case R.id.sad: - type = ReactionTypes.CONFUSED; - break; - case R.id.thumbsDown: - type = ReactionTypes.MINUS_ONE; - break; - case R.id.thumbsUp: - type = ReactionTypes.PLUS_ONE; - break; - case R.id.laugh: - type = ReactionTypes.LAUGH; - break; - case R.id.hurray: - type = ReactionTypes.HOORAY; - break; - } - if (type != null) { - ReactionService.start(context, login, repoId, commentId, type, commit, isDelete, isEnterprise); - } - } - private static String getEmojiByUnicode(int unicode) { return new String(Character.toChars(unicode)); } @@ -76,14 +53,16 @@ public class CommentsHelper { return getHeart(); case HOORAY: return getHooray(); - case PLUS_ONE: - return getThumbsUp(); case MINUS_ONE: return getThumbsDown(); case CONFUSED: return getSad(); case LAUGH: return getLaugh(); + case ROCKET: + return getRocket(); + case EYES: + return getEyes(); default: return getThumbsUp(); } @@ -113,6 +92,14 @@ public class CommentsHelper { return getEmojiByUnicode(HEART); } + public static String getRocket() { + return getEmojiByUnicode(ROCKET); + } + + public static String getEyes() { + return getEmojiByUnicode(EYES); + } + @NonNull public static ArrayList getUsers(@NonNull List comments) { return Stream.of(comments) .filter(comment -> comment.getUser() != null) @@ -129,13 +116,17 @@ public class CommentsHelper { .collect(Collectors.toCollection(ArrayList::new)); } - public static void appendEmojies(@NonNull ReactionsModel reaction, @NonNull TextView thumbsUp, - @NonNull TextView thumbsUpReaction, @NonNull TextView thumbsDown, - @NonNull TextView thumbsDownReaction, @NonNull TextView hurray, - @NonNull TextView hurrayReaction, @NonNull TextView sad, - @NonNull TextView sadReaction, @NonNull TextView laugh, - @NonNull TextView laughReaction, @NonNull TextView heart, - @NonNull TextView heartReaction, @NonNull View reactionsList) { + public static void appendEmojies( + @NonNull ReactionsModel reaction, @NonNull TextView thumbsUp, + @NonNull TextView thumbsUpReaction, @NonNull TextView thumbsDown, + @NonNull TextView thumbsDownReaction, @NonNull TextView hurray, + @NonNull TextView hurrayReaction, @NonNull TextView sad, + @NonNull TextView sadReaction, @NonNull TextView laugh, + @NonNull TextView laughReaction, @NonNull TextView heart, + @NonNull TextView heartReaction, @NonNull TextView rocket, + @NonNull TextView rocketReaction, @NonNull TextView eye, + @NonNull TextView eyeReaction, @NonNull View reactionsList + ) { SpannableBuilder spannableBuilder = SpannableBuilder.builder() .append(CommentsHelper.getThumbsUp()).append(" ") .append(String.valueOf(reaction.getPlusOne())) @@ -173,10 +164,27 @@ public class CommentsHelper { laughReaction.setVisibility(reaction.getLaugh() > 0 ? View.VISIBLE : View.GONE); spannableBuilder = SpannableBuilder.builder() .append(CommentsHelper.getHeart()).append(" ") - .append(String.valueOf(reaction.getHeart())); + .append(String.valueOf(reaction.getHeart())) + .append(" "); heart.setText(spannableBuilder); heartReaction.setText(spannableBuilder); heartReaction.setVisibility(reaction.getHeart() > 0 ? View.VISIBLE : View.GONE); + + spannableBuilder = SpannableBuilder.builder() + .append(CommentsHelper.getRocket()).append(" ") + .append(String.valueOf(reaction.getRocket())) + .append(" "); + rocket.setText(spannableBuilder); + rocketReaction.setText(spannableBuilder); + rocketReaction.setVisibility(reaction.getRocket() > 0 ? View.VISIBLE : View.GONE); + + spannableBuilder = SpannableBuilder.builder() + .append(CommentsHelper.getEyes()).append(" ") + .append(String.valueOf(reaction.getEyes())); + eye.setText(spannableBuilder); + eyeReaction.setText(spannableBuilder); + eyeReaction.setVisibility(reaction.getEyes() > 0 ? View.VISIBLE : View.GONE); + if (reaction.getPlusOne() > 0 || reaction.getMinusOne() > 0 || reaction.getLaugh() > 0 || reaction.getHooray() > 0 || reaction.getConfused() > 0 || reaction.getHeart() > 0) { diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/DrawableHandler.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/DrawableHandler.java index fe6517db..d0b3abe5 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/DrawableHandler.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/DrawableHandler.java @@ -41,7 +41,6 @@ import static android.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE; builder.append("\n"); DrawableGetter imageGetter = new DrawableGetter(textView, width); builder.setSpan(new ImageSpan(imageGetter.getDrawable(src)), start, builder.length(), SPAN_EXCLUSIVE_EXCLUSIVE); - builder.setSpan(new CenterSpan(), start, builder.length(), SPAN_EXCLUSIVE_EXCLUSIVE); builder.append("\n"); } else { builder.append(SpannableBuilder.builder().clickable("Image", v -> SchemeParser.launchUri(v.getContext(), src))); diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/PreTagHandler.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/PreTagHandler.java index 0e7be88b..9010e046 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/PreTagHandler.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/PreTagHandler.java @@ -71,7 +71,7 @@ import static android.text.Spanned.SPAN_EXCLUSIVE_EXCLUSIVE; this.appendNewLine(builder); this.appendNewLine(builder); } else { - StringBuffer text = node.getText(); + CharSequence text = node.getText(); builder.append(" "); builder.append(replace(text.toString())); builder.append(" "); diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/DrawableGetter.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/DrawableGetter.java index 93b1989b..7dc25666 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/DrawableGetter.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/DrawableGetter.java @@ -40,8 +40,8 @@ public class DrawableGetter implements Html.ImageGetter, Drawable.Callback { final RequestBuilder load = Glide.with(context) .load(url) .placeholder(ContextCompat.getDrawable(context, R.drawable.ic_image)) - .dontAnimate() - .override(width, width / 2); + .dontAnimate(); + final GlideDrawableTarget target = new GlideDrawableTarget(urlDrawable, container, width); load.into(target); cachedTargets.add(target); diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/GlideDrawableTarget.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/GlideDrawableTarget.java index 30f6b687..1f7d3125 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/GlideDrawableTarget.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/GlideDrawableTarget.java @@ -37,9 +37,8 @@ class GlideDrawableTarget extends SimpleTarget { width = (float) (resource.getIntrinsicWidth() / downScale / 1.3); height = (float) (resource.getIntrinsicHeight() / downScale / 1.3); } else { - float multiplier = (float) this.width / resource.getIntrinsicWidth(); - width = (float) resource.getIntrinsicWidth() * multiplier; - height = (float) resource.getIntrinsicHeight() * multiplier; + width = (float) resource.getIntrinsicWidth(); + height = (float) resource.getIntrinsicHeight(); } Rect rect = new Rect(0, 0, Math.round(width), Math.round(height)); resource.setBounds(rect); diff --git a/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/UrlDrawable.java b/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/UrlDrawable.java index 938dc033..a76f28c3 100644 --- a/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/UrlDrawable.java +++ b/app/src/main/java/com/fastaccess/provider/timeline/handler/drawable/UrlDrawable.java @@ -1,11 +1,14 @@ package com.fastaccess.provider.timeline.handler.drawable; +import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; + import androidx.annotation.NonNull; import com.bumptech.glide.load.resource.gif.GifDrawable; +import com.crashlytics.android.Crashlytics; class UrlDrawable extends BitmapDrawable implements Drawable.Callback { private Drawable drawable; @@ -14,7 +17,12 @@ class UrlDrawable extends BitmapDrawable implements Drawable.Callback { @Override public void draw(Canvas canvas) { if (drawable != null) { - drawable.draw(canvas); + try { + drawable.draw(canvas); + } catch (Exception e) { + Crashlytics.logException(e); + e.printStackTrace(); + } if (drawable instanceof GifDrawable) { if (!((GifDrawable) drawable).isRunning()) { ((GifDrawable) drawable).start(); diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueDetailsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueDetailsViewHolder.java index 18251cc1..354592a2 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueDetailsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/IssueDetailsViewHolder.java @@ -69,6 +69,10 @@ public class IssueDetailsViewHolder extends BaseViewHolder { @BindView(R.id.hurrayReaction) FontTextView hurrayReaction; @BindView(R.id.sadReaction) FontTextView sadReaction; @BindView(R.id.heartReaction) FontTextView heartReaction; + @BindView(R.id.rocketReaction) FontTextView rocketReaction; + @BindView(R.id.eyeReaction) FontTextView eyeReaction; + @BindView(R.id.rocket) FontTextView rocket; + @BindView(R.id.eyes) FontTextView eyes; private OnToggleView onToggleView; private ReactionsCallback reactionsCallback; private ViewGroup viewGroup; @@ -113,6 +117,14 @@ public class IssueDetailsViewHolder extends BaseViewHolder { thumbsUpReaction.setOnLongClickListener(this); hurrayReaction.setOnLongClickListener(this); heartReaction.setOnLongClickListener(this); + rocketReaction.setOnLongClickListener(this); + rocketReaction.setOnClickListener(this); + rocket.setOnLongClickListener(this); + rocket.setOnClickListener(this); + eyeReaction.setOnLongClickListener(this); + eyeReaction.setOnClickListener(this); + eyes.setOnLongClickListener(this); + eyes.setOnClickListener(this); } public static IssueDetailsViewHolder newInstance(@NonNull ViewGroup viewGroup, @Nullable BaseRecyclerAdapter adapter, @@ -187,6 +199,14 @@ public class IssueDetailsViewHolder extends BaseViewHolder { case R.id.hurrayReaction: reactionsModel.setHooray(!isReacted ? reactionsModel.getHooray() + 1 : reactionsModel.getHooray() - 1); break; + case R.id.rocket: + case R.id.rocketReaction: + reactionsModel.setRocket(!isReacted ? reactionsModel.getRocket() + 1 : reactionsModel.getRocket() - 1); + break; + case R.id.eyes: + case R.id.eyeReaction: + reactionsModel.setEyes(!isReacted ? reactionsModel.getEyes() + 1 : reactionsModel.getEyes() - 1); + break; } if (pullRequest != null) { pullRequest.setReactions(reactionsModel); @@ -254,7 +274,7 @@ public class IssueDetailsViewHolder extends BaseViewHolder { private void appendEmojies(ReactionsModel reaction) { CommentsHelper.appendEmojies(reaction, thumbsUp, thumbsUpReaction, thumbsDown, thumbsDownReaction, hooray, hurrayReaction, sad, - sadReaction, laugh, laughReaction, heart, heartReaction, reactionsList); + sadReaction, laugh, laughReaction, heart, heartReaction, rocket, rocketReaction, eyes, eyeReaction, reactionsList); } private void onToggle(boolean expanded, boolean animate) { diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReviewCommentsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReviewCommentsViewHolder.java index a4859ed5..d3986904 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReviewCommentsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/ReviewCommentsViewHolder.java @@ -56,6 +56,10 @@ public class ReviewCommentsViewHolder extends BaseViewHolder @BindView(R.id.hurrayReaction) FontTextView hurrayReaction; @BindView(R.id.sadReaction) FontTextView sadReaction; @BindView(R.id.heartReaction) FontTextView heartReaction; + @BindView(R.id.rocketReaction) FontTextView rocketReaction; + @BindView(R.id.eyeReaction) FontTextView eyeReaction; + @BindView(R.id.rocket) FontTextView rocket; + @BindView(R.id.eyes) FontTextView eyes; private OnToggleView onToggleView; private ReactionsCallback reactionsCallback; private ViewGroup viewGroup; @@ -122,6 +126,14 @@ public class ReviewCommentsViewHolder extends BaseViewHolder thumbsUpReaction.setOnLongClickListener(this); hurrayReaction.setOnLongClickListener(this); heartReaction.setOnLongClickListener(this); + rocketReaction.setOnLongClickListener(this); + rocketReaction.setOnClickListener(this); + rocket.setOnLongClickListener(this); + rocket.setOnClickListener(this); + eyeReaction.setOnLongClickListener(this); + eyeReaction.setOnClickListener(this); + eyes.setOnLongClickListener(this); + eyes.setOnClickListener(this); } public static ReviewCommentsViewHolder newInstance(ViewGroup viewGroup, BaseRecyclerAdapter adapter, @@ -201,6 +213,14 @@ public class ReviewCommentsViewHolder extends BaseViewHolder case R.id.hurrayReaction: reactionsModel.setHooray(!isReacted ? reactionsModel.getHooray() + 1 : reactionsModel.getHooray() - 1); break; + case R.id.rocket: + case R.id.rocketReaction: + reactionsModel.setRocket(!isReacted ? reactionsModel.getRocket() + 1 : reactionsModel.getRocket() - 1); + break; + case R.id.eyes: + case R.id.eyeReaction: + reactionsModel.setEyes(!isReacted ? reactionsModel.getEyes() + 1 : reactionsModel.getEyes() - 1); + break; } comment.setReactions(reactionsModel); appendEmojies(reactionsModel); @@ -210,7 +230,7 @@ public class ReviewCommentsViewHolder extends BaseViewHolder private void appendEmojies(ReactionsModel reaction) { CommentsHelper.appendEmojies(reaction, thumbsUp, thumbsUpReaction, thumbsDown, thumbsDownReaction, hurray, hurrayReaction, sad, - sadReaction, laugh, laughReaction, heart, heartReaction, reactionsList); + sadReaction, laugh, laughReaction, heart, heartReaction, rocket, rocketReaction, eyes, eyeReaction, reactionsList); } private long getId() { diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TimelineCommentsViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TimelineCommentsViewHolder.java index 5ee5a0a4..75616ad5 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TimelineCommentsViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/TimelineCommentsViewHolder.java @@ -64,6 +64,10 @@ public class TimelineCommentsViewHolder extends BaseViewHolder { @BindView(R.id.hurrayReaction) FontTextView hurrayReaction; @BindView(R.id.sadReaction) FontTextView sadReaction; @BindView(R.id.heartReaction) FontTextView heartReaction; + @BindView(R.id.rocketReaction) FontTextView rocketReaction; + @BindView(R.id.eyeReaction) FontTextView eyeReaction; + @BindView(R.id.rocket) FontTextView rocket; + @BindView(R.id.eyes) FontTextView eyes; private OnToggleView onToggleView; private boolean showEmojies; private ReactionsCallback reactionsCallback; @@ -133,6 +137,14 @@ public class TimelineCommentsViewHolder extends BaseViewHolder { thumbsUpReaction.setOnLongClickListener(this); hurrayReaction.setOnLongClickListener(this); heartReaction.setOnLongClickListener(this); + rocketReaction.setOnLongClickListener(this); + rocketReaction.setOnClickListener(this); + rocket.setOnLongClickListener(this); + rocket.setOnClickListener(this); + eyeReaction.setOnLongClickListener(this); + eyeReaction.setOnClickListener(this); + eyes.setOnLongClickListener(this); + eyes.setOnClickListener(this); } public static TimelineCommentsViewHolder newInstance(@NonNull ViewGroup viewGroup, @Nullable IssuesTimelineAdapter adapter, @@ -237,6 +249,14 @@ public class TimelineCommentsViewHolder extends BaseViewHolder { case R.id.hurrayReaction: reactionsModel.setHooray(!isReacted ? reactionsModel.getHooray() + 1 : reactionsModel.getHooray() - 1); break; + case R.id.rocket: + case R.id.rocketReaction: + reactionsModel.setRocket(!isReacted ? reactionsModel.getRocket() + 1 : reactionsModel.getRocket() - 1); + break; + case R.id.eyes: + case R.id.eyeReaction: + reactionsModel.setEyes(!isReacted ? reactionsModel.getEyes() + 1 : reactionsModel.getEyes() - 1); + break; } comment.setReactions(reactionsModel); appendEmojies(reactionsModel); @@ -247,7 +267,7 @@ public class TimelineCommentsViewHolder extends BaseViewHolder { private void appendEmojies(ReactionsModel reaction) { CommentsHelper.appendEmojies(reaction, thumbsUp, thumbsUpReaction, thumbsDown, thumbsDownReaction, hurray, hurrayReaction, sad, - sadReaction, laugh, laughReaction, heart, heartReaction, reactionsList); + sadReaction, laugh, laughReaction, heart, heartReaction, rocket, rocketReaction, eyes, eyeReaction, reactionsList); } private void onToggle(boolean expanded, boolean animate) { diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/MainActivity.java b/app/src/main/java/com/fastaccess/ui/modules/main/MainActivity.java index 9735bbbc..544e97e9 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/MainActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/main/MainActivity.java @@ -3,11 +3,18 @@ package com.fastaccess.ui.modules.main; import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; + +import com.fastaccess.BuildConfig; +import com.fastaccess.helper.Logger; +import com.google.android.gms.tasks.OnSuccessListener; import com.google.android.material.floatingactionbutton.FloatingActionButton; + import androidx.fragment.app.FragmentManager; import androidx.core.view.GravityCompat; + import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; @@ -29,6 +36,8 @@ import com.fastaccess.ui.modules.notification.NotificationActivity; import com.fastaccess.ui.modules.search.SearchActivity; import com.fastaccess.ui.modules.settings.SlackBottomSheetDialog; import com.fastaccess.ui.modules.user.UserPagerActivity; +import com.google.firebase.iid.FirebaseInstanceId; +import com.google.firebase.iid.InstanceIdResult; import butterknife.BindView; import butterknife.OnClick; @@ -72,6 +81,13 @@ public class MainActivity extends BaseActivity impl new SlackBottomSheetDialog().show(getSupportFragmentManager(), SlackBottomSheetDialog.TAG); } } + + if (BuildConfig.DEBUG) { + FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener(o -> { + Logger.e(o.getId(), o.getToken()); + }); + } + getPresenter().setEnterprise(PrefGetter.isEnterprise()); selectHome(false); hideShowShadow(navType == MainMvp.FEEDS); diff --git a/app/src/main/java/com/fastaccess/ui/modules/parser/LinksParserActivity.java b/app/src/main/java/com/fastaccess/ui/modules/parser/LinksParserActivity.java index 8fc1143c..bac506f0 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/parser/LinksParserActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/parser/LinksParserActivity.java @@ -15,8 +15,6 @@ import com.fastaccess.helper.InputHelper; import com.fastaccess.provider.scheme.SchemeParser; import com.fastaccess.ui.modules.login.chooser.LoginChooserActivity; -import org.apache.tools.ant.ExitException; - /** * Created by Kosh on 09 Dec 2016, 12:31 PM */ @@ -51,7 +49,7 @@ public class LinksParserActivity extends Activity { Uri uri = Uri.parse(sharedText); onUriReceived(uri); } - } catch (ExitException ignored) {} + } catch (Exception ignored) {} } else if (intent.getAction().equals(Intent.ACTION_VIEW)) { if (intent.getData() != null) { onUriReceived(intent.getData()); diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesFragment.java index d3c072aa..3d373f27 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/files/RepoFilesFragment.java @@ -115,6 +115,7 @@ public class RepoFilesFragment extends BaseFragment { switch (item1.getItemId()) { case R.id.share: @@ -147,6 +148,9 @@ public class RepoFilesFragment extends BaseFragment(), WikiMvp.Presenter { } override fun onSidebarClicked(sidebar: WikiSideBarModel) { - if (BuildConfig.DEBUG) { - firebaseWikiConfigModel = FirebaseWikiConfigModel() - callApi(sidebar) + if (firebaseWikiConfigModel == null) { + manageDisposable( + RxHelper.getSingle(RxFirebaseDatabase.data(FirebaseDatabase.getInstance().reference.child("github_wiki"))) + .doOnSubscribe { sendToView { it.showProgress(0) } } + .map { + firebaseWikiConfigModel = FirebaseWikiConfigModel.map(it.value as? HashMap) + return@map firebaseWikiConfigModel + } + .subscribe( + { callApi(sidebar) }, + { callApi(sidebar) } + ) + ) } else { - if (firebaseWikiConfigModel == null) { - manageDisposable( - RxHelper.getSingle(RxFirebaseDatabase.data(FirebaseDatabase.getInstance().reference.child("github_wiki"))) - .doOnSubscribe { sendToView { it.showProgress(0) } } - .map { - firebaseWikiConfigModel = FirebaseWikiConfigModel.map(it.value as? HashMap) - return@map firebaseWikiConfigModel - } - .subscribe( - { callApi(sidebar) }, - { callApi(sidebar) } - ) - ) - } else { - callApi(sidebar) - } + callApi(sidebar) } } diff --git a/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragmentPresenter.kt b/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragmentPresenter.kt index 29780f94..1f6f5954 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragmentPresenter.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/trending/fragment/TrendingFragmentPresenter.kt @@ -42,25 +42,21 @@ class TrendingFragmentPresenter : BasePresenter(), Tre disposel?.let { if (!it.isDisposed) it.dispose() } val config = firebaseTrendingConfigModel - if (com.fastaccess.BuildConfig.DEBUG) { - callApi(lang, since) - } else { - if (config == null) { - manageDisposable(RxHelper.getSingle(RxFirebaseDatabase.data(FirebaseDatabase.getInstance().reference.child("github_trending"))) - .doOnSubscribe { sendToView { it.showProgress(0) } } - .map { - firebaseTrendingConfigModel = FirebaseTrendingConfigModel - .map(it.value as? HashMap) - return@map firebaseTrendingConfigModel - } - .subscribe( - { callApi(lang, since) }, - { callApi(lang, since) } - ) + if (config == null) { + manageDisposable(RxHelper.getSingle(RxFirebaseDatabase.data(FirebaseDatabase.getInstance().reference.child("github_trending"))) + .doOnSubscribe { sendToView { it.showProgress(0) } } + .map { + firebaseTrendingConfigModel = FirebaseTrendingConfigModel + .map(it.value as? HashMap) + return@map firebaseTrendingConfigModel + } + .subscribe( + { callApi(lang, since) }, + { callApi(lang, since) } ) - } else { - callApi(lang, since) - } + ) + } else { + callApi(lang, since) } } diff --git a/app/src/main/res/layouts/row_layouts/layout/comments_dropdown_layout.xml b/app/src/main/res/layouts/row_layouts/layout/comments_dropdown_layout.xml index f34974ef..2c50457e 100644 --- a/app/src/main/res/layouts/row_layouts/layout/comments_dropdown_layout.xml +++ b/app/src/main/res/layouts/row_layouts/layout/comments_dropdown_layout.xml @@ -1,18 +1,17 @@ - @@ -21,8 +20,8 @@ android:id="@+id/emojiesList" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_centerVertical="true" android:layout_centerHorizontal="true" + android:layout_centerVertical="true" android:scrollbarStyle="insideOverlay"> + tools:text="100" /> + tools:text="100" /> + tools:text="100" /> + tools:text="100" /> + tools:text="100" /> + tools:text="100" /> + + + + diff --git a/app/src/main/res/layouts/row_layouts/layout/comments_row_item.xml b/app/src/main/res/layouts/row_layouts/layout/comments_row_item.xml index 04708ca3..9cccb9dc 100644 --- a/app/src/main/res/layouts/row_layouts/layout/comments_row_item.xml +++ b/app/src/main/res/layouts/row_layouts/layout/comments_row_item.xml @@ -203,6 +203,29 @@ style="@style/TextAppearance.AppCompat.Medium" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/spacing_micro" + android:layout_gravity="center" + android:background="?android:selectableItemBackgroundBorderless" + android:gravity="center" + tools:text="100"/> + + + + - + android:layout_marginStart="@dimen/avatar_margin" + android:layout_marginEnd="@dimen/avatar_margin_end" /> + tools:text="When one acquires" /> + tools:text="50 minutes" /> @@ -85,7 +84,7 @@ android:textColor="?android:attr/textColorSecondary" android:visibility="gone" tools:text="@string/owner" - tools:visibility="visible"/> + tools:visibility="visible" /> + android:src="@drawable/ic_add_emoji" /> + android:src="@drawable/ic_overflow" /> - + + android:layout_marginEnd="@dimen/spacing_xs_large" + android:layout_marginBottom="@dimen/spacing_micro" + android:textIsSelectable="true" /> + android:visibility="gone" + tools:visibility="visible"> + tools:text="100" /> + tools:text="100" /> + tools:text="100" /> + tools:text="100" /> + tools:text="100" /> + tools:text="100" /> + + + + @@ -214,13 +236,13 @@ android:id="@+id/labelsHolder" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginBottom="@dimen/spacing_normal" - android:layout_marginEnd="@dimen/grid_spacing" android:layout_marginStart="@dimen/grid_spacing" android:layout_marginTop="@dimen/spacing_normal" + android:layout_marginEnd="@dimen/grid_spacing" + android:layout_marginBottom="@dimen/spacing_normal" android:background="?card_background" - android:paddingBottom="@dimen/spacing_normal" android:paddingTop="@dimen/spacing_normal" + android:paddingBottom="@dimen/spacing_normal" android:visibility="gone" tools:visibility="visible"> @@ -229,7 +251,7 @@ style="@style/TextAppearance.AppCompat.Caption" android:layout_width="match_parent" android:layout_height="wrap_content" - android:gravity="center"/> + android:gravity="center" /> \ No newline at end of file diff --git a/app/src/main/res/layouts/row_layouts/layout/review_comments_row_item.xml b/app/src/main/res/layouts/row_layouts/layout/review_comments_row_item.xml index da5229bd..143ccda3 100644 --- a/app/src/main/res/layouts/row_layouts/layout/review_comments_row_item.xml +++ b/app/src/main/res/layouts/row_layouts/layout/review_comments_row_item.xml @@ -1,12 +1,11 @@ - + android:layout_marginStart="@dimen/avatar_margin" + android:layout_marginEnd="@dimen/avatar_margin_end" /> + tools:text="When one acquires" /> + tools:text="50 minutes" /> @@ -76,7 +75,7 @@ android:textColor="?android:attr/textColorSecondary" android:visibility="gone" tools:text="@string/owner" - tools:visibility="visible"/> + tools:visibility="visible" /> + android:src="@drawable/ic_add_emoji" /> + android:src="@drawable/ic_overflow" /> - + + tools:text="Hello World" /> + android:visibility="gone" + tools:visibility="visible"> + tools:text="100" /> + tools:text="100" /> + tools:text="100" /> + tools:text="100" /> + tools:text="100" /> + tools:text="100" /> + + + + diff --git a/app/src/main/res/menu/download_share_menu.xml b/app/src/main/res/menu/download_share_menu.xml index 882e13a4..da51bf70 100644 --- a/app/src/main/res/menu/download_share_menu.xml +++ b/app/src/main/res/menu/download_share_menu.xml @@ -1,38 +1,44 @@ + xmlns:app="http://schemas.android.com/apk/res-auto"> + app:showAsAction="ifRoom" /> + app:showAsAction="ifRoom" /> + app:showAsAction="ifRoom" /> + app:showAsAction="ifRoom" /> + app:showAsAction="ifRoom" /> + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2c0b7141..6e297161 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -604,4 +604,5 @@ No file changes Send feedback Unfortunately we cannot access private repos wiki + File History diff --git a/build.gradle b/build.gradle index c7749ffd..31b23c6c 100644 --- a/build.gradle +++ b/build.gradle @@ -3,11 +3,10 @@ buildscript { ext { butterKnifeVersion = '10.2.1' state_version = '1.4.1' - lombokVersion = '1.16.20' + lombokVersion = '1.18.10' supportVersion = "27.1.0" - gms = "12.0.0" thirtyinchVersion = '0.9.6' - retrofit = '2.3.0' + retrofit = '2.7.0' junitVersion = '4.12' mockitoVersion = '1.10.19' assertjVersion = '2.5.0'