Merge branch 'master' into 7-assign-team-to-repo

# Conflicts:
#	app/src/main/res/values/strings.xml
This commit is contained in:
M M Arif 2020-10-05 21:22:21 +05:00
commit 4d1d7a7204
108 changed files with 3203 additions and 576 deletions

View File

@ -66,7 +66,7 @@ steps:
- name: build - name: build
image: nextcloudci/android:android-49 image: nextcloudci/android:android-49
commands: commands:
- ./gradlew build - ./gradlew assembleFreeRelease
- name: sign - name: sign
image: nextcloudci/android:android-49 image: nextcloudci/android:android-49
@ -78,7 +78,7 @@ steps:
KEY_PASS: KEY_PASS:
from_secret: KEY_PASS from_secret: KEY_PASS
OUTPUT: signed.apk OUTPUT: signed.apk
GITEA: https://gitea.com INSTANCE: https://codeberg.org
KS_FILE: ci_keystore.jks KS_FILE: ci_keystore.jks
KS_REPO: KS_REPO:
from_secret: KS_REPO from_secret: KS_REPO

3
.gitignore vendored
View File

@ -11,6 +11,9 @@
# Release dir # Release dir
app/release/* app/release/*
# Pro dir
app/pro/*
# Files for the ART/Dalvik VM # Files for the ART/Dalvik VM
*.dex *.dex

View File

@ -20,7 +20,7 @@ build:
- master - master
- tags - tags
script: script:
- ./gradlew build - ./gradlew assembleFreeRelease
artifacts: artifacts:
paths: paths:
- app/build/outputs/ - app/build/outputs/
@ -34,7 +34,7 @@ sign:
- tags - tags
variables: variables:
OUTPUT: "signed.apk" OUTPUT: "signed.apk"
GITEA: "https://gitea.com" INSTANCE: "https://codeberg.org"
KS_FILE: "ci_keystore.jks" KS_FILE: "ci_keystore.jks"
script: script:
- ./scripts/sign-build.sh - ./scripts/sign-build.sh
@ -48,6 +48,7 @@ latest:
stage: publish stage: publish
only: only:
- master - master
- tags
variables: variables:
WEBDAV_USERNAME: "GitNexBot" WEBDAV_USERNAME: "GitNexBot"
PLUGIN_FILE: "signed.apk" PLUGIN_FILE: "signed.apk"

View File

@ -4,13 +4,13 @@
# GitNex - Android client for Gitea # GitNex - Android client for Gitea
GitNex is a free, open-source Android client for Git repository management tool Gitea. Gitea is a community managed fork of Gogs, lightweight code hosting solution written in Go. GitNex is a free/paid, open-source Android client for Git repository management tool Gitea. Gitea is a community managed fork of Gogs, lightweight code hosting solution written in Go.
GitNex is licensed under GPLv3 License. See the LICENSE file for the full license text. No trackers are used and source code is available here for anyone to audit. GitNex is licensed under GPLv3 License. See the LICENSE file for the full license text. No trackers are used and source code is available here for anyone to audit.
## Downloads ## Downloads
[<img alt='Get it on F-droid' src='https://gitlab.com/fdroid/artwork/raw/master/badge/get-it-on.png' height="80"/>](https://f-droid.org/en/packages/org.mian.gitnex/) [<img alt='Get it on F-droid' src='https://gitlab.com/fdroid/artwork/raw/master/badge/get-it-on.png' height="80"/>](https://f-droid.org/en/packages/org.mian.gitnex/)
[<img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png' height="80"/>](https://play.google.com/store/apps/details?id=org.mian.gitnex) [<img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png' height="80"/>](https://play.google.com/store/apps/details?id=org.mian.gitnex.pro)
[<img alt='Download builds and releases' src='assets/apk-badge.png' height="82"/>](https://cloud.swatian.com/s/DN7E5xxtaw4fRbE) [<img alt='Download builds and releases' src='assets/apk-badge.png' height="82"/>](https://cloud.swatian.com/s/DN7E5xxtaw4fRbE)
## Note about Gitea version ## Note about Gitea version
@ -21,11 +21,10 @@ Check the versions [compatibility page](https://codeberg.org/gitnex/GitNex/wiki/
## Build from source ## Build from source
Option 1 - Download the source code, open it in Android Studio and build it there. Option 1 - Download the source code, open it in Android Studio and build it there.
Option 2 - Open terminal(Linux) and cd to the project dir. Run `./gradlew build`. Option 2 - Open terminal(Linux) and cd to the project dir. Run `./gradlew assembleFree`.
## Features ## Features
- Multiple accounts support - Multiple accounts support
- Repositories / issues/ org list
- File and directory browser - File and directory browser
- File viewer - File viewer
- Create files - Create files
@ -34,6 +33,7 @@ Option 2 - Open terminal(Linux) and cd to the project dir. Run `./gradlew build`
- Files diff for PRs - Files diff for PRs
- Notifications - Notifications
- Drafts - Drafts
- Repositories / issues / org list
- [MANY MORE](https://codeberg.org/gitnex/GitNex/wiki/Features) - [MANY MORE](https://codeberg.org/gitnex/GitNex/wiki/Features)
## Contributing ## Contributing

View File

@ -1,15 +1,28 @@
apply plugin: 'com.android.application' apply plugin: 'com.android.application'
android { android {
compileSdkVersion 29 compileSdkVersion 30
defaultConfig { defaultConfig {
applicationId "org.mian.gitnex" applicationId "org.mian.gitnex"
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 29 targetSdkVersion 30
versionCode 317 versionCode 320
versionName "3.2.0-dev" versionName "3.2.0"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
} }
dexOptions {
javaMaxHeapSize "4g"
}
flavorDimensions "default"
productFlavors {
free {
applicationId "org.mian.gitnex"
}
pro {
applicationId "org.mian.gitnex.pro"
}
}
buildFeatures { buildFeatures {
viewBinding = true viewBinding = true
} }
@ -40,7 +53,7 @@ configurations {
dependencies { dependencies {
def lifecycle_version = '2.3.0-alpha07' def lifecycle_version = '2.3.0-alpha07'
def markwon_version = '4.5.1' def markwon_version = '4.6.0'
def work_version = "2.4.0" def work_version = "2.4.0"
def acra = "5.5.0" def acra = "5.5.0"
@ -54,14 +67,14 @@ dependencies {
androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'androidx.test:runner:1.3.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation "com.github.vihtarb:tooltip:0.2.0" implementation "com.github.vihtarb:tooltip:0.2.0"
implementation 'com.squareup.okhttp3:okhttp:4.8.1' implementation 'com.squareup.okhttp3:okhttp:4.9.0'
implementation "com.google.code.gson:gson:2.8.6" implementation "com.google.code.gson:gson:2.8.6"
implementation "com.squareup.picasso:picasso:2.71828" implementation "com.squareup.picasso:picasso:2.71828"
implementation "com.amulyakhare:com.amulyakhare.textdrawable:1.0.1" implementation "com.amulyakhare:com.amulyakhare.textdrawable:1.0.1"
implementation 'com.squareup.retrofit2:retrofit:2.9.0' implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0' implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.9.0' implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.8.1' implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'
implementation 'org.ocpsoft.prettytime:prettytime:4.0.5.Final' implementation 'org.ocpsoft.prettytime:prettytime:4.0.5.Final'
implementation "com.vdurmont:emoji-java:5.1.1" implementation "com.vdurmont:emoji-java:5.1.1"
implementation "com.pes.materialcolorpicker:library:1.2.5" implementation "com.pes.materialcolorpicker:library:1.2.5"

View File

@ -85,6 +85,7 @@
<activity android:name=".activities.RepoForksActivity" /> <activity android:name=".activities.RepoForksActivity" />
<activity android:name=".activities.AddNewAccountActivity" /> <activity android:name=".activities.AddNewAccountActivity" />
<activity android:name=".activities.RepositorySettingsActivity" /> <activity android:name=".activities.RepositorySettingsActivity" />
<activity android:name=".activities.CreatePullRequestActivity" />
<!-- Version < 3.0. DeX Mode and Screen Mirroring support --> <!-- Version < 3.0. DeX Mode and Screen Mirroring support -->
<meta-data android:name="com.samsung.android.keepalive.density" android:value="true"/> <meta-data android:name="com.samsung.android.keepalive.density" android:value="true"/>

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@ -114,10 +114,7 @@ public class AddNewAccountActivity extends BaseActivity {
URI rawInstanceUrl = UrlBuilder.fromString(UrlHelper.fixScheme(instanceUrlET, "http")).toUri(); URI rawInstanceUrl = UrlBuilder.fromString(UrlHelper.fixScheme(instanceUrlET, "http")).toUri();
URI instanceUrlWithProtocol = UrlBuilder.fromUri(rawInstanceUrl).withPath(PathsHelper.join(rawInstanceUrl.getPath())) URI instanceUrl = UrlBuilder.fromUri(rawInstanceUrl).withScheme(protocol.toLowerCase()).withPath(PathsHelper.join(rawInstanceUrl.getPath(), "/api/v1/"))
.withScheme(protocol.toLowerCase()).toUri();
URI instanceUrl = UrlBuilder.fromUri(instanceUrlWithProtocol).withPath(PathsHelper.join(instanceUrlWithProtocol.getPath(), "/api/v1/"))
.toUri(); .toUri();
versionCheck(instanceUrl.toString(), loginToken); versionCheck(instanceUrl.toString(), loginToken);

View File

@ -136,11 +136,6 @@ public abstract class BaseActivity extends AppCompatActivity {
tinyDb.putString("draftsCommentsDeletionEnabledInit", "yes"); tinyDb.putString("draftsCommentsDeletionEnabledInit", "yes");
} }
if(!tinyDb.getString("instanceUrlWithProtocol").endsWith("/")) {
tinyDb.putString("instanceUrlWithProtocol", tinyDb.getString("instanceUrlWithProtocol") + "/");
}
if (tinyDb.getBoolean("crashReportingEnabled")) { if (tinyDb.getBoolean("crashReportingEnabled")) {
CoreConfigurationBuilder ACRABuilder = new CoreConfigurationBuilder(this); CoreConfigurationBuilder ACRABuilder = new CoreConfigurationBuilder(this);

View File

@ -0,0 +1,431 @@
package org.mian.gitnex.activities;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import org.mian.gitnex.R;
import org.mian.gitnex.adapters.LabelsListAdapter;
import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.databinding.ActivityCreatePrBinding;
import org.mian.gitnex.databinding.CustomLabelsSelectionDialogBinding;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.Authorization;
import org.mian.gitnex.helpers.StaticGlobalVariables;
import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.helpers.Version;
import org.mian.gitnex.models.Branches;
import org.mian.gitnex.models.CreatePullRequest;
import org.mian.gitnex.models.Labels;
import org.mian.gitnex.models.Milestones;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
/**
* Author M M Arif
*/
public class CreatePullRequestActivity extends BaseActivity implements LabelsListAdapter.LabelsListAdapterListener {
private View.OnClickListener onClickListener;
private Context ctx = this;
private Context appCtx;
private TinyDB tinyDb;
private ActivityCreatePrBinding viewBinding;
private CustomLabelsSelectionDialogBinding labelsBinding;
private int resultLimit = StaticGlobalVariables.resultLimitOldGiteaInstances;
private Dialog dialogLabels;
private String labelsSetter;
private ArrayList<Integer> labelsIds = new ArrayList<>();
private ArrayList<String> assignees = new ArrayList<>();
private int milestoneId;
private String instanceUrl;
private String loginUid;
private String instanceToken;
private String repoOwner;
private String repoName;
private LabelsListAdapter labelsAdapter;
List<Milestones> milestonesList = new ArrayList<>();
List<Branches> branchesList = new ArrayList<>();
List<Labels> labelsList = new ArrayList<>();
public CreatePullRequestActivity() {
}
@Override
protected int getLayoutResourceId(){
return R.layout.activity_create_pr;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
appCtx = getApplicationContext();
tinyDb = new TinyDB(appCtx);
viewBinding = ActivityCreatePrBinding.inflate(getLayoutInflater());
View view = viewBinding.getRoot();
setContentView(view);
instanceUrl = tinyDb.getString("instanceUrl");
loginUid = tinyDb.getString("loginUid");
String repoFullName = tinyDb.getString("repoFullName");
String[] parts = repoFullName.split("/");
repoOwner = parts[0];
repoName = parts[1];
instanceToken = "token " + tinyDb.getString(loginUid + "-token");
// require gitea 1.12 or higher
if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
resultLimit = StaticGlobalVariables.resultLimitNewGiteaInstances;
}
labelsAdapter = new LabelsListAdapter(labelsList, CreatePullRequestActivity.this);
ImageView closeActivity = findViewById(R.id.close);
initCloseListener();
closeActivity.setOnClickListener(onClickListener);
viewBinding.prDueDate.setOnClickListener(dueDate ->
setDueDate()
);
disableProcessButton();
getMilestones(instanceUrl, instanceToken, repoOwner, repoName, loginUid, resultLimit);
getBranches(instanceUrl, instanceToken, repoOwner, repoName, loginUid);
viewBinding.prLabels.setOnClickListener(prLabels ->
showLabels()
);
viewBinding.createPr.setOnClickListener(createPr ->
processPullRequest()
);
}
private void processPullRequest() {
String prTitle = String.valueOf(viewBinding.prTitle.getText());
String prDescription = String.valueOf(viewBinding.prBody.getText());
String mergeInto = viewBinding.mergeIntoBranchSpinner.getText().toString();
String pullFrom = viewBinding.pullFromBranchSpinner.getText().toString();
String dueDate = String.valueOf(viewBinding.prDueDate.getText());
assignees.add("");
if (labelsIds.size() == 0) {
labelsIds.add(0);
}
if (dueDate.matches("")) {
dueDate = null;
}
else {
dueDate = AppUtil.customDateCombine(AppUtil.customDateFormat(dueDate));
}
if(prTitle.matches("")) {
Toasty.error(ctx, getString(R.string.titleError));
}
else if(mergeInto.matches("")) {
Toasty.error(ctx, getString(R.string.mergeIntoError));
}
else if(pullFrom.matches("")) {
Toasty.error(ctx, getString(R.string.pullFromError));
}
else if(pullFrom.equals(mergeInto)) {
Toasty.error(ctx, getString(R.string.sameBranchesError));
}
else {
createPullRequest(prTitle, prDescription, mergeInto, pullFrom, milestoneId, dueDate, assignees);
}
//Log.e("processPullRequest", String.valueOf(milestoneId));
}
private void createPullRequest(String prTitle, String prDescription, String mergeInto, String pullFrom, int milestoneId, String dueDate, ArrayList<String> assignees) {
CreatePullRequest createPullRequest = new CreatePullRequest(prTitle, prDescription, loginUid, mergeInto, pullFrom, milestoneId, dueDate, assignees, labelsIds);
Call<ResponseBody> transferCall = RetrofitClient
.getInstance(instanceUrl, ctx)
.getApiInterface()
.createPullRequest(instanceToken, repoOwner, repoName, createPullRequest);
transferCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(@NonNull Call<ResponseBody> call, @NonNull retrofit2.Response<ResponseBody> response) {
disableProcessButton();
if (response.code() == 201) {
Toasty.success(ctx, getString(R.string.prCreateSuccess));
finish();
}
else if (response.code() == 409 && response.message().equals("Conflict")) {
enableProcessButton();
Toasty.error(ctx, getString(R.string.prAlreadyExists));
}
else if (response.code() == 404) {
enableProcessButton();
Toasty.error(ctx, getString(R.string.apiNotFound));
}
else {
enableProcessButton();
Toasty.error(ctx, getString(R.string.genericError));
}
}
@Override
public void onFailure(@NonNull Call<ResponseBody> call, @NonNull Throwable t) {
enableProcessButton();
Toasty.error(ctx, getString(R.string.genericServerResponseError));
}
});
}
@Override
public void labelsStringData(ArrayList<String> data) {
labelsSetter = String.valueOf(data);
viewBinding.prLabels.setText(labelsSetter.replace("]", "").replace("[", ""));
}
@Override
public void labelsIdsData(ArrayList<Integer> data) {
labelsIds = data;
}
private void showLabels() {
dialogLabels = new Dialog(ctx, R.style.ThemeOverlay_MaterialComponents_Dialog_Alert);
if (dialogLabels.getWindow() != null) {
dialogLabels.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
labelsBinding = CustomLabelsSelectionDialogBinding.inflate(LayoutInflater.from(ctx));
View view = labelsBinding.getRoot();
dialogLabels.setContentView(view);
labelsBinding.cancel.setOnClickListener(editProperties ->
dialogLabels.dismiss()
);
Call<List<Labels>> call = RetrofitClient
.getInstance(instanceUrl, ctx)
.getApiInterface()
.getlabels(instanceToken, repoOwner, repoName);
call.enqueue(new Callback<List<Labels>>() {
@Override
public void onResponse(@NonNull Call<List<Labels>> call, @NonNull retrofit2.Response<List<Labels>> response) {
labelsList.clear();
List<Labels> labelsList_ = response.body();
labelsBinding.progressBar.setVisibility(View.GONE);
labelsBinding.dialogFrame.setVisibility(View.VISIBLE);
if (response.code() == 200) {
assert labelsList_ != null;
if(labelsList_.size() > 0) {
for (int i = 0; i < labelsList_.size(); i++) {
labelsList.add(new Labels(labelsList_.get(i).getId(), labelsList_.get(i).getName()));
}
}
else {
dialogLabels.dismiss();
Toasty.warning(ctx, getString(R.string.noLabelsFound));
}
labelsBinding.labelsRecyclerView.setAdapter(labelsAdapter);
}
else {
Toasty.error(ctx, getString(R.string.genericError));
}
}
@Override
public void onFailure(@NonNull Call<List<Labels>> call, @NonNull Throwable t) {
Toasty.error(ctx, getString(R.string.genericServerResponseError));
}
});
dialogLabels.show();
}
private void getBranches(String instanceUrl, String instanceToken, String repoOwner, String repoName, String loginUid) {
Call<List<Branches>> call = RetrofitClient
.getInstance(instanceUrl, ctx)
.getApiInterface()
.getBranches(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName);
call.enqueue(new Callback<List<Branches>>() {
@Override
public void onResponse(@NonNull Call<List<Branches>> call, @NonNull retrofit2.Response<List<Branches>> response) {
if(response.isSuccessful()) {
if(response.code() == 200) {
List<Branches> branchesList_ = response.body();
assert branchesList_ != null;
if(branchesList_.size() > 0) {
for (int i = 0; i < branchesList_.size(); i++) {
Branches data = new Branches(
branchesList_.get(i).getName()
);
branchesList.add(data);
}
}
ArrayAdapter<Branches> adapter = new ArrayAdapter<>(CreatePullRequestActivity.this,
R.layout.list_spinner_items, branchesList);
viewBinding.mergeIntoBranchSpinner.setAdapter(adapter);
viewBinding.pullFromBranchSpinner.setAdapter(adapter);
enableProcessButton();
}
}
}
@Override
public void onFailure(@NonNull Call<List<Branches>> call, @NonNull Throwable t) {
Toasty.error(ctx, getString(R.string.genericServerResponseError));
}
});
}
private void getMilestones(String instanceUrl, String instanceToken, String repoOwner, String repoName, String loginUid, int resultLimit) {
String msState = "open";
Call<List<Milestones>> call = RetrofitClient
.getInstance(instanceUrl, ctx)
.getApiInterface()
.getMilestones(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, 1, resultLimit, msState);
call.enqueue(new Callback<List<Milestones>>() {
@Override
public void onResponse(@NonNull Call<List<Milestones>> call, @NonNull retrofit2.Response<List<Milestones>> response) {
if(response.code() == 200) {
List<Milestones> milestonesList_ = response.body();
milestonesList.add(new Milestones(0,getString(R.string.issueCreatedNoMilestone)));
assert milestonesList_ != null;
if(milestonesList_.size() > 0) {
for (int i = 0; i < milestonesList_.size(); i++) {
//Don't translate "open" is a enum
if(milestonesList_.get(i).getState().equals("open")) {
Milestones data = new Milestones(
milestonesList_.get(i).getId(),
milestonesList_.get(i).getTitle()
);
milestonesList.add(data);
}
}
}
ArrayAdapter<Milestones> adapter = new ArrayAdapter<>(CreatePullRequestActivity.this,
R.layout.list_spinner_items, milestonesList);
viewBinding.milestonesSpinner.setAdapter(adapter);
enableProcessButton();
viewBinding.milestonesSpinner.setOnItemClickListener ((parent, view, position, id) ->
milestoneId = milestonesList.get(position).getId()
);
}
}
@Override
public void onFailure(@NonNull Call<List<Milestones>> call, @NonNull Throwable t) {
Toasty.error(ctx, getString(R.string.genericServerResponseError));
}
});
}
private void setDueDate() {
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR);
final int mMonth = c.get(Calendar.MONTH);
final int mDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(this,
(view, year, monthOfYear, dayOfMonth) -> viewBinding.prDueDate.setText(getString(R.string.setDueDate, year, (monthOfYear + 1), dayOfMonth)), mYear, mMonth, mDay);
datePickerDialog.show();
}
private void initCloseListener() {
onClickListener = view -> finish();
}
private void disableProcessButton() {
viewBinding.createPr.setEnabled(false);
}
private void enableProcessButton() {
viewBinding.createPr.setEnabled(true);
}
}

View File

@ -167,16 +167,12 @@ public class LoginActivity extends BaseActivity {
URI rawInstanceUrl = UrlBuilder.fromString(UrlHelper.fixScheme(instanceUrlET.getText().toString(), "http")).toUri(); URI rawInstanceUrl = UrlBuilder.fromString(UrlHelper.fixScheme(instanceUrlET.getText().toString(), "http")).toUri();
URI instanceUrlWithProtocol = UrlBuilder.fromUri(rawInstanceUrl).withPath(PathsHelper.join(rawInstanceUrl.getPath())) URI instanceUrl = UrlBuilder.fromUri(rawInstanceUrl).withScheme(protocol.name().toLowerCase()).withPath(PathsHelper.join(rawInstanceUrl.getPath(), "/api/v1/"))
.withScheme(protocol.name().toLowerCase()).toUri();
URI instanceUrl = UrlBuilder.fromUri(instanceUrlWithProtocol).withPath(PathsHelper.join(instanceUrlWithProtocol.getPath(), "/api/v1/"))
.toUri(); .toUri();
tinyDB.putString("loginType", loginType.name().toLowerCase()); tinyDB.putString("loginType", loginType.name().toLowerCase());
tinyDB.putString("instanceUrlRaw", instanceUrlET.getText().toString()); tinyDB.putString("instanceUrlRaw", instanceUrlET.getText().toString());
tinyDB.putString("instanceUrl", instanceUrl.toString()); tinyDB.putString("instanceUrl", instanceUrl.toString());
tinyDB.putString("instanceUrlWithProtocol", instanceUrlWithProtocol.toString());
if(instanceUrlET.getText().toString().equals("")) { if(instanceUrlET.getText().toString().equals("")) {

View File

@ -1,15 +1,14 @@
package org.mian.gitnex.activities; package org.mian.gitnex.activities;
import android.app.Activity; import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -32,11 +31,10 @@ import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.database.api.UserAccountsApi; import org.mian.gitnex.database.api.UserAccountsApi;
import org.mian.gitnex.database.models.UserAccount; import org.mian.gitnex.database.models.UserAccount;
import org.mian.gitnex.fragments.AboutFragment;
import org.mian.gitnex.fragments.AdministrationFragment; import org.mian.gitnex.fragments.AdministrationFragment;
import org.mian.gitnex.fragments.BottomSheetDraftsFragment; import org.mian.gitnex.fragments.BottomSheetDraftsFragment;
import org.mian.gitnex.fragments.DraftsFragment; import org.mian.gitnex.fragments.DraftsFragment;
import org.mian.gitnex.fragments.ExploreRepositoriesFragment; import org.mian.gitnex.fragments.ExploreFragment;
import org.mian.gitnex.fragments.MyRepositoriesFragment; import org.mian.gitnex.fragments.MyRepositoriesFragment;
import org.mian.gitnex.fragments.NotificationsFragment; import org.mian.gitnex.fragments.NotificationsFragment;
import org.mian.gitnex.fragments.OrganizationsFragment; import org.mian.gitnex.fragments.OrganizationsFragment;
@ -55,6 +53,7 @@ import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.helpers.Version; import org.mian.gitnex.helpers.Version;
import org.mian.gitnex.models.GiteaVersion; import org.mian.gitnex.models.GiteaVersion;
import org.mian.gitnex.models.NotificationCount;
import org.mian.gitnex.models.UserInfo; import org.mian.gitnex.models.UserInfo;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -82,6 +81,14 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
private Context appCtx; private Context appCtx;
private Typeface myTypeface; private Typeface myTypeface;
private String instanceUrl;
private String loginUid;
private String instanceToken;
private View hView;
private MenuItem navNotifications;
private TextView notificationCounter;
@Override @Override
protected int getLayoutResourceId() { protected int getLayoutResourceId() {
@ -100,9 +107,9 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
Intent mainIntent = getIntent(); Intent mainIntent = getIntent();
String launchFragment = mainIntent.getStringExtra("launchFragment"); String launchFragment = mainIntent.getStringExtra("launchFragment");
final String instanceUrl = tinyDb.getString("instanceUrl"); instanceUrl = tinyDb.getString("instanceUrl");
final String loginUid = tinyDb.getString("loginUid"); loginUid = tinyDb.getString("loginUid");
final String instanceToken = "token " + tinyDb.getString(loginUid + "-token"); instanceToken = "token " + tinyDb.getString(loginUid + "-token");
if(tinyDb.getString("dateFormat").isEmpty()) { if(tinyDb.getString("dateFormat").isEmpty()) {
tinyDb.putString("dateFormat", "pretty"); tinyDb.putString("dateFormat", "pretty");
@ -169,7 +176,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
else if(fragmentById instanceof OrganizationsFragment) { else if(fragmentById instanceof OrganizationsFragment) {
toolbarTitle.setText(getResources().getString(R.string.pageTitleOrganizations)); toolbarTitle.setText(getResources().getString(R.string.pageTitleOrganizations));
} }
else if(fragmentById instanceof ExploreRepositoriesFragment) { else if(fragmentById instanceof ExploreFragment) {
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore)); toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
} }
else if(fragmentById instanceof NotificationsFragment) { else if(fragmentById instanceof NotificationsFragment) {
@ -178,9 +185,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
else if(fragmentById instanceof ProfileFragment) { else if(fragmentById instanceof ProfileFragment) {
toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile)); toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile));
} }
else if(fragmentById instanceof AboutFragment) {
toolbarTitle.setText(getResources().getString(R.string.pageTitleAbout));
}
else if(fragmentById instanceof DraftsFragment) { else if(fragmentById instanceof DraftsFragment) {
toolbarTitle.setText(getResources().getString(R.string.titleDrafts)); toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
} }
@ -191,10 +195,15 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
toolbarTitle.setText(getResources().getString(R.string.pageTitleUserAccounts)); toolbarTitle.setText(getResources().getString(R.string.pageTitleUserAccounts));
} }
getNotificationsCount(instanceUrl, instanceToken);
drawer = findViewById(R.id.drawer_layout); drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view); NavigationView navigationView = findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this); navigationView.setNavigationItemSelectedListener(this);
final View hView = navigationView.getHeaderView(0); hView = navigationView.getHeaderView(0);
Menu menu = navigationView.getMenu();
navNotifications = menu.findItem(R.id.nav_notifications);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
@ -204,6 +213,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
@Override @Override
public void onDrawerOpened(@NonNull View drawerView) { public void onDrawerOpened(@NonNull View drawerView) {
getNotificationsCount(instanceUrl, instanceToken);
} }
@Override @Override
@ -295,6 +305,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile)); toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit(); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
navigationView.setCheckedItem(R.id.nav_profile);
drawer.closeDrawers(); drawer.closeDrawers();
}); });
@ -374,7 +385,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
case 5: case 5:
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore)); toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreRepositoriesFragment()).commit(); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreFragment()).commit();
navigationView.setCheckedItem(R.id.nav_explore); navigationView.setCheckedItem(R.id.nav_explore);
break; break;
@ -439,6 +450,11 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
} }
} }
public void setActionBarTitle(String title) {
toolbarTitle.setText(title);
}
@Override @Override
public void onButtonClicked(String text) { public void onButtonClicked(String text) {
@ -528,15 +544,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
break; break;
case R.id.nav_about:
toolbarTitle.setText(getResources().getString(R.string.pageTitleAbout));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new AboutFragment()).commit();
break;
case R.id.nav_rate_app:
rateThisApp();
break;
case R.id.nav_starred_repos: case R.id.nav_starred_repos:
toolbarTitle.setText(getResources().getString(R.string.pageTitleStarredRepos)); toolbarTitle.setText(getResources().getString(R.string.pageTitleStarredRepos));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new StarredRepositoriesFragment()).commit(); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new StarredRepositoriesFragment()).commit();
@ -544,7 +551,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
case R.id.nav_explore: case R.id.nav_explore:
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore)); toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreRepositoriesFragment()).commit(); getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreFragment()).commit();
break; break;
case R.id.nav_notifications: case R.id.nav_notifications:
@ -568,16 +575,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
return true; return true;
} }
public void rateThisApp() {
try {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getPackageName())));
}
catch(ActivityNotFoundException e) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName())));
}
}
public static void logout(Activity activity, Context ctx) { public static void logout(Activity activity, Context ctx) {
TinyDB tinyDb = new TinyDB(ctx.getApplicationContext()); TinyDB tinyDb = new TinyDB(ctx.getApplicationContext());
@ -705,4 +702,31 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
} }
private void getNotificationsCount(String instanceUrl, String token) {
Call<NotificationCount> call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().checkUnreadNotifications(token);
call.enqueue(new Callback<NotificationCount>() {
@Override
public void onResponse(@NonNull Call<NotificationCount> call, @NonNull retrofit2.Response<NotificationCount> response) {
NotificationCount notificationCount = response.body();
if(response.code() == 200) {
assert notificationCount != null;
notificationCounter = navNotifications.getActionView().findViewById(R.id.counterBadgeNotification);
notificationCounter.setText(String.valueOf(notificationCount.getCounter()));
}
}
@Override
public void onFailure(@NonNull Call<NotificationCount> call, @NonNull Throwable t) {
Log.e("onFailure-notification", t.toString());
}
});
}
} }

View File

@ -406,6 +406,10 @@ public class RepoDetailActivity extends BaseActivity implements BottomSheetRepoF
startActivity(new Intent(RepoDetailActivity.this, RepositorySettingsActivity.class)); startActivity(new Intent(RepoDetailActivity.this, RepositorySettingsActivity.class));
break; break;
case "newPullRequest":
startActivity(new Intent(RepoDetailActivity.this, CreatePullRequestActivity.class));
break;
} }
} }

View File

@ -394,6 +394,9 @@ public class RepositorySettingsActivity extends BaseActivity {
if (response.code() == 200) { if (response.code() == 200) {
tinyDb.putBoolean("hasIssues", repoEnableIssues);
tinyDb.putBoolean("hasPullRequests", repoEnablePr);
dialogProp.dismiss(); dialogProp.dismiss();
Toasty.success(ctx, getString(R.string.repoPropertiesSaveSuccess)); Toasty.success(ctx, getString(R.string.repoPropertiesSaveSuccess));

View File

@ -318,4 +318,9 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<ExploreRepo
return searchedReposList.size(); return searchedReposList.size();
} }
public void notifyDataChanged() {
notifyDataSetChanged();
}
} }

View File

@ -0,0 +1,95 @@
package org.mian.gitnex.adapters;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.mian.gitnex.R;
import org.mian.gitnex.models.Labels;
import java.util.ArrayList;
import java.util.List;
/**
* Author M M Arif
*/
public class LabelsListAdapter extends RecyclerView.Adapter<LabelsListAdapter.LabelsViewHolder> {
private List<Labels> labels;
private ArrayList<String> labelsStrings = new ArrayList<>();
private ArrayList<Integer> labelsIds = new ArrayList<>();
private LabelsListAdapterListener labelsListener;
public interface LabelsListAdapterListener {
void labelsStringData(ArrayList<String> data);
void labelsIdsData(ArrayList<Integer> data);
}
public LabelsListAdapter(List<Labels> labelsMain, LabelsListAdapterListener labelsListener) {
this.labels = labelsMain;
this.labelsListener = labelsListener;
}
static class LabelsViewHolder extends RecyclerView.ViewHolder {
private CheckBox labelSelection;
private LabelsViewHolder(View itemView) {
super(itemView);
labelSelection = itemView.findViewById(R.id.labelSelection);
}
}
@NonNull
@Override
public LabelsListAdapter.LabelsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_labels_list, parent, false);
return new LabelsListAdapter.LabelsViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull LabelsListAdapter.LabelsViewHolder holder, int position) {
Labels currentItem = labels.get(position);
holder.labelSelection.setText(currentItem.getName());
for(int i = 0; i < labelsIds.size(); i++) {
if(labelsStrings.contains(currentItem.getName())) {
holder.labelSelection.setChecked(true);
}
}
holder.labelSelection.setOnCheckedChangeListener((buttonView, isChecked) -> {
if(isChecked) {
labelsStrings.add(currentItem.getName());
labelsIds.add(currentItem.getId());
}
else {
labelsStrings.remove(currentItem.getName());
labelsIds.remove(Integer.valueOf(currentItem.getId()));
}
labelsListener.labelsStringData(labelsStrings);
labelsListener.labelsIdsData(labelsIds);
});
}
@Override
public int getItemCount() {
return labels.size();
}
}

