diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 943bb4f1..e6d7b589 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -121,4 +121,8 @@ -dontwarn kotlin.reflect.jvm.internal.impl.types.DescriptorSubstitutor -dontwarn kotlin.reflect.jvm.internal.impl.types.DescriptorSubstitutor -dontwarn kotlin.reflect.jvm.internal.impl.types.TypeConstructor --keeppackagenames org.jsoup.nodes \ No newline at end of file +-keeppackagenames org.jsoup.nodes +-keep class com.github.b3er.** { *; } +-keep class com.memoizrlabs.** { *; } +-dontwarn com.github.b3er.** +-dontwarn com.memoizrlabs.** \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/data/dao/CommentRequestModel.java b/app/src/main/java/com/fastaccess/data/dao/CommentRequestModel.java index 224dd9fc..26ea4a7b 100644 --- a/app/src/main/java/com/fastaccess/data/dao/CommentRequestModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/CommentRequestModel.java @@ -16,8 +16,8 @@ import lombok.Setter; private String body; @SerializedName("in_reply_to") private Long inReplyTo; private String path; - private int position; - private int line; + private Integer position; + private Integer line; public CommentRequestModel() {} @@ -40,16 +40,16 @@ import lombok.Setter; dest.writeString(this.body); dest.writeValue(this.inReplyTo); dest.writeString(this.path); - dest.writeInt(this.position); - dest.writeInt(this.line); + dest.writeValue(this.position); + dest.writeValue(this.line); } protected CommentRequestModel(Parcel in) { this.body = in.readString(); this.inReplyTo = (Long) in.readValue(Long.class.getClassLoader()); this.path = in.readString(); - this.position = in.readInt(); - this.line = in.readInt(); + this.position = (Integer) in.readValue(Integer.class.getClassLoader()); + this.line = (Integer) in.readValue(Integer.class.getClassLoader()); } public static final Creator CREATOR = new Creator() { diff --git a/app/src/main/java/com/fastaccess/data/dao/CommitLinesModel.java b/app/src/main/java/com/fastaccess/data/dao/CommitLinesModel.java index 64a71aed..3591c298 100644 --- a/app/src/main/java/com/fastaccess/data/dao/CommitLinesModel.java +++ b/app/src/main/java/com/fastaccess/data/dao/CommitLinesModel.java @@ -49,7 +49,6 @@ import static com.fastaccess.ui.widgets.DiffLineSpan.HUNK_TITLE; boolean addLeft = false; boolean addRight = false; int color = TRANSPARENT; - position++; if (token.startsWith("@@")) { color = PATCH; Matcher matcher = HUNK_TITLE.matcher(token.trim()); @@ -60,16 +59,19 @@ import static com.fastaccess.ui.widgets.DiffLineSpan.HUNK_TITLE; } catch (NumberFormatException e) {e.printStackTrace();} } } else if (firstChar == '+') { + position++; color = ADDITION; ++rightLineNo; addRight = true; addLeft = false; } else if (firstChar == '-') { + position++; color = DELETION; ++leftLineNo; addRight = false; addLeft = true; } else { + position++; addLeft = true; addRight = true; ++rightLineNo; diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractLogin.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractLogin.java index 8fe1633e..28a159ad 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractLogin.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractLogin.java @@ -5,7 +5,6 @@ import android.os.Parcelable; import android.support.annotation.NonNull; import com.fastaccess.App; -import com.fastaccess.helper.Logger; import com.fastaccess.helper.PrefGetter; import com.fastaccess.helper.RxHelper; @@ -114,7 +113,8 @@ import lombok.NoArgsConstructor; public static boolean hasNormalLogin() { return App.getInstance().getDataStore() .count(Login.class) - .where(Login.IS_ENTERPRISE.eq(false)) + .where(Login.IS_ENTERPRISE.eq(false) + .or(Login.IS_ENTERPRISE.isNull())) .get() .value() > 0; } @@ -152,7 +152,6 @@ import lombok.NoArgsConstructor; PrefGetter.setTokenEnterprise(userModel.token); PrefGetter.setEnterpriseOtpCode(userModel.otpCode); PrefGetter.setEnterpriseUrl(userModel.enterpriseUrl); - Logger.e(userModel.enterpriseUrl, PrefGetter.getEnterpriseUrl()); } else { PrefGetter.resetEnterprise(); PrefGetter.setToken(userModel.token); diff --git a/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedRepos.java b/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedRepos.java index 4e09df1f..9e1318eb 100644 --- a/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedRepos.java +++ b/app/src/main/java/com/fastaccess/data/dao/model/AbstractPinnedRepos.java @@ -14,13 +14,13 @@ import java.util.List; import io.reactivex.Observable; import io.reactivex.Single; import io.reactivex.disposables.Disposable; +import io.requery.BlockingEntityStore; import io.requery.Column; import io.requery.Convert; import io.requery.Entity; import io.requery.Generated; import io.requery.Key; import io.requery.Persistable; -import io.requery.reactivex.ReactiveEntityStore; import lombok.NoArgsConstructor; import static com.fastaccess.data.dao.model.PinnedRepos.ENTRY_COUNT; @@ -90,7 +90,8 @@ import static com.fastaccess.data.dao.model.PinnedRepos.REPO_FULL_NAME; @NonNull public static Single> getMyPinnedRepos() { return App.getInstance().getDataStore().select(PinnedRepos.class) - .where(LOGIN.eq(Login.getUser().getLogin())) + .where(LOGIN.eq(Login.getUser().getLogin()) + .or(LOGIN.isNull())) .orderBy(ENTRY_COUNT.desc(), ID.desc()) .get() .observable() @@ -117,15 +118,15 @@ import static com.fastaccess.data.dao.model.PinnedRepos.REPO_FULL_NAME; e.onComplete(); return; } - ReactiveEntityStore reactiveEntityStore = App.getInstance().getDataStore(); - List pinnedRepos = reactiveEntityStore.toBlocking().select(PinnedRepos.class) + BlockingEntityStore reactiveEntityStore = App.getInstance().getDataStore().toBlocking(); + List pinnedRepos = reactiveEntityStore.select(PinnedRepos.class) .where(LOGIN.isNull()) .get() .toList(); if (pinnedRepos != null) { for (PinnedRepos pinnedRepo : pinnedRepos) { pinnedRepo.setRepoFullName(login.getLogin()); - reactiveEntityStore.toBlocking().update(pinnedRepo); + reactiveEntityStore.update(pinnedRepo); } } Logger.e("Hello"); diff --git a/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.kt b/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.kt index f3327db4..5e381a54 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.kt +++ b/app/src/main/java/com/fastaccess/provider/rest/interceptors/AuthenticationInterceptor.kt @@ -35,7 +35,6 @@ class AuthenticationInterceptor : Interceptor { } if (!isScrapping) builder.addHeader("User-Agent", "FastHub") val request = builder.build() - Logger.e(request.headers()) return chain.proceed(request) } } \ No newline at end of file diff --git a/app/src/main/java/com/fastaccess/provider/rest/interceptors/PaginationInterceptor.java b/app/src/main/java/com/fastaccess/provider/rest/interceptors/PaginationInterceptor.java index ecd4d5ab..e49fdcbd 100644 --- a/app/src/main/java/com/fastaccess/provider/rest/interceptors/PaginationInterceptor.java +++ b/app/src/main/java/com/fastaccess/provider/rest/interceptors/PaginationInterceptor.java @@ -30,22 +30,20 @@ public class PaginationInterceptor implements Interceptor { } json += String.format("\"items\":%s}", response.body().string()); return response.newBuilder().body(ResponseBody.create(response.body().contentType(), json)).build(); - } else { + } else if (response.header("link") != null) { String link = response.header("link"); - if (link != null) { - String pagination = ""; - String[] links = link.split(","); - for (String link1 : links) { - String[] pageLink = link1.split(";"); - String page = Uri.parse(pageLink[0].replaceAll("[<>]", "")).getQueryParameter("page"); - String rel = pageLink[1].replaceAll("\"", "").replace("rel=", ""); - if (page != null) pagination += String.format("\"%s\":\"%s\",", rel.trim(), page); - } - if (!InputHelper.isEmpty(pagination)) {//hacking for search pagination. - String body = response.body().string(); - return response.newBuilder().body(ResponseBody.create(response.body().contentType(), - "{" + pagination + body.substring(1, body.length()))).build(); - } + String pagination = ""; + String[] links = link.split(","); + for (String link1 : links) { + String[] pageLink = link1.split(";"); + String page = Uri.parse(pageLink[0].replaceAll("[<>]", "")).getQueryParameter("page"); + String rel = pageLink[1].replaceAll("\"", "").replace("rel=", ""); + if (page != null) pagination += String.format("\"%s\":\"%s\",", rel.trim(), page); + } + if (!InputHelper.isEmpty(pagination)) {//hacking for search pagination. + String body = response.body().string(); + return response.newBuilder().body(ResponseBody.create(response.body().contentType(), + "{" + pagination + body.substring(1, body.length()))).build(); } } } diff --git a/app/src/main/java/com/fastaccess/provider/scheme/LinkParserHelper.java b/app/src/main/java/com/fastaccess/provider/scheme/LinkParserHelper.java index 3aa7458f..2c0e6310 100644 --- a/app/src/main/java/com/fastaccess/provider/scheme/LinkParserHelper.java +++ b/app/src/main/java/com/fastaccess/provider/scheme/LinkParserHelper.java @@ -3,6 +3,7 @@ package com.fastaccess.provider.scheme; import android.net.Uri; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.text.TextUtils; import com.annimon.stream.Optional; import com.annimon.stream.Stream; @@ -118,4 +119,20 @@ public class LinkParserHelper { } return url; } + + @Nullable public static String getGistId(@NonNull Uri uri) { + String gistId = null; + if (uri.toString().contains("raw/gist")) { + if (uri.getPathSegments().size() > 5) { + gistId = uri.getPathSegments().get(5); + } + } else if (uri.getPathSegments() != null) { + if (TextUtils.equals(LinkParserHelper.HOST_GISTS_RAW, uri.getAuthority())) { + if (uri.getPathSegments().size() > 1) { + gistId = uri.getPathSegments().get(1); + } + } + } + return gistId; + } } diff --git a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitLinesViewHolder.java b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitLinesViewHolder.java index 6e89076a..f6e3d883 100644 --- a/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitLinesViewHolder.java +++ b/app/src/main/java/com/fastaccess/ui/adapter/viewholder/CommitLinesViewHolder.java @@ -10,7 +10,6 @@ import android.view.ViewGroup; import com.fastaccess.R; import com.fastaccess.data.dao.CommitLinesModel; -import com.fastaccess.helper.InputHelper; import com.fastaccess.helper.ViewHelper; import com.fastaccess.ui.widgets.SpannableBuilder; import com.fastaccess.ui.widgets.recyclerview.BaseRecyclerAdapter; @@ -25,7 +24,8 @@ import butterknife.BindView; public class CommitLinesViewHolder extends BaseViewHolder { @BindView(R.id.textView) AppCompatTextView textView; - @BindView(R.id.lineNo) AppCompatTextView lineNo; + @BindView(R.id.leftLinNo) AppCompatTextView leftLinNo; + @BindView(R.id.rightLinNo) AppCompatTextView rightLinNo; private final int patchAdditionColor; private final int patchDeletionColor; private final int patchRefColor; @@ -42,10 +42,8 @@ public class CommitLinesViewHolder extends BaseViewHolder { } @Override public void bind(@NonNull CommitLinesModel item) { - lineNo.setText(SpannableBuilder.builder() - .append(item.getLeftLineNo() >= 0 ? item.getLeftLineNo() + "." : "") - .append(item.getRightLineNo() >= 0 ? item.getRightLineNo() + "." : "")); - lineNo.setVisibility(InputHelper.isEmpty(lineNo) ? View.GONE : View.VISIBLE); + leftLinNo.setText(item.getLeftLineNo() > 0 ? String.valueOf(item.getLeftLineNo()) : " "); + rightLinNo.setText(item.getRightLineNo() > 0 ? String.valueOf(item.getRightLineNo()) : " "); switch (item.getColor()) { case CommitLinesModel.ADDITION: textView.setBackgroundColor(patchAdditionColor); @@ -54,6 +52,8 @@ public class CommitLinesViewHolder extends BaseViewHolder { textView.setBackgroundColor(patchDeletionColor); break; case CommitLinesModel.PATCH: + leftLinNo.setVisibility(View.GONE); + rightLinNo.setVisibility(View.GONE); textView.setBackgroundColor(patchRefColor); break; default: diff --git a/app/src/main/java/com/fastaccess/ui/modules/code/CodeViewerActivity.java b/app/src/main/java/com/fastaccess/ui/modules/code/CodeViewerActivity.java index 36e28744..54bb6477 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/code/CodeViewerActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/code/CodeViewerActivity.java @@ -120,20 +120,9 @@ public class CodeViewerActivity extends BaseActivity { finish(); return true; } - String gistId = null; - if (uri.toString().contains("raw/gist")) { - if (uri.getPathSegments().size() > 5) { - gistId = uri.getPathSegments().get(5); - } - } else if (uri.getPathSegments() != null) { - if (uri.getPathSegments().contains("gist")) { - if (uri.getPathSegments() != null && !uri.getPathSegments().isEmpty() && uri.getPathSegments().size() >= 1) { - gistId = uri.getPathSegments().get(1); - } - } - } + String gistId = LinkParserHelper.getGistId(uri); if (!InputHelper.isEmpty(gistId)) { - GistActivity.createIntent(this, gistId, isEnterprise()); + startActivity(GistActivity.createIntent(this, gistId, isEnterprise())); } else { RepoFilesActivity.startActivity(this, url, isEnterprise()); } diff --git a/app/src/main/java/com/fastaccess/ui/modules/login/LoginActivity.java b/app/src/main/java/com/fastaccess/ui/modules/login/LoginActivity.java index 001a468b..b645d940 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/login/LoginActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/login/LoginActivity.java @@ -175,6 +175,7 @@ public class LoginActivity extends BaseActivity i if (savedInstanceState == null) { if (getIntent() != null && getIntent().getExtras() != null) { isBasicAuth = getIntent().getExtras().getBoolean(BundleConstant.YES_NO_EXTRA); + password.setHint(isBasicAuth ? getString(R.string.password) : getString(R.string.access_token)); if (getIntent().getExtras().getBoolean(BundleConstant.EXTRA_TWO)) { onOpenBrowser(); } diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/donation/DonateActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/main/donation/DonateActivity.kt index 46ae1adf..5ac0da2f 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/donation/DonateActivity.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/main/donation/DonateActivity.kt @@ -46,7 +46,7 @@ class DonateActivity : BaseActivity if (throwable == null) { - Answers.getInstance().logPurchase(PurchaseEvent().putItemName(productKey)) + Answers.getInstance().logPurchase(PurchaseEvent().putItemName(productKey).putSuccess(true)) showMessage(R.string.success, R.string.success_purchase_message) enableProduct(productKey, applicationContext) val intent = Intent() diff --git a/app/src/main/java/com/fastaccess/ui/modules/main/premium/PremiumActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/main/premium/PremiumActivity.kt index d5366e89..4088bc6b 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/main/premium/PremiumActivity.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/main/premium/PremiumActivity.kt @@ -9,9 +9,13 @@ import android.widget.EditText import android.widget.FrameLayout import butterknife.OnClick import butterknife.OnEditorAction +import com.crashlytics.android.answers.Answers +import com.crashlytics.android.answers.PurchaseEvent import com.fastaccess.BuildConfig import com.fastaccess.R +import com.fastaccess.helper.InputHelper import com.fastaccess.helper.PrefGetter +import com.fastaccess.helper.ViewHelper import com.fastaccess.ui.base.BaseActivity import com.fastaccess.ui.modules.main.donation.DonateActivity import com.fastaccess.ui.widgets.bindView @@ -79,6 +83,7 @@ class PremiumActivity : BaseActivity(), Premi } override fun onSuccessfullyActivated() { + Answers.getInstance().logPurchase(PurchaseEvent().putItemName(InputHelper.toString(editText)).putSuccess(true)) PrefGetter.setProItems() PrefGetter.setEnterpriseItem() showMessage(R.string.success, R.string.success) @@ -90,6 +95,7 @@ class PremiumActivity : BaseActivity(), Premi } override fun showProgress(resId: Int) { + ViewHelper.hideKeyboard(editText) TransitionManager.beginDelayedTransition(viewGroup) progressLayout.visibility = View.VISIBLE } diff --git a/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposPresenter.java b/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposPresenter.java index 66ad22e6..7c5e29ac 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposPresenter.java +++ b/app/src/main/java/com/fastaccess/ui/modules/profile/repos/ProfileReposPresenter.java @@ -71,8 +71,9 @@ class ProfileReposPresenter extends BasePresenter implemen sendToView(ProfileReposMvp.View::hideProgress); return; } - filterOptions.setIsPersonalProfile(TextUtils.equals(currentLoggedIn, username)); - makeRestCall(TextUtils.equals(currentLoggedIn, username) + boolean isProfile = TextUtils.equals(currentLoggedIn, username); + filterOptions.setIsPersonalProfile(isProfile); + makeRestCall(isProfile ? RestProvider.getUserService(isEnterprise()).getRepos(filterOptions.getQueryMap(), page) : RestProvider.getUserService(isEnterprise()).getRepos(parameter, filterOptions.getQueryMap(), page), repoModelPageable -> { diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesFragment.java b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesFragment.java index 7d0cdeb8..0b56840e 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesFragment.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/code/commit/details/files/CommitFilesFragment.java @@ -115,7 +115,7 @@ public class CommitFilesFragment extends BaseFragment FileHelper.ONE_MB && !MarkDownProvider.isImage(url)) { - MessageDialogView.newInstance(getString(R.string.big_file), getString(R.string.big_file_description), - false, true, Bundler.start() - .put(BundleConstant.EXTRA, model.getDownloadUrl()) - .put(BundleConstant.YES_NO_EXTRA, true) - .end()) - .show(getChildFragmentManager(), "MessageDialogView"); + if (model.getSize() == 0 && InputHelper.isEmpty(model.getDownloadUrl()) && !InputHelper.isEmpty(model.getGitUrl())) { + RepoFilesActivity.startActivity(getContext(), model.getGitUrl().replace("trees/", ""), isEnterprise()); } else { - CodeViewerActivity.startActivity(getContext(), url, model.getHtmlUrl()); + String url = InputHelper.isEmpty(model.getDownloadUrl()) ? model.getUrl() : model.getDownloadUrl(); + if (InputHelper.isEmpty(url)) return; + if (model.getSize() > FileHelper.ONE_MB && !MarkDownProvider.isImage(url)) { + MessageDialogView.newInstance(getString(R.string.big_file), getString(R.string.big_file_description), + false, true, Bundler.start() + .put(BundleConstant.EXTRA, model.getDownloadUrl()) + .put(BundleConstant.YES_NO_EXTRA, true) + .end()) + .show(getChildFragmentManager(), "MessageDialogView"); + } else { + CodeViewerActivity.startActivity(getContext(), url, model.getHtmlUrl()); + } } } } diff --git a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerActivity.java b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerActivity.java index bc5b9d83..2406fbe3 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerActivity.java +++ b/app/src/main/java/com/fastaccess/ui/modules/repos/pull_requests/pull_request/details/PullRequestPagerActivity.java @@ -77,7 +77,6 @@ public class PullRequestPagerActivity extends BaseActivity 0 && item.getLeftLineNo() > 0) { + commentRequestModel.setPosition(item.getPosition()); + } else { + commentRequestModel.setPosition(item.getPosition()); +// commentRequestModel.setLine(item.getRightLineNo() > 0 ? item.getRightLineNo() : item.getLeftLineNo()); + } if (viewCallback != null) viewCallback.onAddComment(commentRequestModel); } } diff --git a/app/src/main/java/com/fastaccess/ui/modules/reviews/changes/ReviewChangesActivity.kt b/app/src/main/java/com/fastaccess/ui/modules/reviews/changes/ReviewChangesActivity.kt index cb1e4076..58a7799c 100644 --- a/app/src/main/java/com/fastaccess/ui/modules/reviews/changes/ReviewChangesActivity.kt +++ b/app/src/main/java/com/fastaccess/ui/modules/reviews/changes/ReviewChangesActivity.kt @@ -34,6 +34,7 @@ class ReviewChangesActivity : BaseActivity { - if (editText.editText?.text.isNullOrEmpty()) { + if (spinner.selectedItemPosition != 0 && editText.editText?.text.isNullOrEmpty()) { editText.error = getString(R.string.required_field) } else { + editText.error = null presenter.onSubmit(reviewRequest!!, repoId!!, owner!!, number!!, InputHelper.toString(editText), spinner.selectedItem as String) } return true @@ -131,13 +134,8 @@ class ReviewChangesActivity : BaseActivity + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layouts/main_layouts/layout/issue_pager_activity.xml b/app/src/main/res/layouts/main_layouts/layout/issue_pager_activity.xml index ea3a7e59..b742ce20 100644 --- a/app/src/main/res/layouts/main_layouts/layout/issue_pager_activity.xml +++ b/app/src/main/res/layouts/main_layouts/layout/issue_pager_activity.xml @@ -77,66 +77,7 @@ app:layout_behavior="@string/scroll_behavior"/> - - - - - - - - - - - - - + - + android:paddingBottom="@dimen/spacing_micro" + android:paddingTop="@dimen/spacing_micro"> + tools:text="1"/> + + + + diff --git a/app/src/main/res/layouts/row_layouts/layout/grouped_review_timeline_row_item.xml b/app/src/main/res/layouts/row_layouts/layout/grouped_review_timeline_row_item.xml index f92af815..743149e8 100644 --- a/app/src/main/res/layouts/row_layouts/layout/grouped_review_timeline_row_item.xml +++ b/app/src/main/res/layouts/row_layouts/layout/grouped_review_timeline_row_item.xml @@ -39,7 +39,7 @@
  • (New) Disabling Issues Tab if Issues disabled in Repo.
  • +
  • (New) Added Share to Users & Organizations profiles
  • (New) Czech language thanks to (@hejsekvojtech)
  • (New) Spanish language thanks to (@alete)
  • (Enhancement) Opening FastHub from other Apps should open FastHub in new document thanks to (@eygraber)
  • (Enhancement) Wiki links
  • (Enhancement) Issue & PRs grammar
  • (Enhancement) Overall app layouts enhancements.
  • +
  • (Fix) Opening Submodule.
  • (Fix) Trending Language & today's stars.
  • (Fix) Code wrapping.
  • (Fix) PRs/Issues where the assigned user was a Team.
  • @@ -79,11 +81,10 @@
  • There are more stuff are not mentioned, find them out :p
  • -

    P.S: FastHub is still in development mode, things will evantually code, rating FastHub 1 or 5 stars in Play store to request a new - feature or to report an issue they will’ll be ignored, the best place to report issues/FRs are in GitHub issue ticket, you could go to - About & click on Report Issue and the issue will be posted directly to - FastHub - repo. +

    P.S: FastHub is still in development mode, things will eventually come, rating FastHub 1 or 5 stars in Play store to request a new + feature or to report an issue they’ll be ignored, the best place to report issues/FRs are in GitHub issue ticket, you could go to + About & click on Report Issue and the issue will be posted directly to + FastHub repo.

    diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6ca4ebf5..ed5b5cad 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,4 +1,5 @@ - + FastHub @@ -90,7 +91,7 @@ @@ -540,4 +541,5 @@ Warning Owner Original Poster + Cancel Reviews