Compare commits
8 Commits
main
...
release-3.
Author | SHA1 | Date | |
---|---|---|---|
|
0cbce9d291 | ||
|
16d11f591b | ||
|
6572a6d334 | ||
|
756ee398ff | ||
|
7c7db79af5 | ||
|
3c8ed2042a | ||
|
f43b92186c | ||
|
b3c4ae9e18 |
@ -6,8 +6,8 @@ android {
|
||||
applicationId "org.mian.gitnex"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 30
|
||||
versionCode 346
|
||||
versionName "3.5.0-dev"
|
||||
versionCode 351
|
||||
versionName "3.5.1"
|
||||
multiDexEnabled true
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
@ -3,10 +3,20 @@ package org.mian.gitnex.activities;
|
||||
import android.content.Context;
|
||||
import android.os.Bundle;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import org.acra.ACRA;
|
||||
import org.acra.BuildConfig;
|
||||
import org.acra.ReportField;
|
||||
import org.acra.annotation.AcraCore;
|
||||
import org.acra.annotation.AcraNotification;
|
||||
import org.acra.config.CoreConfigurationBuilder;
|
||||
import org.acra.config.LimiterConfigurationBuilder;
|
||||
import org.acra.config.MailSenderConfigurationBuilder;
|
||||
import org.acra.data.StringFormat;
|
||||
import org.mian.gitnex.R;
|
||||
import org.mian.gitnex.helpers.AppUtil;
|
||||
import org.mian.gitnex.helpers.TimeHelper;
|
||||
import org.mian.gitnex.helpers.TinyDB;
|
||||
import org.mian.gitnex.notifications.Notifications;
|
||||
|
||||
/**
|
||||
* Author M M Arif
|
||||
@ -77,6 +87,8 @@ public abstract class BaseActivity extends AppCompatActivity {
|
||||
}
|
||||
|
||||
AppUtil.setAppLocale(getResources(), tinyDB.getString("locale"));
|
||||
|
||||
Notifications.startWorker(appCtx);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -106,23 +106,23 @@ public class FileDiffActivity extends BaseActivity {
|
||||
break;
|
||||
|
||||
case 401:
|
||||
AlertDialogs.authorizationTokenRevokedDialog(ctx,
|
||||
runOnUiThread(() -> AlertDialogs.authorizationTokenRevokedDialog(ctx,
|
||||
getString(R.string.alertDialogTokenRevokedTitle),
|
||||
getString(R.string.alertDialogTokenRevokedMessage),
|
||||
getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
|
||||
getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
|
||||
getString(R.string.alertDialogTokenRevokedCopyPositiveButton)));
|
||||
break;
|
||||
|
||||
case 403:
|
||||
Toasty.error(ctx, ctx.getString(R.string.authorizeError));
|
||||
runOnUiThread(() -> Toasty.error(ctx, ctx.getString(R.string.authorizeError)));
|
||||
break;
|
||||
|
||||
case 404:
|
||||
Toasty.warning(ctx, ctx.getString(R.string.apiNotFound));
|
||||
runOnUiThread(() -> Toasty.warning(ctx, ctx.getString(R.string.apiNotFound)));
|
||||
break;
|
||||
|
||||
default:
|
||||
Toasty.error(ctx, getString(R.string.labelGeneralError));
|
||||
runOnUiThread(() -> Toasty.error(ctx, getString(R.string.labelGeneralError)));
|
||||
|
||||
}
|
||||
} catch(IOException ignored) {}
|
||||
|
@ -240,23 +240,23 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
|
||||
switch(response.code()) {
|
||||
|
||||
case 401:
|
||||
AlertDialogs.authorizationTokenRevokedDialog(ctx,
|
||||
runOnUiThread(() -> AlertDialogs.authorizationTokenRevokedDialog(ctx,
|
||||
getResources().getString(R.string.alertDialogTokenRevokedTitle),
|
||||
getResources().getString(R.string.alertDialogTokenRevokedMessage),
|
||||
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
|
||||
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
|
||||
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton)));
|
||||
break;
|
||||
|
||||
case 403:
|
||||
Toasty.error(ctx, ctx.getString(R.string.authorizeError));
|
||||
runOnUiThread(() -> Toasty.error(ctx, ctx.getString(R.string.authorizeError)));
|
||||
break;
|
||||
|
||||
case 404:
|
||||
Toasty.warning(ctx, ctx.getString(R.string.apiNotFound));
|
||||
runOnUiThread(() -> Toasty.warning(ctx, ctx.getString(R.string.apiNotFound)));
|
||||
break;
|
||||
|
||||
default:
|
||||
Toasty.error(ctx, getString(R.string.labelGeneralError));
|
||||
runOnUiThread(() -> Toasty.error(ctx, getString(R.string.labelGeneralError)));
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -322,7 +322,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
int textColor = new ColorInverter().getImageViewContrastColor(userAvatar);
|
||||
int textColor = new ColorInverter().getImageViewContrastColor(userAvatarBackground);
|
||||
|
||||
userFullName.setTextColor(textColor);
|
||||
userEmail.setTextColor(textColor);
|
||||
|
@ -292,7 +292,7 @@ public class MyReposListAdapter extends RecyclerView.Adapter<MyReposListAdapter.
|
||||
}
|
||||
holder.repoFullName.setText(currentItem.getFullName());
|
||||
if(currentItem.getPrivateFlag()) {
|
||||
holder.repoPrivatePublic.setImageResource(R.drawable.ic_lock);
|
||||
holder.repoPrivatePublic.setVisibility(View.VISIBLE);
|
||||
holder.repoType.setText(R.string.strPrivate);
|
||||
}
|
||||
else {
|
||||
|
@ -293,7 +293,7 @@ public class ReposListAdapter extends RecyclerView.Adapter<ReposListAdapter.Repo
|
||||
}
|
||||
holder.fullName.setText(currentItem.getFullName());
|
||||
if(currentItem.getPrivateFlag()) {
|
||||
holder.repoPrivatePublic.setImageResource(R.drawable.ic_lock);
|
||||
holder.repoPrivatePublic.setVisibility(View.VISIBLE);
|
||||
holder.repoType.setText(R.string.strPrivate);
|
||||
}
|
||||
else {
|
||||
|
@ -293,7 +293,7 @@ public class RepositoriesByOrgAdapter extends RecyclerView.Adapter<RepositoriesB
|
||||
}
|
||||
holder.fullName.setText(currentItem.getFullName());
|
||||
if(currentItem.getPrivateFlag()) {
|
||||
holder.repoPrivatePublic.setImageResource(R.drawable.ic_lock);
|
||||
holder.repoPrivatePublic.setVisibility(View.VISIBLE);
|
||||
holder.repoType.setText(R.string.strPrivate);
|
||||
}
|
||||
else {
|
||||
|
@ -296,7 +296,7 @@ public class StarredReposListAdapter extends RecyclerView.Adapter<StarredReposLi
|
||||
}
|
||||
holder.fullName.setText(currentItem.getFullName());
|
||||
if(currentItem.getPrivateFlag()) {
|
||||
holder.repoPrivatePublic.setImageResource(R.drawable.ic_lock);
|
||||
holder.repoPrivatePublic.setVisibility(View.VISIBLE);
|
||||
holder.repoType.setText(R.string.strPrivate);
|
||||
}
|
||||
else {
|
||||
|
@ -71,21 +71,26 @@ public class MainApplication extends Application {
|
||||
|
||||
}
|
||||
|
||||
Notifications.createChannels(appCtx);
|
||||
}
|
||||
|
||||
protected void attachBaseContext(Context context) {
|
||||
|
||||
super.attachBaseContext(context);
|
||||
|
||||
tinyDB = TinyDB.getInstance(context);
|
||||
|
||||
if(tinyDB.getBoolean("crashReportingEnabled")) {
|
||||
|
||||
CoreConfigurationBuilder ACRABuilder = new CoreConfigurationBuilder(this);
|
||||
|
||||
ACRABuilder.setBuildConfigClass(BuildConfig.class).setReportFormat(StringFormat.KEY_VALUE_LIST);
|
||||
ACRABuilder.getPluginConfigurationBuilder(MailSenderConfigurationBuilder.class).setReportAsFile(true).setMailTo(getResources().getString(R.string.appEmail)).setSubject(getResources().getString(R.string.crashReportEmailSubject, AppUtil.getAppBuildNo(getApplicationContext()))).setEnabled(true);
|
||||
ACRABuilder.getPluginConfigurationBuilder(MailSenderConfigurationBuilder.class).setReportAsFile(true).setMailTo(getResources().getString(R.string.appEmail))
|
||||
.setSubject(getResources().getString(R.string.crashReportEmailSubject, AppUtil.getAppBuildNo(context))).setEnabled(true);
|
||||
ACRABuilder.getPluginConfigurationBuilder(LimiterConfigurationBuilder.class).setEnabled(true);
|
||||
|
||||
ACRA.init(this, ACRABuilder);
|
||||
|
||||
}
|
||||
|
||||
Notifications.createChannels(appCtx);
|
||||
Notifications.startWorker(appCtx);
|
||||
|
||||
}
|
||||
|
||||
private void setDefaults() {
|
||||
|
@ -97,7 +97,7 @@ public class ProfileFragment extends Fragment {
|
||||
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
int invertedColor = new ColorInverter().getImageViewContrastColor(userAvatar);
|
||||
int invertedColor = new ColorInverter().getImageViewContrastColor(userAvatarBackground);
|
||||
|
||||
userFullName.setTextColor(invertedColor);
|
||||
divider.setBackgroundColor(invertedColor);
|
||||
|
@ -93,22 +93,30 @@ public class SyntaxHighlightedArea extends LinearLayout {
|
||||
}
|
||||
|
||||
public void setContent(@NonNull String source, @NonNull String extension) {
|
||||
if(source.length() > 0) {
|
||||
|
||||
if(source.length() > 0) {
|
||||
linesView.setLineCount(AppUtil.getLineCount(source));
|
||||
|
||||
MainGrammarLocator mainGrammarLocator = MainGrammarLocator.getInstance();
|
||||
Prism4jSyntaxHighlight prism4jSyntaxHighlight = Prism4jSyntaxHighlight.create(new Prism4j(mainGrammarLocator), prism4jTheme, MainGrammarLocator.DEFAULT_FALLBACK_LANGUAGE);
|
||||
try {
|
||||
|
||||
CharSequence highlightedSource = prism4jSyntaxHighlight.highlight(mainGrammarLocator.fromExtension(extension), source);
|
||||
MainGrammarLocator mainGrammarLocator = MainGrammarLocator.getInstance();
|
||||
Prism4j prism4j = new Prism4j(mainGrammarLocator);
|
||||
|
||||
if(highlightedSource.charAt(highlightedSource.length() - 1) == '\n') {
|
||||
// Removes a line break which is probably added by Prism4j but not actually present in the source.
|
||||
// This line should be altered in case this gets fixed.
|
||||
sourceView.setText(highlightedSource.subSequence(0, highlightedSource.length() - 1));
|
||||
}
|
||||
else {
|
||||
sourceView.setText(highlightedSource);
|
||||
CharSequence highlightedSource = Prism4jSyntaxHighlight.create(prism4j, prism4jTheme, MainGrammarLocator.DEFAULT_FALLBACK_LANGUAGE)
|
||||
.highlight(mainGrammarLocator.fromExtension(extension), source);
|
||||
|
||||
if(highlightedSource.charAt(highlightedSource.length() - 1) == '\n') {
|
||||
// Removes a line break which is probably added by Prism4j but not actually present in the source.
|
||||
// This line should be altered in case this gets fixed.
|
||||
sourceView.setText(highlightedSource.subSequence(0, highlightedSource.length() - 1));
|
||||
}
|
||||
else {
|
||||
sourceView.setText(highlightedSource);
|
||||
}
|
||||
|
||||
} catch(Throwable ignored) {
|
||||
// Fall back to plaintext if something fails
|
||||
sourceView.setText(source);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -37,8 +37,8 @@
|
||||
<string name="pageTitleNewFile">Nuovo File</string>
|
||||
<string name="pageTitleExplore">Esplora</string>
|
||||
<string name="pageTitleAdministration">Amministrazione Gitea</string>
|
||||
<string name="pageTitleUserAccounts">Manage Accounts</string>
|
||||
<string name="pageTitleNewPullRequest">New Pull Request</string>
|
||||
<string name="pageTitleUserAccounts">Gestione Account</string>
|
||||
<string name="pageTitleNewPullRequest">Nuova Pull Request</string>
|
||||
<!-- page titles -->
|
||||
<string name="repoName">Demo repo</string>
|
||||
<string name="repoFullName">Repo con ORG</string>
|
||||
@ -64,10 +64,10 @@
|
||||
<string name="navigationDrawerOpen">Apri panello Navigazione</string>
|
||||
<string name="navigationDrawerClose">Chiudi panello Navigazione</string>
|
||||
<string name="logo">Accedi a Gitea</string>
|
||||
<string name="protocol">Protocol</string>
|
||||
<string name="protocol">Protocollo</string>
|
||||
<string name="urlInfoTooltip">1- Scegli il protocollo corretto(https or http). \n2- Enter Gitea url e.g: try.gitea.io. \n3- If you have enabled 2FA for your account, enter the code in the OTP Code field. \n4- For HTTP basic auth use USERNAME@DOMAIN.COM in the URL field.</string>
|
||||
<string name="malformedUrl">Couldn\'t connect to host. Please check your URL or port for any errors</string>
|
||||
<string name="protocolError">It is not recommended to use HTTP protocol unless you are testing on local network</string>
|
||||
<string name="malformedUrl">Impossibile connettersi all\'host. Controlla l\'URL o la porta per eventuali errori</string>
|
||||
<string name="protocolError">Non si consiglia di utilizzare il protocollo HTTP a meno che non si stia testando sulla rete locale</string>
|
||||
<string name="malformedJson">Malformed JSON was received. Server response was not successful</string>
|
||||
<string name="emptyFieldURL">Istanza
|
||||
URL è richiesto</string>
|
||||
@ -107,8 +107,8 @@ URL è richiesto</string>
|
||||
<string name="tabTextFiles">File</string>
|
||||
<string name="tabTextMl">Milestones</string>
|
||||
<string name="tabTextReleases">Rilasci</string>
|
||||
<string name="tabTextBranches">Branches</string>
|
||||
<string name="tabTextLabels">Labels</string>
|
||||
<string name="tabTextBranches">Rami</string>
|
||||
<string name="tabTextLabels">Etichette</string>
|
||||
<string name="tabTextCollaborators">Collaboratori</string>
|
||||
<string name="tabPullRequests">Pull Requests</string>
|
||||
<string name="noDataIssueTab">Nessun problema trovato</string>
|
||||
@ -209,13 +209,13 @@ URL è richiesto</string>
|
||||
<string name="draftsHintText">Bozze dei commenti</string>
|
||||
<string name="settingsEnableCommentsDeletionText">Abilita Eliminazione Bozze</string>
|
||||
<string name="settingsEnableCommentsDeletionHintText">Elimina la bozza del commento quando viene pubblicato</string>
|
||||
<string name="settingsGeneralHeader">General</string>
|
||||
<string name="settingsGeneralHeader">Generale</string>
|
||||
<string name="generalHintText">Home screen, default link handler</string>
|
||||
<string name="generalDeepLinkDefaultScreen">Default Link Handler</string>
|
||||
<string name="generalDeepLinkDefaultScreenHintText">Choose what screen should be loaded if the app cannot handle external links. It will redirect you automatically.</string>
|
||||
<string name="generalDeepLinkSelectedText">N/A</string>
|
||||
<string name="linkSelectorDialogTitle">Select Default Link Handler Screen</string>
|
||||
<string name="settingsBiometricHeader">Biometric Support</string>
|
||||
<string name="settingsBiometricHeader">Sblocco biometrico</string>
|
||||
<!-- settings -->
|
||||
<string name="noMoreData">Nessun altro dato disponibile</string>
|
||||
<string name="createLabel">Nuovo label</string>
|
||||
@ -287,7 +287,7 @@ autorizzazione</string>
|
||||
<string name="editCommentUpdatedText">Commento aggiornato</string>
|
||||
<string name="issueCommentShare">Condividi Commento</string>
|
||||
<string name="deleteCommentSuccess">Commento eliminato con successo</string>
|
||||
<string name="copyCommentText">Copy Comment</string>
|
||||
<string name="copyCommentText">Copia commento</string>
|
||||
<!-- issue comments -->
|
||||
<!-- add collaborator -->
|
||||
<string name="addCollaboratorTitle">Aggiungi/Rimuovi collaboratore</string>
|
||||
@ -305,7 +305,7 @@ autorizzazione</string>
|
||||
<string name="profileEmailButton">Salva</string>
|
||||
<string name="profileEmailTitle">Indirizzo Email</string>
|
||||
<string name="emailAddedText">New email added successfully</string>
|
||||
<string name="emailErrorEmpty">Email address is empty</string>
|
||||
<string name="emailErrorEmpty">L\'indirizzo email è vuoto</string>
|
||||
<string name="emailErrorInvalid">Indirizzo email non valido</string>
|
||||
<string name="emailErrorInUse">Indirizzo email già in uso</string>
|
||||
<string name="emailTypeText">Primario</string>
|
||||
@ -331,8 +331,8 @@ autorizzazione</string>
|
||||
<string name="userRoleAdmin">Amministratore</string>
|
||||
<string name="adminCron">Cron Tasks</string>
|
||||
<string name="adminCronScheduleHeader">Schedule</string>
|
||||
<string name="adminCronNextRunHeader">Next Run</string>
|
||||
<string name="adminCronLastRunHeader">Last Run</string>
|
||||
<string name="adminCronNextRunHeader">Prossima esecuzione</string>
|
||||
<string name="adminCronLastRunHeader">Ultima esecuzione</string>
|
||||
<string name="adminCronExecutionHeader">Executions</string>
|
||||
<string name="adminCronTaskSuccessMsg">Task %1$s is initiated successfully</string>
|
||||
<!-- admin -->
|
||||
@ -429,7 +429,7 @@ autorizzazione</string>
|
||||
<string name="isOpen">Apri</string>
|
||||
<string name="isClosed">Chiuso</string>
|
||||
<string name="genericServerResponseError">Al momento non possiamo raggiungere il server, controlla lo stato del tuo server e riprova</string>
|
||||
<string name="genericCopyUrl">Copy URL</string>
|
||||
<string name="genericCopyUrl">Copia l\'URL</string>
|
||||
<!-- generic copy -->
|
||||
<string name="exploreTextBoxHint">Esplora i repository</string>
|
||||
<string name="starRepository">Repository star</string>
|
||||
@ -479,9 +479,9 @@ autorizzazione</string>
|
||||
<string name="waitLoadingDownloadFile">Attendere che il file venga caricato in memoria</string>
|
||||
<string name="downloadFileSaved">File salvato con successo</string>
|
||||
<string name="excludeFilesInFileViewer">This file type/size is not supported in file viewer. You can download it from the menu.</string>
|
||||
<string name="deleteFile">Delete This File</string>
|
||||
<string name="deleteFile">Elimina questo file</string>
|
||||
<string name="editFile">Edit This File</string>
|
||||
<string name="deleteFileText">Delete %1$s</string>
|
||||
<string name="deleteFileText">Elimina %1$s</string>
|
||||
<string name="deleteFileMessage">File is set for deletion by branch %1$s</string>
|
||||
<string name="editFileText">Edit %1$s</string>
|
||||
<string name="editFileMessage">File is modified by branch %1$s</string>
|
||||
@ -555,21 +555,21 @@ autorizzazione</string>
|
||||
<string name="pinNotification">Fissa Notifica</string>
|
||||
<string name="markedNotificationsAsRead">Successfully marked all notifications as read</string>
|
||||
<string name="notificationsHintText">Polling delay, light, vibration</string>
|
||||
<string name="enableNotificationsHeaderText">Enable Notifications</string>
|
||||
<string name="enableNotificationsHeaderText">Abilita le notifiche</string>
|
||||
<string name="enableLightsHeaderText">Enable Light</string>
|
||||
<string name="enableVibrationHeaderText">Enable Vibration</string>
|
||||
<string name="chooseColorSelectorHeader">Choose Color</string>
|
||||
<string name="newMessages">New messages</string>
|
||||
<string name="enableVibrationHeaderText">Abilita la vibrazione</string>
|
||||
<string name="chooseColorSelectorHeader">Scegli il colore</string>
|
||||
<string name="newMessages">Nuovi messaggi</string>
|
||||
<string name="youHaveGotNewNotifications">You\'ve got %d new notifications.</string>
|
||||
<string name="mainNotificationChannelName">Notifications</string>
|
||||
<string name="mainNotificationChannelName">Notifiche</string>
|
||||
<string name="mainNotificationChannelDescription">This is the main notification channel of GitNex.</string>
|
||||
<string name="isRead">Letto</string>
|
||||
<string name="isUnread">Non letto</string>
|
||||
<string name="repoSettingsTitle">Repository Settings</string>
|
||||
<string name="repoSettingsEditProperties">Edit Properties</string>
|
||||
<string name="repoSettingsDelete">Delete Repository</string>
|
||||
<string name="repoSettingsTitle">Impostazioni del repository</string>
|
||||
<string name="repoSettingsEditProperties">Modifica le proprietà</string>
|
||||
<string name="repoSettingsDelete">Elimina repository</string>
|
||||
<string name="repoSettingsDeleteHint">Be careful, this operation CANNOT be undone!</string>
|
||||
<string name="repoPropertiesTemplate">Set as Template</string>
|
||||
<string name="repoPropertiesTemplate">Usa come modello</string>
|
||||
<string name="repoPropertiesEnableIssues">Enable Issues</string>
|
||||
<string name="repoPropertiesExternalIssuesUrl">External Issue Tracker Url</string>
|
||||
<string name="repoPropertiesEnableWiki">Enable Wiki</string>
|
||||
@ -613,8 +613,8 @@ autorizzazione</string>
|
||||
<string name="codeBlockWhiteOnBlack">White on Black</string>
|
||||
<string name="codeBlockGreyOnBlack">Grey on Black</string>
|
||||
<string name="codeBlockWhiteOnGrey">White on Grey</string>
|
||||
<string name="codeBlockDarkOnWhite">Dark on White</string>
|
||||
<string name="biometricAuthTitle">Biometric Authentication</string>
|
||||
<string name="codeBlockDarkOnWhite">Nero su bianco</string>
|
||||
<string name="biometricAuthTitle">Autenticazione biometrica</string>
|
||||
<string name="biometricAuthSubTitle">Unlock using your biometric credentials</string>
|
||||
<string name="biometricNotSupported">No biometric features available on this device</string>
|
||||
<string name="biometricNotAvailable">Biometric features are currently unavailable</string>
|
||||
|
@ -476,7 +476,7 @@
|
||||
<string name="downloadFile">下载此文件</string>
|
||||
<string name="waitLoadingDownloadFile">请等待文件加载到内存</string>
|
||||
<string name="downloadFileSaved">文件保存成功</string>
|
||||
<string name="excludeFilesInFileViewer">This file type/size is not supported in file viewer. You can download it from the menu.</string>
|
||||
<string name="excludeFilesInFileViewer">文件查看器不支持此文件类型/大小。你可以从菜单下载。</string>
|
||||
<string name="deleteFile">删除此文件</string>
|
||||
<string name="editFile">编辑此文件</string>
|
||||
<string name="deleteFileText">删除 %1$s</string>
|
||||
@ -527,7 +527,7 @@
|
||||
<string name="draftSaved">草稿已自动保存。</string>
|
||||
<string name="appearanceHintText">主题、字体、徽章</string>
|
||||
<string name="fileViewerHintText">PDF 模式,源代码主题</string>
|
||||
<string name="securityHintText">Biometric authentication, SSL certificates, cache</string>
|
||||
<string name="securityHintText">生物特征认证、SSL证书、缓存</string>
|
||||
<string name="languagesHintText">语言</string>
|
||||
<string name="reportsHintText">崩溃报告</string>
|
||||
<string name="rateAppHintText">如果你喜欢GitNex,你可以给它点赞</string>
|
||||
@ -559,8 +559,8 @@
|
||||
<string name="chooseColorSelectorHeader">选择颜色</string>
|
||||
<string name="newMessages">新消息</string>
|
||||
<string name="youHaveGotNewNotifications">您有%d条新通知</string>
|
||||
<string name="mainNotificationChannelName">Notifications</string>
|
||||
<string name="mainNotificationChannelDescription">This is the main notification channel of GitNex.</string>
|
||||
<string name="mainNotificationChannelName">通知</string>
|
||||
<string name="mainNotificationChannelDescription">这是 GitNex 的主通知通道。</string>
|
||||
<string name="isRead">已读</string>
|
||||
<string name="isUnread">未读</string>
|
||||
<string name="repoSettingsTitle">存储库设置</string>
|
||||
@ -619,12 +619,12 @@
|
||||
<string name="enrollBiometric">从手机设置中注册生物识别</string>
|
||||
<string name="copyLoginIdToClipBoard">登录 ID \'%s\' 已复制到剪贴板</string>
|
||||
<!-- file viewer activity -->
|
||||
<string name="fileViewerNotificationTitleStarted">Download in progress</string>
|
||||
<string name="fileViewerNotificationDescriptionStarted">Downloading %s</string>
|
||||
<string name="fileViewerNotificationTitleFinished">Download successful</string>
|
||||
<string name="fileViewerNotificationDescriptionFinished">Downloaded %s</string>
|
||||
<string name="fileViewerNotificationTitleFailed">Download failed</string>
|
||||
<string name="fileViewerNotificationDescriptionFailed">Couldn\'t download %s</string>
|
||||
<string name="fileViewerNotificationChannelName">Download manager</string>
|
||||
<string name="fileViewerNotificationChannelDescription">Indicates the progress of ongoing downloads</string>
|
||||
<string name="fileViewerNotificationTitleStarted">正在下载</string>
|
||||
<string name="fileViewerNotificationDescriptionStarted">正在下载 %s</string>
|
||||
<string name="fileViewerNotificationTitleFinished">下载成功</string>
|
||||
<string name="fileViewerNotificationDescriptionFinished">已下载 %s</string>
|
||||
<string name="fileViewerNotificationTitleFailed">下载失败</string>
|
||||
<string name="fileViewerNotificationDescriptionFailed">无法下载 %s</string>
|
||||
<string name="fileViewerNotificationChannelName">下载管理器</string>
|
||||
<string name="fileViewerNotificationChannelDescription">显示当前下载的进度</string>
|
||||
</resources>
|
||||
|
@ -1,8 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<changelog>
|
||||
|
||||
<release version="3.5.0-dev" versioncode="346">
|
||||
<change>Under development</change>
|
||||
<release version="3.5.1" versioncode="351">
|
||||
<change>Update: Translation updates</change>
|
||||
<change>Bugfix: Fix crash on profile view</change>
|
||||
<change>Bugfix: Fix empty tags in file viewer (temporary fix, upstream issue)</change>
|
||||
<change>Bugfix: Fix sending logs on crash</change>
|
||||
<change>Bugfix: Fix workmanager errors</change>
|
||||
<change>Bugfix: Fix private repo icon</change>
|
||||
<change>Bugfix: Fix launch toast messages on UI thread</change>
|
||||
</release>
|
||||
|
||||
</changelog>
|
||||
|
13
fastlane/metadata/android/en-US/changelogs/350.txt
Normal file
@ -0,0 +1,13 @@
|
||||
3.5.0
|
||||
|
||||
New: Render emoji in issue/pr titles, commit message and markdown files
|
||||
New: Cron tasks (Admin only)
|
||||
New: Biometric support to unlock the app
|
||||
New: Switch to saved instance when coming from email/links
|
||||
New: Copy user login id to clipboard
|
||||
New: Progress notification for downloading files
|
||||
New: Rewrite file viewer in native code to move away from traditional js to load files faster
|
||||
|
||||
Release Notes: https://codeberg.org/gitnex/GitNex/releases
|
||||
|
||||
Release Blog: https://gitnex.codeberg.page/posts/350.html
|
13
fastlane/metadata/android/en-US/changelogs/351.txt
Normal file
@ -0,0 +1,13 @@
|
||||
3.5.1
|
||||
|
||||
Update: Translation updates
|
||||
Bugfix: Fix crash on profile view
|
||||
Bugfix: Fix empty tags in file viewer (temporary fix, upstream issue)
|
||||
Bugfix: Fix sending logs on crash
|
||||
Bugfix: Fix workmanager errors
|
||||
Bugfix: Fix private repo icon
|
||||
Bugfix: Fix launch toast messages on UI thread
|
||||
|
||||
Release Notes: https://codeberg.org/gitnex/GitNex/releases
|
||||
|
||||
Release Blog: https://gitnex.codeberg.page/posts/350.html
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 146 KiB After Width: | Height: | Size: 144 KiB |
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 111 KiB |
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 130 KiB |
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 129 KiB |