View File

@ -0,0 +1,172 @@
package org.mian.gitnex.adapters;
import android.content.Context;
import android.content.Intent;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import org.mian.gitnex.R;
import org.mian.gitnex.activities.IssueDetailActivity;
import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.database.api.RepositoriesApi;
import org.mian.gitnex.database.models.Repository;
import org.mian.gitnex.helpers.ClickListener;
import org.mian.gitnex.helpers.RoundedTransformation;
import org.mian.gitnex.helpers.TimeHelper;
import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.models.Issues;
import org.ocpsoft.prettytime.PrettyTime;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Locale;
/**
* Author M M Arif
*/
public class SearchIssuesAdapter extends RecyclerView.Adapter<SearchIssuesAdapter.SearchViewHolder> {
private List<Issues> searchedList;
private Context mCtx;
private TinyDB tinyDb;
public SearchIssuesAdapter(List<Issues> dataList, Context mCtx) {
this.mCtx = mCtx;
this.searchedList = dataList;
this.tinyDb = new TinyDB(mCtx);
}
class SearchViewHolder extends RecyclerView.ViewHolder {
private TextView issueNumber;
private ImageView issueAssigneeAvatar;
private TextView issueTitle;
private TextView issueCreatedTime;
private TextView issueCommentsCount;
private TextView repoFullName;
private SearchViewHolder(View itemView) {
super(itemView);
issueNumber = itemView.findViewById(R.id.issueNumber);
issueAssigneeAvatar = itemView.findViewById(R.id.assigneeAvatar);
issueTitle = itemView.findViewById(R.id.issueTitle);
issueCommentsCount = itemView.findViewById(R.id.issueCommentsCount);
issueCreatedTime = itemView.findViewById(R.id.issueCreatedTime);
repoFullName = itemView.findViewById(R.id.repoFullName);
issueTitle.setOnClickListener(v -> {
Context context = v.getContext();
Intent intent = new Intent(context, IssueDetailActivity.class);
intent.putExtra("issueNumber", issueNumber.getText());
tinyDb.putString("issueNumber", issueNumber.getText().toString());
tinyDb.putString("issueType", "Issue");
tinyDb.putString("repoFullName", repoFullName.getText().toString());
String[] parts = repoFullName.getText().toString().split("/");
final String repoOwner = parts[0];
final String repoName = parts[1];
int currentActiveAccountId = tinyDb.getInt("currentActiveAccountId");
RepositoriesApi repositoryData = new RepositoriesApi(context);
Integer count = repositoryData.checkRepository(currentActiveAccountId, repoOwner, repoName);
if(count == 0) {
long id = repositoryData.insertRepository(currentActiveAccountId, repoOwner, repoName);
tinyDb.putLong("repositoryId", id);
}
else {
Repository data = repositoryData.getRepository(currentActiveAccountId, repoOwner, repoName);
tinyDb.putLong("repositoryId", data.getRepositoryId());
}
context.startActivity(intent);
});
}
}
@NonNull
@Override
public SearchIssuesAdapter.SearchViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_issues, parent, false);
return new SearchIssuesAdapter.SearchViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull final SearchIssuesAdapter.SearchViewHolder holder, int position) {
Issues currentItem = searchedList.get(position);
String locale = tinyDb.getString("locale");
String timeFormat = tinyDb.getString("dateFormat");
if(!currentItem.getUser().getFull_name().equals("")) {
holder.issueAssigneeAvatar.setOnClickListener(new ClickListener(mCtx.getResources().getString(R.string.issueCreator) + currentItem.getUser().getFull_name(), mCtx));
}
else {
holder.issueAssigneeAvatar.setOnClickListener(new ClickListener(mCtx.getResources().getString(R.string.issueCreator) + currentItem.getUser().getLogin(), mCtx));
}
PicassoService
.getInstance(mCtx).get().load(currentItem.getUser().getAvatar_url()).placeholder(R.drawable.loader_animated).transform(new RoundedTransformation(8, 0)).resize(120, 120).centerCrop().into(holder.issueAssigneeAvatar);
String issueNumber_ = "<font color='" + mCtx.getResources().getColor(R.color.lightGray) + "'>" + currentItem.getRepository().getFull_name() + mCtx.getResources().getString(R.string.hash) + currentItem.getNumber() + "</font>";
holder.issueTitle.setText(Html.fromHtml(issueNumber_ + " " + currentItem.getTitle()));
holder.issueNumber.setText(String.valueOf(currentItem.getNumber()));
holder.issueCommentsCount.setText(String.valueOf(currentItem.getComments()));
holder.repoFullName.setText(currentItem.getRepository().getFull_name());
switch(timeFormat) {
case "pretty": {
PrettyTime prettyTime = new PrettyTime(new Locale(locale));
String createdTime = prettyTime.format(currentItem.getCreated_at());
holder.issueCreatedTime.setText(createdTime);
holder.issueCreatedTime.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(currentItem.getCreated_at()), mCtx));
break;
}
case "normal": {
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd '" + mCtx.getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale));
String createdTime = formatter.format(currentItem.getCreated_at());
holder.issueCreatedTime.setText(createdTime);
break;
}
case "normal1": {
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy '" + mCtx.getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale));
String createdTime = formatter.format(currentItem.getCreated_at());
holder.issueCreatedTime.setText(createdTime);
break;
}
}
}
@Override
public int getItemCount() {
return searchedList.size();
}
public void notifyDataChanged() {
notifyDataSetChanged();
}
}

View File

@ -6,14 +6,13 @@ import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.activities.MainActivity;
import org.mian.gitnex.databinding.FragmentAboutBinding;
import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.TinyDB;
import java.util.Objects;
/** /**
* Author M M Arif * Author M M Arif
@ -21,30 +20,19 @@ import java.util.Objects;
public class AboutFragment extends Fragment { public class AboutFragment extends Fragment {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { @Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_about, container, false);
FragmentAboutBinding viewBinding = FragmentAboutBinding.inflate(inflater, container, false);
TinyDB tinyDb = new TinyDB(getContext()); TinyDB tinyDb = new TinyDB(getContext());
final TextView appVerBuild; viewBinding.appVersion.setText(AppUtil.getAppVersion(requireContext()));
final TextView donationLink; viewBinding.userServerVersion.setText(tinyDb.getString("giteaVersion"));
final TextView donationLinkPatreon; viewBinding.appBuild.setText(String.valueOf(AppUtil.getAppBuildNo(requireContext())));
final TextView translateLink;
final TextView appWebsite;
final TextView appRepo;
appVerBuild = v.findViewById(R.id.appVerBuild); ((MainActivity) requireActivity()).setActionBarTitle(getResources().getString(R.string.pageTitleAbout));
TextView viewTextGiteaVersion = v.findViewById(R.id.giteaVersion);
donationLink = v.findViewById(R.id.donationLink);
donationLinkPatreon = v.findViewById(R.id.donationLinkPatreon);
translateLink = v.findViewById(R.id.translateLink);
appWebsite = v.findViewById(R.id.appWebsite);
appRepo = v.findViewById(R.id.appRepo);
appVerBuild.setText(getString(R.string.appVerBuild, AppUtil.getAppVersion(Objects.requireNonNull(getContext())), AppUtil.getAppBuildNo(getContext()))); viewBinding.donationLinkLiberapay.setOnClickListener(v1 -> {
donationLink.setOnClickListener(v1 -> {
Intent intent = new Intent(); Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW); intent.setAction(Intent.ACTION_VIEW);
@ -53,7 +41,7 @@ public class AboutFragment extends Fragment {
startActivity(intent); startActivity(intent);
}); });
donationLinkPatreon.setOnClickListener(v12 -> { viewBinding.donationLinkPatreon.setOnClickListener(v12 -> {
Intent intent = new Intent(); Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW); intent.setAction(Intent.ACTION_VIEW);
@ -62,7 +50,7 @@ public class AboutFragment extends Fragment {
startActivity(intent); startActivity(intent);
}); });
translateLink.setOnClickListener(v13 -> { viewBinding.translateLink.setOnClickListener(v13 -> {
Intent intent = new Intent(); Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW); intent.setAction(Intent.ACTION_VIEW);
@ -71,7 +59,7 @@ public class AboutFragment extends Fragment {
startActivity(intent); startActivity(intent);
}); });
appWebsite.setOnClickListener(v14 -> { viewBinding.appWebsite.setOnClickListener(v14 -> {
Intent intent = new Intent(); Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW); intent.setAction(Intent.ACTION_VIEW);
@ -80,19 +68,15 @@ public class AboutFragment extends Fragment {
startActivity(intent); startActivity(intent);
}); });
appRepo.setOnClickListener(v15 -> { if(AppUtil.isPro(requireContext())) {
Intent intent = new Intent(); viewBinding.supportHeader.setVisibility(View.GONE);
intent.setAction(Intent.ACTION_VIEW); viewBinding.dividerSupport.setVisibility(View.GONE);
intent.addCategory(Intent.CATEGORY_BROWSABLE); viewBinding.donationLinkLiberapay.setVisibility(View.GONE);
intent.setData(Uri.parse(getResources().getString(R.string.appRepoLink))); viewBinding.donationLinkPatreon.setVisibility(View.GONE);
startActivity(intent); }
});
String commit = getResources().getString(R.string.commitPage) + tinyDb.getString("giteaVersion"); return viewBinding.getRoot();
viewTextGiteaVersion.setText(commit);
return v;
} }
} }

View File

@ -43,6 +43,7 @@ public class BottomSheetRepoFragment extends BottomSheetDialogFragment {
TextView copyRepoUrl = v.findViewById(R.id.copyRepoUrl); TextView copyRepoUrl = v.findViewById(R.id.copyRepoUrl);
View repoSettingsDivider = v.findViewById(R.id.repoSettingsDivider); View repoSettingsDivider = v.findViewById(R.id.repoSettingsDivider);
TextView repoSettings = v.findViewById(R.id.repoSettings); TextView repoSettings = v.findViewById(R.id.repoSettings);
TextView createPullRequest = v.findViewById(R.id.createPullRequest);
createLabel.setOnClickListener(v112 -> { createLabel.setOnClickListener(v112 -> {
@ -64,6 +65,20 @@ public class BottomSheetRepoFragment extends BottomSheetDialogFragment {
createIssue.setVisibility(View.GONE); createIssue.setVisibility(View.GONE);
} }
if(tinyDb.getBoolean("hasPullRequests")) {
createPullRequest.setVisibility(View.VISIBLE);
createPullRequest.setOnClickListener(vPr -> {
bmListener.onButtonClicked("newPullRequest");
dismiss();
});
}
else {
createPullRequest.setVisibility(View.GONE);
}
createMilestone.setOnClickListener(v13 -> { createMilestone.setOnClickListener(v13 -> {
bmListener.onButtonClicked("newMilestone"); bmListener.onButtonClicked("newMilestone");

View File

@ -0,0 +1,129 @@
package org.mian.gitnex.fragments;
import android.content.Context;
import android.graphics.Typeface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
import org.mian.gitnex.R;
import org.mian.gitnex.activities.MainActivity;
import org.mian.gitnex.helpers.TinyDB;
/**
* Author M M Arif
*/
public class ExploreFragment extends Fragment {
private Context ctx;
private TinyDB tinyDB;
private int tabsCount;
public ViewPager mViewPager;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_explore, container,false);
ctx = getContext();
tinyDB = new TinyDB(ctx);
((MainActivity) requireActivity()).setActionBarTitle(getResources().getString(R.string.navExplore));
TabLayout tabLayout = v.findViewById(R.id.tabsExplore);
ViewGroup viewGroup = (ViewGroup) tabLayout.getChildAt(0);
tabsCount = viewGroup.getChildCount();
Typeface myTypeface;
switch(tinyDB.getInt("customFontId", -1)) {
case 0:
myTypeface = Typeface.createFromAsset(ctx.getAssets(), "fonts/roboto.ttf");
break;
case 2:
myTypeface = Typeface.createFromAsset(ctx.getAssets(), "fonts/sourcecodeproregular.ttf");
break;
default:
myTypeface = Typeface.createFromAsset(ctx.getAssets(), "fonts/manroperegular.ttf");
break;
}
for(int j = 0; j < tabsCount; j++) {
ViewGroup vgTab = (ViewGroup) viewGroup.getChildAt(j);
int tabChildCount = vgTab.getChildCount();
for(int i = 0; i < tabChildCount; i++) {
View tabViewChild = vgTab.getChildAt(i);
if(tabViewChild instanceof TextView) {
((TextView) tabViewChild).setTypeface(myTypeface);
}
}
}
mViewPager = v.findViewById(R.id.containerExplore);
mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));
SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager());
mViewPager.setAdapter(mSectionsPagerAdapter);
return v;
}
public class SectionsPagerAdapter extends FragmentPagerAdapter {
SectionsPagerAdapter(FragmentManager fm) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
@NonNull
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch(position) {
case 0: // Repositories
fragment = new ExploreRepositoriesFragment();
break;
case 1: // Issues
fragment = new SearchIssuesFragment();
break;
}
assert fragment != null;
return fragment;
}
@Override
public int getCount() {
return tabsCount;
}
}
}

View File

@ -1,27 +1,37 @@
package org.mian.gitnex.fragments; package org.mian.gitnex.fragments;
import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.widget.ProgressBar; import android.view.inputmethod.InputMethodManager;
import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import org.mian.gitnex.R; import org.mian.gitnex.R;
import org.mian.gitnex.adapters.ExploreRepositoriesAdapter; import org.mian.gitnex.adapters.ExploreRepositoriesAdapter;
import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.databinding.CustomExploreRepositoriesDialogBinding;
import org.mian.gitnex.databinding.FragmentExploreRepoBinding;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.Authorization; import org.mian.gitnex.helpers.Authorization;
import org.mian.gitnex.helpers.InfiniteScrollListener;
import org.mian.gitnex.helpers.StaticGlobalVariables;
import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Version;
import org.mian.gitnex.models.ExploreRepositories; import org.mian.gitnex.models.ExploreRepositories;
import org.mian.gitnex.models.UserRepositories; import org.mian.gitnex.models.UserRepositories;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import retrofit2.Call; import retrofit2.Call;
@ -29,189 +39,300 @@ import retrofit2.Callback;
import retrofit2.Response; import retrofit2.Response;
/** /**
* Template Author Author M M Arif * Template Author M M Arif
* Author 6543 * Author 6543
*/ */
public class ExploreRepositoriesFragment extends Fragment { public class ExploreRepositoriesFragment extends Fragment {
private static String repoNameF = "param2"; private FragmentExploreRepoBinding viewBinding;
private static String repoOwnerF = "param1"; private Context ctx;
private ProgressBar mProgressBar; private TinyDB tinyDb;
private RecyclerView mRecyclerView;
private TextView noData; private int pageCurrentIndex = 1;
private TextView searchKeyword; private boolean repoTypeInclude = true;
private Boolean repoTypeInclude = true;
private String sort = "updated"; private String sort = "updated";
private String order = "desc"; private String order = "desc";
private int limit = 50; private int limit = 10;
private List<UserRepositories> dataList;
private ExploreRepositoriesAdapter adapter;
private OnFragmentInteractionListener mListener; private String instanceUrl;
private String loginUid;
private String instanceToken;
public ExploreRepositoriesFragment() { private Dialog dialogFilterOptions;
private CustomExploreRepositoriesDialogBinding filterBinding;
}
public static ExploreRepositoriesFragment newInstance(String param1, String param2) {
ExploreRepositoriesFragment fragment = new ExploreRepositoriesFragment();
Bundle args = new Bundle();
args.putString(repoOwnerF, param1);
args.putString(repoNameF, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(getArguments() != null) {
String repoName = getArguments().getString(repoNameF);
String repoOwner = getArguments().getString(repoOwnerF);
}
}
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.fragment_explore_repo, container, false); viewBinding = FragmentExploreRepoBinding.inflate(inflater, container, false);
//setHasOptionsMenu(true); setHasOptionsMenu(true);
TinyDB tinyDb = new TinyDB(getContext()); ctx = getContext();
final String instanceUrl = tinyDb.getString("instanceUrl"); tinyDb = new TinyDB(getContext());
final String loginUid = tinyDb.getString("loginUid");
final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
searchKeyword = v.findViewById(R.id.searchKeyword); instanceUrl = tinyDb.getString("instanceUrl");
noData = v.findViewById(R.id.noData); loginUid = tinyDb.getString("loginUid");
mProgressBar = v.findViewById(R.id.progress_bar); instanceToken = "token " + tinyDb.getString(loginUid + "-token");
mRecyclerView = v.findViewById(R.id.recyclerViewReposSearch);
mProgressBar.setVisibility(View.VISIBLE); dataList = new ArrayList<>();
adapter = new ExploreRepositoriesAdapter(dataList, ctx);
searchKeyword.setOnEditorActionListener((v1, actionId, event) -> { tinyDb.putBoolean("exploreRepoIncludeTopic", false);
tinyDb.putBoolean("exploreRepoIncludeDescription", false);
tinyDb.putBoolean("exploreRepoIncludeTemplate", false);
tinyDb.putBoolean("exploreRepoOnlyArchived", false);
// if gitea is 1.12 or higher use the new limit
if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
limit = StaticGlobalVariables.resultLimitNewGiteaInstances;
}
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(ctx);
viewBinding.recyclerViewReposSearch.setHasFixedSize(true);
viewBinding.recyclerViewReposSearch.setLayoutManager(linearLayoutManager);
viewBinding.recyclerViewReposSearch.setAdapter(adapter);
viewBinding.searchKeyword.setOnEditorActionListener((v1, actionId, event) -> {
if(actionId == EditorInfo.IME_ACTION_SEND) { if(actionId == EditorInfo.IME_ACTION_SEND) {
if(!searchKeyword.getText().toString().equals("")) {
mProgressBar.setVisibility(View.VISIBLE); if(!Objects.requireNonNull(viewBinding.searchKeyword.getText()).toString().equals("")) {
mRecyclerView.setVisibility(View.GONE);
loadSearchReposList(instanceUrl, instanceToken, loginUid, searchKeyword.getText().toString(), repoTypeInclude, sort, order, getContext(), limit); InputMethodManager imm = (InputMethodManager) requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(viewBinding.searchKeyword.getWindowToken(), 0);
// if gitea is 1.12 or higher use the new limit
if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
limit = StaticGlobalVariables.resultLimitNewGiteaInstances;
}
else {
limit = 10;
}
pageCurrentIndex = 1;
viewBinding.progressBar.setVisibility(View.VISIBLE);
loadData(false, viewBinding.searchKeyword.getText().toString(), tinyDb.getBoolean("exploreRepoIncludeTopic"), tinyDb.getBoolean("exploreRepoIncludeDescription"), tinyDb.getBoolean("exploreRepoIncludeTemplate"), tinyDb.getBoolean("exploreRepoOnlyArchived"));
} }
} }
return false; return false;
}); });
int limitDefault = 25; viewBinding.recyclerViewReposSearch.addOnScrollListener(new InfiniteScrollListener(pageCurrentIndex, linearLayoutManager) {
loadDefaultList(instanceUrl, instanceToken, loginUid, repoTypeInclude, sort, order, getContext(), limitDefault);
return v;
}
private void loadDefaultList(String instanceUrl, String instanceToken, String loginUid, Boolean repoTypeInclude, String sort, String order, final Context context, int limit) {
Call<ExploreRepositories> call = RetrofitClient.getInstance(instanceUrl, getContext()).getApiInterface().queryRepos(Authorization.returnAuthentication(getContext(), loginUid, instanceToken), null, repoTypeInclude, sort, order, limit);
call.enqueue(new Callback<ExploreRepositories>() {
@Override @Override
public void onResponse(@NonNull Call<ExploreRepositories> call, @NonNull Response<ExploreRepositories> response) { public void onScrolledToEnd(int firstVisibleItemPosition) {
if(response.isSuccessful()) {
assert response.body() != null;
getReposList(response.body().getSearchedData(), context);
}
else {
Log.i("onResponse", String.valueOf(response.code()));
}
pageCurrentIndex++;
loadData(true, Objects.requireNonNull(viewBinding.searchKeyword.getText()).toString(), tinyDb.getBoolean("exploreRepoIncludeTopic"), tinyDb.getBoolean("exploreRepoIncludeDescription"), tinyDb.getBoolean("exploreRepoIncludeTemplate"), tinyDb.getBoolean("exploreRepoOnlyArchived"));
} }
@Override
public void onFailure(@NonNull Call<ExploreRepositories> call, @NonNull Throwable t) {
Log.i("onFailure", Objects.requireNonNull(t.getMessage()));
}
}); });
} viewBinding.pullToRefresh.setOnRefreshListener(() -> {
private void loadSearchReposList(String instanceUrl, String instanceToken, String loginUid, String searchKeyword, Boolean repoTypeInclude, String sort, String order, final Context context, int limit) { pageCurrentIndex = 1;
Call<ExploreRepositories> call = RetrofitClient.getInstance(instanceUrl, getContext()).getApiInterface().queryRepos(Authorization.returnAuthentication(getContext(), loginUid, instanceToken), searchKeyword, repoTypeInclude, sort, order, limit);
call.enqueue(new Callback<ExploreRepositories>() {
@Override
public void onResponse(@NonNull Call<ExploreRepositories> call, @NonNull Response<ExploreRepositories> response) {
if(response.isSuccessful()) {
assert response.body() != null;
getReposList(response.body().getSearchedData(), context);
}
else {
Log.i("onResponse", String.valueOf(response.code()));
}
// if gitea is 1.12 or higher use the new limit
if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
limit = StaticGlobalVariables.resultLimitNewGiteaInstances;
}
else {
limit = 10;
} }
@Override loadData(false, Objects.requireNonNull(viewBinding.searchKeyword.getText()).toString(), tinyDb.getBoolean("exploreRepoIncludeTopic"), tinyDb.getBoolean("exploreRepoIncludeDescription"), tinyDb.getBoolean("exploreRepoIncludeTemplate"), tinyDb.getBoolean("exploreRepoOnlyArchived"));
public void onFailure(@NonNull Call<ExploreRepositories> call, @NonNull Throwable t) {
Log.i("onFailure", Objects.requireNonNull(t.getMessage()));
}
}); });
loadData(false, "", tinyDb.getBoolean("exploreRepoIncludeTopic"), tinyDb.getBoolean("exploreRepoIncludeDescription"), tinyDb.getBoolean("exploreRepoIncludeTemplate"), tinyDb.getBoolean("exploreRepoOnlyArchived"));
return viewBinding.getRoot();
} }
private void getReposList(List<UserRepositories> dataList, Context context) { private void loadData(boolean append, String searchKeyword, boolean exploreRepoIncludeTopic, boolean exploreRepoIncludeDescription, boolean exploreRepoIncludeTemplate, boolean exploreRepoOnlyArchived) {
ExploreRepositoriesAdapter adapter = new ExploreRepositoriesAdapter(dataList, context); viewBinding.noData.setVisibility(View.GONE);
mRecyclerView.setVisibility(View.VISIBLE); int apiCallDefaultLimit = 10;
// if gitea is 1.12 or higher use the new limit
if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
apiCallDefaultLimit = StaticGlobalVariables.resultLimitNewGiteaInstances;
}
mRecyclerView.setHasFixedSize(true); if(apiCallDefaultLimit > limit) {
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); return;
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL); }
mRecyclerView.addItemDecoration(dividerItemDecoration);
if(adapter.getItemCount() > 0) { if(pageCurrentIndex == 1 || !append) {
mRecyclerView.setAdapter(adapter);
noData.setVisibility(View.GONE);
mProgressBar.setVisibility(View.GONE);
dataList.clear();
adapter.notifyDataSetChanged();
viewBinding.pullToRefresh.setRefreshing(false);
viewBinding.progressBar.setVisibility(View.VISIBLE);
} }
else { else {
noData.setVisibility(View.VISIBLE); viewBinding.loadingMoreView.setVisibility(View.VISIBLE);
mProgressBar.setVisibility(View.GONE);
} }
Call<ExploreRepositories> call = RetrofitClient.getInstance(instanceUrl, getContext()).getApiInterface().queryRepos(Authorization.returnAuthentication(getContext(), loginUid, instanceToken), searchKeyword, repoTypeInclude, sort, order, exploreRepoIncludeTopic, exploreRepoIncludeDescription, exploreRepoIncludeTemplate, exploreRepoOnlyArchived, limit, pageCurrentIndex);
call.enqueue(new Callback<ExploreRepositories>() {
@Override
public void onResponse(@NonNull Call<ExploreRepositories> call, @NonNull Response<ExploreRepositories> response) {
if(response.code() == 200) {
assert response.body() != null;
limit = response.body().getSearchedData().size();
if(!append) {
dataList.clear();
}
dataList.addAll(response.body().getSearchedData());
adapter.notifyDataSetChanged();
}
else {
dataList.clear();
adapter.notifyDataChanged();
viewBinding.noData.setVisibility(View.VISIBLE);
}
onCleanup();
}
@Override
public void onFailure(@NonNull Call<ExploreRepositories> call, @NonNull Throwable t) {
Log.e("onFailure", Objects.requireNonNull(t.getMessage()));
onCleanup();
}
private void onCleanup() {
AppUtil.setMultiVisibility(View.GONE, viewBinding.loadingMoreView, viewBinding.progressBar);
if(dataList.isEmpty()) {
viewBinding.noData.setVisibility(View.VISIBLE);
}
}
});
}
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.filter_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
MenuItem filter = menu.findItem(R.id.filter);
filter.setOnMenuItemClickListener(filter_ -> {
showFilterOptions();
return false;
});
} }
public void onButtonPressed(Uri uri) { private void showFilterOptions() {
if(mListener != null) { dialogFilterOptions = new Dialog(ctx, R.style.ThemeOverlay_MaterialComponents_Dialog_Alert);
mListener.onFragmentInteraction(uri);
if (dialogFilterOptions.getWindow() != null) {
dialogFilterOptions.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
} }
filterBinding = CustomExploreRepositoriesDialogBinding.inflate(LayoutInflater.from(ctx));
View view = filterBinding.getRoot();
dialogFilterOptions.setContentView(view);
filterBinding.includeTopic.setOnClickListener(includeTopic -> {
if(filterBinding.includeTopic.isChecked()) {
tinyDb.putBoolean("exploreRepoIncludeTopic", true);
}
else {
tinyDb.putBoolean("exploreRepoIncludeTopic", false);
}
});
filterBinding.includeDesc.setOnClickListener(includeDesc -> {
if(filterBinding.includeDesc.isChecked()) {
tinyDb.putBoolean("exploreRepoIncludeDescription", true);
}
else {
tinyDb.putBoolean("exploreRepoIncludeDescription", false);
}
});
filterBinding.includeTemplate.setOnClickListener(includeTemplate -> {
if(filterBinding.includeTemplate.isChecked()) {
tinyDb.putBoolean("exploreRepoIncludeTemplate", true);
}
else {
tinyDb.putBoolean("exploreRepoIncludeTemplate", false);
}
});
filterBinding.onlyArchived.setOnClickListener(onlyArchived -> {
if(filterBinding.onlyArchived.isChecked()) {
tinyDb.putBoolean("exploreRepoOnlyArchived", true);
}
else {
tinyDb.putBoolean("exploreRepoOnlyArchived", false);
}
});
filterBinding.includeTopic.setChecked(tinyDb.getBoolean("exploreRepoIncludeTopic"));
filterBinding.includeDesc.setChecked(tinyDb.getBoolean("exploreRepoIncludeDescription"));
filterBinding.includeTemplate.setChecked(tinyDb.getBoolean("exploreRepoIncludeTemplate"));
filterBinding.onlyArchived.setChecked(tinyDb.getBoolean("exploreRepoOnlyArchived"));
filterBinding.cancel.setOnClickListener(editProperties -> {
dialogFilterOptions.dismiss();
});
dialogFilterOptions.show();
} }
@Override @Override
public void onDetach() { public void onDetach() {
super.onDetach(); super.onDetach();
mListener = null;
} }
public interface OnFragmentInteractionListener { public interface OnFragmentInteractionListener {
void onFragmentInteraction(Uri uri); void onFragmentInteraction(Uri uri);
} }
} }

View File

@ -32,7 +32,6 @@ import org.mian.gitnex.interfaces.ApiInterface;
import org.mian.gitnex.models.Issues; import org.mian.gitnex.models.Issues;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
import retrofit2.Response; import retrofit2.Response;
@ -112,7 +111,7 @@ public class IssuesFragment extends Fragment {
recyclerView.setLayoutManager(new LinearLayoutManager(context)); recyclerView.setLayoutManager(new LinearLayoutManager(context));
recyclerView.setAdapter(adapter); recyclerView.setAdapter(adapter);
((RepoDetailActivity) Objects.requireNonNull(getActivity())).setFragmentRefreshListener(issueState -> { ((RepoDetailActivity) requireActivity()).setFragmentRefreshListener(issueState -> {
if(issueState.equals("closed")) { if(issueState.equals("closed")) {
menu.getItem(1).setIcon(R.drawable.ic_filter_closed); menu.getItem(1).setIcon(R.drawable.ic_filter_closed);

View File

@ -27,7 +27,6 @@ import org.mian.gitnex.interfaces.ApiInterface;
import org.mian.gitnex.models.Milestones; import org.mian.gitnex.models.Milestones;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
import retrofit2.Response; import retrofit2.Response;
@ -104,7 +103,7 @@ public class MilestonesFragment extends Fragment {
}, 50)); }, 50));
((RepoDetailActivity) Objects.requireNonNull(getActivity())).setFragmentRefreshListenerMilestone(milestoneState -> { ((RepoDetailActivity) requireActivity()).setFragmentRefreshListenerMilestone(milestoneState -> {
if(milestoneState.equals("closed")) { if(milestoneState.equals("closed")) {
menu.getItem(1).setIcon(R.drawable.ic_filter_closed); menu.getItem(1).setIcon(R.drawable.ic_filter_closed);

View File

@ -36,7 +36,6 @@ import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects;
import retrofit2.Call; import retrofit2.Call;
import retrofit2.Callback; import retrofit2.Callback;
import retrofit2.Response; import retrofit2.Response;
@ -79,7 +78,7 @@ public class NotificationsFragment extends Fragment implements NotificationsAdap
View v = inflater.inflate(R.layout.fragment_notifications, container, false); View v = inflater.inflate(R.layout.fragment_notifications, container, false);
setHasOptionsMenu(true); setHasOptionsMenu(true);
activity = Objects.requireNonNull(getActivity()); activity = requireActivity();
context = getContext(); context = getContext();
tinyDB = new TinyDB(context); tinyDB = new TinyDB(context);

View File

@ -351,6 +351,13 @@ public class RepoInfoFragment extends Fragment {
tinyDb.putBoolean("hasIssues", true); tinyDb.putBoolean("hasIssues", true);
} }
if(repoInfo.isHas_pull_requests()) {
tinyDb.putBoolean("hasPullRequests", repoInfo.isHas_pull_requests());
}
else {
tinyDb.putBoolean("hasPullRequests", false);
}
tinyDb.putString("repoHtmlUrl", repoInfo.getHtml_url()); tinyDb.putString("repoHtmlUrl", repoInfo.getHtml_url());
mProgressBar.setVisibility(View.GONE); mProgressBar.setVisibility(View.GONE);

View File

@ -0,0 +1,190 @@
package org.mian.gitnex.fragments;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import org.mian.gitnex.adapters.SearchIssuesAdapter;
import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.databinding.FragmentSearchIssuesBinding;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.Authorization;
import org.mian.gitnex.helpers.InfiniteScrollListener;
import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.models.Issues;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
/**
* Author M M Arif
*/
public class SearchIssuesFragment extends Fragment {
private Context ctx;
private TinyDB tinyDb;
private FragmentSearchIssuesBinding viewBinding;
private SearchIssuesAdapter adapter;
private List<Issues> dataList;
private String instanceUrl;
private String loginUid;
private String instanceToken;
private int apiCallCurrentValue = 10;
private int pageCurrentIndex = 1;
private String type = "issues";
private String state = "open";
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
viewBinding = FragmentSearchIssuesBinding.inflate(inflater, container, false);
setHasOptionsMenu(true);
ctx = getContext();
tinyDb = new TinyDB(getContext());
instanceUrl = tinyDb.getString("instanceUrl");
loginUid = tinyDb.getString("loginUid");
instanceToken = "token " + tinyDb.getString(loginUid + "-token");
dataList = new ArrayList<>();
adapter = new SearchIssuesAdapter(dataList, ctx);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(ctx);
viewBinding.recyclerViewSearchIssues.setHasFixedSize(true);
viewBinding.recyclerViewSearchIssues.setLayoutManager(linearLayoutManager);
viewBinding.recyclerViewSearchIssues.setAdapter(adapter);
viewBinding.searchKeyword.setOnEditorActionListener((v1, actionId, event) -> {
if(actionId == EditorInfo.IME_ACTION_SEND) {
if(!Objects.requireNonNull(viewBinding.searchKeyword.getText()).toString().equals("")) {
InputMethodManager imm = (InputMethodManager) requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(viewBinding.searchKeyword.getWindowToken(), 0);
pageCurrentIndex = 1;
apiCallCurrentValue = 10;
viewBinding.progressBar.setVisibility(View.VISIBLE);
loadData(false, viewBinding.searchKeyword.getText().toString());
}
}
return false;
});
viewBinding.recyclerViewSearchIssues.addOnScrollListener(new InfiniteScrollListener(pageCurrentIndex, linearLayoutManager) {
@Override
public void onScrolledToEnd(int firstVisibleItemPosition) {
pageCurrentIndex++;
loadData(true, Objects.requireNonNull(viewBinding.searchKeyword.getText()).toString());
}
});
viewBinding.pullToRefresh.setOnRefreshListener(() -> {
pageCurrentIndex = 1;
apiCallCurrentValue = 10;
loadData(false, Objects.requireNonNull(viewBinding.searchKeyword.getText()).toString());
});
loadData(false, "");
return viewBinding.getRoot();
}
private void loadData(boolean append, String searchKeyword) {
viewBinding.noData.setVisibility(View.GONE);
int apiCallDefaultLimit = 10;
if(apiCallDefaultLimit > apiCallCurrentValue) {
return;
}
if(pageCurrentIndex == 1 || !append) {
dataList.clear();
adapter.notifyDataSetChanged();
viewBinding.pullToRefresh.setRefreshing(false);
viewBinding.progressBar.setVisibility(View.VISIBLE);
}
else {
viewBinding.loadingMoreView.setVisibility(View.VISIBLE);
}
Call<List<Issues>> call = RetrofitClient.getInstance(instanceUrl, getContext()).getApiInterface().queryIssues(
Authorization.returnAuthentication(getContext(), loginUid, instanceToken), searchKeyword, type, state, pageCurrentIndex);
call.enqueue(new Callback<List<Issues>>() {
@Override
public void onResponse(@NonNull Call<List<Issues>> call, @NonNull Response<List<Issues>> response) {
if(response.code() == 200) {
assert response.body() != null;
apiCallCurrentValue = response.body().size();
if(!append) {
dataList.clear();
}
dataList.addAll(response.body());
adapter.notifyDataSetChanged();
}
else {
dataList.clear();
adapter.notifyDataChanged();
viewBinding.noData.setVisibility(View.VISIBLE);
}
onCleanup();
}
@Override
public void onFailure(@NonNull Call<List<Issues>> call, @NonNull Throwable t) {
Log.e("onFailure", Objects.requireNonNull(t.getMessage()));
onCleanup();
}
private void onCleanup() {
AppUtil.setMultiVisibility(View.GONE, viewBinding.loadingMoreView, viewBinding.progressBar);
if(dataList.isEmpty()) {
viewBinding.noData.setVisibility(View.VISIBLE);
}
}
});
}
}

View File

@ -1,6 +1,8 @@
package org.mian.gitnex.fragments; package org.mian.gitnex.fragments;
import android.content.ActivityNotFoundException;
import android.content.Intent; import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -17,7 +19,6 @@ import org.mian.gitnex.activities.SettingsReportsActivity;
import org.mian.gitnex.activities.SettingsSecurityActivity; import org.mian.gitnex.activities.SettingsSecurityActivity;
import org.mian.gitnex.activities.SettingsTranslationActivity; import org.mian.gitnex.activities.SettingsTranslationActivity;
import org.mian.gitnex.helpers.TinyDB; import org.mian.gitnex.helpers.TinyDB;
import java.util.Objects;
/** /**
* Author M M Arif * Author M M Arif
@ -37,6 +38,8 @@ public class SettingsFragment extends Fragment {
LinearLayout securityFrame = v.findViewById(R.id.securityFrame); LinearLayout securityFrame = v.findViewById(R.id.securityFrame);
LinearLayout languagesFrame = v.findViewById(R.id.languagesFrame); LinearLayout languagesFrame = v.findViewById(R.id.languagesFrame);
LinearLayout reportsFrame = v.findViewById(R.id.reportsFrame); LinearLayout reportsFrame = v.findViewById(R.id.reportsFrame);
LinearLayout rateAppFrame = v.findViewById(R.id.rateAppFrame);
LinearLayout aboutAppFrame = v.findViewById(R.id.aboutAppFrame);
appearanceFrame.setOnClickListener(v1 -> startActivity(new Intent(getContext(), SettingsAppearanceActivity.class))); appearanceFrame.setOnClickListener(v1 -> startActivity(new Intent(getContext(), SettingsAppearanceActivity.class)));
@ -50,10 +53,24 @@ public class SettingsFragment extends Fragment {
reportsFrame.setOnClickListener(v1 -> startActivity(new Intent(getContext(), SettingsReportsActivity.class))); reportsFrame.setOnClickListener(v1 -> startActivity(new Intent(getContext(), SettingsReportsActivity.class)));
rateAppFrame.setOnClickListener(aboutApp -> rateThisApp());
aboutAppFrame.setOnClickListener(aboutApp -> requireActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new AboutFragment()).commit());
return v; return v;
} }
public void rateThisApp() {
try {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + requireActivity().getPackageName())));
}
catch(ActivityNotFoundException e) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + requireActivity().getPackageName())));
}
}
@Override @Override
public void onResume() { public void onResume() {
@ -62,8 +79,8 @@ public class SettingsFragment extends Fragment {
TinyDB tinyDb = new TinyDB(getContext()); TinyDB tinyDb = new TinyDB(getContext());
if(tinyDb.getBoolean("refreshParent")) { if(tinyDb.getBoolean("refreshParent")) {
Objects.requireNonNull(getActivity()).recreate(); requireActivity().recreate();
getActivity().overridePendingTransition(0, 0); requireActivity().overridePendingTransition(0, 0);
tinyDb.putBoolean("refreshParent", false); tinyDb.putBoolean("refreshParent", false);
} }

View File

@ -76,6 +76,10 @@ public class AppUtil {
} }
} }
public static boolean isPro(Context context) {
return context.getPackageName().equals("org.mian.gitnex.pro");
}
public int charactersLength(String str) { public int charactersLength(String str) {
return str.length(); return str.length();

View File

@ -3,7 +3,6 @@ package org.mian.gitnex.helpers;
import android.content.Context; import android.content.Context;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import org.mian.gitnex.R; import org.mian.gitnex.R;
@ -18,17 +17,16 @@ public class ClickListener implements View.OnClickListener {
private Context mCtx; private Context mCtx;
public ClickListener(String infoText, Context mCtx) { public ClickListener(String infoText, Context mCtx) {
this.infoText = infoText; this.infoText = infoText;
this.mCtx = mCtx; this.mCtx = mCtx;
} }
@Override @Override
public void onClick(View v) public void onClick(View v) {
{
LayoutInflater inflater1 = LayoutInflater.from(mCtx); LayoutInflater inflater1 = LayoutInflater.from(mCtx);
View layout = inflater1.inflate(R.layout.custom_toast_success, View layout = inflater1.inflate(R.layout.custom_toast_info, v.findViewById(R.id.custom_toast_container));
(ViewGroup) v.findViewById(R.id.custom_toast_container));
TextView text = layout.findViewById(R.id.toastText); TextView text = layout.findViewById(R.id.toastText);
text.setText(infoText); text.setText(infoText);

View File

@ -7,6 +7,7 @@ import org.mian.gitnex.models.Collaborators;
import org.mian.gitnex.models.Commits; import org.mian.gitnex.models.Commits;
import org.mian.gitnex.models.CreateIssue; import org.mian.gitnex.models.CreateIssue;
import org.mian.gitnex.models.CreateLabel; import org.mian.gitnex.models.CreateLabel;
import org.mian.gitnex.models.CreatePullRequest;
import org.mian.gitnex.models.DeleteFile; import org.mian.gitnex.models.DeleteFile;
import org.mian.gitnex.models.EditFile; import org.mian.gitnex.models.EditFile;
import org.mian.gitnex.models.Emails; import org.mian.gitnex.models.Emails;
@ -19,6 +20,7 @@ import org.mian.gitnex.models.Labels;
import org.mian.gitnex.models.MergePullRequest; import org.mian.gitnex.models.MergePullRequest;
import org.mian.gitnex.models.Milestones; import org.mian.gitnex.models.Milestones;
import org.mian.gitnex.models.NewFile; import org.mian.gitnex.models.NewFile;
import org.mian.gitnex.models.NotificationCount;
import org.mian.gitnex.models.NotificationThread; import org.mian.gitnex.models.NotificationThread;
import org.mian.gitnex.models.OrgOwner; import org.mian.gitnex.models.OrgOwner;
import org.mian.gitnex.models.Organization; import org.mian.gitnex.models.Organization;
@ -93,7 +95,7 @@ public interface ApiInterface {
Call<ResponseBody> markNotificationThreadsAsRead(@Header("Authorization") String token, @Query("last_read_at") String last_read_at, @Query("all") Boolean all, @Query("status-types") String[] statusTypes, @Query("to-status") String toStatus); Call<ResponseBody> markNotificationThreadsAsRead(@Header("Authorization") String token, @Query("last_read_at") String last_read_at, @Query("all") Boolean all, @Query("status-types") String[] statusTypes, @Query("to-status") String toStatus);
@GET("notifications/new") // Check if unread notifications exist @GET("notifications/new") // Check if unread notifications exist
Call<JsonElement> checkUnreadNotifications(@Header("Authorization") String token); Call<NotificationCount> checkUnreadNotifications(@Header("Authorization") String token);
@GET("notifications/threads/{id}") // Get notification thread by ID @GET("notifications/threads/{id}") // Get notification thread by ID
Call<NotificationThread> getNotificationThread(@Header("Authorization") String token, @Path("id") Integer id); Call<NotificationThread> getNotificationThread(@Header("Authorization") String token, @Path("id") Integer id);
@ -264,7 +266,10 @@ public interface ApiInterface {
Call<List<UserInfo>> getRepoWatchers(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName); Call<List<UserInfo>> getRepoWatchers(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName);
@GET("repos/search") // get all the repos which match the query string @GET("repos/search") // get all the repos which match the query string
Call<ExploreRepositories> queryRepos(@Header("Authorization") String token, @Query("q") String searchKeyword, @Query("private") Boolean repoTypeInclude, @Query("sort") String sort, @Query("order") String order, @Query("limit") int limit); Call<ExploreRepositories> queryRepos(@Header("Authorization") String token, @Query("q") String searchKeyword, @Query("private") Boolean repoTypeInclude, @Query("sort") String sort, @Query("order") String order, @Query("topic") boolean topic, @Query("includeDesc") boolean includeDesc, @Query("template") boolean template, @Query("archived") boolean archived, @Query("limit") int limit, @Query("page") int page);
@GET("repos/issues/search") // get all the issues which match the query string
Call<List<Issues>> queryIssues(@Header("Authorization") String token, @Query("q") String searchKeyword, @Query("type") String type, @Query("state") String state, @Query("page") int page);
@POST("repos/{owner}/{repo}/contents/{file}") // create new file @POST("repos/{owner}/{repo}/contents/{file}") // create new file
Call<JsonElement> createNewFile(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("file") String fileName, @Body NewFile jsonStr); Call<JsonElement> createNewFile(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("file") String fileName, @Body NewFile jsonStr);
@ -320,6 +325,9 @@ public interface ApiInterface {
@POST("repos/{owner}/{repo}/pulls/{index}/merge") // merge a pull request @POST("repos/{owner}/{repo}/pulls/{index}/merge") // merge a pull request
Call<ResponseBody> mergePullRequest(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("index") int index, @Body MergePullRequest jsonStr); Call<ResponseBody> mergePullRequest(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("index") int index, @Body MergePullRequest jsonStr);
@POST("repos/{owner}/{repo}/pulls") // create a pull request
Call<ResponseBody> createPullRequest(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Body CreatePullRequest jsonStr);
@GET("repos/{owner}/{repo}/commits") // get all commits @GET("repos/{owner}/{repo}/commits") // get all commits
Call<List<Commits>> getRepositoryCommits(@Header("Authorization") String token, @Path("owner") String owner, @Path("repo") String repo, @Query("page") int page, @Query("sha") String branchName, @Query("limit") int limit); Call<List<Commits>> getRepositoryCommits(@Header("Authorization") String token, @Path("owner") String owner, @Path("repo") String repo, @Query("page") int page, @Query("sha") String branchName, @Query("limit") int limit);

View File

@ -0,0 +1,36 @@
package org.mian.gitnex.models;
import java.util.ArrayList;
/**
* Author M M Arif
*/
public class CreatePullRequest {
private String title;
private String body;
private String assignee;
private String base;
private String head;
private int milestone;
private String due_date;
private String message;
private ArrayList<String> assignees;
private ArrayList<Integer> labels;
public CreatePullRequest(String title, String body, String assignee, String base, String head, int milestone, String due_date, ArrayList<String> assignees, ArrayList<Integer> labels) {
this.title = title;
this.body = body;
this.assignee = assignee;
this.base = base; // merge into branch
this.head = head; // pull from branch
this.milestone = milestone;
this.due_date = due_date;
this.assignees = assignees;
this.labels = labels;
}
}

View File

@ -27,6 +27,7 @@ public class Issues {
private pullRequestObject pull_request; private pullRequestObject pull_request;
private milestoneObject milestone; private milestoneObject milestone;
private List<assigneesObject> assignees; private List<assigneesObject> assignees;
private repositoryObject repository;
public Issues(String body) { public Issues(String body) {
this.body = body; this.body = body;
@ -193,6 +194,35 @@ public class Issues {
} }
} }
public static class repositoryObject {
private int id;
private String full_name;
private String name;
private String owner;
public int getId() {
return id;
}
public String getFull_name() {
return full_name;
}
public String getName() {
return name;
}
public String getOwner() {
return owner;
}
}
public int getId() { public int getId() {
return id; return id;
} }
@ -267,4 +297,9 @@ public class Issues {
this.html_url = html_url; this.html_url = html_url;
} }
public repositoryObject getRepository() {
return repository;
}
} }

View File

@ -21,6 +21,11 @@ public class Labels {
this.labels = labels; this.labels = labels;
} }
public Labels(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() { public int getId() {
return id; return id;
} }

View File

@ -0,0 +1,19 @@
package org.mian.gitnex.models;
import com.google.gson.annotations.SerializedName;
/**
* Author M M Arif
*/
public class NotificationCount {
@SerializedName("new")
private int counter;
public int getCounter() {
return counter;
}
}

View File

@ -1,46 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android" <vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp" android:width="108dp"
android:height="108dp" android:height="108dp"
android:viewportWidth="135.47" android:viewportWidth="108"
android:viewportHeight="135.47"> android:viewportHeight="108">
<path <group android:scaleX="0"
android:pathData="M68.02,66.305m-94.784,-6.397a94.999,94.999 48.861,1 1,189.567 12.793a94.999,94.999 48.861,1 1,-189.567 -12.793" android:scaleY="0"
android:strokeWidth="1.40255427" android:translateX="54"
android:fillColor="#39404a"/> android:translateY="54">
<path <path android:fillColor="#3DDC84"
android:pathData="M31.738,45.193a9.139,9.151 63.873,1 0,12.769 -13.108a9.139,9.151 63.873,1 0,-12.769 13.108z" android:pathData="M0,0h108v108h-108z"/>
android:strokeWidth="0.99999666" <path android:fillColor="#00000000" android:pathData="M9,0L9,108"
android:fillColor="#609926"/> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path <path android:fillColor="#00000000" android:pathData="M19,0L19,108"
android:pathData="M31.875,115.115a9.139,9.151 63.873,1 0,12.769 -13.108a9.139,9.151 63.873,1 0,-12.769 13.108z" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeWidth="0.99999666" <path android:fillColor="#00000000" android:pathData="M29,0L29,108"
android:fillColor="#609926"/> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path <path android:fillColor="#00000000" android:pathData="M39,0L39,108"
android:pathData="M61.361,80.42a9.139,9.151 63.873,1 0,12.769 -13.108a9.139,9.151 63.873,1 0,-12.769 13.108z" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeWidth="0.99999666" <path android:fillColor="#00000000" android:pathData="M49,0L49,108"
android:fillColor="#609926"/> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path <path android:fillColor="#00000000" android:pathData="M59,0L59,108"
android:pathData="M34.37,18.911l7.038,0.003l-0.096,85.655l-7.038,-0.003z" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:fillColor="#609926"/> <path android:fillColor="#00000000" android:pathData="M69,0L69,108"
<path android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:pathData="m37.878,38.707c31.743,0.128 29.614,-4.427 29.723,36.496" <path android:fillColor="#00000000" android:pathData="M79,0L79,108"
android:strokeWidth="8.72550011" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:fillColor="#00000000" <path android:fillColor="#00000000" android:pathData="M89,0L89,108"
android:strokeColor="#609926"/> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path <path android:fillColor="#00000000" android:pathData="M99,0L99,108"
android:pathData="m97.323,109.027c-31.743,-0.128 -29.614,4.427 -29.723,-36.496" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeWidth="8.72550011" <path android:fillColor="#00000000" android:pathData="M0,9L108,9"
android:fillColor="#00000000" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:strokeColor="#609926"/> <path android:fillColor="#00000000" android:pathData="M0,19L108,19"
<path android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:pathData="M90.959,45.193a9.139,9.151 63.873,1 0,12.769 -13.108a9.139,9.151 63.873,1 0,-12.769 13.108z" <path android:fillColor="#00000000" android:pathData="M0,29L108,29"
android:strokeWidth="0.99999666" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:fillColor="#609926"/> <path android:fillColor="#00000000" android:pathData="M0,39L108,39"
<path android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:pathData="M90.955,115.117a9.139,9.151 63.873,1 0,12.769 -13.108a9.139,9.151 63.873,1 0,-12.769 13.108z" <path android:fillColor="#00000000" android:pathData="M0,49L108,49"
android:strokeWidth="0.99999666" android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:fillColor="#609926"/> <path android:fillColor="#00000000" android:pathData="M0,59L108,59"
<path android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
android:pathData="M93.872,35.636l7.038,0.002l-0.096,68.927l-7.038,-0.002z" <path android:fillColor="#00000000" android:pathData="M0,69L108,69"
android:fillColor="#609926"/> android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,79L108,79"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,89L108,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M0,99L108,99"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,29L89,29"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,39L89,39"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,49L89,49"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,59L89,59"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,69L89,69"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M19,79L89,79"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M29,19L29,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M39,19L39,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M49,19L49,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M59,19L59,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M69,19L69,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
<path android:fillColor="#00000000" android:pathData="M79,19L79,89"
android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
</group>
</vector> </vector>

View File

@ -0,0 +1,246 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="?attr/primaryBackgroundColor">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Widget.AppCompat.SearchView">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/primaryBackgroundColor">
<ImageView
android:id="@+id/close"
android:layout_width="@dimen/close_button_size"
android:layout_height="@dimen/close_button_size"
android:layout_marginRight="15dp"
android:layout_marginLeft="15dp"
android:gravity="center_vertical"
android:contentDescription="@string/close"
android:src="@drawable/ic_arrow_back" />
<TextView
android:id="@+id/toolbarTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/pageTitleNewPullRequest"
android:textColor="?attr/primaryTextColor"
android:maxLines="1"
android:textSize="20sp" />
</com.google.android.material.appbar.MaterialToolbar>
</com.google.android.material.appbar.AppBarLayout>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/primaryBackgroundColor">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:orientation="vertical">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/prTitleLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:boxBackgroundColor="?attr/inputBackgroundColor"
android:textColorHint="?attr/hintColor"
app:hintTextColor="?attr/hintColor"
app:boxStrokeErrorColor="@color/darkRed"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:endIconMode="clear_text"
app:endIconTint="?attr/iconsColor"
app:counterEnabled="true"
app:counterMaxLength="255"
app:counterTextColor="?attr/inputTextColor"
android:hint="@string/newIssueTitle">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/prTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/inputTextColor"
android:textColorHighlight="?attr/hintColor"
android:textColorHint="?attr/hintColor"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/prBodyLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:boxBackgroundColor="?attr/inputBackgroundColor"
android:textColorHint="?attr/hintColor"
app:hintTextColor="?attr/hintColor"
app:boxStrokeErrorColor="@color/darkRed"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:endIconMode="clear_text"
app:endIconTint="?attr/iconsColor"
android:hint="@string/newIssueDescriptionTitle">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/prBody"
android:layout_width="match_parent"
android:layout_height="140dp"
android:textColor="?attr/inputTextColor"
android:textColorHighlight="?attr/hintColor"
android:textColorHint="?attr/hintColor"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/mergeIntoBranchSpinnerLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:boxBackgroundColor="?attr/inputBackgroundColor"
android:textColorHint="?attr/hintColor"
app:hintTextColor="?attr/hintColor"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:hint="@string/mergeIntoBranch"
app:endIconTint="?attr/iconsColor"
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.ExposedDropdownMenu">
<AutoCompleteTextView
android:id="@+id/mergeIntoBranchSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none"
android:textColor="?attr/inputTextColor"
android:labelFor="@+id/mergeIntoBranchSpinner"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/pullFromBranchSpinnerLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:boxBackgroundColor="?attr/inputBackgroundColor"
android:textColorHint="?attr/hintColor"
app:hintTextColor="?attr/hintColor"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:hint="@string/pullFromBranch"
app:endIconTint="?attr/iconsColor"
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.ExposedDropdownMenu">
<AutoCompleteTextView
android:id="@+id/pullFromBranchSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none"
android:textColor="?attr/inputTextColor"
android:labelFor="@+id/pullFromBranchSpinner"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/milestonesSpinnerLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:boxBackgroundColor="?attr/inputBackgroundColor"
android:textColorHint="?attr/hintColor"
app:hintTextColor="?attr/hintColor"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:hint="@string/newIssueMilestoneTitle"
app:endIconTint="?attr/iconsColor"
android:visibility="gone"
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.ExposedDropdownMenu">
<AutoCompleteTextView
android:id="@+id/milestonesSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none"
android:textColor="?attr/inputTextColor"
android:labelFor="@+id/milestonesSpinner"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/prLabelsLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:boxBackgroundColor="?attr/inputBackgroundColor"
android:textColorHint="?attr/hintColor"
app:hintTextColor="?attr/hintColor"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:hint="@string/newIssueLabelsTitle">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/prLabels"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/inputTextColor"
android:textColorHighlight="?attr/hintColor"
android:textColorHint="?attr/hintColor"
android:focusable="false"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/prDueDateLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:boxBackgroundColor="?attr/inputBackgroundColor"
android:textColorHint="?attr/hintColor"
app:hintTextColor="?attr/hintColor"
app:boxStrokeErrorColor="@color/darkRed"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:endIconMode="clear_text"
app:endIconTint="?attr/iconsColor"
android:hint="@string/newIssueDueDateTitle">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/prDueDate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/inputTextColor"
android:textColorHighlight="?attr/hintColor"
android:textColorHint="?attr/hintColor"
android:maxLines="1"
android:focusable="false"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/createPr"
android:gravity="center"
android:layout_gravity="end"
android:layout_marginTop="8dp"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:text="@string/newCreateButtonCopy"
android:textColor="@color/btnTextColor" />
</LinearLayout>
</ScrollView>
</LinearLayout>

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout <LinearLayout android:layout_width="match_parent"
android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical" android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:background="?attr/primaryBackgroundColor"> android:background="?attr/primaryBackgroundColor">
@ -50,27 +50,30 @@
android:padding="16dp" android:padding="16dp"
android:orientation="vertical"> android:orientation="vertical">
<TextView <com.google.android.material.textfield.TextInputLayout
android:id="@+id/userEmailLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/profileEmailTitle" app:boxBackgroundColor="?attr/inputBackgroundColor"
android:textColor="?attr/primaryTextColor"
android:textSize="16sp" />
<EditText
android:id="@+id/userEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:padding="10dp"
android:textSize="14sp"
tools:ignore="Autofill"
android:inputType="textEmailAddress"
android:labelFor="@+id/userEmail"
android:background="@drawable/shape_inputs"
android:textColor="?attr/inputTextColor"
android:textColorHint="?attr/hintColor" android:textColorHint="?attr/hintColor"
android:textColorHighlight="?attr/primaryTextColor"/> app:hintTextColor="?attr/hintColor"
app:boxStrokeErrorColor="@color/darkRed"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:endIconMode="clear_text"
app:endIconTint="?attr/iconsColor"
android:hint="@string/profileEmailTitle">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/userEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/inputTextColor"
android:textColorHighlight="?attr/hintColor"
android:textColorHint="?attr/hintColor"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
<Button <Button
android:id="@+id/addEmailButton" android:id="@+id/addEmailButton"

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical">
<TextView
android:id="@+id/counterBadgeNotification"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:maxLength="4"
android:ellipsize="marquee"
android:background="@drawable/shape_badge_background"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:textColor="@color/colorWhite"
android:textSize="12sp" />
</LinearLayout>

View File

@ -41,6 +41,18 @@
android:textColor="?attr/primaryTextColor" android:textColor="?attr/primaryTextColor"
android:textSize="16sp" /> android:textSize="16sp" />
<TextView
android:id="@+id/createPullRequest"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:drawableStart="@drawable/ic_pull_request"
android:drawablePadding="24dp"
android:padding="12dp"
android:text="@string/pageTitleNewPullRequest"
android:textColor="?attr/primaryTextColor"
android:textSize="16sp" />
<TextView <TextView
android:id="@+id/createNewMilestone" android:id="@+id/createNewMilestone"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/shape_custom_dialog"
android:orientation="vertical">
<LinearLayout
android:id="@+id/dialogFrame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:id="@+id/titleFrame"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/primaryTextColor"
android:textSize="20sp"
android:textStyle="bold"
android:drawableStart="@drawable/ic_filter"
android:drawablePadding="16dp"
android:text="@string/exploreFilterDialogTitle"
android:layout_marginBottom="4dp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="@+id/dividerTitle"
android:background="?attr/dividerColor" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="100"
android:layout_margin="12dp"
android:orientation="vertical">
<CheckBox
android:id="@+id/includeTopic"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:textColor="?attr/primaryTextColor"
android:text="@string/exploreFilterIncludeTopic"
android:textSize="16sp" />
<CheckBox
android:id="@+id/includeDesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:textColor="?attr/primaryTextColor"
android:text="@string/exploreFilterIncludeDesc"
android:textSize="16sp" />
<CheckBox
android:id="@+id/includeTemplate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:textColor="?attr/primaryTextColor"
android:text="@string/exploreFilterIncludeTemplateRepos"
android:textSize="16sp" />
<CheckBox
android:id="@+id/onlyArchived"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:textColor="?attr/primaryTextColor"
android:text="@string/exploreFilterIncludeArchive"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="@+id/divider"
android:background="?attr/dividerColor" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:orientation="horizontal" >
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="60dp"
style="?android:attr/button"
android:layout_alignParentStart="true"
android:text="@string/close"
android:textColor="@color/colorWhite"
android:textSize="16sp" />
</RelativeLayout>
</LinearLayout>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layoutFrame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<CheckBox
android:id="@+id/labelSelection"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="false"
android:textColor="?attr/primaryTextColor"
android:textSize="16sp" />
</RelativeLayout>

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@drawable/shape_custom_dialog"
android:orientation="vertical">
<com.google.android.material.progressindicator.ProgressIndicator
android:id="@+id/progressBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate"
app:indicatorColor="?attr/progressIndicatorColor" />
<LinearLayout
android:id="@+id/dialogFrame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:id="@+id/TitleFrame"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/primaryTextColor"
android:textSize="20sp"
android:textStyle="bold"
android:drawableStart="@drawable/ic_label"
android:drawablePadding="16dp"
android:text="@string/newIssueSelectLabelsListTitle" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="@+id/dividerTitle"
android:background="?attr/dividerColor" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="100"
android:layout_margin="12dp"
android:orientation="vertical">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/labelsRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="@+id/divider"
android:background="?attr/dividerColor" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingStart="16dp"
android:paddingEnd="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:orientation="vertical" >
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="60dp"
style="?android:attr/button"
android:layout_alignParentStart="true"
android:text="@string/close"
android:textColor="@color/colorWhite"
android:textSize="16sp" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>

View File

@ -43,6 +43,7 @@
app:hintTextColor="?attr/hintColor" app:hintTextColor="?attr/hintColor"
app:boxStrokeErrorColor="@color/darkRed" app:boxStrokeErrorColor="@color/darkRed"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:hint="@string/newRepoTintCopy"> android:hint="@string/newRepoTintCopy">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
@ -77,14 +78,14 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingStart="16dp" android:paddingStart="16dp"
android:paddingEnd="16dp" android:paddingEnd="16dp"
android:paddingTop="4dp" android:paddingTop="8dp"
android:paddingBottom="4dp" android:paddingBottom="8dp"
android:orientation="horizontal" > android:orientation="horizontal" >
<Button <Button
android:id="@+id/cancel" android:id="@+id/cancel"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="60dp"
style="?android:attr/button" style="?android:attr/button"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:text="@string/cancelButton" android:text="@string/cancelButton"
@ -94,7 +95,7 @@
<Button <Button
android:id="@+id/delete" android:id="@+id/delete"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="60dp"
style="?android:attr/button" style="?android:attr/button"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:text="@string/menuDeleteText" android:text="@string/menuDeleteText"

View File

@ -62,6 +62,7 @@
app:hintTextColor="?attr/hintColor" app:hintTextColor="?attr/hintColor"
app:boxStrokeErrorColor="@color/darkRed" app:boxStrokeErrorColor="@color/darkRed"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:hint="@string/websiteText"> android:hint="@string/websiteText">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
@ -83,6 +84,8 @@
android:textColorHint="?attr/hintColor" android:textColorHint="?attr/hintColor"
app:hintTextColor="?attr/hintColor" app:hintTextColor="?attr/hintColor"
app:boxStrokeErrorColor="@color/darkRed" app:boxStrokeErrorColor="@color/darkRed"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:hint="@string/newRepoDescTintCopy"> android:hint="@string/newRepoDescTintCopy">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
@ -197,14 +200,14 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingStart="16dp" android:paddingStart="16dp"
android:paddingEnd="16dp" android:paddingEnd="16dp"
android:paddingTop="4dp" android:paddingTop="8dp"
android:paddingBottom="4dp" android:paddingBottom="8dp"
android:orientation="horizontal" > android:orientation="horizontal" >
<Button <Button
android:id="@+id/cancel" android:id="@+id/cancel"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="60dp"
style="?android:attr/button" style="?android:attr/button"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:text="@string/cancelButton" android:text="@string/cancelButton"
@ -214,7 +217,7 @@
<Button <Button
android:id="@+id/save" android:id="@+id/save"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="60dp"
style="?android:attr/button" style="?android:attr/button"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:text="@string/saveButton" android:text="@string/saveButton"

View File

@ -44,6 +44,7 @@
app:hintTextColor="?attr/hintColor" app:hintTextColor="?attr/hintColor"
app:boxStrokeErrorColor="@color/darkRed" app:boxStrokeErrorColor="@color/darkRed"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:hint="@string/newRepoTintCopy"> android:hint="@string/newRepoTintCopy">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
@ -66,6 +67,7 @@
app:hintTextColor="?attr/hintColor" app:hintTextColor="?attr/hintColor"
app:boxStrokeErrorColor="@color/darkRed" app:boxStrokeErrorColor="@color/darkRed"
android:layout_marginBottom="8dp" android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
android:hint="@string/repoTransferOwnerText"> android:hint="@string/repoTransferOwnerText">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
@ -100,14 +102,14 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:paddingStart="16dp" android:paddingStart="16dp"
android:paddingEnd="16dp" android:paddingEnd="16dp"
android:paddingTop="4dp" android:paddingTop="8dp"
android:paddingBottom="4dp" android:paddingBottom="8dp"
android:orientation="horizontal" > android:orientation="horizontal" >
<Button <Button
android:id="@+id/cancel" android:id="@+id/cancel"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="60dp"
style="?android:attr/button" style="?android:attr/button"
android:layout_alignParentStart="true" android:layout_alignParentStart="true"
android:text="@string/cancelButton" android:text="@string/cancelButton"
@ -117,7 +119,7 @@
<Button <Button
android:id="@+id/transfer" android:id="@+id/transfer"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="60dp"
style="?android:attr/button" style="?android:attr/button"
android:layout_alignParentEnd="true" android:layout_alignParentEnd="true"
android:text="@string/repoTransferText" android:text="@string/repoTransferText"

View File

@ -28,7 +28,7 @@
<Button <Button
android:id="@+id/manageAccounts" android:id="@+id/manageAccounts"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="60dp"
android:layout_margin="16dp" android:layout_margin="16dp"
android:paddingStart="4dp" android:paddingStart="4dp"
android:paddingEnd="4dp" android:paddingEnd="4dp"

View File

@ -3,7 +3,8 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" > android:layout_height="match_parent" >
<ScrollView android:layout_width="match_parent" <androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?attr/primaryBackgroundColor"> android:background="?attr/primaryBackgroundColor">
@ -23,7 +24,7 @@
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
android:baselineAligned="false" android:baselineAligned="false"
android:contentDescription="@string/logo" android:contentDescription="@string/app_name"
android:src="@mipmap/app_logo" /> android:src="@mipmap/app_logo" />
<TextView <TextView
@ -34,134 +35,200 @@
android:textIsSelectable="true" android:textIsSelectable="true"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="bold"
android:textColor="?attr/primaryTextColor" android:textColor="?attr/primaryTextColor"
android:layout_gravity="center_horizontal"/> android:layout_gravity="center_horizontal" />
<!-- version -->
<TextView <TextView
android:id="@+id/appVerBuild" android:id="@+id/appVersionHeader"
android:text="@string/appVerBuild" android:text="@string/appVersion"
android:layout_width="wrap_content" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:textIsSelectable="true" android:layout_marginTop="40dp"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="?attr/primaryTextColor" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="@+id/dividerVersion"
android:background="?attr/dividerColor"
android:layout_marginTop="5dp" android:layout_marginTop="5dp"
android:textSize="16sp" android:layout_marginBottom="5dp" />
android:textColor="?attr/primaryTextColor"
android:layout_gravity="center_horizontal"/>
<TextView
android:id="@+id/appDesc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/appDesc"
android:textIsSelectable="true"
android:layout_marginTop="25dp"
android:textSize="16sp"
android:textColor="?attr/primaryTextColor"
android:padding="5dp"
android:background="?attr/primaryBackgroundColor"
android:layout_gravity="center_horizontal"/>
<TextView
android:id="@+id/giteaVersion"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/commitPage"
android:layout_marginTop="15dp"
android:textSize="16sp"
android:textColor="?attr/primaryTextColor"
android:padding="5dp"
android:background="?attr/primaryBackgroundColor"
android:autoLink="web" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:orientation="vertical"
android:padding="5dp"
android:background="?attr/primaryBackgroundColor">
<TextView
android:id="@+id/donationLink"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/supportText"
android:textColor="@color/lightBlue"
android:textSize="16sp"
android:gravity="start"
android:autoLink="web"
android:visibility="visible"
android:layout_marginBottom="10dp"
android:textColorLink="@color/lightBlue" />
<TextView
android:id="@+id/donationLinkPatreon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/supportTextPatreon"
android:textColor="@color/lightBlue"
android:textSize="16sp"
android:gravity="start"
android:autoLink="web"
android:visibility="visible"
android:layout_marginBottom="10dp"
android:textColorLink="@color/lightBlue" />
<TextView
android:id="@+id/translateLink"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="web"
android:gravity="start"
android:text="@string/translateText"
android:textColor="@color/lightBlue"
android:textColorLink="@color/lightBlue"
android:textSize="16sp"
android:visibility="visible" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:orientation="vertical"
android:padding="5dp"
android:background="?attr/primaryBackgroundColor">
<TextView
android:id="@+id/appWebsite"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/appWebsite"
android:textColor="@color/lightBlue"
android:textSize="16sp"
android:gravity="start"
android:autoLink="web"
android:visibility="visible"
android:layout_marginBottom="10dp"
android:textColorLink="@color/lightBlue" />
<TextView
android:id="@+id/appRepo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/appRepo"
android:textColor="@color/lightBlue"
android:textSize="16sp"
android:gravity="start"
android:autoLink="web"
android:visibility="visible"
android:textColorLink="@color/lightBlue" />
</LinearLayout>
<TextView <TextView
android:id="@+id/appVersion"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="25dp" /> android:layout_height="wrap_content"
android:textIsSelectable="true"
android:textSize="14sp"
android:textColor="?attr/primaryTextColor" />
<!-- version -->
<!-- build -->
<TextView
android:id="@+id/appBuildHeader"
android:text="@string/appBuild"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="?attr/primaryTextColor" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="@+id/dividerBuild"
android:background="?attr/dividerColor"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp" />
<TextView
android:id="@+id/appBuild"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:textSize="14sp"
android:textColor="?attr/primaryTextColor" />
<!-- build -->
<!-- user server version -->
<TextView
android:id="@+id/userServerVersionHeader"
android:text="@string/commitPage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="?attr/primaryTextColor" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="@+id/dividerUserServerVersion"
android:background="?attr/dividerColor"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp" />
<TextView
android:id="@+id/userServerVersion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textIsSelectable="true"
android:textSize="14sp"
android:textColor="?attr/primaryTextColor" />
<!-- user server version -->
<!-- support -->
<TextView
android:id="@+id/supportHeader"
android:text="@string/supportText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="?attr/primaryTextColor" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="@+id/dividerSupport"
android:background="?attr/dividerColor"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp" />
<TextView
android:id="@+id/donationLinkLiberapay"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/supportTextLiberapay"
android:textColor="@color/lightBlue"
android:textSize="14sp"
android:autoLink="web"
android:layout_marginBottom="10dp"
android:textColorLink="@color/lightBlue" />
<TextView
android:id="@+id/donationLinkPatreon"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/supportTextPatreon"
android:textColor="@color/lightBlue"
android:textSize="14sp"
android:autoLink="web"
android:textColorLink="@color/lightBlue" />
<!-- support -->
<!-- translate -->
<TextView
android:id="@+id/translateHeader"
android:text="@string/translateText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="?attr/primaryTextColor" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="@+id/dividerTranslate"
android:background="?attr/dividerColor"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp" />
<TextView
android:id="@+id/translateLink"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="web"
android:gravity="start"
android:text="@string/translateWithCrowdin"
android:textColor="@color/lightBlue"
android:textColorLink="@color/lightBlue"
android:textSize="14sp"
android:visibility="visible" />
<!-- translate -->
<!-- website -->
<TextView
android:id="@+id/websiteHeader"
android:text="@string/websiteText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:textSize="16sp"
android:textStyle="bold"
android:textColor="?attr/primaryTextColor" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:id="@+id/dividerWebsite"
android:background="?attr/dividerColor"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp" />
<TextView
android:id="@+id/appWebsite"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/appWebsiteLink"
android:textColor="@color/lightBlue"
android:textSize="14sp"
android:autoLink="web"
android:layout_marginBottom="24dp"
android:textColorLink="@color/lightBlue" />
<!-- website -->
</LinearLayout> </LinearLayout>
</ScrollView> </androidx.core.widget.NestedScrollView>
</RelativeLayout> </RelativeLayout>

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/exploreFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/primaryBackgroundColor">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Widget.AppCompat.SearchView">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabsExplore"
app:tabMode="fixed"
app:tabTextAppearance="@style/customTabLayout"
android:layout_width="match_parent"
android:background="?attr/primaryBackgroundColor"
app:tabTextColor="?attr/primaryTextColor"
app:tabIndicatorColor="?attr/pagerTabIndicatorColor"
android:layout_height="wrap_content">
<com.google.android.material.tabs.TabItem
android:id="@+id/tabExploreRepositories"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pageTitleRepositories" />
<com.google.android.material.tabs.TabItem
android:id="@+id/tabExploreIssues"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/pageTitleIssues" />
</com.google.android.material.tabs.TabLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/containerExplore"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@ -7,30 +7,58 @@
android:orientation="vertical"> android:orientation="vertical">
<com.google.android.material.progressindicator.ProgressIndicator <com.google.android.material.progressindicator.ProgressIndicator
android:id="@+id/progress_bar" android:id="@+id/loadingMoreView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate"
app:indicatorColor="?attr/progressIndicatorColor" />
<com.google.android.material.progressindicator.ProgressIndicator
android:id="@+id/progressBar"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate" style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate"
app:indicatorColor="?attr/progressIndicatorColor" /> app:indicatorColor="?attr/progressIndicatorColor" />
<EditText <LinearLayout
android:id="@+id/searchKeyword"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="10dp"
android:textSize="14sp"
android:layout_marginStart="10dp" android:layout_marginStart="10dp"
android:layout_marginEnd="10dp" android:layout_marginEnd="10dp"
android:layout_marginTop="20dp" android:layout_marginTop="10dp"
android:layout_marginBottom="20dp" android:layout_marginBottom="10dp">
android:inputType="text"
android:background="@drawable/shape_inputs" <com.google.android.material.textfield.TextInputLayout
android:textColor="?attr/inputTextColor" android:id="@+id/searchKeywordLayout"
android:textColorHint="?attr/hintColor" android:layout_width="match_parent"
android:hint="@string/exploreTextBoxHint" android:layout_height="wrap_content"
android:textColorHighlight="?attr/primaryTextColor" app:boxBackgroundColor="?attr/inputBackgroundColor"
android:imeOptions="actionSend" android:textColorHint="?attr/hintColor"
android:autofillHints="@string/exploreTextBoxHint" /> app:hintTextColor="?attr/hintColor"
app:boxStrokeErrorColor="@color/darkRed"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:startIconDrawable="@drawable/ic_search"
app:startIconTint="?attr/iconsColor"
app:endIconMode="clear_text"
app:endIconTint="?attr/iconsColor"
android:hint="@string/exploreTextBoxHint">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/searchKeyword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/inputTextColor"
android:textColorHighlight="?attr/hintColor"
android:textColorHint="?attr/hintColor"
android:imeOptions="actionSend"
android:inputType="text"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<TextView <TextView
android:id="@+id/noData" android:id="@+id/noData"
@ -43,11 +71,18 @@
android:textSize="20sp" android:textSize="20sp"
android:visibility="gone" /> android:visibility="gone" />
<androidx.recyclerview.widget.RecyclerView <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/recyclerViewReposSearch" android:id="@+id/pullToRefresh"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent">
android:background="?attr/primaryBackgroundColor"
android:scrollbars="vertical" /> <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerViewReposSearch"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/primaryBackgroundColor"
android:scrollbars="vertical" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</LinearLayout> </LinearLayout>

View File

@ -272,7 +272,7 @@
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:contentDescription="@string/infoTabRepoWebsite" android:contentDescription="@string/websiteText"
app:srcCompat="@drawable/ic_link" /> app:srcCompat="@drawable/ic_link" />
<LinearLayout <LinearLayout

View File

@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="?attr/primaryBackgroundColor"
android:orientation="vertical">
<com.google.android.material.progressindicator.ProgressIndicator
android:id="@+id/loadingMoreView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate"
app:indicatorColor="?attr/progressIndicatorColor" />
<com.google.android.material.progressindicator.ProgressIndicator
android:id="@+id/progressBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate"
app:indicatorColor="?attr/progressIndicatorColor" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/searchKeywordLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:boxBackgroundColor="?attr/inputBackgroundColor"
android:textColorHint="?attr/hintColor"
app:hintTextColor="?attr/hintColor"
app:boxStrokeErrorColor="@color/darkRed"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:startIconDrawable="@drawable/ic_search"
app:startIconTint="?attr/iconsColor"
app:endIconMode="clear_text"
app:endIconTint="?attr/iconsColor"
android:hint="@string/navSearchIssuesPulls">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/searchKeyword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?attr/inputTextColor"
android:textColorHighlight="?attr/hintColor"
android:textColorHint="?attr/hintColor"
android:imeOptions="actionSend"
android:inputType="text"
android:textSize="16sp" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<TextView
android:id="@+id/noData"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="15dp"
android:gravity="center"
android:text="@string/noDataFound"
android:textColor="?attr/primaryTextColor"
android:textSize="20sp"
android:visibility="gone" />
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/pullToRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerViewSearchIssues"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/primaryBackgroundColor"
android:scrollbars="vertical" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</LinearLayout>

View File

@ -5,7 +5,7 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?attr/primaryBackgroundColor"> android:background="?attr/primaryBackgroundColor">
<ScrollView <androidx.core.widget.NestedScrollView
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?attr/primaryBackgroundColor"> android:background="?attr/primaryBackgroundColor">
@ -208,8 +208,72 @@
</LinearLayout> </LinearLayout>
<LinearLayout
android:id="@+id/rateAppFrame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="25dp">
<TextView
android:id="@+id/rateApp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_like"
android:drawablePadding="24dp"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:text="@string/navRate"
android:textColor="?attr/primaryTextColor"
android:textSize="16sp" />
<TextView
android:id="@+id/rateAppHintText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/rateAppHintText"
android:paddingStart="60dp"
android:paddingEnd="12dp"
android:textColor="?attr/primaryTextColor"
android:textSize="12sp" />
</LinearLayout>
<LinearLayout
android:id="@+id/aboutAppFrame"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="25dp">
<TextView
android:id="@+id/aboutApp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableStart="@drawable/ic_info"
android:drawablePadding="24dp"
android:paddingStart="12dp"
android:paddingEnd="12dp"
android:text="@string/navAbout"
android:textColor="?attr/primaryTextColor"
android:textSize="16sp" />
<TextView
android:id="@+id/aboutAppHintText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/aboutAppHintText"
android:paddingStart="60dp"
android:paddingEnd="12dp"
android:textColor="?attr/primaryTextColor"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</ScrollView> </androidx.core.widget.NestedScrollView>
</RelativeLayout> </RelativeLayout>

View File

@ -12,6 +12,12 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="invisible" /> android:visibility="invisible" />
<TextView
android:id="@+id/repoFullName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible" />
<RelativeLayout <RelativeLayout
android:id="@+id/mainFrame" android:id="@+id/mainFrame"
android:layout_width="match_parent" android:layout_width="match_parent"

View File

@ -46,7 +46,7 @@
android:gravity="end" android:gravity="end"
android:paddingEnd="25dp" android:paddingEnd="25dp"
android:paddingStart="15dp" android:paddingStart="15dp"
android:paddingTop="10dp" android:paddingTop="6dp"
android:orientation="horizontal"> android:orientation="horizontal">
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView

View File

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<ImageView <ImageView
android:id="@+id/userAccountAvatar" android:id="@+id/userAccountAvatar"
android:layout_width="32dp" android:layout_width="36dp"
android:layout_height="32dp" android:layout_height="36dp"
android:paddingStart="4dp"
android:paddingEnd="4dp"
android:contentDescription="@string/generalImgContentText" android:contentDescription="@string/generalImgContentText"
xmlns:android="http://schemas.android.com/apk/res/android" /> xmlns:android="http://schemas.android.com/apk/res/android" />

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:showIn="navigation_view"> tools:showIn="navigation_view">
<group android:checkableBehavior="single" <group android:checkableBehavior="single"
@ -26,6 +27,7 @@
android:id="@+id/nav_notifications" android:id="@+id/nav_notifications"
android:icon="@drawable/ic_notifications" android:icon="@drawable/ic_notifications"
android:title="@string/pageTitleNotifications" android:title="@string/pageTitleNotifications"
app:actionLayout="@layout/badge_notification"
android:visible="false" /> android:visible="false" />
<item android:id="@+id/nav_explore" <item android:id="@+id/nav_explore"
@ -54,19 +56,6 @@
android:icon="@drawable/ic_settings" android:icon="@drawable/ic_settings"
android:title="@string/navSettings" /> android:title="@string/navSettings" />
<item android:id="@+id/nav_about"
android:icon="@drawable/ic_info"
android:title="@string/navAbout" />
</group>
<item android:id="@+id/nav_rate_app"
android:icon="@drawable/ic_like"
android:title="@string/navRate" />
<group android:checkableBehavior="single"
android:id="@+id/nav_extra">
<item android:id="@+id/nav_logout" <item android:id="@+id/nav_logout"
android:icon="@drawable/ic_logout" android:icon="@drawable/ic_logout"
android:title="@string/navLogout" /> android:title="@string/navLogout" />

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/app_logo_background"/> <background android:drawable="@drawable/app_logo_background"/>
<foreground android:drawable="@drawable/app_logo_foreground"/> <foreground android:drawable="@mipmap/app_logo_foreground"/>
</adaptive-icon> </adaptive-icon>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/app_logo_background"/> <background android:drawable="@drawable/app_logo_background"/>
<foreground android:drawable="@drawable/app_logo_foreground"/> <foreground android:drawable="@mipmap/app_logo_foreground"/>
</adaptive-icon> </adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1020 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB

View File

@ -12,6 +12,7 @@
<string name="navLogout">الخروج</string> <string name="navLogout">الخروج</string>
<string name="navExplore">استكشف</string> <string name="navExplore">استكشف</string>
<string name="navAdministration">Administration</string> <string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">عن التطبيق</string> <string name="pageTitleAbout">عن التطبيق</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">استكشف</string> <string name="pageTitleExplore">استكشف</string>
<string name="pageTitleAdministration">Gitea Administration</string> <string name="pageTitleAdministration">Gitea Administration</string>
<string name="pageTitleUserAccounts">Manage Accounts</string> <string name="pageTitleUserAccounts">Manage Accounts</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Demo repo</string> <string name="repoName">Demo repo</string>
<string name="repoFullname">Repo with ORG</string> <string name="repoFullname">Repo with ORG</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">Open Navigation Drawer</string> <string name="navigation_drawer_open">Open Navigation Drawer</string>
<string name="navigation_drawer_close">Close Navigation Drawer</string> <string name="navigation_drawer_close">Close Navigation Drawer</string>
<string name="logo">لِج إلى Gitea</string> <string name="logo">لِج إلى Gitea</string>
<string name="protocol">Protocol</string>
<string name="urlInfoTooltip">1- Choose the correct protocol(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="urlInfoTooltip">1- Choose the correct protocol(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="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="protocolError">It is not recommended to use HTTP protocol unless you are testing on local network</string>
@ -69,6 +72,7 @@
<string name="emptyFieldURL">Instance URL is required</string> <string name="emptyFieldURL">Instance URL is required</string>
<string name="emptyFieldUsername">اسم المستخدم لازم</string> <string name="emptyFieldUsername">اسم المستخدم لازم</string>
<string name="emptyFieldPassword">الكلمة السرية لازمة</string> <string name="emptyFieldPassword">الكلمة السرية لازمة</string>
<string name="protocolEmptyError">Protocol is required</string>
<string name="checkNetConnection">Cannot access network, please check your Internet connection</string> <string name="checkNetConnection">Cannot access network, please check your Internet connection</string>
<string name="netConnectionIsBack">Yay, We have Internet connection!</string> <string name="netConnectionIsBack">Yay, We have Internet connection!</string>
<string name="repoNameErrorEmpty">اسم المستودع فارغ</string> <string name="repoNameErrorEmpty">اسم المستودع فارغ</string>
@ -106,7 +110,6 @@
<string name="tab_text_collaborators">المتعاونون</string> <string name="tab_text_collaborators">المتعاونون</string>
<string name="tabPullRequests">Pull Requests</string> <string name="tabPullRequests">Pull Requests</string>
<string name="noDataIssueTab">No issues found</string> <string name="noDataIssueTab">No issues found</string>
<string name="infoTabRepoWebsite">موقع الويب</string>
<string name="infoTabRepoSize">الحجم</string> <string name="infoTabRepoSize">الحجم</string>
<string name="infoTabRepoDefaultBranch">الفرع المبدئيّ</string> <string name="infoTabRepoDefaultBranch">الفرع المبدئيّ</string>
<string name="infoTabRepoSshUrl">عنوان SSH</string> <string name="infoTabRepoSshUrl">عنوان SSH</string>
@ -419,7 +422,6 @@
<string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string> <string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string>
<string name="genericCopyUrl">Copy URL</string> <string name="genericCopyUrl">Copy URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">ترجم GitNex على كراودين</string>
<string name="exploreTextBoxHint">Explore repositories</string> <string name="exploreTextBoxHint">Explore repositories</string>
<string name="starRepository">Star Repository</string> <string name="starRepository">Star Repository</string>
<string name="unStarRepository">Unstar Repository</string> <string name="unStarRepository">Unstar Repository</string>
@ -504,7 +506,7 @@
<string name="settingsEnableReportsText">Enable Crash Reports</string> <string name="settingsEnableReportsText">Enable Crash Reports</string>
<string name="crashTitle">GitNex has stopped :(</string> <string name="crashTitle">GitNex has stopped :(</string>
<string name="setCrashReports">Crash reports</string> <string name="setCrashReports">Crash reports</string>
<string name="crashMessage">You can tap the OK button to send the crash report by email. It will help to fix it :)\n\nYou can also add additional content in the email. Thank you!</string> <string name="crashMessage">It is encouraged to open an issue at the project repository with how to reproduce this bug. It is easier to debug and fix the problem that way.\n\nTap the OK button to send the crash report by email instead. Additional content could be added in the email.\nThank you!</string>
<string name="forceLogoutDialogHeader">Please sign in again</string> <string name="forceLogoutDialogHeader">Please sign in again</string>
<string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string> <string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string>
<string name="deleteAllDrafts">Delete All Drafts</string> <string name="deleteAllDrafts">Delete All Drafts</string>
@ -518,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string> <string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</string> <string name="languagesHintText">Languages</string>
<string name="reportsHintText">Crash reports</string> <string name="reportsHintText">Crash reports</string>
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
<string name="aboutAppHintText">App version, build, user gitea version</string>
<string name="archivedRepository">Archived</string> <string name="archivedRepository">Archived</string>
<string name="accountDeletedMessage">Account deleted successfully</string> <string name="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string> <string name="removeAccountPopupTitle">Remove Account</string>
@ -560,4 +564,26 @@
<string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string> <string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string>
<string name="repoSettingsDeleteError">Repository name does not match</string> <string name="repoSettingsDeleteError">Repository name does not match</string>
<string name="repoDeletionSuccess">Repository deleted successfully</string> <string name="repoDeletionSuccess">Repository deleted successfully</string>
<string name="repoSettingsTransferOwnership">Transfer Ownership</string>
<string name="repoSettingsTransferOwnershipHint">Transfer this repository to a user or to an organization for which you have administrator rights</string>
<string name="repoSettingsTransferOwnershipDescription">Things to know before transfer:\n\n- You will lose access to the repository if you transfer it to an individual user.\n- You will keep access to the repository if you transfer it to an organization that you (co-)own.\n\nEnter the repository name as confirmation</string>
<string name="repoTransferText">Perform Transfer</string>
<string name="repoTransferOwnerText">New Owner</string>
<string name="repoTransferSuccess">Repository transferred successfully</string>
<string name="repoTransferOwnerError">New owner is required</string>
<string name="repoTransferError">There is a problem with the owner name. Make sure that the new owner exists</string>
<string name="exploreFilterDialogTitle">Filter Repositories</string>
<string name="exploreFilterIncludeTopic">Search ONLY in Topic</string>
<string name="exploreFilterIncludeDesc">Search in Description</string>
<string name="exploreFilterIncludeArchive">Only Archived Repositories</string>
<string name="exploreFilterIncludePrivate">Only Private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Search in Template Repositories</string>
<string name="mergeIntoBranch">Merge Into</string>
<string name="pullFromBranch">Pull From</string>
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
<string name="mergeIntoError">Merge into branch is required</string>
<string name="pullFromError">Pull from branch is required</string>
<string name="titleError">Title is required</string>
<string name="prCreateSuccess">Pull Request created successfully</string>
<string name="prAlreadyExists">A pull request between these branches already exists</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Odhlásit se</string> <string name="navLogout">Odhlásit se</string>
<string name="navExplore">Prozkoumat</string> <string name="navExplore">Prozkoumat</string>
<string name="navAdministration">Administrace</string> <string name="navAdministration">Administrace</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">O aplikaci</string> <string name="pageTitleAbout">O aplikaci</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">Prozkoumat</string> <string name="pageTitleExplore">Prozkoumat</string>
<string name="pageTitleAdministration">Administrace Gitea</string> <string name="pageTitleAdministration">Administrace Gitea</string>
<string name="pageTitleUserAccounts">Správa účtů</string> <string name="pageTitleUserAccounts">Správa účtů</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Demo repozitář</string> <string name="repoName">Demo repozitář</string>
<string name="repoFullname">Repo with ORG</string> <string name="repoFullname">Repo with ORG</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">Otevřít navigační menu</string> <string name="navigation_drawer_open">Otevřít navigační menu</string>
<string name="navigation_drawer_close">Zavřít navigační menu</string> <string name="navigation_drawer_close">Zavřít navigační menu</string>
<string name="logo">Přihlásit se do Gitea</string> <string name="logo">Přihlásit se do Gitea</string>
<string name="protocol">Protocol</string>
<string name="urlInfoTooltip">1- Vyberte správný protokol (https nebo http). \n2- zadejte URL Gitea např.: try.gitea.io. \n3- Pokud jste pro svůj účet povolili 2FA, zadejte kód do pole OTP kód. \n4- Pro základní ověření HTTP použijte USERNAME@DOMAIN.COM v poli URL.</string> <string name="urlInfoTooltip">1- Vyberte správný protokol (https nebo http). \n2- zadejte URL Gitea např.: try.gitea.io. \n3- Pokud jste pro svůj účet povolili 2FA, zadejte kód do pole OTP kód. \n4- Pro základní ověření HTTP použijte USERNAME@DOMAIN.COM v poli URL.</string>
<string name="malformedUrl">Nelze se připojit k serveru. Zkontrolujte prosím URL nebo port pro případné chyby</string> <string name="malformedUrl">Nelze se připojit k serveru. Zkontrolujte prosím URL nebo port pro případné chyby</string>
<string name="protocolError">Není doporučeno používat HTTP protokol, pokud netestujete na místní síti</string> <string name="protocolError">Není doporučeno používat HTTP protokol, pokud netestujete na místní síti</string>
@ -69,6 +72,7 @@
<string name="emptyFieldURL">Je vyžadována URL instance</string> <string name="emptyFieldURL">Je vyžadována URL instance</string>
<string name="emptyFieldUsername">Uživatelské jméno je vyžadováno</string> <string name="emptyFieldUsername">Uživatelské jméno je vyžadováno</string>
<string name="emptyFieldPassword">Heslo je vyžadováno</string> <string name="emptyFieldPassword">Heslo je vyžadováno</string>
<string name="protocolEmptyError">Protocol is required</string>
<string name="checkNetConnection">Nelze se přihlásit, zkontrolujte prosím vaše připojení k internetu</string> <string name="checkNetConnection">Nelze se přihlásit, zkontrolujte prosím vaše připojení k internetu</string>
<string name="netConnectionIsBack">Ano, máme připojení k internetu!</string> <string name="netConnectionIsBack">Ano, máme připojení k internetu!</string>
<string name="repoNameErrorEmpty">Název repozitáře není vyplněn</string> <string name="repoNameErrorEmpty">Název repozitáře není vyplněn</string>
@ -106,7 +110,6 @@
<string name="tab_text_collaborators">Spolupracovníci</string> <string name="tab_text_collaborators">Spolupracovníci</string>
<string name="tabPullRequests">Pull Requesty</string> <string name="tabPullRequests">Pull Requesty</string>
<string name="noDataIssueTab">Nebyla nalezena žádná issue</string> <string name="noDataIssueTab">Nebyla nalezena žádná issue</string>
<string name="infoTabRepoWebsite">Webová stránka</string>
<string name="infoTabRepoSize">Velikost</string> <string name="infoTabRepoSize">Velikost</string>
<string name="infoTabRepoDefaultBranch">Výchozí větev</string> <string name="infoTabRepoDefaultBranch">Výchozí větev</string>
<string name="infoTabRepoSshUrl">SSH URL</string> <string name="infoTabRepoSshUrl">SSH URL</string>
@ -419,7 +422,6 @@
<string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string> <string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string>
<string name="genericCopyUrl">Copy URL</string> <string name="genericCopyUrl">Copy URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">Translate GitNex with Crowdin</string>
<string name="exploreTextBoxHint">Explore repositories</string> <string name="exploreTextBoxHint">Explore repositories</string>
<string name="starRepository">Star Repository</string> <string name="starRepository">Star Repository</string>
<string name="unStarRepository">Unstar Repository</string> <string name="unStarRepository">Unstar Repository</string>
@ -504,7 +506,7 @@
<string name="settingsEnableReportsText">Enable Crash Reports</string> <string name="settingsEnableReportsText">Enable Crash Reports</string>
<string name="crashTitle">GitNex has stopped :(</string> <string name="crashTitle">GitNex has stopped :(</string>
<string name="setCrashReports">Crash reports</string> <string name="setCrashReports">Crash reports</string>
<string name="crashMessage">You can tap the OK button to send the crash report by email. It will help to fix it :)\n\nYou can also add additional content in the email. Thank you!</string> <string name="crashMessage">It is encouraged to open an issue at the project repository with how to reproduce this bug. It is easier to debug and fix the problem that way.\n\nTap the OK button to send the crash report by email instead. Additional content could be added in the email.\nThank you!</string>
<string name="forceLogoutDialogHeader">Please sign in again</string> <string name="forceLogoutDialogHeader">Please sign in again</string>
<string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string> <string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string>
<string name="deleteAllDrafts">Delete All Drafts</string> <string name="deleteAllDrafts">Delete All Drafts</string>
@ -518,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string> <string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</string> <string name="languagesHintText">Languages</string>
<string name="reportsHintText">Crash reports</string> <string name="reportsHintText">Crash reports</string>
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
<string name="aboutAppHintText">App version, build, user gitea version</string>
<string name="archivedRepository">Archived</string> <string name="archivedRepository">Archived</string>
<string name="accountDeletedMessage">Account deleted successfully</string> <string name="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string> <string name="removeAccountPopupTitle">Remove Account</string>
@ -560,4 +564,26 @@
<string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string> <string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string>
<string name="repoSettingsDeleteError">Repository name does not match</string> <string name="repoSettingsDeleteError">Repository name does not match</string>
<string name="repoDeletionSuccess">Repository deleted successfully</string> <string name="repoDeletionSuccess">Repository deleted successfully</string>
<string name="repoSettingsTransferOwnership">Transfer Ownership</string>
<string name="repoSettingsTransferOwnershipHint">Transfer this repository to a user or to an organization for which you have administrator rights</string>
<string name="repoSettingsTransferOwnershipDescription">Things to know before transfer:\n\n- You will lose access to the repository if you transfer it to an individual user.\n- You will keep access to the repository if you transfer it to an organization that you (co-)own.\n\nEnter the repository name as confirmation</string>
<string name="repoTransferText">Perform Transfer</string>
<string name="repoTransferOwnerText">New Owner</string>
<string name="repoTransferSuccess">Repository transferred successfully</string>
<string name="repoTransferOwnerError">New owner is required</string>
<string name="repoTransferError">There is a problem with the owner name. Make sure that the new owner exists</string>
<string name="exploreFilterDialogTitle">Filter Repositories</string>
<string name="exploreFilterIncludeTopic">Search ONLY in Topic</string>
<string name="exploreFilterIncludeDesc">Search in Description</string>
<string name="exploreFilterIncludeArchive">Only Archived Repositories</string>
<string name="exploreFilterIncludePrivate">Only Private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Search in Template Repositories</string>
<string name="mergeIntoBranch">Merge Into</string>
<string name="pullFromBranch">Pull From</string>
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
<string name="mergeIntoError">Merge into branch is required</string>
<string name="pullFromError">Pull from branch is required</string>
<string name="titleError">Title is required</string>
<string name="prCreateSuccess">Pull Request created successfully</string>
<string name="prAlreadyExists">A pull request between these branches already exists</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Ausloggen</string> <string name="navLogout">Ausloggen</string>
<string name="navExplore">Erkunden</string> <string name="navExplore">Erkunden</string>
<string name="navAdministration">Administration</string> <string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Issues Suche</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">Über</string> <string name="pageTitleAbout">Über</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">Erkunden</string> <string name="pageTitleExplore">Erkunden</string>
<string name="pageTitleAdministration">Gitea-Administration</string> <string name="pageTitleAdministration">Gitea-Administration</string>
<string name="pageTitleUserAccounts">Konten verwalten</string> <string name="pageTitleUserAccounts">Konten verwalten</string>
<string name="pageTitleNewPullRequest">Neuer Pull-Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Demo Repo</string> <string name="repoName">Demo Repo</string>
<string name="repoFullname">Repo mit ORG</string> <string name="repoFullname">Repo mit ORG</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">Navigationsleiste öffnen</string> <string name="navigation_drawer_open">Navigationsleiste öffnen</string>
<string name="navigation_drawer_close">Navigationsleiste schließen</string> <string name="navigation_drawer_close">Navigationsleiste schließen</string>
<string name="logo">In Gitea anmelden</string> <string name="logo">In Gitea anmelden</string>
<string name="protocol">Protokoll</string>
<string name="urlInfoTooltip">1- Wähle das richtige Protokoll (https oder http) \ N2- Gebe die Gitea-URL ein, z.B. try.gitea.io \n3- Falls du 2FA aktiviert hast, gib den Code in das OTP-Code Feld ein. \n4- Für HTTP basic auth nutze BENUTZERNAME@DOMAIN.COM im URL Feld</string> <string name="urlInfoTooltip">1- Wähle das richtige Protokoll (https oder http) \ N2- Gebe die Gitea-URL ein, z.B. try.gitea.io \n3- Falls du 2FA aktiviert hast, gib den Code in das OTP-Code Feld ein. \n4- Für HTTP basic auth nutze BENUTZERNAME@DOMAIN.COM im URL Feld</string>
<string name="malformedUrl">Konnte keine Verbindung zum Host herstellen. Bitte überprüfe die URL oder Port auf irgendwelche Fehler</string> <string name="malformedUrl">Konnte keine Verbindung zum Host herstellen. Bitte überprüfe die URL oder Port auf irgendwelche Fehler</string>
<string name="protocolError">Es wird nicht empfohlen, das HTTP-Protokoll zu verwenden, es sei denn, du testest in einem lokalen Netzwerk</string> <string name="protocolError">Es wird nicht empfohlen, das HTTP-Protokoll zu verwenden, es sei denn, du testest in einem lokalen Netzwerk</string>
@ -69,6 +72,7 @@
<string name="emptyFieldURL">Instanzen-URL ist erforderlich</string> <string name="emptyFieldURL">Instanzen-URL ist erforderlich</string>
<string name="emptyFieldUsername">Benutzername ist erforderlich</string> <string name="emptyFieldUsername">Benutzername ist erforderlich</string>
<string name="emptyFieldPassword">Passwort ist erforderlich</string> <string name="emptyFieldPassword">Passwort ist erforderlich</string>
<string name="protocolEmptyError">Protokoll ist erforderlich</string>
<string name="checkNetConnection">Kann nicht auf das Netzwerk zugreifen. Bitte überprüfe die Internetverbindung</string> <string name="checkNetConnection">Kann nicht auf das Netzwerk zugreifen. Bitte überprüfe die Internetverbindung</string>
<string name="netConnectionIsBack">Juhu, wir haben eine Internetverbindung!</string> <string name="netConnectionIsBack">Juhu, wir haben eine Internetverbindung!</string>
<string name="repoNameErrorEmpty">Der Repository Name ist leer.</string> <string name="repoNameErrorEmpty">Der Repository Name ist leer.</string>
@ -106,7 +110,6 @@
<string name="tab_text_collaborators">Mitarbeiter</string> <string name="tab_text_collaborators">Mitarbeiter</string>
<string name="tabPullRequests">Pull Requests</string> <string name="tabPullRequests">Pull Requests</string>
<string name="noDataIssueTab">Keine Issues gefunden!</string> <string name="noDataIssueTab">Keine Issues gefunden!</string>
<string name="infoTabRepoWebsite">Webseite</string>
<string name="infoTabRepoSize">Größe</string> <string name="infoTabRepoSize">Größe</string>
<string name="infoTabRepoDefaultBranch">Standard Branch</string> <string name="infoTabRepoDefaultBranch">Standard Branch</string>
<string name="infoTabRepoSshUrl">SSH Link</string> <string name="infoTabRepoSshUrl">SSH Link</string>
@ -419,7 +422,6 @@
<string name="genericServerResponseError">Wir können den Server im Moment nicht erreichen. Bitte überprüfen Sie Ihren Serverstatus und versuchen Sie es erneut</string> <string name="genericServerResponseError">Wir können den Server im Moment nicht erreichen. Bitte überprüfen Sie Ihren Serverstatus und versuchen Sie es erneut</string>
<string name="genericCopyUrl">Link kopieren</string> <string name="genericCopyUrl">Link kopieren</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">GitNex mit Crowdin übersetzen</string>
<string name="exploreTextBoxHint">Repositories entdecken</string> <string name="exploreTextBoxHint">Repositories entdecken</string>
<string name="starRepository">Repository favorisieren</string> <string name="starRepository">Repository favorisieren</string>
<string name="unStarRepository">Repository nicht mehr favorisieren</string> <string name="unStarRepository">Repository nicht mehr favorisieren</string>
@ -504,7 +506,7 @@
<string name="settingsEnableReportsText">Absturzberichte aktivieren</string> <string name="settingsEnableReportsText">Absturzberichte aktivieren</string>
<string name="crashTitle">GitNex hat gestoppt :(</string> <string name="crashTitle">GitNex hat gestoppt :(</string>
<string name="setCrashReports">Absturzberichte</string> <string name="setCrashReports">Absturzberichte</string>
<string name="crashMessage">Klicke auf OK, um den Absturzbericht per E-Mail zu senden. Es wird helfen, diesen zu beheben :)\n\nDu könntest auch zusätzliche Infos in der E-Mail angeben. Danke für deine Hilfe!</string> <string name="crashMessage">Es wird empfohlen, ein Issue im Projekt zu öffnen, wie man diesen Fehler reproduzieren kann. Es ist einfacher, das Problem so zu debuggen und zu beheben.\n\nTippen Sie auf OK, um stattdessen den Absturzbericht per E-Mail zu senden. Zusätzliche Inhalte konnten in der E-Mail hinzugefügt werden.\nVielen Dank!</string>
<string name="forceLogoutDialogHeader">Bitte melden Sie sich erneut an</string> <string name="forceLogoutDialogHeader">Bitte melden Sie sich erneut an</string>
<string name="forceLogoutDialogDescription">Aufgrund einiger wichtiger Änderungen in Bezug auf das interne Funktionieren der App müssen Sie sich erneut anmelden. Diese Änderungen ermöglichen es uns, die App in Zukunft flexibler zu gestalten.\n\nVielen Dank für Ihre Geduld und Entschuldigung für die Unannehmlichkeiten.</string> <string name="forceLogoutDialogDescription">Aufgrund einiger wichtiger Änderungen in Bezug auf das interne Funktionieren der App müssen Sie sich erneut anmelden. Diese Änderungen ermöglichen es uns, die App in Zukunft flexibler zu gestalten.\n\nVielen Dank für Ihre Geduld und Entschuldigung für die Unannehmlichkeiten.</string>
<string name="deleteAllDrafts">Alle Entwürfe löschen</string> <string name="deleteAllDrafts">Alle Entwürfe löschen</string>
@ -518,6 +520,8 @@
<string name="securityHintText">SSL-Zertifikate, Cache, Abfrageverzögerung</string> <string name="securityHintText">SSL-Zertifikate, Cache, Abfrageverzögerung</string>
<string name="languagesHintText">Sprachen</string> <string name="languagesHintText">Sprachen</string>
<string name="reportsHintText">Absturzberichte</string> <string name="reportsHintText">Absturzberichte</string>
<string name="rateAppHintText">Wenn dir GitNex gefällt, hinterlassen Feedback</string>
<string name="aboutAppHintText">App-Version, Build, Gitea Version</string>
<string name="archivedRepository">Archiviert</string> <string name="archivedRepository">Archiviert</string>
<string name="accountDeletedMessage">Konto erfolgreich gelöscht</string> <string name="accountDeletedMessage">Konto erfolgreich gelöscht</string>
<string name="removeAccountPopupTitle">Konto entfernen</string> <string name="removeAccountPopupTitle">Konto entfernen</string>
@ -560,4 +564,26 @@
<string name="repoSettingsDeleteDescription">Vor dem Löschen zu erfahrende Dinge:\n\n- Dieser Vorgang kann NICHT rückgängig gemacht werden.\n- Dieser Vorgang wird das Projektarchiv dauerhaft löschen, einschließlich Code, Issues, Kommentare, Wiki-Daten und Einstellungen.\n\nGib den Repository-Namen als Bestätigung ein</string> <string name="repoSettingsDeleteDescription">Vor dem Löschen zu erfahrende Dinge:\n\n- Dieser Vorgang kann NICHT rückgängig gemacht werden.\n- Dieser Vorgang wird das Projektarchiv dauerhaft löschen, einschließlich Code, Issues, Kommentare, Wiki-Daten und Einstellungen.\n\nGib den Repository-Namen als Bestätigung ein</string>
<string name="repoSettingsDeleteError">Repository-Name stimmt nicht überein</string> <string name="repoSettingsDeleteError">Repository-Name stimmt nicht überein</string>
<string name="repoDeletionSuccess">Repository erfolgreich gelöscht</string> <string name="repoDeletionSuccess">Repository erfolgreich gelöscht</string>
<string name="repoSettingsTransferOwnership">Besitz übertragen</string>
<string name="repoSettingsTransferOwnershipHint">Dieses Repository an einen Benutzer oder eine Organisation übertragen, für die Sie Admin Rechte haben</string>
<string name="repoSettingsTransferOwnershipDescription">Dinge, die vor der Übertragung bekannt sind:\n\n- Du verlierst den Zugriff auf das Projekt, wenn es an einen Benutzer übertragen wird.\n- Du behälst den Zugriff auf das Projekt, wenn es an eine Organisation übertragen wird, die du (mit-)besitzt.\n\nGeben den Repository-Namen als Bestätigung ein</string>
<string name="repoTransferText">Übertragung durchführen</string>
<string name="repoTransferOwnerText">Neuer Besitzer</string>
<string name="repoTransferSuccess">Repository erfolgreich übertragen</string>
<string name="repoTransferOwnerError">Neuer Besitzer ist erforderlich</string>
<string name="repoTransferError">Es gibt ein Problem mit dem Besitzer Namen. Stelle sicher, dass der neue Besitzer existiert</string>
<string name="exploreFilterDialogTitle">Repositories filtern</string>
<string name="exploreFilterIncludeTopic">NUR in Themen suchen</string>
<string name="exploreFilterIncludeDesc">In Beschreibung suchen</string>
<string name="exploreFilterIncludeArchive">Nur archivierte Repositories</string>
<string name="exploreFilterIncludePrivate">Nur private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Zeige auch Template-Repositories</string>
<string name="mergeIntoBranch">Zusammenführen in</string>
<string name="pullFromBranch">Pull-Request von</string>
<string name="sameBranchesError">Diese Branches sind gleich. Es besteht keine Notwendigkeit, einen Pull-Request zu erstellen</string>
<string name="mergeIntoError">Merge in Branch ist erforderlich</string>
<string name="pullFromError">Pull-Request von Branch ist erforderlich</string>
<string name="titleError">Titel wird benötigt</string>
<string name="prCreateSuccess">Pull-Request erfolgreich erstellt</string>
<string name="prAlreadyExists">Zwischen diesen Branches existiert bereits ein Pull-Request</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Cerrar sesión</string> <string name="navLogout">Cerrar sesión</string>
<string name="navExplore">Explorar</string> <string name="navExplore">Explorar</string>
<string name="navAdministration">Administration</string> <string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">Sobre</string> <string name="pageTitleAbout">Sobre</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">Explorar</string> <string name="pageTitleExplore">Explorar</string>
<string name="pageTitleAdministration">Gitea Administration</string> <string name="pageTitleAdministration">Gitea Administration</string>
<string name="pageTitleUserAccounts">Manage Accounts</string> <string name="pageTitleUserAccounts">Manage Accounts</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Repo Demo</string> <string name="repoName">Repo Demo</string>
<string name="repoFullname">Repo con ORG</string> <string name="repoFullname">Repo con ORG</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">Abrir cajón de navegación</string> <string name="navigation_drawer_open">Abrir cajón de navegación</string>
<string name="navigation_drawer_close">Cerrar cajón de navegación</string> <string name="navigation_drawer_close">Cerrar cajón de navegación</string>
<string name="logo">Iniciar sesión en Gitea</string> <string name="logo">Iniciar sesión en Gitea</string>
<string name="protocol">Protocol</string>
<string name="urlInfoTooltip">1- Elige el protocolo correcto (https o http).\n2- Introduce Gitea URL p.e: try.gitea.io.\n3- Si has activado 2FA, introduce el código OTP.\n4- Para HTTP Basic Auth usa USUARIO@DOMAIN.COM en la caja de texto URL.</string> <string name="urlInfoTooltip">1- Elige el protocolo correcto (https o http).\n2- Introduce Gitea URL p.e: try.gitea.io.\n3- Si has activado 2FA, introduce el código OTP.\n4- Para HTTP Basic Auth usa USUARIO@DOMAIN.COM en la caja de texto URL.</string>
<string name="malformedUrl">Couldn\'t connect to host. Please check your URL or port for any errors</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="protocolError">It is not recommended to use HTTP protocol unless you are testing on local network</string>
@ -69,6 +72,7 @@
<string name="emptyFieldURL">Se requiere la URL de la instancia</string> <string name="emptyFieldURL">Se requiere la URL de la instancia</string>
<string name="emptyFieldUsername">Se requiere el usuario</string> <string name="emptyFieldUsername">Se requiere el usuario</string>
<string name="emptyFieldPassword">Se requiere la contraseña</string> <string name="emptyFieldPassword">Se requiere la contraseña</string>
<string name="protocolEmptyError">Protocol is required</string>
<string name="checkNetConnection">No se puede acceder a la red, por favor comprueba tu conexión a internet</string> <string name="checkNetConnection">No se puede acceder a la red, por favor comprueba tu conexión a internet</string>
<string name="netConnectionIsBack">Yay, We have Internet connection!</string> <string name="netConnectionIsBack">Yay, We have Internet connection!</string>
<string name="repoNameErrorEmpty">El nombre del repositorio está vacío</string> <string name="repoNameErrorEmpty">El nombre del repositorio está vacío</string>
@ -106,7 +110,6 @@
<string name="tab_text_collaborators">Colaboradores</string> <string name="tab_text_collaborators">Colaboradores</string>
<string name="tabPullRequests">Peticiones pull</string> <string name="tabPullRequests">Peticiones pull</string>
<string name="noDataIssueTab">No se han encontrado incidencias</string> <string name="noDataIssueTab">No se han encontrado incidencias</string>
<string name="infoTabRepoWebsite">Página web</string>
<string name="infoTabRepoSize">Tamaño</string> <string name="infoTabRepoSize">Tamaño</string>
<string name="infoTabRepoDefaultBranch">Rama por defecto</string> <string name="infoTabRepoDefaultBranch">Rama por defecto</string>
<string name="infoTabRepoSshUrl">URL SSH</string> <string name="infoTabRepoSshUrl">URL SSH</string>
@ -419,7 +422,6 @@
<string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string> <string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string>
<string name="genericCopyUrl">Copy URL</string> <string name="genericCopyUrl">Copy URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">Translate GitNex with Crowdin</string>
<string name="exploreTextBoxHint">Explore repositories</string> <string name="exploreTextBoxHint">Explore repositories</string>
<string name="starRepository">Star Repository</string> <string name="starRepository">Star Repository</string>
<string name="unStarRepository">Unstar Repository</string> <string name="unStarRepository">Unstar Repository</string>
@ -504,7 +506,7 @@
<string name="settingsEnableReportsText">Enable Crash Reports</string> <string name="settingsEnableReportsText">Enable Crash Reports</string>
<string name="crashTitle">GitNex has stopped :(</string> <string name="crashTitle">GitNex has stopped :(</string>
<string name="setCrashReports">Crash reports</string> <string name="setCrashReports">Crash reports</string>
<string name="crashMessage">You can tap the OK button to send the crash report by email. It will help to fix it :)\n\nYou can also add additional content in the email. Thank you!</string> <string name="crashMessage">It is encouraged to open an issue at the project repository with how to reproduce this bug. It is easier to debug and fix the problem that way.\n\nTap the OK button to send the crash report by email instead. Additional content could be added in the email.\nThank you!</string>
<string name="forceLogoutDialogHeader">Please sign in again</string> <string name="forceLogoutDialogHeader">Please sign in again</string>
<string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string> <string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string>
<string name="deleteAllDrafts">Delete All Drafts</string> <string name="deleteAllDrafts">Delete All Drafts</string>
@ -518,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string> <string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</string> <string name="languagesHintText">Languages</string>
<string name="reportsHintText">Crash reports</string> <string name="reportsHintText">Crash reports</string>
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
<string name="aboutAppHintText">App version, build, user gitea version</string>
<string name="archivedRepository">Archived</string> <string name="archivedRepository">Archived</string>
<string name="accountDeletedMessage">Account deleted successfully</string> <string name="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string> <string name="removeAccountPopupTitle">Remove Account</string>
@ -560,4 +564,26 @@
<string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string> <string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string>
<string name="repoSettingsDeleteError">Repository name does not match</string> <string name="repoSettingsDeleteError">Repository name does not match</string>
<string name="repoDeletionSuccess">Repository deleted successfully</string> <string name="repoDeletionSuccess">Repository deleted successfully</string>
<string name="repoSettingsTransferOwnership">Transfer Ownership</string>
<string name="repoSettingsTransferOwnershipHint">Transfer this repository to a user or to an organization for which you have administrator rights</string>
<string name="repoSettingsTransferOwnershipDescription">Things to know before transfer:\n\n- You will lose access to the repository if you transfer it to an individual user.\n- You will keep access to the repository if you transfer it to an organization that you (co-)own.\n\nEnter the repository name as confirmation</string>
<string name="repoTransferText">Perform Transfer</string>
<string name="repoTransferOwnerText">New Owner</string>
<string name="repoTransferSuccess">Repository transferred successfully</string>
<string name="repoTransferOwnerError">New owner is required</string>
<string name="repoTransferError">There is a problem with the owner name. Make sure that the new owner exists</string>
<string name="exploreFilterDialogTitle">Filter Repositories</string>
<string name="exploreFilterIncludeTopic">Search ONLY in Topic</string>
<string name="exploreFilterIncludeDesc">Search in Description</string>
<string name="exploreFilterIncludeArchive">Only Archived Repositories</string>
<string name="exploreFilterIncludePrivate">Only Private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Search in Template Repositories</string>
<string name="mergeIntoBranch">Merge Into</string>
<string name="pullFromBranch">Pull From</string>
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
<string name="mergeIntoError">Merge into branch is required</string>
<string name="pullFromError">Pull from branch is required</string>
<string name="titleError">Title is required</string>
<string name="prCreateSuccess">Pull Request created successfully</string>
<string name="prAlreadyExists">A pull request between these branches already exists</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">خروج از حساب کاربری</string> <string name="navLogout">خروج از حساب کاربری</string>
<string name="navExplore">جست و جو</string> <string name="navExplore">جست و جو</string>
<string name="navAdministration">Administration</string> <string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">در مورد ما</string> <string name="pageTitleAbout">در مورد ما</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">گشت‌و‌گذار</string> <string name="pageTitleExplore">گشت‌و‌گذار</string>
<string name="pageTitleAdministration">Gitea Administration</string> <string name="pageTitleAdministration">Gitea Administration</string>
<string name="pageTitleUserAccounts">Manage Accounts</string> <string name="pageTitleUserAccounts">Manage Accounts</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">مخزن نمایشی</string> <string name="repoName">مخزن نمایشی</string>
<string name="repoFullname">نخزن با ORG</string> <string name="repoFullname">نخزن با ORG</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">باز کردن کشو ی ناوبری</string> <string name="navigation_drawer_open">باز کردن کشو ی ناوبری</string>
<string name="navigation_drawer_close">بستن کشوی ناوبری</string> <string name="navigation_drawer_close">بستن کشوی ناوبری</string>
<string name="logo">ورود به گیتی</string> <string name="logo">ورود به گیتی</string>
<string name="protocol">Protocol</string>
<string name="urlInfoTooltip">1. پروتوکل صحیح را انتخاب کنید (http یا https) <string name="urlInfoTooltip">1. پروتوکل صحیح را انتخاب کنید (http یا https)
2. URL گیتی را وارد کنید. مثلا: try.gitea.io 2. URL گیتی را وارد کنید. مثلا: try.gitea.io
3. اگر احراز هویت دو مرحله‌ای را برای حساب خود فعال کرده‌اید، کد را در کادر OTP وارد کنید. 3. اگر احراز هویت دو مرحله‌ای را برای حساب خود فعال کرده‌اید، کد را در کادر OTP وارد کنید.
@ -72,6 +75,7 @@
<string name="emptyFieldURL">URL نمونه مورد نیاز است</string> <string name="emptyFieldURL">URL نمونه مورد نیاز است</string>
<string name="emptyFieldUsername">نام کاربری اجباری است</string> <string name="emptyFieldUsername">نام کاربری اجباری است</string>
<string name="emptyFieldPassword">گذر واژه اجباری است</string> <string name="emptyFieldPassword">گذر واژه اجباری است</string>
<string name="protocolEmptyError">Protocol is required</string>
<string name="checkNetConnection">عدم دسترسی به شبکه، لطفا از برقراری ارتباط با اینترنت مطمئن شوید</string> <string name="checkNetConnection">عدم دسترسی به شبکه، لطفا از برقراری ارتباط با اینترنت مطمئن شوید</string>
<string name="netConnectionIsBack">Yay, We have Internet connection!</string> <string name="netConnectionIsBack">Yay, We have Internet connection!</string>
<string name="repoNameErrorEmpty">نام مخزن خالی است</string> <string name="repoNameErrorEmpty">نام مخزن خالی است</string>
@ -109,7 +113,6 @@
<string name="tab_text_collaborators">Collaborators</string> <string name="tab_text_collaborators">Collaborators</string>
<string name="tabPullRequests">Pull Requests</string> <string name="tabPullRequests">Pull Requests</string>
<string name="noDataIssueTab">No issues found</string> <string name="noDataIssueTab">No issues found</string>
<string name="infoTabRepoWebsite">Website</string>
<string name="infoTabRepoSize">Size</string> <string name="infoTabRepoSize">Size</string>
<string name="infoTabRepoDefaultBranch">Default Branch</string> <string name="infoTabRepoDefaultBranch">Default Branch</string>
<string name="infoTabRepoSshUrl">SSH URL</string> <string name="infoTabRepoSshUrl">SSH URL</string>
@ -422,7 +425,6 @@
<string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string> <string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string>
<string name="genericCopyUrl">Copy URL</string> <string name="genericCopyUrl">Copy URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">Translate GitNex with Crowdin</string>
<string name="exploreTextBoxHint">Explore repositories</string> <string name="exploreTextBoxHint">Explore repositories</string>
<string name="starRepository">Star Repository</string> <string name="starRepository">Star Repository</string>
<string name="unStarRepository">Unstar Repository</string> <string name="unStarRepository">Unstar Repository</string>
@ -507,7 +509,7 @@
<string name="settingsEnableReportsText">Enable Crash Reports</string> <string name="settingsEnableReportsText">Enable Crash Reports</string>
<string name="crashTitle">GitNex has stopped :(</string> <string name="crashTitle">GitNex has stopped :(</string>
<string name="setCrashReports">Crash reports</string> <string name="setCrashReports">Crash reports</string>
<string name="crashMessage">You can tap the OK button to send the crash report by email. It will help to fix it :)\n\nYou can also add additional content in the email. Thank you!</string> <string name="crashMessage">It is encouraged to open an issue at the project repository with how to reproduce this bug. It is easier to debug and fix the problem that way.\n\nTap the OK button to send the crash report by email instead. Additional content could be added in the email.\nThank you!</string>
<string name="forceLogoutDialogHeader">Please sign in again</string> <string name="forceLogoutDialogHeader">Please sign in again</string>
<string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string> <string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string>
<string name="deleteAllDrafts">Delete All Drafts</string> <string name="deleteAllDrafts">Delete All Drafts</string>
@ -521,6 +523,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string> <string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</string> <string name="languagesHintText">Languages</string>
<string name="reportsHintText">Crash reports</string> <string name="reportsHintText">Crash reports</string>
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
<string name="aboutAppHintText">App version, build, user gitea version</string>
<string name="archivedRepository">Archived</string> <string name="archivedRepository">Archived</string>
<string name="accountDeletedMessage">Account deleted successfully</string> <string name="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string> <string name="removeAccountPopupTitle">Remove Account</string>
@ -563,4 +567,26 @@
<string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string> <string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string>
<string name="repoSettingsDeleteError">Repository name does not match</string> <string name="repoSettingsDeleteError">Repository name does not match</string>
<string name="repoDeletionSuccess">Repository deleted successfully</string> <string name="repoDeletionSuccess">Repository deleted successfully</string>
<string name="repoSettingsTransferOwnership">Transfer Ownership</string>
<string name="repoSettingsTransferOwnershipHint">Transfer this repository to a user or to an organization for which you have administrator rights</string>
<string name="repoSettingsTransferOwnershipDescription">Things to know before transfer:\n\n- You will lose access to the repository if you transfer it to an individual user.\n- You will keep access to the repository if you transfer it to an organization that you (co-)own.\n\nEnter the repository name as confirmation</string>
<string name="repoTransferText">Perform Transfer</string>
<string name="repoTransferOwnerText">New Owner</string>
<string name="repoTransferSuccess">Repository transferred successfully</string>
<string name="repoTransferOwnerError">New owner is required</string>
<string name="repoTransferError">There is a problem with the owner name. Make sure that the new owner exists</string>
<string name="exploreFilterDialogTitle">Filter Repositories</string>
<string name="exploreFilterIncludeTopic">Search ONLY in Topic</string>
<string name="exploreFilterIncludeDesc">Search in Description</string>
<string name="exploreFilterIncludeArchive">Only Archived Repositories</string>
<string name="exploreFilterIncludePrivate">Only Private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Search in Template Repositories</string>
<string name="mergeIntoBranch">Merge Into</string>
<string name="pullFromBranch">Pull From</string>
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
<string name="mergeIntoError">Merge into branch is required</string>
<string name="pullFromError">Pull from branch is required</string>
<string name="titleError">Title is required</string>
<string name="prCreateSuccess">Pull Request created successfully</string>
<string name="prAlreadyExists">A pull request between these branches already exists</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Kirjaudu ulos</string> <string name="navLogout">Kirjaudu ulos</string>
<string name="navExplore">Explore</string> <string name="navExplore">Explore</string>
<string name="navAdministration">Administration</string> <string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">Tietoja</string> <string name="pageTitleAbout">Tietoja</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">Explore</string> <string name="pageTitleExplore">Explore</string>
<string name="pageTitleAdministration">Gitea Administration</string> <string name="pageTitleAdministration">Gitea Administration</string>
<string name="pageTitleUserAccounts">Manage Accounts</string> <string name="pageTitleUserAccounts">Manage Accounts</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Demo repo</string> <string name="repoName">Demo repo</string>
<string name="repoFullname">Repo with ORG</string> <string name="repoFullname">Repo with ORG</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">Open Navigation Drawer</string> <string name="navigation_drawer_open">Open Navigation Drawer</string>
<string name="navigation_drawer_close">Close Navigation Drawer</string> <string name="navigation_drawer_close">Close Navigation Drawer</string>
<string name="logo">Login to Gitea</string> <string name="logo">Login to Gitea</string>
<string name="protocol">Protocol</string>
<string name="urlInfoTooltip">1- Choose the correct protocol(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="urlInfoTooltip">1- Choose the correct protocol(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="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="protocolError">It is not recommended to use HTTP protocol unless you are testing on local network</string>
@ -69,6 +72,7 @@
<string name="emptyFieldURL">Instance URL is required</string> <string name="emptyFieldURL">Instance URL is required</string>
<string name="emptyFieldUsername">Username is required</string> <string name="emptyFieldUsername">Username is required</string>
<string name="emptyFieldPassword">Password is required</string> <string name="emptyFieldPassword">Password is required</string>
<string name="protocolEmptyError">Protocol is required</string>
<string name="checkNetConnection">Cannot access network, please check your Internet connection</string> <string name="checkNetConnection">Cannot access network, please check your Internet connection</string>
<string name="netConnectionIsBack">Yay, We have Internet connection!</string> <string name="netConnectionIsBack">Yay, We have Internet connection!</string>
<string name="repoNameErrorEmpty">Repository name is empty</string> <string name="repoNameErrorEmpty">Repository name is empty</string>
@ -106,7 +110,6 @@
<string name="tab_text_collaborators">Collaborators</string> <string name="tab_text_collaborators">Collaborators</string>
<string name="tabPullRequests">Pull Requests</string> <string name="tabPullRequests">Pull Requests</string>
<string name="noDataIssueTab">No issues found</string> <string name="noDataIssueTab">No issues found</string>
<string name="infoTabRepoWebsite">Verkkosivusto</string>
<string name="infoTabRepoSize">Koko</string> <string name="infoTabRepoSize">Koko</string>
<string name="infoTabRepoDefaultBranch">Olutus haara</string> <string name="infoTabRepoDefaultBranch">Olutus haara</string>
<string name="infoTabRepoSshUrl">SSH URL</string> <string name="infoTabRepoSshUrl">SSH URL</string>
@ -419,7 +422,6 @@
<string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string> <string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string>
<string name="genericCopyUrl">Copy URL</string> <string name="genericCopyUrl">Copy URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">Translate GitNex with Crowdin</string>
<string name="exploreTextBoxHint">Explore repositories</string> <string name="exploreTextBoxHint">Explore repositories</string>
<string name="starRepository">Star Repository</string> <string name="starRepository">Star Repository</string>
<string name="unStarRepository">Unstar Repository</string> <string name="unStarRepository">Unstar Repository</string>
@ -504,7 +506,7 @@
<string name="settingsEnableReportsText">Enable Crash Reports</string> <string name="settingsEnableReportsText">Enable Crash Reports</string>
<string name="crashTitle">GitNex has stopped :(</string> <string name="crashTitle">GitNex has stopped :(</string>
<string name="setCrashReports">Crash reports</string> <string name="setCrashReports">Crash reports</string>
<string name="crashMessage">You can tap the OK button to send the crash report by email. It will help to fix it :)\n\nYou can also add additional content in the email. Thank you!</string> <string name="crashMessage">It is encouraged to open an issue at the project repository with how to reproduce this bug. It is easier to debug and fix the problem that way.\n\nTap the OK button to send the crash report by email instead. Additional content could be added in the email.\nThank you!</string>
<string name="forceLogoutDialogHeader">Please sign in again</string> <string name="forceLogoutDialogHeader">Please sign in again</string>
<string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string> <string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string>
<string name="deleteAllDrafts">Delete All Drafts</string> <string name="deleteAllDrafts">Delete All Drafts</string>
@ -518,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string> <string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</string> <string name="languagesHintText">Languages</string>
<string name="reportsHintText">Crash reports</string> <string name="reportsHintText">Crash reports</string>
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
<string name="aboutAppHintText">App version, build, user gitea version</string>
<string name="archivedRepository">Archived</string> <string name="archivedRepository">Archived</string>
<string name="accountDeletedMessage">Account deleted successfully</string> <string name="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string> <string name="removeAccountPopupTitle">Remove Account</string>
@ -560,4 +564,26 @@
<string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string> <string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string>
<string name="repoSettingsDeleteError">Repository name does not match</string> <string name="repoSettingsDeleteError">Repository name does not match</string>
<string name="repoDeletionSuccess">Repository deleted successfully</string> <string name="repoDeletionSuccess">Repository deleted successfully</string>
<string name="repoSettingsTransferOwnership">Transfer Ownership</string>
<string name="repoSettingsTransferOwnershipHint">Transfer this repository to a user or to an organization for which you have administrator rights</string>
<string name="repoSettingsTransferOwnershipDescription">Things to know before transfer:\n\n- You will lose access to the repository if you transfer it to an individual user.\n- You will keep access to the repository if you transfer it to an organization that you (co-)own.\n\nEnter the repository name as confirmation</string>
<string name="repoTransferText">Perform Transfer</string>
<string name="repoTransferOwnerText">New Owner</string>
<string name="repoTransferSuccess">Repository transferred successfully</string>
<string name="repoTransferOwnerError">New owner is required</string>
<string name="repoTransferError">There is a problem with the owner name. Make sure that the new owner exists</string>
<string name="exploreFilterDialogTitle">Filter Repositories</string>
<string name="exploreFilterIncludeTopic">Search ONLY in Topic</string>
<string name="exploreFilterIncludeDesc">Search in Description</string>
<string name="exploreFilterIncludeArchive">Only Archived Repositories</string>
<string name="exploreFilterIncludePrivate">Only Private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Search in Template Repositories</string>
<string name="mergeIntoBranch">Merge Into</string>
<string name="pullFromBranch">Pull From</string>
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
<string name="mergeIntoError">Merge into branch is required</string>
<string name="pullFromError">Pull from branch is required</string>
<string name="titleError">Title is required</string>
<string name="prCreateSuccess">Pull Request created successfully</string>
<string name="prAlreadyExists">A pull request between these branches already exists</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Déconnexion</string> <string name="navLogout">Déconnexion</string>
<string name="navExplore">Explorer</string> <string name="navExplore">Explorer</string>
<string name="navAdministration">Administration</string> <string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">À propos</string> <string name="pageTitleAbout">À propos</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">Explorer</string> <string name="pageTitleExplore">Explorer</string>
<string name="pageTitleAdministration">Administration de Gitea</string> <string name="pageTitleAdministration">Administration de Gitea</string>
<string name="pageTitleUserAccounts">Gestion des comptes</string> <string name="pageTitleUserAccounts">Gestion des comptes</string>
<string name="pageTitleNewPullRequest">Nouvelle demande de tirage</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Dépôt de démonstration</string> <string name="repoName">Dépôt de démonstration</string>
<string name="repoFullname">Nom complet du dépôt</string> <string name="repoFullname">Nom complet du dépôt</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">Ouvrir le volet de navigation</string> <string name="navigation_drawer_open">Ouvrir le volet de navigation</string>
<string name="navigation_drawer_close">Fermer le volet de navigation</string> <string name="navigation_drawer_close">Fermer le volet de navigation</string>
<string name="logo">Se connecter à Gitea</string> <string name="logo">Se connecter à Gitea</string>
<string name="protocol">Protocole</string>
<string name="urlInfoTooltip">1. Choisissez le protocole adéquat (HTTPS ou HTTP)\n2. Entrez lURL de votre instance Gitea (ex : try.gitea.io)\n3. Si lauthentification à deux facteurs est activée pour votre compte, saisissez le code OTP\n4. Pour une authentification basique avec HTTP, utilisez NOMDUTILISATEUR@DOMAINE.COM dans le champ URL GITEA</string> <string name="urlInfoTooltip">1. Choisissez le protocole adéquat (HTTPS ou HTTP)\n2. Entrez lURL de votre instance Gitea (ex : try.gitea.io)\n3. Si lauthentification à deux facteurs est activée pour votre compte, saisissez le code OTP\n4. Pour une authentification basique avec HTTP, utilisez NOMDUTILISATEUR@DOMAINE.COM dans le champ URL GITEA</string>
<string name="malformedUrl">Connexion impossible. Veuillez vérifier lURL et le port</string> <string name="malformedUrl">Connexion impossible. Veuillez vérifier lURL et le port</string>
<string name="protocolError">Le protocole HTTP est déconseillé en dehors de tests sur un réseau local</string> <string name="protocolError">Le protocole HTTP est déconseillé en dehors de tests sur un réseau local</string>
@ -69,6 +72,7 @@
<string name="emptyFieldURL">URL de linstance requise</string> <string name="emptyFieldURL">URL de linstance requise</string>
<string name="emptyFieldUsername">Nom dutilisateur requis</string> <string name="emptyFieldUsername">Nom dutilisateur requis</string>
<string name="emptyFieldPassword">Mot de passe requis</string> <string name="emptyFieldPassword">Mot de passe requis</string>
<string name="protocolEmptyError">Le protocole est requis</string>
<string name="checkNetConnection">Impossible daccéder au réseau, veuillez vérifier votre connexion Internet</string> <string name="checkNetConnection">Impossible daccéder au réseau, veuillez vérifier votre connexion Internet</string>
<string name="netConnectionIsBack">On a Internet, youpi !</string> <string name="netConnectionIsBack">On a Internet, youpi !</string>
<string name="repoNameErrorEmpty">Nom manquant</string> <string name="repoNameErrorEmpty">Nom manquant</string>
@ -106,7 +110,6 @@
<string name="tab_text_collaborators">Collaborateurs</string> <string name="tab_text_collaborators">Collaborateurs</string>
<string name="tabPullRequests">Demandes de tirage</string> <string name="tabPullRequests">Demandes de tirage</string>
<string name="noDataIssueTab">Aucun ticket</string> <string name="noDataIssueTab">Aucun ticket</string>
<string name="infoTabRepoWebsite">Site Web</string>
<string name="infoTabRepoSize">Taille</string> <string name="infoTabRepoSize">Taille</string>
<string name="infoTabRepoDefaultBranch">Branche par défaut</string> <string name="infoTabRepoDefaultBranch">Branche par défaut</string>
<string name="infoTabRepoSshUrl">URL SSH</string> <string name="infoTabRepoSshUrl">URL SSH</string>
@ -419,7 +422,6 @@
<string name="genericServerResponseError">Impossible de se connecter au serveur pour le moment, veuillez vérifier son statut puis réessayer</string> <string name="genericServerResponseError">Impossible de se connecter au serveur pour le moment, veuillez vérifier son statut puis réessayer</string>
<string name="genericCopyUrl">Copier lURL</string> <string name="genericCopyUrl">Copier lURL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">Traduire GitNex avec Crowdin</string>
<string name="exploreTextBoxHint">Explorer les dépôts</string> <string name="exploreTextBoxHint">Explorer les dépôts</string>
<string name="starRepository">Ajouter aux favoris</string> <string name="starRepository">Ajouter aux favoris</string>
<string name="unStarRepository">Retirer des favoris</string> <string name="unStarRepository">Retirer des favoris</string>
@ -504,7 +506,7 @@
<string name="settingsEnableReportsText">Rapports de plantage</string> <string name="settingsEnableReportsText">Rapports de plantage</string>
<string name="crashTitle">GitNex a planté :(</string> <string name="crashTitle">GitNex a planté :(</string>
<string name="setCrashReports">Rapports de plantage</string> <string name="setCrashReports">Rapports de plantage</string>
<string name="crashMessage">Cliquez sur OK pour nous envoyer un courriel avec le rapport de plantage. Cela nous aidera à corriger le problème. :)\n\nVous pouvez aussi ajouter vos propres observations. Merci !</string> <string name="crashMessage">Il est conseillé de créer un ticket expliquant comment reproduire ce bogue pour faciliter la correction du problème.\n\nAppuyez sur OK si vous préférez envoyer le rapport de plantage par courriel. Libre à vous dy ajouter du contenu supplémentaire.\nMerci!</string>
<string name="forceLogoutDialogHeader">Veuillez vous reconnecter</string> <string name="forceLogoutDialogHeader">Veuillez vous reconnecter</string>
<string name="forceLogoutDialogDescription">Une reconnexion est nécessaire en raison de changements majeurs du fonctionnement interne pour améliorer la souplesse de l\'application.\n\nMerci pour votre patience et toutes nos excuses pour la gêne occasionnée.</string> <string name="forceLogoutDialogDescription">Une reconnexion est nécessaire en raison de changements majeurs du fonctionnement interne pour améliorer la souplesse de l\'application.\n\nMerci pour votre patience et toutes nos excuses pour la gêne occasionnée.</string>
<string name="deleteAllDrafts">Supprimer tous les brouillons</string> <string name="deleteAllDrafts">Supprimer tous les brouillons</string>
@ -518,6 +520,8 @@
<string name="securityHintText">Certificats SSL, cache, scrutation des notifications</string> <string name="securityHintText">Certificats SSL, cache, scrutation des notifications</string>
<string name="languagesHintText">Langues</string> <string name="languagesHintText">Langues</string>
<string name="reportsHintText">Rapports de plantage</string> <string name="reportsHintText">Rapports de plantage</string>
<string name="rateAppHintText">Vous aimez GitNex ? Mettez-lui un pouce !</string>
<string name="aboutAppHintText">app, build, gitea</string>
<string name="archivedRepository">Archivé</string> <string name="archivedRepository">Archivé</string>
<string name="accountDeletedMessage">Compte supprimé</string> <string name="accountDeletedMessage">Compte supprimé</string>
<string name="removeAccountPopupTitle">Supprimer le compte</string> <string name="removeAccountPopupTitle">Supprimer le compte</string>
@ -546,18 +550,40 @@
<string name="repoSettingsDelete">Supprimer le dépôt</string> <string name="repoSettingsDelete">Supprimer le dépôt</string>
<string name="repoSettingsDeleteHint">Attention, cette opération est IRRÉVERSIBLE !</string> <string name="repoSettingsDeleteHint">Attention, cette opération est IRRÉVERSIBLE !</string>
<string name="repoPropertiesTemplate">Définir comme modèle</string> <string name="repoPropertiesTemplate">Définir comme modèle</string>
<string name="repoPropertiesEnableIssues">Autoriser les tickets</string> <string name="repoPropertiesEnableIssues">Activer les tickets</string>
<string name="repoPropertiesExternalIssuesUrl">URL externe des tickets</string> <string name="repoPropertiesExternalIssuesUrl">URL externe des tickets</string>
<string name="repoPropertiesEnableWiki">Activer le Wiki</string> <string name="repoPropertiesEnableWiki">Activer le wiki</string>
<string name="repoPropertiesExternalWikiUrl">URL externe du Wiki</string> <string name="repoPropertiesExternalWikiUrl">URL externe du wiki</string>
<string name="repoPropertiesEnablePr">Autoriser les requêtes de tirage</string> <string name="repoPropertiesEnablePr">Activer les requêtes de tirage</string>
<string name="repoPropertiesEnableTimeTracker">Autoriser lhorodatage</string> <string name="repoPropertiesEnableTimeTracker">Activer lhorodatage</string>
<string name="repoPropertiesEnableMergeCommits">Autoriser la fusion des révisions</string> <string name="repoPropertiesEnableMergeCommits">Activer la fusion des révisions</string>
<string name="repoPropertiesEnableRebase">Autoriser le rebasage</string> <string name="repoPropertiesEnableRebase">Activer le rebasage</string>
<string name="repoPropertiesEnableSquash">Enable Squash and Merge</string> <string name="repoPropertiesEnableSquash">Activer squash et fusion</string>
<string name="repoPropertiesEnableForceMerge">Enable Rebase with Merge Commits (&#8212;&#8212;no-ff)</string> <string name="repoPropertiesEnableForceMerge">Activer resbasage avec révision de fusion (&#8212;&#8212;no-ff)</string>
<string name="repoPropertiesSaveSuccess">Propriétés du dépôt mises à jour</string> <string name="repoPropertiesSaveSuccess">Propriétés du dépôt mises à jour</string>
<string name="repoSettingsDeleteDescription">Cette opération est IRRÉVERSIBLE.\nSoyez conscient que le dépôt et son contenu (code, tickets, commentaires, wiki, contributions…) seront définitivement supprimés.\n\nEntrez le nom du dépôt afin de confirmer cette opération.</string> <string name="repoSettingsDeleteDescription">Cette opération est IRRÉVERSIBLE.\nSoyez conscient que le dépôt et son contenu (code, tickets, commentaires, wiki, contributions…) seront définitivement supprimés.\n\nEntrez le nom du dépôt afin de confirmer cette opération.</string>
<string name="repoSettingsDeleteError">Nom du dépôt incorrect</string> <string name="repoSettingsDeleteError">Nom du dépôt incorrect</string>
<string name="repoDeletionSuccess">Dépôt supprimé</string> <string name="repoDeletionSuccess">Dépôt supprimé</string>
<string name="repoSettingsTransferOwnership">Changer de propriétaire</string>
<string name="repoSettingsTransferOwnershipHint">Transfère le dépôt à un autre utilisateur ou une autre organisation dont vous possédez les droits d\'administrateur</string>
<string name="repoSettingsTransferOwnershipDescription">Choses à savoir avant le transfert :\n\n- Vous perdez laccès au dépôt si vous le transférez à un autre utilisateur.\n- Vous conservez laccès au dépôt si vous le transférez à une organisation que vous (co-)gérez.\n\nEntrez le nom du dépôt pour confirmer</string>
<string name="repoTransferText">Transférer</string>
<string name="repoTransferOwnerText">Nouveau propriétaire</string>
<string name="repoTransferSuccess">Dépôt transféré</string>
<string name="repoTransferOwnerError">Un nouveau propriétaire est requis</string>
<string name="repoTransferError">Erreur avec le nom du propriétaire. Assurez-vous que le nouveau propriétaire existe</string>
<string name="exploreFilterDialogTitle">Filtrer les dépôts</string>
<string name="exploreFilterIncludeTopic">Rechercher uniquement dans le sujet</string>
<string name="exploreFilterIncludeDesc">Rechercher dans la description</string>
<string name="exploreFilterIncludeArchive">Dépôts archivés seulement</string>
<string name="exploreFilterIncludePrivate">Dépôts privés seulement</string>
<string name="exploreFilterIncludeTemplateRepos">Rechercher dans les dépôts modèles</string>
<string name="mergeIntoBranch">Fusionner dans</string>
<string name="pullFromBranch">Tirer depuis</string>
<string name="sameBranchesError">Ces branches sont identiques. La requête de tirage est inutile.</string>
<string name="mergeIntoError">Fusion de branche requise</string>
<string name="pullFromError">Tirage de branche requis</string>
<string name="titleError">Titre requis</string>
<string name="prCreateSuccess">Requête de tirage créé</string>
<string name="prAlreadyExists">Une requête de tirage existe déjà entre ces branches</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Esci</string> <string name="navLogout">Esci</string>
<string name="navExplore">Esplora</string> <string name="navExplore">Esplora</string>
<string name="navAdministration">Amministrazione</string> <string name="navAdministration">Amministrazione</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">Info su</string> <string name="pageTitleAbout">Info su</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">Esplora</string> <string name="pageTitleExplore">Esplora</string>
<string name="pageTitleAdministration">Amministrazione Gitea</string> <string name="pageTitleAdministration">Amministrazione Gitea</string>
<string name="pageTitleUserAccounts">Manage Accounts</string> <string name="pageTitleUserAccounts">Manage Accounts</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Demo repo</string> <string name="repoName">Demo repo</string>
<string name="repoFullname">Repo con ORG</string> <string name="repoFullname">Repo con ORG</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">Apri panello Navigazione</string> <string name="navigation_drawer_open">Apri panello Navigazione</string>
<string name="navigation_drawer_close">Chiudi panello Navigazione</string> <string name="navigation_drawer_close">Chiudi panello Navigazione</string>
<string name="logo">Accedi a Gitea</string> <string name="logo">Accedi a Gitea</string>
<string name="protocol">Protocol</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="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="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="protocolError">It is not recommended to use HTTP protocol unless you are testing on local network</string>
@ -70,6 +73,7 @@
URL è richiesto</string> URL è richiesto</string>
<string name="emptyFieldUsername">Nome utente obbligatorio</string> <string name="emptyFieldUsername">Nome utente obbligatorio</string>
<string name="emptyFieldPassword">Password obbligatoria</string> <string name="emptyFieldPassword">Password obbligatoria</string>
<string name="protocolEmptyError">Protocol is required</string>
<string name="checkNetConnection">Errore di connessione. Controllare la connessione Internet</string> <string name="checkNetConnection">Errore di connessione. Controllare la connessione Internet</string>
<string name="netConnectionIsBack">Yay, la connessione ad Internet funziona!</string> <string name="netConnectionIsBack">Yay, la connessione ad Internet funziona!</string>
<string name="repoNameErrorEmpty">Il nome del repository è vuoto</string> <string name="repoNameErrorEmpty">Il nome del repository è vuoto</string>
@ -107,7 +111,6 @@ URL è richiesto</string>
<string name="tab_text_collaborators">Collaboratori</string> <string name="tab_text_collaborators">Collaboratori</string>
<string name="tabPullRequests">Pull Requests</string> <string name="tabPullRequests">Pull Requests</string>
<string name="noDataIssueTab">Nessun problema trovato</string> <string name="noDataIssueTab">Nessun problema trovato</string>
<string name="infoTabRepoWebsite">Sito Web</string>
<string name="infoTabRepoSize">Dimensione</string> <string name="infoTabRepoSize">Dimensione</string>
<string name="infoTabRepoDefaultBranch">Branch predefinito</string> <string name="infoTabRepoDefaultBranch">Branch predefinito</string>
<string name="infoTabRepoSshUrl">SSH URL</string> <string name="infoTabRepoSshUrl">SSH URL</string>
@ -421,7 +424,6 @@ autorizzazione</string>
<string name="genericServerResponseError">Al momento non possiamo raggiungere il server, controlla lo stato del tuo server e riprova</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">Copy URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">Traduci GitNex con Crowdin</string>
<string name="exploreTextBoxHint">Esplora i repository</string> <string name="exploreTextBoxHint">Esplora i repository</string>
<string name="starRepository">Repository star</string> <string name="starRepository">Repository star</string>
<string name="unStarRepository">Unstar Repository</string> <string name="unStarRepository">Unstar Repository</string>
@ -506,7 +508,7 @@ autorizzazione</string>
<string name="settingsEnableReportsText">Abilita Rapporti Crash</string> <string name="settingsEnableReportsText">Abilita Rapporti Crash</string>
<string name="crashTitle">GitNex ha smesso di funzionare :(</string> <string name="crashTitle">GitNex ha smesso di funzionare :(</string>
<string name="setCrashReports">Rapporti crash</string> <string name="setCrashReports">Rapporti crash</string>
<string name="crashMessage">Puoi premere il pulsante OK per inviare la segnalazione di crash via email. Aiuterà a risolvere il problema :)\n\nPuoi anche aggiungere altri dettagli nell\'email. Grazie!</string> <string name="crashMessage">It is encouraged to open an issue at the project repository with how to reproduce this bug. It is easier to debug and fix the problem that way.\n\nTap the OK button to send the crash report by email instead. Additional content could be added in the email.\nThank you!</string>
<string name="forceLogoutDialogHeader">Per favore accedi di nuovo</string> <string name="forceLogoutDialogHeader">Per favore accedi di nuovo</string>
<string name="forceLogoutDialogDescription">A causa di alcune modifiche importanti riguardanti il funzionamento interno dell\'app, abbiamo bisogno che tu effettui nuovamente il login. Queste modifiche ci permettono di rendere l\'applicazione più flessibile in futuro.\n\nGrazie per la pazienza e ci scusiamo per il disagio.</string> <string name="forceLogoutDialogDescription">A causa di alcune modifiche importanti riguardanti il funzionamento interno dell\'app, abbiamo bisogno che tu effettui nuovamente il login. Queste modifiche ci permettono di rendere l\'applicazione più flessibile in futuro.\n\nGrazie per la pazienza e ci scusiamo per il disagio.</string>
<string name="deleteAllDrafts">Elimina Tutte Le Bozze</string> <string name="deleteAllDrafts">Elimina Tutte Le Bozze</string>
@ -520,6 +522,8 @@ autorizzazione</string>
<string name="securityHintText">Certificati SSL, cache, ricerca di notifiche</string> <string name="securityHintText">Certificati SSL, cache, ricerca di notifiche</string>
<string name="languagesHintText">Lingue</string> <string name="languagesHintText">Lingue</string>
<string name="reportsHintText">Rapporti crash</string> <string name="reportsHintText">Rapporti crash</string>
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
<string name="aboutAppHintText">App version, build, user gitea version</string>
<string name="archivedRepository">Archiviato</string> <string name="archivedRepository">Archiviato</string>
<string name="accountDeletedMessage">Account eliminato con successo</string> <string name="accountDeletedMessage">Account eliminato con successo</string>
<string name="removeAccountPopupTitle">Remove Account</string> <string name="removeAccountPopupTitle">Remove Account</string>
@ -562,4 +566,26 @@ autorizzazione</string>
<string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string> <string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string>
<string name="repoSettingsDeleteError">Repository name does not match</string> <string name="repoSettingsDeleteError">Repository name does not match</string>
<string name="repoDeletionSuccess">Repository deleted successfully</string> <string name="repoDeletionSuccess">Repository deleted successfully</string>
<string name="repoSettingsTransferOwnership">Transfer Ownership</string>
<string name="repoSettingsTransferOwnershipHint">Transfer this repository to a user or to an organization for which you have administrator rights</string>
<string name="repoSettingsTransferOwnershipDescription">Things to know before transfer:\n\n- You will lose access to the repository if you transfer it to an individual user.\n- You will keep access to the repository if you transfer it to an organization that you (co-)own.\n\nEnter the repository name as confirmation</string>
<string name="repoTransferText">Perform Transfer</string>
<string name="repoTransferOwnerText">New Owner</string>
<string name="repoTransferSuccess">Repository transferred successfully</string>
<string name="repoTransferOwnerError">New owner is required</string>
<string name="repoTransferError">There is a problem with the owner name. Make sure that the new owner exists</string>
<string name="exploreFilterDialogTitle">Filter Repositories</string>
<string name="exploreFilterIncludeTopic">Search ONLY in Topic</string>
<string name="exploreFilterIncludeDesc">Search in Description</string>
<string name="exploreFilterIncludeArchive">Only Archived Repositories</string>
<string name="exploreFilterIncludePrivate">Only Private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Search in Template Repositories</string>
<string name="mergeIntoBranch">Merge Into</string>
<string name="pullFromBranch">Pull From</string>
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
<string name="mergeIntoError">Merge into branch is required</string>
<string name="pullFromError">Pull from branch is required</string>
<string name="titleError">Title is required</string>
<string name="prCreateSuccess">Pull Request created successfully</string>
<string name="prAlreadyExists">A pull request between these branches already exists</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Logout</string> <string name="navLogout">Logout</string>
<string name="navExplore">Izpētīt</string> <string name="navExplore">Izpētīt</string>
<string name="navAdministration">Administration</string> <string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">Par</string> <string name="pageTitleAbout">Par</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">Izpētīt</string> <string name="pageTitleExplore">Izpētīt</string>
<string name="pageTitleAdministration">Gitea Administration</string> <string name="pageTitleAdministration">Gitea Administration</string>
<string name="pageTitleUserAccounts">Manage Accounts</string> <string name="pageTitleUserAccounts">Manage Accounts</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Demo repo</string> <string name="repoName">Demo repo</string>
<string name="repoFullname">Repo with ORG</string> <string name="repoFullname">Repo with ORG</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">Open Navigation Drawer</string> <string name="navigation_drawer_open">Open Navigation Drawer</string>
<string name="navigation_drawer_close">Close Navigation Drawer</string> <string name="navigation_drawer_close">Close Navigation Drawer</string>
<string name="logo">Login to Gitea</string> <string name="logo">Login to Gitea</string>
<string name="protocol">Protocol</string>
<string name="urlInfoTooltip">1- Choose the correct protocol(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="urlInfoTooltip">1- Choose the correct protocol(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="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="protocolError">It is not recommended to use HTTP protocol unless you are testing on local network</string>
@ -69,6 +72,7 @@
<string name="emptyFieldURL">Instance URL is required</string> <string name="emptyFieldURL">Instance URL is required</string>
<string name="emptyFieldUsername">Username is required</string> <string name="emptyFieldUsername">Username is required</string>
<string name="emptyFieldPassword">Password is required</string> <string name="emptyFieldPassword">Password is required</string>
<string name="protocolEmptyError">Protocol is required</string>
<string name="checkNetConnection">Cannot access network, please check your Internet connection</string> <string name="checkNetConnection">Cannot access network, please check your Internet connection</string>
<string name="netConnectionIsBack">Yay, We have Internet connection!</string> <string name="netConnectionIsBack">Yay, We have Internet connection!</string>
<string name="repoNameErrorEmpty">Repository name is empty</string> <string name="repoNameErrorEmpty">Repository name is empty</string>
@ -106,7 +110,6 @@
<string name="tab_text_collaborators">Collaborators</string> <string name="tab_text_collaborators">Collaborators</string>
<string name="tabPullRequests">Pull Requests</string> <string name="tabPullRequests">Pull Requests</string>
<string name="noDataIssueTab">No issues found</string> <string name="noDataIssueTab">No issues found</string>
<string name="infoTabRepoWebsite">Website</string>
<string name="infoTabRepoSize">Size</string> <string name="infoTabRepoSize">Size</string>
<string name="infoTabRepoDefaultBranch">Default Branch</string> <string name="infoTabRepoDefaultBranch">Default Branch</string>
<string name="infoTabRepoSshUrl">SSH URL</string> <string name="infoTabRepoSshUrl">SSH URL</string>
@ -419,7 +422,6 @@
<string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string> <string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string>
<string name="genericCopyUrl">Copy URL</string> <string name="genericCopyUrl">Copy URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">Translate GitNex with Crowdin</string>
<string name="exploreTextBoxHint">Explore repositories</string> <string name="exploreTextBoxHint">Explore repositories</string>
<string name="starRepository">Star Repository</string> <string name="starRepository">Star Repository</string>
<string name="unStarRepository">Unstar Repository</string> <string name="unStarRepository">Unstar Repository</string>
@ -504,7 +506,7 @@
<string name="settingsEnableReportsText">Enable Crash Reports</string> <string name="settingsEnableReportsText">Enable Crash Reports</string>
<string name="crashTitle">GitNex has stopped :(</string> <string name="crashTitle">GitNex has stopped :(</string>
<string name="setCrashReports">Crash reports</string> <string name="setCrashReports">Crash reports</string>
<string name="crashMessage">You can tap the OK button to send the crash report by email. It will help to fix it :)\n\nYou can also add additional content in the email. Thank you!</string> <string name="crashMessage">It is encouraged to open an issue at the project repository with how to reproduce this bug. It is easier to debug and fix the problem that way.\n\nTap the OK button to send the crash report by email instead. Additional content could be added in the email.\nThank you!</string>
<string name="forceLogoutDialogHeader">Please sign in again</string> <string name="forceLogoutDialogHeader">Please sign in again</string>
<string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string> <string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string>
<string name="deleteAllDrafts">Delete All Drafts</string> <string name="deleteAllDrafts">Delete All Drafts</string>
@ -518,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string> <string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</string> <string name="languagesHintText">Languages</string>
<string name="reportsHintText">Crash reports</string> <string name="reportsHintText">Crash reports</string>
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
<string name="aboutAppHintText">App version, build, user gitea version</string>
<string name="archivedRepository">Archived</string> <string name="archivedRepository">Archived</string>
<string name="accountDeletedMessage">Account deleted successfully</string> <string name="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string> <string name="removeAccountPopupTitle">Remove Account</string>
@ -560,4 +564,26 @@
<string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string> <string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string>
<string name="repoSettingsDeleteError">Repository name does not match</string> <string name="repoSettingsDeleteError">Repository name does not match</string>
<string name="repoDeletionSuccess">Repository deleted successfully</string> <string name="repoDeletionSuccess">Repository deleted successfully</string>
<string name="repoSettingsTransferOwnership">Transfer Ownership</string>
<string name="repoSettingsTransferOwnershipHint">Transfer this repository to a user or to an organization for which you have administrator rights</string>
<string name="repoSettingsTransferOwnershipDescription">Things to know before transfer:\n\n- You will lose access to the repository if you transfer it to an individual user.\n- You will keep access to the repository if you transfer it to an organization that you (co-)own.\n\nEnter the repository name as confirmation</string>
<string name="repoTransferText">Perform Transfer</string>
<string name="repoTransferOwnerText">New Owner</string>
<string name="repoTransferSuccess">Repository transferred successfully</string>
<string name="repoTransferOwnerError">New owner is required</string>
<string name="repoTransferError">There is a problem with the owner name. Make sure that the new owner exists</string>
<string name="exploreFilterDialogTitle">Filter Repositories</string>
<string name="exploreFilterIncludeTopic">Search ONLY in Topic</string>
<string name="exploreFilterIncludeDesc">Search in Description</string>
<string name="exploreFilterIncludeArchive">Only Archived Repositories</string>
<string name="exploreFilterIncludePrivate">Only Private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Search in Template Repositories</string>
<string name="mergeIntoBranch">Merge Into</string>
<string name="pullFromBranch">Pull From</string>
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
<string name="mergeIntoError">Merge into branch is required</string>
<string name="pullFromError">Pull from branch is required</string>
<string name="titleError">Title is required</string>
<string name="prCreateSuccess">Pull Request created successfully</string>
<string name="prAlreadyExists">A pull request between these branches already exists</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Wyloguj się</string> <string name="navLogout">Wyloguj się</string>
<string name="navExplore">Przeglądaj</string> <string name="navExplore">Przeglądaj</string>
<string name="navAdministration">Administration</string> <string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">O programie</string> <string name="pageTitleAbout">O programie</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">Przeglądaj</string> <string name="pageTitleExplore">Przeglądaj</string>
<string name="pageTitleAdministration">Gitea Administration</string> <string name="pageTitleAdministration">Gitea Administration</string>
<string name="pageTitleUserAccounts">Manage Accounts</string> <string name="pageTitleUserAccounts">Manage Accounts</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Repozytorium demo</string> <string name="repoName">Repozytorium demo</string>
<string name="repoFullname">Repozytorium z ORG</string> <string name="repoFullname">Repozytorium z ORG</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">Otwórz szufladę nawigacji</string> <string name="navigation_drawer_open">Otwórz szufladę nawigacji</string>
<string name="navigation_drawer_close">Zamknij szufladę nawigacji</string> <string name="navigation_drawer_close">Zamknij szufladę nawigacji</string>
<string name="logo">Zaloguj się do Gitea</string> <string name="logo">Zaloguj się do Gitea</string>
<string name="protocol">Protocol</string>
<string name="urlInfoTooltip">1- Wybierz poprawny protokół (https lub http). \n2- Wprowadź adres URL Gitea np: try.gitea.io. \n3- Jeśli włączyłeś 2FA dla swojego konta, wprowadź kod w polu OTP Code. \n4 - Dla podstawowej autoryzacji HTTP użyj NAZWAUŻYTKOWNIKA@STRONA.PL w polu URL.</string> <string name="urlInfoTooltip">1- Wybierz poprawny protokół (https lub http). \n2- Wprowadź adres URL Gitea np: try.gitea.io. \n3- Jeśli włączyłeś 2FA dla swojego konta, wprowadź kod w polu OTP Code. \n4 - Dla podstawowej autoryzacji HTTP użyj NAZWAUŻYTKOWNIKA@STRONA.PL w polu URL.</string>
<string name="malformedUrl">Couldn\'t connect to host. Please check your URL or port for any errors</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="protocolError">It is not recommended to use HTTP protocol unless you are testing on local network</string>
@ -69,6 +72,7 @@
<string name="emptyFieldURL">Adres URL instancji jest wymagany</string> <string name="emptyFieldURL">Adres URL instancji jest wymagany</string>
<string name="emptyFieldUsername">Nazwa użytkownika jest wymagana</string> <string name="emptyFieldUsername">Nazwa użytkownika jest wymagana</string>
<string name="emptyFieldPassword">Hasło jest wymagane</string> <string name="emptyFieldPassword">Hasło jest wymagane</string>
<string name="protocolEmptyError">Protocol is required</string>
<string name="checkNetConnection">Nie można uzyskać dostępu do sieci, sprawdź swoje połączenie internetowe</string> <string name="checkNetConnection">Nie można uzyskać dostępu do sieci, sprawdź swoje połączenie internetowe</string>
<string name="netConnectionIsBack">Jej, mamy połączenie z Internetem!</string> <string name="netConnectionIsBack">Jej, mamy połączenie z Internetem!</string>
<string name="repoNameErrorEmpty">Nazwa repozytorium jest pusta</string> <string name="repoNameErrorEmpty">Nazwa repozytorium jest pusta</string>
@ -106,7 +110,6 @@
<string name="tab_text_collaborators">Współpracownicy</string> <string name="tab_text_collaborators">Współpracownicy</string>
<string name="tabPullRequests">Pull Requesty</string> <string name="tabPullRequests">Pull Requesty</string>
<string name="noDataIssueTab">Nie znaleziono problemów</string> <string name="noDataIssueTab">Nie znaleziono problemów</string>
<string name="infoTabRepoWebsite">Strona internetowa</string>
<string name="infoTabRepoSize">Rozmiar</string> <string name="infoTabRepoSize">Rozmiar</string>
<string name="infoTabRepoDefaultBranch">Domyślna gałąź</string> <string name="infoTabRepoDefaultBranch">Domyślna gałąź</string>
<string name="infoTabRepoSshUrl">Adres URL SSH</string> <string name="infoTabRepoSshUrl">Adres URL SSH</string>
@ -419,7 +422,6 @@
<string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string> <string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string>
<string name="genericCopyUrl">Copy URL</string> <string name="genericCopyUrl">Copy URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">Przetłumacz GitNex z Crowdin</string>
<string name="exploreTextBoxHint">Przeglądaj repozytoria</string> <string name="exploreTextBoxHint">Przeglądaj repozytoria</string>
<string name="starRepository">Ogwiazdkuj repozytorium</string> <string name="starRepository">Ogwiazdkuj repozytorium</string>
<string name="unStarRepository">Odgwiazdkuj repozytorium</string> <string name="unStarRepository">Odgwiazdkuj repozytorium</string>
@ -504,7 +506,7 @@
<string name="settingsEnableReportsText">Włącz raporty awarii</string> <string name="settingsEnableReportsText">Włącz raporty awarii</string>
<string name="crashTitle">GitNex zatrzymał się :(</string> <string name="crashTitle">GitNex zatrzymał się :(</string>
<string name="setCrashReports">Raporty awarii</string> <string name="setCrashReports">Raporty awarii</string>
<string name="crashMessage">Możesz nacisnąć przycisk OK, aby wysłać raport o awarii pocztą elektroniczną. Pomoże to naprawić to :)\n\nMożesz również dodać dodatkowe treści w wiadomości e-mail. Dziękujemy!</string> <string name="crashMessage">It is encouraged to open an issue at the project repository with how to reproduce this bug. It is easier to debug and fix the problem that way.\n\nTap the OK button to send the crash report by email instead. Additional content could be added in the email.\nThank you!</string>
<string name="forceLogoutDialogHeader">Please sign in again</string> <string name="forceLogoutDialogHeader">Please sign in again</string>
<string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string> <string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string>
<string name="deleteAllDrafts">Delete All Drafts</string> <string name="deleteAllDrafts">Delete All Drafts</string>
@ -518,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string> <string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</string> <string name="languagesHintText">Languages</string>
<string name="reportsHintText">Crash reports</string> <string name="reportsHintText">Crash reports</string>
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
<string name="aboutAppHintText">App version, build, user gitea version</string>
<string name="archivedRepository">Archived</string> <string name="archivedRepository">Archived</string>
<string name="accountDeletedMessage">Account deleted successfully</string> <string name="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string> <string name="removeAccountPopupTitle">Remove Account</string>
@ -560,4 +564,26 @@
<string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string> <string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string>
<string name="repoSettingsDeleteError">Repository name does not match</string> <string name="repoSettingsDeleteError">Repository name does not match</string>
<string name="repoDeletionSuccess">Repository deleted successfully</string> <string name="repoDeletionSuccess">Repository deleted successfully</string>
<string name="repoSettingsTransferOwnership">Transfer Ownership</string>
<string name="repoSettingsTransferOwnershipHint">Transfer this repository to a user or to an organization for which you have administrator rights</string>
<string name="repoSettingsTransferOwnershipDescription">Things to know before transfer:\n\n- You will lose access to the repository if you transfer it to an individual user.\n- You will keep access to the repository if you transfer it to an organization that you (co-)own.\n\nEnter the repository name as confirmation</string>
<string name="repoTransferText">Perform Transfer</string>
<string name="repoTransferOwnerText">New Owner</string>
<string name="repoTransferSuccess">Repository transferred successfully</string>
<string name="repoTransferOwnerError">New owner is required</string>
<string name="repoTransferError">There is a problem with the owner name. Make sure that the new owner exists</string>
<string name="exploreFilterDialogTitle">Filter Repositories</string>
<string name="exploreFilterIncludeTopic">Search ONLY in Topic</string>
<string name="exploreFilterIncludeDesc">Search in Description</string>
<string name="exploreFilterIncludeArchive">Only Archived Repositories</string>
<string name="exploreFilterIncludePrivate">Only Private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Search in Template Repositories</string>
<string name="mergeIntoBranch">Merge Into</string>
<string name="pullFromBranch">Pull From</string>
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
<string name="mergeIntoError">Merge into branch is required</string>
<string name="pullFromError">Pull from branch is required</string>
<string name="titleError">Title is required</string>
<string name="prCreateSuccess">Pull Request created successfully</string>
<string name="prAlreadyExists">A pull request between these branches already exists</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Sair</string> <string name="navLogout">Sair</string>
<string name="navExplore">Explorar</string> <string name="navExplore">Explorar</string>
<string name="navAdministration">Administração</string> <string name="navAdministration">Administração</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">Sobre</string> <string name="pageTitleAbout">Sobre</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">Explorar</string> <string name="pageTitleExplore">Explorar</string>
<string name="pageTitleAdministration">Administração de Gitea</string> <string name="pageTitleAdministration">Administração de Gitea</string>
<string name="pageTitleUserAccounts">Gerenciar contas</string> <string name="pageTitleUserAccounts">Gerenciar contas</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Repo demo</string> <string name="repoName">Repo demo</string>
<string name="repoFullname">Repo com ORG</string> <string name="repoFullname">Repo com ORG</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">Abrir painel de navegação</string> <string name="navigation_drawer_open">Abrir painel de navegação</string>
<string name="navigation_drawer_close">Fechar painel de navegação</string> <string name="navigation_drawer_close">Fechar painel de navegação</string>
<string name="logo">Conectar no Gitea</string> <string name="logo">Conectar no Gitea</string>
<string name="protocol">Protocol</string>
<string name="urlInfoTooltip">1- Escolha o protocolo correto (https ou http). \n2- Insira a url do Gitea. Por exemplo: try.gitea.io. \n3 - Se você habilitou 2FA para sua conta, digite o código no campo de código OTP. \n4- Para autenticação básica HTTP use USUARIO@DOMINIO.COM no campo URL.</string> <string name="urlInfoTooltip">1- Escolha o protocolo correto (https ou http). \n2- Insira a url do Gitea. Por exemplo: try.gitea.io. \n3 - Se você habilitou 2FA para sua conta, digite o código no campo de código OTP. \n4- Para autenticação básica HTTP use USUARIO@DOMINIO.COM no campo URL.</string>
<string name="malformedUrl">Não foi possível conectar-se ao host. Por favor verifique sua URL ou porta para ver se há algum erro</string> <string name="malformedUrl">Não foi possível conectar-se ao host. Por favor verifique sua URL ou porta para ver se há algum erro</string>
<string name="protocolError">Não é recomendado usar o protocolo HTTP a menos que você esteja testando na rede local</string> <string name="protocolError">Não é recomendado usar o protocolo HTTP a menos que você esteja testando na rede local</string>
@ -69,6 +72,7 @@
<string name="emptyFieldURL">A URL da instância é necessária</string> <string name="emptyFieldURL">A URL da instância é necessária</string>
<string name="emptyFieldUsername">Nome de usuário é necessário</string> <string name="emptyFieldUsername">Nome de usuário é necessário</string>
<string name="emptyFieldPassword">A senha é necessária</string> <string name="emptyFieldPassword">A senha é necessária</string>
<string name="protocolEmptyError">Protocol is required</string>
<string name="checkNetConnection">Não é possível acessar a rede, por favor, verifique sua conexão com a Internet</string> <string name="checkNetConnection">Não é possível acessar a rede, por favor, verifique sua conexão com a Internet</string>
<string name="netConnectionIsBack">Opa, temos conexão com a Internet!</string> <string name="netConnectionIsBack">Opa, temos conexão com a Internet!</string>
<string name="repoNameErrorEmpty">Nome do repositório está vazio</string> <string name="repoNameErrorEmpty">Nome do repositório está vazio</string>
@ -106,7 +110,6 @@
<string name="tab_text_collaborators">Colaboradores</string> <string name="tab_text_collaborators">Colaboradores</string>
<string name="tabPullRequests">Pull requests</string> <string name="tabPullRequests">Pull requests</string>
<string name="noDataIssueTab">Nenhum incidente encontrado</string> <string name="noDataIssueTab">Nenhum incidente encontrado</string>
<string name="infoTabRepoWebsite">Site da Web</string>
<string name="infoTabRepoSize">Tamanho</string> <string name="infoTabRepoSize">Tamanho</string>
<string name="infoTabRepoDefaultBranch">Branch padrão</string> <string name="infoTabRepoDefaultBranch">Branch padrão</string>
<string name="infoTabRepoSshUrl">URL de SSH</string> <string name="infoTabRepoSshUrl">URL de SSH</string>
@ -419,7 +422,6 @@
<string name="genericServerResponseError">Não conseguimos encontrar o servidor no momento, por favor, verifique o status do seu servidor e tente novamente</string> <string name="genericServerResponseError">Não conseguimos encontrar o servidor no momento, por favor, verifique o status do seu servidor e tente novamente</string>
<string name="genericCopyUrl">Copiar URL</string> <string name="genericCopyUrl">Copiar URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">Traduza o GitNex com Crowdin</string>
<string name="exploreTextBoxHint">Explorar repositórios</string> <string name="exploreTextBoxHint">Explorar repositórios</string>
<string name="starRepository">Favoritar repositório</string> <string name="starRepository">Favoritar repositório</string>
<string name="unStarRepository">Desfavoritar repositório</string> <string name="unStarRepository">Desfavoritar repositório</string>
@ -504,7 +506,7 @@
<string name="settingsEnableReportsText">Ativar relatórios de erros</string> <string name="settingsEnableReportsText">Ativar relatórios de erros</string>
<string name="crashTitle">GitNex parou :(</string> <string name="crashTitle">GitNex parou :(</string>
<string name="setCrashReports">Relatórios de erros</string> <string name="setCrashReports">Relatórios de erros</string>
<string name="crashMessage">Você pode tocar no botão OK para enviar o relatório de erro por e-mail. Ajudará a consertá-lo :)\n\nVocê também pode adicionar conteúdo adicional no e-mail. Obrigado!</string> <string name="crashMessage">It is encouraged to open an issue at the project repository with how to reproduce this bug. It is easier to debug and fix the problem that way.\n\nTap the OK button to send the crash report by email instead. Additional content could be added in the email.\nThank you!</string>
<string name="forceLogoutDialogHeader">Por favor, faça o login novamente</string> <string name="forceLogoutDialogHeader">Por favor, faça o login novamente</string>
<string name="forceLogoutDialogDescription">Devido a algumas mudanças principais no funcionamento interno do aplicativo, exigimos que você faça o login novamente. Essas alterações nos permitem tornar o aplicativo mais flexível no futuro.\n\nAgradecemos por sua paciência e lamentamos o inconveniente.</string> <string name="forceLogoutDialogDescription">Devido a algumas mudanças principais no funcionamento interno do aplicativo, exigimos que você faça o login novamente. Essas alterações nos permitem tornar o aplicativo mais flexível no futuro.\n\nAgradecemos por sua paciência e lamentamos o inconveniente.</string>
<string name="deleteAllDrafts">Excluir Todos os Rascunhos</string> <string name="deleteAllDrafts">Excluir Todos os Rascunhos</string>
@ -518,6 +520,8 @@
<string name="securityHintText">Certificados SSL, cache e atraso de pesquisa</string> <string name="securityHintText">Certificados SSL, cache e atraso de pesquisa</string>
<string name="languagesHintText">Idiomas</string> <string name="languagesHintText">Idiomas</string>
<string name="reportsHintText">Relatórios de erros</string> <string name="reportsHintText">Relatórios de erros</string>
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
<string name="aboutAppHintText">App version, build, user gitea version</string>
<string name="archivedRepository">Arquivado</string> <string name="archivedRepository">Arquivado</string>
<string name="accountDeletedMessage">Conta excluída com êxito</string> <string name="accountDeletedMessage">Conta excluída com êxito</string>
<string name="removeAccountPopupTitle">Excluir Conta</string> <string name="removeAccountPopupTitle">Excluir Conta</string>
@ -560,4 +564,26 @@
<string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string> <string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string>
<string name="repoSettingsDeleteError">Repository name does not match</string> <string name="repoSettingsDeleteError">Repository name does not match</string>
<string name="repoDeletionSuccess">Repository deleted successfully</string> <string name="repoDeletionSuccess">Repository deleted successfully</string>
<string name="repoSettingsTransferOwnership">Transfer Ownership</string>
<string name="repoSettingsTransferOwnershipHint">Transfer this repository to a user or to an organization for which you have administrator rights</string>
<string name="repoSettingsTransferOwnershipDescription">Things to know before transfer:\n\n- You will lose access to the repository if you transfer it to an individual user.\n- You will keep access to the repository if you transfer it to an organization that you (co-)own.\n\nEnter the repository name as confirmation</string>
<string name="repoTransferText">Perform Transfer</string>
<string name="repoTransferOwnerText">New Owner</string>
<string name="repoTransferSuccess">Repository transferred successfully</string>
<string name="repoTransferOwnerError">New owner is required</string>
<string name="repoTransferError">There is a problem with the owner name. Make sure that the new owner exists</string>
<string name="exploreFilterDialogTitle">Filter Repositories</string>
<string name="exploreFilterIncludeTopic">Search ONLY in Topic</string>
<string name="exploreFilterIncludeDesc">Search in Description</string>
<string name="exploreFilterIncludeArchive">Only Archived Repositories</string>
<string name="exploreFilterIncludePrivate">Only Private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Search in Template Repositories</string>
<string name="mergeIntoBranch">Merge Into</string>
<string name="pullFromBranch">Pull From</string>
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
<string name="mergeIntoError">Merge into branch is required</string>
<string name="pullFromError">Pull from branch is required</string>
<string name="titleError">Title is required</string>
<string name="prCreateSuccess">Pull Request created successfully</string>
<string name="prAlreadyExists">A pull request between these branches already exists</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Выход</string> <string name="navLogout">Выход</string>
<string name="navExplore">Обзор</string> <string name="navExplore">Обзор</string>
<string name="navAdministration">Администрирование</string> <string name="navAdministration">Администрирование</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">О программе</string> <string name="pageTitleAbout">О программе</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">Обзор</string> <string name="pageTitleExplore">Обзор</string>
<string name="pageTitleAdministration">Администрирование Gitea</string> <string name="pageTitleAdministration">Администрирование Gitea</string>
<string name="pageTitleUserAccounts">Управление аккаунтами</string> <string name="pageTitleUserAccounts">Управление аккаунтами</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Демо репозиторий</string> <string name="repoName">Демо репозиторий</string>
<string name="repoFullname">Репозиторий с организацией</string> <string name="repoFullname">Репозиторий с организацией</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">Открыть навигацию</string> <string name="navigation_drawer_open">Открыть навигацию</string>
<string name="navigation_drawer_close">Закрыть навигацию</string> <string name="navigation_drawer_close">Закрыть навигацию</string>
<string name="logo">Войти в Gitea</string> <string name="logo">Войти в Gitea</string>
<string name="protocol">Protocol</string>
<string name="urlInfoTooltip">1. Выберите протокол (https или http) \n2. Укажите URL Gitea, например: try.gitea.io \n3. Если для учетной записи включена 2FA, введите код OTP в соответствующее поле. \n4. Для базовой аутентификации HTTP укажите USERNAME@DOMAIN.COM в поле URL.</string> <string name="urlInfoTooltip">1. Выберите протокол (https или http) \n2. Укажите URL Gitea, например: try.gitea.io \n3. Если для учетной записи включена 2FA, введите код OTP в соответствующее поле. \n4. Для базовой аутентификации HTTP укажите USERNAME@DOMAIN.COM в поле URL.</string>
<string name="malformedUrl">Не удалось подключиться к хосту. Пожалуйста, проверьте URL-адрес или порт на наличие ошибок</string> <string name="malformedUrl">Не удалось подключиться к хосту. Пожалуйста, проверьте URL-адрес или порт на наличие ошибок</string>
<string name="protocolError">Не рекомендуется использовать протокол HTTP, если вы не тестируете в локальной сети</string> <string name="protocolError">Не рекомендуется использовать протокол HTTP, если вы не тестируете в локальной сети</string>
@ -69,6 +72,7 @@
<string name="emptyFieldURL">Требуется URL экземпляра</string> <string name="emptyFieldURL">Требуется URL экземпляра</string>
<string name="emptyFieldUsername">Требуется имя пользователя</string> <string name="emptyFieldUsername">Требуется имя пользователя</string>
<string name="emptyFieldPassword">Требуется пароль</string> <string name="emptyFieldPassword">Требуется пароль</string>
<string name="protocolEmptyError">Protocol is required</string>
<string name="checkNetConnection">Нет подключения к интернету, проверьте наличие связи.</string> <string name="checkNetConnection">Нет подключения к интернету, проверьте наличие связи.</string>
<string name="netConnectionIsBack">Ура, у нас есть интернет!</string> <string name="netConnectionIsBack">Ура, у нас есть интернет!</string>
<string name="repoNameErrorEmpty">Название репозитория пустое.</string> <string name="repoNameErrorEmpty">Название репозитория пустое.</string>
@ -106,7 +110,6 @@
<string name="tab_text_collaborators">Сотрудники</string> <string name="tab_text_collaborators">Сотрудники</string>
<string name="tabPullRequests">Запросы на слияние</string> <string name="tabPullRequests">Запросы на слияние</string>
<string name="noDataIssueTab">Задач не обнаружено</string> <string name="noDataIssueTab">Задач не обнаружено</string>
<string name="infoTabRepoWebsite">Сайт</string>
<string name="infoTabRepoSize">Размер</string> <string name="infoTabRepoSize">Размер</string>
<string name="infoTabRepoDefaultBranch">Ветка по умолчанию</string> <string name="infoTabRepoDefaultBranch">Ветка по умолчанию</string>
<string name="infoTabRepoSshUrl">SSH/URL</string> <string name="infoTabRepoSshUrl">SSH/URL</string>
@ -419,7 +422,6 @@
<string name="genericServerResponseError">На данный момент мы не можем подключиться к серверу, пожалуйста, проверьте статус вашего сервера и повторите попытку</string> <string name="genericServerResponseError">На данный момент мы не можем подключиться к серверу, пожалуйста, проверьте статус вашего сервера и повторите попытку</string>
<string name="genericCopyUrl">Копировать URL</string> <string name="genericCopyUrl">Копировать URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">Перевести GitNex на Crowdin</string>
<string name="exploreTextBoxHint">Просмотреть репозитории</string> <string name="exploreTextBoxHint">Просмотреть репозитории</string>
<string name="starRepository">Репозиторий в избранное</string> <string name="starRepository">Репозиторий в избранное</string>
<string name="unStarRepository">Убрать из избранного</string> <string name="unStarRepository">Убрать из избранного</string>
@ -504,7 +506,7 @@
<string name="settingsEnableReportsText">Включить отчёты об ошибках</string> <string name="settingsEnableReportsText">Включить отчёты об ошибках</string>
<string name="crashTitle">GitNex остановлен :(</string> <string name="crashTitle">GitNex остановлен :(</string>
<string name="setCrashReports">Отчёты об ошибках</string> <string name="setCrashReports">Отчёты об ошибках</string>
<string name="crashMessage">Вы можете нажать на кнопку ОК, чтобы отправить отчёт об ошибке по электронной почте. Это поможет исправить это :)\n\nВы также можете добавить дополнительный контент в электронную почту. Спасибо!</string> <string name="crashMessage">It is encouraged to open an issue at the project repository with how to reproduce this bug. It is easier to debug and fix the problem that way.\n\nTap the OK button to send the crash report by email instead. Additional content could be added in the email.\nThank you!</string>
<string name="forceLogoutDialogHeader">Пожалуйста, войдите снова</string> <string name="forceLogoutDialogHeader">Пожалуйста, войдите снова</string>
<string name="forceLogoutDialogDescription">В связи с некоторыми существенными изменениями, касающимися внутренней работы приложения, мы просим вас снова войти в систему. Эти изменения позволяют сделать приложение более гибким в будущем.\n\nБлагодарим вас за терпение и приносим извинения за неудобства.</string> <string name="forceLogoutDialogDescription">В связи с некоторыми существенными изменениями, касающимися внутренней работы приложения, мы просим вас снова войти в систему. Эти изменения позволяют сделать приложение более гибким в будущем.\n\nБлагодарим вас за терпение и приносим извинения за неудобства.</string>
<string name="deleteAllDrafts">Удалить все черновики</string> <string name="deleteAllDrafts">Удалить все черновики</string>
@ -518,6 +520,8 @@
<string name="securityHintText">SSL-сертификаты, кэш, задержка опроса</string> <string name="securityHintText">SSL-сертификаты, кэш, задержка опроса</string>
<string name="languagesHintText">Языки</string> <string name="languagesHintText">Языки</string>
<string name="reportsHintText">Отчёты об ошибках</string> <string name="reportsHintText">Отчёты об ошибках</string>
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
<string name="aboutAppHintText">App version, build, user gitea version</string>
<string name="archivedRepository">Архивировано</string> <string name="archivedRepository">Архивировано</string>
<string name="accountDeletedMessage">Учётная запись успешно удалена</string> <string name="accountDeletedMessage">Учётная запись успешно удалена</string>
<string name="removeAccountPopupTitle">Удалить учётную запись</string> <string name="removeAccountPopupTitle">Удалить учётную запись</string>
@ -560,4 +564,26 @@
<string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string> <string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string>
<string name="repoSettingsDeleteError">Repository name does not match</string> <string name="repoSettingsDeleteError">Repository name does not match</string>
<string name="repoDeletionSuccess">Repository deleted successfully</string> <string name="repoDeletionSuccess">Repository deleted successfully</string>
<string name="repoSettingsTransferOwnership">Transfer Ownership</string>
<string name="repoSettingsTransferOwnershipHint">Transfer this repository to a user or to an organization for which you have administrator rights</string>
<string name="repoSettingsTransferOwnershipDescription">Things to know before transfer:\n\n- You will lose access to the repository if you transfer it to an individual user.\n- You will keep access to the repository if you transfer it to an organization that you (co-)own.\n\nEnter the repository name as confirmation</string>
<string name="repoTransferText">Perform Transfer</string>
<string name="repoTransferOwnerText">New Owner</string>
<string name="repoTransferSuccess">Repository transferred successfully</string>
<string name="repoTransferOwnerError">New owner is required</string>
<string name="repoTransferError">There is a problem with the owner name. Make sure that the new owner exists</string>
<string name="exploreFilterDialogTitle">Filter Repositories</string>
<string name="exploreFilterIncludeTopic">Search ONLY in Topic</string>
<string name="exploreFilterIncludeDesc">Search in Description</string>
<string name="exploreFilterIncludeArchive">Only Archived Repositories</string>
<string name="exploreFilterIncludePrivate">Only Private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Search in Template Repositories</string>
<string name="mergeIntoBranch">Merge Into</string>
<string name="pullFromBranch">Pull From</string>
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
<string name="mergeIntoError">Merge into branch is required</string>
<string name="pullFromError">Pull from branch is required</string>
<string name="titleError">Title is required</string>
<string name="prCreateSuccess">Pull Request created successfully</string>
<string name="prAlreadyExists">A pull request between these branches already exists</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Одјави ме</string> <string name="navLogout">Одјави ме</string>
<string name="navExplore">Претражи репозиторијуме</string> <string name="navExplore">Претражи репозиторијуме</string>
<string name="navAdministration">Administration</string> <string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">О програму</string> <string name="pageTitleAbout">О програму</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">Претражи репозиторијуме</string> <string name="pageTitleExplore">Претражи репозиторијуме</string>
<string name="pageTitleAdministration">Gitea Administration</string> <string name="pageTitleAdministration">Gitea Administration</string>
<string name="pageTitleUserAccounts">Manage Accounts</string> <string name="pageTitleUserAccounts">Manage Accounts</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Демо репозиторијум</string> <string name="repoName">Демо репозиторијум</string>
<string name="repoFullname">Репозиторијум са ORG</string> <string name="repoFullname">Репозиторијум са ORG</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">Отвори навигацију</string> <string name="navigation_drawer_open">Отвори навигацију</string>
<string name="navigation_drawer_close">Затвори навигацију</string> <string name="navigation_drawer_close">Затвори навигацију</string>
<string name="logo">Пријави ме</string> <string name="logo">Пријави ме</string>
<string name="protocol">Protocol</string>
<string name="urlInfoTooltip">1. Одабери одговарајући протокол (HTTPS или HTTP).\n2. Унеси URL инстанце, нпр. try.gitea.io.\n3. Ако користиш 2FA, унеси OTP код.\n4. Ако користиш HTTP протокол, унеси URL инстанце у формату korisnickoime@domen.com.</string> <string name="urlInfoTooltip">1. Одабери одговарајући протокол (HTTPS или HTTP).\n2. Унеси URL инстанце, нпр. try.gitea.io.\n3. Ако користиш 2FA, унеси OTP код.\n4. Ако користиш HTTP протокол, унеси URL инстанце у формату korisnickoime@domen.com.</string>
<string name="malformedUrl">Couldn\'t connect to host. Please check your URL or port for any errors</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="protocolError">It is not recommended to use HTTP protocol unless you are testing on local network</string>
@ -69,6 +72,7 @@
<string name="emptyFieldURL">URL инстанце је обавезан</string> <string name="emptyFieldURL">URL инстанце је обавезан</string>
<string name="emptyFieldUsername">Корисничко име је обавезно</string> <string name="emptyFieldUsername">Корисничко име је обавезно</string>
<string name="emptyFieldPassword">Лозинка је обавезна</string> <string name="emptyFieldPassword">Лозинка је обавезна</string>
<string name="protocolEmptyError">Protocol is required</string>
<string name="checkNetConnection">Не могу да приступим мрежи, провери интернет конекцију</string> <string name="checkNetConnection">Не могу да приступим мрежи, провери интернет конекцију</string>
<string name="netConnectionIsBack">Yay, We have Internet connection!</string> <string name="netConnectionIsBack">Yay, We have Internet connection!</string>
<string name="repoNameErrorEmpty">Назив репозиторијума је обавезан</string> <string name="repoNameErrorEmpty">Назив репозиторијума је обавезан</string>
@ -106,7 +110,6 @@
<string name="tab_text_collaborators">Сарадници</string> <string name="tab_text_collaborators">Сарадници</string>
<string name="tabPullRequests">Пул захтеви</string> <string name="tabPullRequests">Пул захтеви</string>
<string name="noDataIssueTab">Ниједан задатак није пронађен</string> <string name="noDataIssueTab">Ниједан задатак није пронађен</string>
<string name="infoTabRepoWebsite">Веб-сајт</string>
<string name="infoTabRepoSize">Величина</string> <string name="infoTabRepoSize">Величина</string>
<string name="infoTabRepoDefaultBranch">Подразумевана грана</string> <string name="infoTabRepoDefaultBranch">Подразумевана грана</string>
<string name="infoTabRepoSshUrl">SSH URL</string> <string name="infoTabRepoSshUrl">SSH URL</string>
@ -419,7 +422,6 @@
<string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string> <string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string>
<string name="genericCopyUrl">Copy URL</string> <string name="genericCopyUrl">Copy URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">Преведи GitNex на платформи Crowdin</string>
<string name="exploreTextBoxHint">Претражи репозиторијуме</string> <string name="exploreTextBoxHint">Претражи репозиторијуме</string>
<string name="starRepository">Додај у омиљене</string> <string name="starRepository">Додај у омиљене</string>
<string name="unStarRepository">Уклони из омиљених</string> <string name="unStarRepository">Уклони из омиљених</string>
@ -504,7 +506,7 @@
<string name="settingsEnableReportsText">Enable Crash Reports</string> <string name="settingsEnableReportsText">Enable Crash Reports</string>
<string name="crashTitle">GitNex has stopped :(</string> <string name="crashTitle">GitNex has stopped :(</string>
<string name="setCrashReports">Crash reports</string> <string name="setCrashReports">Crash reports</string>
<string name="crashMessage">You can tap the OK button to send the crash report by email. It will help to fix it :)\n\nYou can also add additional content in the email. Thank you!</string> <string name="crashMessage">It is encouraged to open an issue at the project repository with how to reproduce this bug. It is easier to debug and fix the problem that way.\n\nTap the OK button to send the crash report by email instead. Additional content could be added in the email.\nThank you!</string>
<string name="forceLogoutDialogHeader">Please sign in again</string> <string name="forceLogoutDialogHeader">Please sign in again</string>
<string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string> <string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string>
<string name="deleteAllDrafts">Delete All Drafts</string> <string name="deleteAllDrafts">Delete All Drafts</string>
@ -518,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string> <string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</string> <string name="languagesHintText">Languages</string>
<string name="reportsHintText">Crash reports</string> <string name="reportsHintText">Crash reports</string>
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
<string name="aboutAppHintText">App version, build, user gitea version</string>
<string name="archivedRepository">Archived</string> <string name="archivedRepository">Archived</string>
<string name="accountDeletedMessage">Account deleted successfully</string> <string name="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string> <string name="removeAccountPopupTitle">Remove Account</string>
@ -560,4 +564,26 @@
<string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string> <string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string>
<string name="repoSettingsDeleteError">Repository name does not match</string> <string name="repoSettingsDeleteError">Repository name does not match</string>
<string name="repoDeletionSuccess">Repository deleted successfully</string> <string name="repoDeletionSuccess">Repository deleted successfully</string>
<string name="repoSettingsTransferOwnership">Transfer Ownership</string>
<string name="repoSettingsTransferOwnershipHint">Transfer this repository to a user or to an organization for which you have administrator rights</string>
<string name="repoSettingsTransferOwnershipDescription">Things to know before transfer:\n\n- You will lose access to the repository if you transfer it to an individual user.\n- You will keep access to the repository if you transfer it to an organization that you (co-)own.\n\nEnter the repository name as confirmation</string>
<string name="repoTransferText">Perform Transfer</string>
<string name="repoTransferOwnerText">New Owner</string>
<string name="repoTransferSuccess">Repository transferred successfully</string>
<string name="repoTransferOwnerError">New owner is required</string>
<string name="repoTransferError">There is a problem with the owner name. Make sure that the new owner exists</string>
<string name="exploreFilterDialogTitle">Filter Repositories</string>
<string name="exploreFilterIncludeTopic">Search ONLY in Topic</string>
<string name="exploreFilterIncludeDesc">Search in Description</string>
<string name="exploreFilterIncludeArchive">Only Archived Repositories</string>
<string name="exploreFilterIncludePrivate">Only Private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Search in Template Repositories</string>
<string name="mergeIntoBranch">Merge Into</string>
<string name="pullFromBranch">Pull From</string>
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
<string name="mergeIntoError">Merge into branch is required</string>
<string name="pullFromError">Pull from branch is required</string>
<string name="titleError">Title is required</string>
<string name="prCreateSuccess">Pull Request created successfully</string>
<string name="prAlreadyExists">A pull request between these branches already exists</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Çıkış Yap</string> <string name="navLogout">Çıkış Yap</string>
<string name="navExplore">Keşfet</string> <string name="navExplore">Keşfet</string>
<string name="navAdministration">Administration</string> <string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">Hakkında</string> <string name="pageTitleAbout">Hakkında</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">Keşfet</string> <string name="pageTitleExplore">Keşfet</string>
<string name="pageTitleAdministration">Gitea Administration</string> <string name="pageTitleAdministration">Gitea Administration</string>
<string name="pageTitleUserAccounts">Manage Accounts</string> <string name="pageTitleUserAccounts">Manage Accounts</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Demo deposu</string> <string name="repoName">Demo deposu</string>
<string name="repoFullname">ORG ile Depo</string> <string name="repoFullname">ORG ile Depo</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">Gezinme Çekmecesini Aç</string> <string name="navigation_drawer_open">Gezinme Çekmecesini Aç</string>
<string name="navigation_drawer_close">Gezinme Çekmecesini Kapat</string> <string name="navigation_drawer_close">Gezinme Çekmecesini Kapat</string>
<string name="logo">Gitea\'ya Giriş Yap</string> <string name="logo">Gitea\'ya Giriş Yap</string>
<string name="protocol">Protocol</string>
<string name="urlInfoTooltip">1- Doğru protokolü seçin (https veya http). \n2- Gitea url girin, örneğin: try.gitea.io. \n3- Hesabınız için 2FA\'yı etkinleştirdiyseniz, kodu OTP Kodu alanına girin. \n4- HTTP temel kimlik doğrulaması için, URL alanında KULLANICIADI@DOMAIN.COM adresini kullanın.</string> <string name="urlInfoTooltip">1- Doğru protokolü seçin (https veya http). \n2- Gitea url girin, örneğin: try.gitea.io. \n3- Hesabınız için 2FA\'yı etkinleştirdiyseniz, kodu OTP Kodu alanına girin. \n4- HTTP temel kimlik doğrulaması için, URL alanında KULLANICIADI@DOMAIN.COM adresini kullanın.</string>
<string name="malformedUrl">Couldn\'t connect to host. Please check your URL or port for any errors</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="protocolError">It is not recommended to use HTTP protocol unless you are testing on local network</string>
@ -69,6 +72,7 @@
<string name="emptyFieldURL">Örnek URL gerekli</string> <string name="emptyFieldURL">Örnek URL gerekli</string>
<string name="emptyFieldUsername">Kullanıcı adı gerekli</string> <string name="emptyFieldUsername">Kullanıcı adı gerekli</string>
<string name="emptyFieldPassword">Parola gerekli</string> <string name="emptyFieldPassword">Parola gerekli</string>
<string name="protocolEmptyError">Protocol is required</string>
<string name="checkNetConnection">Ağa erişilemiyor, lütfen internet bağlantınızı kontrol edin</string> <string name="checkNetConnection">Ağa erişilemiyor, lütfen internet bağlantınızı kontrol edin</string>
<string name="netConnectionIsBack">Yay, We have Internet connection!</string> <string name="netConnectionIsBack">Yay, We have Internet connection!</string>
<string name="repoNameErrorEmpty">Depo adı boş</string> <string name="repoNameErrorEmpty">Depo adı boş</string>
@ -106,7 +110,6 @@
<string name="tab_text_collaborators">İşbirlikçiler</string> <string name="tab_text_collaborators">İşbirlikçiler</string>
<string name="tabPullRequests">İstekleri Çek</string> <string name="tabPullRequests">İstekleri Çek</string>
<string name="noDataIssueTab">Konu bulunamadı</string> <string name="noDataIssueTab">Konu bulunamadı</string>
<string name="infoTabRepoWebsite">Website</string>
<string name="infoTabRepoSize">Boyut</string> <string name="infoTabRepoSize">Boyut</string>
<string name="infoTabRepoDefaultBranch">Varsayılan Dal</string> <string name="infoTabRepoDefaultBranch">Varsayılan Dal</string>
<string name="infoTabRepoSshUrl">SSH Adresi</string> <string name="infoTabRepoSshUrl">SSH Adresi</string>
@ -419,7 +422,6 @@
<string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string> <string name="genericServerResponseError">We cannot reach the server at the moment, please check your server status and try again</string>
<string name="genericCopyUrl">Copy URL</string> <string name="genericCopyUrl">Copy URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">Crowdin\'de GitNex için Çeviri Yap</string>
<string name="exploreTextBoxHint">Depoları keşfet</string> <string name="exploreTextBoxHint">Depoları keşfet</string>
<string name="starRepository">Depoyu Yıldızla</string> <string name="starRepository">Depoyu Yıldızla</string>
<string name="unStarRepository">Depo Yıldızını Kaldır</string> <string name="unStarRepository">Depo Yıldızını Kaldır</string>
@ -504,7 +506,7 @@
<string name="settingsEnableReportsText">Enable Crash Reports</string> <string name="settingsEnableReportsText">Enable Crash Reports</string>
<string name="crashTitle">GitNex has stopped :(</string> <string name="crashTitle">GitNex has stopped :(</string>
<string name="setCrashReports">Crash reports</string> <string name="setCrashReports">Crash reports</string>
<string name="crashMessage">You can tap the OK button to send the crash report by email. It will help to fix it :)\n\nYou can also add additional content in the email. Thank you!</string> <string name="crashMessage">It is encouraged to open an issue at the project repository with how to reproduce this bug. It is easier to debug and fix the problem that way.\n\nTap the OK button to send the crash report by email instead. Additional content could be added in the email.\nThank you!</string>
<string name="forceLogoutDialogHeader">Please sign in again</string> <string name="forceLogoutDialogHeader">Please sign in again</string>
<string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string> <string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string>
<string name="deleteAllDrafts">Delete All Drafts</string> <string name="deleteAllDrafts">Delete All Drafts</string>
@ -518,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string> <string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</string> <string name="languagesHintText">Languages</string>
<string name="reportsHintText">Crash reports</string> <string name="reportsHintText">Crash reports</string>
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
<string name="aboutAppHintText">App version, build, user gitea version</string>
<string name="archivedRepository">Archived</string> <string name="archivedRepository">Archived</string>
<string name="accountDeletedMessage">Account deleted successfully</string> <string name="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string> <string name="removeAccountPopupTitle">Remove Account</string>
@ -560,4 +564,26 @@
<string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string> <string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string>
<string name="repoSettingsDeleteError">Repository name does not match</string> <string name="repoSettingsDeleteError">Repository name does not match</string>
<string name="repoDeletionSuccess">Repository deleted successfully</string> <string name="repoDeletionSuccess">Repository deleted successfully</string>
<string name="repoSettingsTransferOwnership">Transfer Ownership</string>
<string name="repoSettingsTransferOwnershipHint">Transfer this repository to a user or to an organization for which you have administrator rights</string>
<string name="repoSettingsTransferOwnershipDescription">Things to know before transfer:\n\n- You will lose access to the repository if you transfer it to an individual user.\n- You will keep access to the repository if you transfer it to an organization that you (co-)own.\n\nEnter the repository name as confirmation</string>
<string name="repoTransferText">Perform Transfer</string>
<string name="repoTransferOwnerText">New Owner</string>
<string name="repoTransferSuccess">Repository transferred successfully</string>
<string name="repoTransferOwnerError">New owner is required</string>
<string name="repoTransferError">There is a problem with the owner name. Make sure that the new owner exists</string>
<string name="exploreFilterDialogTitle">Filter Repositories</string>
<string name="exploreFilterIncludeTopic">Search ONLY in Topic</string>
<string name="exploreFilterIncludeDesc">Search in Description</string>
<string name="exploreFilterIncludeArchive">Only Archived Repositories</string>
<string name="exploreFilterIncludePrivate">Only Private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Search in Template Repositories</string>
<string name="mergeIntoBranch">Merge Into</string>
<string name="pullFromBranch">Pull From</string>
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
<string name="mergeIntoError">Merge into branch is required</string>
<string name="pullFromError">Pull from branch is required</string>
<string name="titleError">Title is required</string>
<string name="prCreateSuccess">Pull Request created successfully</string>
<string name="prAlreadyExists">A pull request between these branches already exists</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Вийти</string> <string name="navLogout">Вийти</string>
<string name="navExplore">Огляд</string> <string name="navExplore">Огляд</string>
<string name="navAdministration">Адміністрування</string> <string name="navAdministration">Адміністрування</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">Про додаток</string> <string name="pageTitleAbout">Про додаток</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">Огляд</string> <string name="pageTitleExplore">Огляд</string>
<string name="pageTitleAdministration">Адміністрування Gitea</string> <string name="pageTitleAdministration">Адміністрування Gitea</string>
<string name="pageTitleUserAccounts">Manage Accounts</string> <string name="pageTitleUserAccounts">Manage Accounts</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Демо-репозиторій</string> <string name="repoName">Демо-репозиторій</string>
<string name="repoFullname">Репозиторій з організацією</string> <string name="repoFullname">Репозиторій з організацією</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">Відкрити панель навігації</string> <string name="navigation_drawer_open">Відкрити панель навігації</string>
<string name="navigation_drawer_close">Закрити панель навігації</string> <string name="navigation_drawer_close">Закрити панель навігації</string>
<string name="logo">Увійти до Gitea</string> <string name="logo">Увійти до Gitea</string>
<string name="protocol">Protocol</string>
<string name="urlInfoTooltip">1. Оберіть правильний протокол (https або http). \n2. Введіть URL Gitea, наприклад: try.gitea.io. \n3. Якщо для вашого облікового запису увімкнено двофакторну аутентифікацію, введіть код OTP у відповідне поле. \n4. Для базової автентифікації HTTP використовуйте USERNAME@DOMAIN.COM в полі URL.</string> <string name="urlInfoTooltip">1. Оберіть правильний протокол (https або http). \n2. Введіть URL Gitea, наприклад: try.gitea.io. \n3. Якщо для вашого облікового запису увімкнено двофакторну аутентифікацію, введіть код OTP у відповідне поле. \n4. Для базової автентифікації HTTP використовуйте USERNAME@DOMAIN.COM в полі URL.</string>
<string name="malformedUrl">Couldn\'t connect to host. Please check your URL or port for any errors</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="protocolError">It is not recommended to use HTTP protocol unless you are testing on local network</string>
@ -69,6 +72,7 @@
<string name="emptyFieldURL">Потрібен URL екземпляра</string> <string name="emptyFieldURL">Потрібен URL екземпляра</string>
<string name="emptyFieldUsername">Ім\'я користувача є обов\'язковим</string> <string name="emptyFieldUsername">Ім\'я користувача є обов\'язковим</string>
<string name="emptyFieldPassword">Пароль є обов\'язковим</string> <string name="emptyFieldPassword">Пароль є обов\'язковим</string>
<string name="protocolEmptyError">Protocol is required</string>
<string name="checkNetConnection">Неможливо отримати доступ до мережі, будь ласка, перевірте підключення до Інтернету</string> <string name="checkNetConnection">Неможливо отримати доступ до мережі, будь ласка, перевірте підключення до Інтернету</string>
<string name="netConnectionIsBack">Ура! Ми маємо підключення до Інтернету!</string> <string name="netConnectionIsBack">Ура! Ми маємо підключення до Інтернету!</string>
<string name="repoNameErrorEmpty">Назва репозиторія порожня</string> <string name="repoNameErrorEmpty">Назва репозиторія порожня</string>
@ -106,7 +110,6 @@
<string name="tab_text_collaborators">Співавтори</string> <string name="tab_text_collaborators">Співавтори</string>
<string name="tabPullRequests">Запити на злиття</string> <string name="tabPullRequests">Запити на злиття</string>
<string name="noDataIssueTab">Проблем не знайдено</string> <string name="noDataIssueTab">Проблем не знайдено</string>
<string name="infoTabRepoWebsite">Веб-сайт</string>
<string name="infoTabRepoSize">Розмір</string> <string name="infoTabRepoSize">Розмір</string>
<string name="infoTabRepoDefaultBranch">Головна гілка</string> <string name="infoTabRepoDefaultBranch">Головна гілка</string>
<string name="infoTabRepoSshUrl">URL SSH</string> <string name="infoTabRepoSshUrl">URL SSH</string>
@ -419,7 +422,6 @@
<string name="genericServerResponseError">На даний момент ми не можемо зв\'язатися з сервером, будь ласка, перевірте статус вашого сервера і спробуйте ще раз</string> <string name="genericServerResponseError">На даний момент ми не можемо зв\'язатися з сервером, будь ласка, перевірте статус вашого сервера і спробуйте ще раз</string>
<string name="genericCopyUrl">Copy URL</string> <string name="genericCopyUrl">Copy URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">Перекласти GitNex на Crowdin</string>
<string name="exploreTextBoxHint">Переглянути репозиторії</string> <string name="exploreTextBoxHint">Переглянути репозиторії</string>
<string name="starRepository">Репозиторій у обране</string> <string name="starRepository">Репозиторій у обране</string>
<string name="unStarRepository">Вилучити репозиторій з обраного</string> <string name="unStarRepository">Вилучити репозиторій з обраного</string>
@ -504,7 +506,7 @@
<string name="settingsEnableReportsText">Увімкнути повідомлення про падіння</string> <string name="settingsEnableReportsText">Увімкнути повідомлення про падіння</string>
<string name="crashTitle">GitNex зупинено :(</string> <string name="crashTitle">GitNex зупинено :(</string>
<string name="setCrashReports">Звіти про падіння</string> <string name="setCrashReports">Звіти про падіння</string>
<string name="crashMessage">Ви можете натиснути ОК кнопку, щоб надіслати звіт про аварію електронною поштою. Це допоможе виправити проблему :)\n\nВи також можете прикріпити додатковий вміст до листа. Дякуємо!</string> <string name="crashMessage">It is encouraged to open an issue at the project repository with how to reproduce this bug. It is easier to debug and fix the problem that way.\n\nTap the OK button to send the crash report by email instead. Additional content could be added in the email.\nThank you!</string>
<string name="forceLogoutDialogHeader">Please sign in again</string> <string name="forceLogoutDialogHeader">Please sign in again</string>
<string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string> <string name="forceLogoutDialogDescription">Due to some major changes regarding the internal functioning of the app, we require you to login again. These changes allow us to make the app more flexible in the future.\n\nThank you for your patience and sorry for the inconvenience.</string>
<string name="deleteAllDrafts">Delete All Drafts</string> <string name="deleteAllDrafts">Delete All Drafts</string>
@ -518,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string> <string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Мови</string> <string name="languagesHintText">Мови</string>
<string name="reportsHintText">Звіти про падіння</string> <string name="reportsHintText">Звіти про падіння</string>
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
<string name="aboutAppHintText">App version, build, user gitea version</string>
<string name="archivedRepository">Архівовано</string> <string name="archivedRepository">Архівовано</string>
<string name="accountDeletedMessage">Account deleted successfully</string> <string name="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string> <string name="removeAccountPopupTitle">Remove Account</string>
@ -560,4 +564,26 @@
<string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string> <string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string>
<string name="repoSettingsDeleteError">Repository name does not match</string> <string name="repoSettingsDeleteError">Repository name does not match</string>
<string name="repoDeletionSuccess">Repository deleted successfully</string> <string name="repoDeletionSuccess">Repository deleted successfully</string>
<string name="repoSettingsTransferOwnership">Transfer Ownership</string>
<string name="repoSettingsTransferOwnershipHint">Transfer this repository to a user or to an organization for which you have administrator rights</string>
<string name="repoSettingsTransferOwnershipDescription">Things to know before transfer:\n\n- You will lose access to the repository if you transfer it to an individual user.\n- You will keep access to the repository if you transfer it to an organization that you (co-)own.\n\nEnter the repository name as confirmation</string>
<string name="repoTransferText">Perform Transfer</string>
<string name="repoTransferOwnerText">New Owner</string>
<string name="repoTransferSuccess">Repository transferred successfully</string>
<string name="repoTransferOwnerError">New owner is required</string>
<string name="repoTransferError">There is a problem with the owner name. Make sure that the new owner exists</string>
<string name="exploreFilterDialogTitle">Filter Repositories</string>
<string name="exploreFilterIncludeTopic">Search ONLY in Topic</string>
<string name="exploreFilterIncludeDesc">Search in Description</string>
<string name="exploreFilterIncludeArchive">Only Archived Repositories</string>
<string name="exploreFilterIncludePrivate">Only Private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Search in Template Repositories</string>
<string name="mergeIntoBranch">Merge Into</string>
<string name="pullFromBranch">Pull From</string>
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
<string name="mergeIntoError">Merge into branch is required</string>
<string name="pullFromError">Pull from branch is required</string>
<string name="titleError">Title is required</string>
<string name="prCreateSuccess">Pull Request created successfully</string>
<string name="prAlreadyExists">A pull request between these branches already exists</string>
</resources> </resources>

View File

@ -12,6 +12,7 @@
<string name="navLogout">退出</string> <string name="navLogout">退出</string>
<string name="navExplore">探索</string> <string name="navExplore">探索</string>
<string name="navAdministration">管理</string> <string name="navAdministration">管理</string>
<string name="navSearchIssuesPulls">搜索问题</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
<string name="pageTitleAbout">关于</string> <string name="pageTitleAbout">关于</string>
@ -37,6 +38,7 @@
<string name="pageTitleExplore">探索</string> <string name="pageTitleExplore">探索</string>
<string name="pageTitleAdministration">Gitea 管理</string> <string name="pageTitleAdministration">Gitea 管理</string>
<string name="pageTitleUserAccounts">管理账户</string> <string name="pageTitleUserAccounts">管理账户</string>
<string name="pageTitleNewPullRequest">新拉取请求</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">演示仓库</string> <string name="repoName">演示仓库</string>
<string name="repoFullname">有组织的存储库</string> <string name="repoFullname">有组织的存储库</string>
@ -62,6 +64,7 @@
<string name="navigation_drawer_open">打开导航栏</string> <string name="navigation_drawer_open">打开导航栏</string>
<string name="navigation_drawer_close">关闭导航栏</string> <string name="navigation_drawer_close">关闭导航栏</string>
<string name="logo">登录到 Gitea</string> <string name="logo">登录到 Gitea</string>
<string name="protocol">协议</string>
<string name="urlInfoTooltip">1- 选择协议 (https 或 http). \n2- 输入Gitea访问地址(可带端口) 例如: try.gitea.io:3000. \n3- 如已启用双重验证请在OTP输入有效代码。 \n4- 在 URL 字段中使用 USERNAME@DOMAIN.COM 进行 HTTP 基本身份验证。</string> <string name="urlInfoTooltip">1- 选择协议 (https 或 http). \n2- 输入Gitea访问地址(可带端口) 例如: try.gitea.io:3000. \n3- 如已启用双重验证请在OTP输入有效代码。 \n4- 在 URL 字段中使用 USERNAME@DOMAIN.COM 进行 HTTP 基本身份验证。</string>
<string name="malformedUrl">无法连接到主机。请检查您的 URL 或端口是否有任何错误</string> <string name="malformedUrl">无法连接到主机。请检查您的 URL 或端口是否有任何错误</string>
<string name="protocolError">除非您正在本地网络上测试,否则不建议使用 HTTP 协议</string> <string name="protocolError">除非您正在本地网络上测试,否则不建议使用 HTTP 协议</string>
@ -69,6 +72,7 @@
<string name="emptyFieldURL">未填写 Gitea访问地址</string> <string name="emptyFieldURL">未填写 Gitea访问地址</string>
<string name="emptyFieldUsername">未填写 用户名</string> <string name="emptyFieldUsername">未填写 用户名</string>
<string name="emptyFieldPassword">未填写 密码</string> <string name="emptyFieldPassword">未填写 密码</string>
<string name="protocolEmptyError">协议是必需的</string>
<string name="checkNetConnection">无法连接,请检查您的网络情况</string> <string name="checkNetConnection">无法连接,请检查您的网络情况</string>
<string name="netConnectionIsBack">有网了,奥力给!</string> <string name="netConnectionIsBack">有网了,奥力给!</string>
<string name="repoNameErrorEmpty">仓库名称为空</string> <string name="repoNameErrorEmpty">仓库名称为空</string>
@ -106,7 +110,6 @@
<string name="tab_text_collaborators">协作者</string> <string name="tab_text_collaborators">协作者</string>
<string name="tabPullRequests">拉取请求</string> <string name="tabPullRequests">拉取请求</string>
<string name="noDataIssueTab">没有工单</string> <string name="noDataIssueTab">没有工单</string>
<string name="infoTabRepoWebsite">网站</string>
<string name="infoTabRepoSize">尺寸</string> <string name="infoTabRepoSize">尺寸</string>
<string name="infoTabRepoDefaultBranch">默认分支</string> <string name="infoTabRepoDefaultBranch">默认分支</string>
<string name="infoTabRepoSshUrl">SSH URL</string> <string name="infoTabRepoSshUrl">SSH URL</string>
@ -258,7 +261,7 @@
<string name="newTeamAccessControls">访问控制</string> <string name="newTeamAccessControls">访问控制</string>
<string name="newTeamPermissionRead">成员可以查看并克隆团队仓库</string> <string name="newTeamPermissionRead">成员可以查看并克隆团队仓库</string>
<string name="newTeamPermissionWrite">会员可以读取并推送到团队仓库</string> <string name="newTeamPermissionWrite">会员可以读取并推送到团队仓库</string>
<string name="newTeamPermissionAdmin">员可以拉取和推送到团队仓库并添加合作者</string> <string name="newTeamPermissionAdmin">员可以拉取和推送到团队仓库并添加合作者</string>
<string name="teamNameEmpty">请输入团队名称</string> <string name="teamNameEmpty">请输入团队名称</string>
<string name="teamNameError">团队名称只能包含字母数字、 破折号 (-), 下划线 (_) 和 dot (.) 字符</string> <string name="teamNameError">团队名称只能包含字母数字、 破折号 (-), 下划线 (_) 和 dot (.) 字符</string>
<string name="teamPermissionEmpty">请选择权限</string> <string name="teamPermissionEmpty">请选择权限</string>
@ -419,7 +422,6 @@
<string name="genericServerResponseError">目前我们无法访问服务器,请检查您的服务器状态,然后重试</string> <string name="genericServerResponseError">目前我们无法访问服务器,请检查您的服务器状态,然后重试</string>
<string name="genericCopyUrl">复制 URL</string> <string name="genericCopyUrl">复制 URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">使用 Crowdin 翻译 GitNex</string>
<string name="exploreTextBoxHint">探索仓库</string> <string name="exploreTextBoxHint">探索仓库</string>
<string name="starRepository">星级仓库</string> <string name="starRepository">星级仓库</string>
<string name="unStarRepository">从仓库中删除星星</string> <string name="unStarRepository">从仓库中删除星星</string>
@ -456,8 +458,8 @@
<string name="deleteBranchForkInfo">该分支属于一个分叉存储库</string> <string name="deleteBranchForkInfo">该分支属于一个分叉存储库</string>
<string name="mergeCommentText">合并评论</string> <string name="mergeCommentText">合并评论</string>
<string name="mergePRSuccessMsg">拉取请求已成功合并</string> <string name="mergePRSuccessMsg">拉取请求已成功合并</string>
<string name="mergePR404ErrorMsg">拉取请求不可用于合并</string> <string name="mergePR404ErrorMsg">用于合并的拉取请求不可用</string>
<string name="mergeOptionMerge">合并请求</string> <string name="mergeOptionMerge">合并拉取请求</string>
<string name="mergeOptionRebase">重建并合并</string> <string name="mergeOptionRebase">重建并合并</string>
<string name="mergeOptionRebaseCommit">重建合并 (&#45;&#45;no-ff)</string> <string name="mergeOptionRebaseCommit">重建合并 (&#45;&#45;no-ff)</string>
<string name="mergeOptionSquash">压缩提交并合并</string> <string name="mergeOptionSquash">压缩提交并合并</string>
@ -476,7 +478,7 @@
<string name="sharePr">分享拉取请求</string> <string name="sharePr">分享拉取请求</string>
<string name="shareRepository">共享存储库</string> <string name="shareRepository">共享存储库</string>
<string name="createRepository">创建仓库</string> <string name="createRepository">创建仓库</string>
<string name="commitTitle">Commits</string> <string name="commitTitle">提交</string>
<string name="commitCommittedBy">由 %1$s提交</string> <string name="commitCommittedBy">由 %1$s提交</string>
<string name="viewCommits">查看提交</string> <string name="viewCommits">查看提交</string>
<!-- Memorizing Trust Manager --> <!-- Memorizing Trust Manager -->
@ -504,7 +506,7 @@
<string name="settingsEnableReportsText">启用崩溃报告</string> <string name="settingsEnableReportsText">启用崩溃报告</string>
<string name="crashTitle">GitNex 已停止 :(</string> <string name="crashTitle">GitNex 已停止 :(</string>
<string name="setCrashReports">崩溃报告</string> <string name="setCrashReports">崩溃报告</string>
<string name="crashMessage">您可以点击确定按钮通过电子邮件发送崩溃报告。 这将有助于修复它:)\n\n您也可以在电子邮件中添加额外的内容。谢谢!</string> <string name="crashMessage">鼓励在项目存储库中提出一个问题并说明如何重现这个bug。这样更容易调试和修复问题。\n\n点击OK按钮通过电子邮件发送崩溃报告。可以在电子邮件中添加其他内容\n谢谢!</string>
<string name="forceLogoutDialogHeader">请重新登录</string> <string name="forceLogoutDialogHeader">请重新登录</string>
<string name="forceLogoutDialogDescription">由于应用内部功能发生了一些重大变化,我们要求您重新登录。这些变化使我们能够使应用程序在未来更具灵活性。\n\n感谢您的耐心对给您带来的不便我们深表歉意</string> <string name="forceLogoutDialogDescription">由于应用内部功能发生了一些重大变化,我们要求您重新登录。这些变化使我们能够使应用程序在未来更具灵活性。\n\n感谢您的耐心对给您带来的不便我们深表歉意</string>
<string name="deleteAllDrafts">删除所有草稿</string> <string name="deleteAllDrafts">删除所有草稿</string>
@ -518,6 +520,8 @@
<string name="securityHintText">SSL 证书、缓存、轮询延迟</string> <string name="securityHintText">SSL 证书、缓存、轮询延迟</string>
<string name="languagesHintText">语言</string> <string name="languagesHintText">语言</string>
<string name="reportsHintText">崩溃报告</string> <string name="reportsHintText">崩溃报告</string>
<string name="rateAppHintText">如果你喜欢GitNex你可以给它点赞</string>
<string name="aboutAppHintText">应用程序版本、构建、用户gitea版本</string>
<string name="archivedRepository">已存档</string> <string name="archivedRepository">已存档</string>
<string name="accountDeletedMessage">帐户删除成功</string> <string name="accountDeletedMessage">帐户删除成功</string>
<string name="removeAccountPopupTitle">删除账户</string> <string name="removeAccountPopupTitle">删除账户</string>
@ -541,23 +545,45 @@
<string name="markedNotificationsAsRead">成功将所有通知标记为已读</string> <string name="markedNotificationsAsRead">成功将所有通知标记为已读</string>
<string name="isRead">已读</string> <string name="isRead">已读</string>
<string name="isUnread">未读</string> <string name="isUnread">未读</string>
<string name="repoSettingsTitle">Repository Settings</string> <string name="repoSettingsTitle">存储库设置</string>
<string name="repoSettingsEditProperties">Edit Properties</string> <string name="repoSettingsEditProperties">编辑属性</string>
<string name="repoSettingsDelete">Delete Repository</string> <string name="repoSettingsDelete">删除存储库</string>
<string name="repoSettingsDeleteHint">Be careful, this operation CANNOT be undone!</string> <string name="repoSettingsDeleteHint">小心,这个操作无法撤销!</string>
<string name="repoPropertiesTemplate">Set as Template</string> <string name="repoPropertiesTemplate">设置为模板</string>
<string name="repoPropertiesEnableIssues">Enable Issues</string> <string name="repoPropertiesEnableIssues">启用问题</string>
<string name="repoPropertiesExternalIssuesUrl">External Issue Tracker Url</string> <string name="repoPropertiesExternalIssuesUrl">外部问题跟踪网址</string>
<string name="repoPropertiesEnableWiki">Enable Wiki</string> <string name="repoPropertiesEnableWiki">启用 Wiki</string>
<string name="repoPropertiesExternalWikiUrl">External Wiki Url</string> <string name="repoPropertiesExternalWikiUrl">外部 Wiki 网址</string>
<string name="repoPropertiesEnablePr">Enable Pull Requests</string> <string name="repoPropertiesEnablePr">允许拉取请求</string>
<string name="repoPropertiesEnableTimeTracker">Enable Time Tracker</string> <string name="repoPropertiesEnableTimeTracker">启用时间追踪器</string>
<string name="repoPropertiesEnableMergeCommits">Enable Merge Commits</string> <string name="repoPropertiesEnableMergeCommits">启用合并提交</string>
<string name="repoPropertiesEnableRebase">Enable Rebase</string> <string name="repoPropertiesEnableRebase">启用代码变基</string>
<string name="repoPropertiesEnableSquash">Enable Squash and Merge</string> <string name="repoPropertiesEnableSquash">启用压扁和合并</string>
<string name="repoPropertiesEnableForceMerge">Enable Rebase with Merge Commits (&#8212;&#8212;no-ff)</string> <string name="repoPropertiesEnableForceMerge">用合并提交(&#8212;&#8212;no-ff)启用代码变基</string>
<string name="repoPropertiesSaveSuccess">Repository properties updated successfully</string> <string name="repoPropertiesSaveSuccess">成功更新存储库属性</string>
<string name="repoSettingsDeleteDescription">Things to know before deletion:\n\n- This operation CANNOT be undone.\n- This operation will permanently delete the repository including code, issues, comments, wiki data and collaborator settings.\n\nEnter the repository name as confirmation</string> <string name="repoSettingsDeleteDescription">删除前要知道的事:\n\n-此操作无法撤消。\n-此操作将永久删除存储库包括代码、问题、注释、Wiki数据和协作者设置。\n\n输入存储库名称作为确认</string>
<string name="repoSettingsDeleteError">Repository name does not match</string> <string name="repoSettingsDeleteError">存储库名称不匹配</string>
<string name="repoDeletionSuccess">Repository deleted successfully</string> <string name="repoDeletionSuccess">成功删除存储库</string>
<string name="repoSettingsTransferOwnership">转移所有权</string>
<string name="repoSettingsTransferOwnershipHint">将此存储库传输给您具有管理员权限的用户或组织</string>
<string name="repoSettingsTransferOwnershipDescription">转移所有权之前需要注意的事项:\n\n- 如果将存储库移交给单个用户,您将失去对该存储库的访问权。\n- 如果您将存储库转移到您和他人(共同)拥有的组织,那么您将保留对该存储库的访问权。\n\n输入存储库名称作为确认</string>
<string name="repoTransferText">执行移交</string>
<string name="repoTransferOwnerText">新所有者</string>
<string name="repoTransferSuccess">成功移交存储库</string>
<string name="repoTransferOwnerError">需要新的所有者</string>
<string name="repoTransferError">所有者名称有问题。确保新所有者存在</string>
<string name="exploreFilterDialogTitle">过滤仓库</string>
<string name="exploreFilterIncludeTopic">仅在话题中搜索</string>
<string name="exploreFilterIncludeDesc">在描述中搜索</string>
<string name="exploreFilterIncludeArchive">仅存档仓库</string>
<string name="exploreFilterIncludePrivate">仅私有仓库</string>
<string name="exploreFilterIncludeTemplateRepos">在模板仓库中搜索</string>
<string name="mergeIntoBranch">合并到</string>
<string name="pullFromBranch">拉取自</string>
<string name="sameBranchesError">这些分支是相等的。 无需创建拉取请求</string>
<string name="mergeIntoError">必须合并到分支</string>
<string name="pullFromError">需要从分支下拉</string>
<string name="titleError">标题不可为空</string>
<string name="prCreateSuccess">拉取请求创建成功</string>
<string name="prAlreadyExists">这些分支之间的拉取请求已存在</string>
</resources> </resources>

View File

@ -4,18 +4,21 @@
<string name="appEmail" translatable="false">gitnex@swatian.com</string> <string name="appEmail" translatable="false">gitnex@swatian.com</string>
<string name="appRepo" translatable="false">Source code</string> <string name="appRepo" translatable="false">Source code</string>
<string name="appRepoLink" translatable="false">https://codeberg.org/gitnex/GitNex</string> <string name="appRepoLink" translatable="false">https://codeberg.org/gitnex/GitNex</string>
<string name="appWebsite" translatable="false">Website</string>
<string name="appWebsiteLink" translatable="false">https://gitnex.com/</string> <string name="appWebsiteLink" translatable="false">https://gitnex.com/</string>
<string name="commitPage" translatable="false">Your Gitea version\n</string> <string name="commitPage" translatable="false">Your Gitea Version</string>
<string name="supportLink" translatable="false">https://liberapay.com/mmarif/donate</string> <string name="supportLink" translatable="false">https://liberapay.com/mmarif/donate</string>
<string name="supportLinkPatreon" translatable="false">https://www.patreon.com/mmarif</string> <string name="supportLinkPatreon" translatable="false">https://www.patreon.com/mmarif</string>
<string name="appVerBuild" translatable="false">%1$s / build %2$d</string> <string name="appVersion" translatable="false">Version</string>
<string name="appBuild" translatable="false">Build</string>
<string name="appDesc" translatable="false">GitNex is a free, open-source Android client for Git repository management tool Gitea. GitNex is Licensed under GPLv3.\n\nThanks to all the contributors and donators for your generous work and donations.</string> <string name="appDesc" translatable="false">GitNex is a free, open-source Android client for Git repository management tool Gitea. GitNex is Licensed under GPLv3.\n\nThanks to all the contributors and donators for your generous work and donations.</string>
<string name="crowdInLink" translatable="false">https://crowdin.com/project/gitnex</string> <string name="crowdInLink" translatable="false">https://crowdin.com/project/gitnex</string>
<string name="crashReportEmailSubject" translatable="false">[GitNex] - Crash Report #%1$d</string> <string name="crashReportEmailSubject" translatable="false">[GitNex] - Crash Report #%1$d</string>
<string name="translateWithCrowdin" translatable="false">Crowdin</string>
<string name="translateText" translatable="false">Translate</string>
<string name="supportText" translatable="false">Support</string>
<string name="supportText" translatable="false">Support the App on Liberapay</string> <string name="supportTextLiberapay" translatable="false">Liberapay</string>
<string name="supportTextPatreon" translatable="false">Become a Patreon</string> <string name="supportTextPatreon" translatable="false">Patreon</string>
<!-- menu items --> <!-- menu items -->
<string name="navMyRepos">My Repositories</string> <string name="navMyRepos">My Repositories</string>
@ -29,6 +32,7 @@
<string name="navLogout">Logout</string> <string name="navLogout">Logout</string>
<string name="navExplore">Explore</string> <string name="navExplore">Explore</string>
<string name="navAdministration">Administration</string> <string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items --> <!-- menu items -->
<!-- page titles --> <!-- page titles -->
@ -55,6 +59,7 @@
<string name="pageTitleExplore">Explore</string> <string name="pageTitleExplore">Explore</string>
<string name="pageTitleAdministration">Gitea Administration</string> <string name="pageTitleAdministration">Gitea Administration</string>
<string name="pageTitleUserAccounts">Manage Accounts</string> <string name="pageTitleUserAccounts">Manage Accounts</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<!-- page titles --> <!-- page titles -->
<string name="repoName">Demo repo</string> <string name="repoName">Demo repo</string>
@ -143,7 +148,6 @@
<string name="noDataIssueTab">No issues found</string> <string name="noDataIssueTab">No issues found</string>
<string name="infoTabRepoWebsite">Website</string>
<string name="infoTabRepoSize">Size</string> <string name="infoTabRepoSize">Size</string>
<string name="infoTabRepoDefaultBranch">Default Branch</string> <string name="infoTabRepoDefaultBranch">Default Branch</string>
<string name="infoTabRepoSshUrl">SSH URL</string> <string name="infoTabRepoSshUrl">SSH URL</string>
@ -518,7 +522,6 @@
<string name="genericCopyUrl">Copy URL</string> <string name="genericCopyUrl">Copy URL</string>
<!-- generic copy --> <!-- generic copy -->
<string name="translateText">Translate GitNex with Crowdin</string>
<string name="exploreTextBoxHint">Explore repositories</string> <string name="exploreTextBoxHint">Explore repositories</string>
<string name="starRepository">Star Repository</string> <string name="starRepository">Star Repository</string>
<string name="unStarRepository">Unstar Repository</string> <string name="unStarRepository">Unstar Repository</string>
@ -632,6 +635,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string> <string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</string> <string name="languagesHintText">Languages</string>
<string name="reportsHintText">Crash reports</string> <string name="reportsHintText">Crash reports</string>
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
<string name="aboutAppHintText">App version, build, user gitea version</string>
<string name="archivedRepository">Archived</string> <string name="archivedRepository">Archived</string>
@ -693,4 +698,20 @@
<string name="assignTeamTitle">Assign Team</string> <string name="assignTeamTitle">Assign Team</string>
<string name="exploreFilterDialogTitle">Filter Repositories</string>
<string name="exploreFilterIncludeTopic">Search ONLY in Topic</string>
<string name="exploreFilterIncludeDesc">Search in Description</string>
<string name="exploreFilterIncludeArchive">Only Archived Repositories</string>
<string name="exploreFilterIncludePrivate">Only Private Repositories</string>
<string name="exploreFilterIncludeTemplateRepos">Search in Template Repositories</string>
<string name="mergeIntoBranch">Merge Into</string>
<string name="pullFromBranch">Pull From</string>
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
<string name="mergeIntoError">Merge into branch is required</string>
<string name="pullFromError">Pull from branch is required</string>
<string name="titleError">Title is required</string>
<string name="prCreateSuccess">Pull Request created successfully</string>
<string name="prAlreadyExists">A pull request between these branches already exists</string>
</resources> </resources>

View File

@ -210,7 +210,7 @@
</style> </style>
<style name="AppThemeCheckBoxStyle" parent="Base.Widget.AppCompat.CompoundButton.CheckBox"> <style name="AppThemeCheckBoxStyle" parent="Base.Widget.AppCompat.CompoundButton.CheckBox">
<item name="buttonTint">@color/colorWhite</item> <item name="buttonTint">?attr/iconsColor</item>
</style> </style>
<!-- Retro theme styles --> <!-- Retro theme styles -->

View File

@ -1,8 +1,19 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<changelog> <changelog>
<release version="3.2.0-dev" versioncode="317"> <release version="3.2.0" versioncode="320">
<change>Under development</change> <change>New: Create pull request</change>
<change>New: Edit repository properties (Admins only)</change>
<change>New: Delete repository (Admins only)</change>
<change>New: Transfer repository ownership (Admins only)</change>
<change>New: Notification badge in navigation menu</change>
<change>New: Search issues across all repositories</change>
<change>New: Show issues/pr states in single view mode</change>
<change>New: Explore repositories filter</change>
<change>New: Android 11 support</change>
<change>New: Commits under Files branches</change>
<change>Bugfix: Fix crash when create issue with labels removed</change>
<change>Bugfix: Fix active account selector</change>
</release> </release>
</changelog> </changelog>

View File

@ -0,0 +1,5 @@
3.2.0-rc1
3.2.0 RC1 release brings create pr, repository settings for admins and many more new features.
Detailed release notes will be published with stable release.

View File

@ -0,0 +1,14 @@
3.2.0
New: Create pull request
New: Edit repository properties (Admins only)
New: Delete repository (Admins only)
New: Transfer repository ownership (Admins only)
New: Notification badge in navigation menu
New: Search issues across all repositories
New: Show issues/pr states in single view mode
New: Explore repositories filters
New: Android 11 support
New: Commits under Files branches
Release Notes: https://codeberg.org/gitnex/GitNex/releases

View File

@ -1,7 +1,8 @@
GitNex is a free, open-source Android client for Git repository management tool Gitea. Gitea is a community managed fork of Gogs, lightweight code hosting solution written in Go. GitNex is a free/paid, open-source Android client for Git repository management tool Gitea. Gitea is a community managed fork of Gogs, lightweight code hosting solution written in Go.
# Features # Features
- Multiple accounts support
- File and directory browser - File and directory browser
- File viewer - File viewer
- Create files - Create files

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 99 KiB

Some files were not shown because too many files have changed in this diff Show More