From 7387c29077551836f98d1520beda18a4547a5565 Mon Sep 17 00:00:00 2001 From: opyale Date: Tue, 7 Apr 2020 20:06:39 +0000 Subject: [PATCH 1/5] Replacing bottom sheet item by floating action button. (#360) Merge branch 'fab-button-issues' of https://gitea.com/opyale/GitNex into fab-button-issues Merge remote-tracking branch 'remotes/main/master' into fab-button-issues Merge branch 'master' into fab-button-issues Adding onScrollListener. Reply icon Generalizing padding of floating action button. Merge branch 'master' into fab-button-issues Improving proportions. Replacing bottom sheet item by floating action button and cleaning up code. Co-authored-by: opyale Co-authored-by: anonTree1417 Reviewed-on: https://gitea.com/gitnex/GitNex/pulls/360 Reviewed-by: M M Arif --- .../activities/IssueDetailActivity.java | 61 ++++++++++++++----- .../BottomSheetSingleIssueFragment.java | 11 ---- .../fragments/MyRepositoriesFragment.java | 11 ++-- .../main/res/layout/activity_issue_detail.xml | 13 ++++ .../bottom_sheet_single_issue_layout.xml | 12 ---- .../main/res/layout/fragment_milestones.xml | 2 +- .../res/layout/fragment_my_repositories.xml | 2 +- .../res/layout/fragment_organizations.xml | 2 +- .../main/res/layout/fragment_repositories.xml | 2 +- .../layout/fragment_starred_repositories.xml | 2 +- app/src/main/res/values/dimens.xml | 1 + 11 files changed, 71 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java index 2bada8f0..9a85ed5a 100644 --- a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java @@ -29,6 +29,7 @@ import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import android.content.Context; +import android.content.Intent; import android.graphics.Color; import android.graphics.Typeface; import android.graphics.drawable.Drawable; @@ -95,6 +96,7 @@ public class IssueDetailActivity extends BaseActivity { private HorizontalScrollView assigneesScrollView; private ScrollView scrollViewComments; private TextView issueModified; + private ImageView createNewComment; final Context ctx = this; private LinearLayout labelsLayout; private LinearLayout assigneesLayout; @@ -132,6 +134,7 @@ public class IssueDetailActivity extends BaseActivity { assigneesScrollView = findViewById(R.id.assigneesScrollView); scrollViewComments = findViewById(R.id.scrollViewComments); issueModified = findViewById(R.id.issueModified); + createNewComment = findViewById(R.id.addNewComment); labelsLayout = findViewById(R.id.frameLabels); assigneesLayout = findViewById(R.id.frameAssignees); @@ -147,10 +150,38 @@ public class IssueDetailActivity extends BaseActivity { mRecyclerView.setNestedScrollingEnabled(false); mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), - DividerItemDecoration.VERTICAL); + DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL); mRecyclerView.addItemDecoration(dividerItemDecoration); + createNewComment = findViewById(R.id.addNewComment); + createNewComment.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + + startActivity(new Intent(ctx, ReplyToIssueActivity.class)); + + } + }); + + mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + + if (dy > 0 && createNewComment.isShown()) { + createNewComment.setVisibility(View.GONE); + } else if (dy < 0) { + createNewComment.setVisibility(View.VISIBLE); + } + + } + + @Override + public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) { + super.onScrollStateChanged(recyclerView, newState); + } + }); + swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { @@ -165,24 +196,24 @@ public class IssueDetailActivity extends BaseActivity { }); Typeface myTypeface; - if(tinyDb.getInt("customFontId") == 0) { - myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/roboto.ttf"); + switch(tinyDb.getInt("customFontId")) { - } - else if (tinyDb.getInt("customFontId") == 1) { + case 0: + myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/roboto.ttf"); + break; - myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/manroperegular.ttf"); + case 1: + myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/manroperegular.ttf"); + break; - } - else if (tinyDb.getInt("customFontId") == 2) { + case 2: + myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/sourcecodeproregular.ttf"); + break; - myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/sourcecodeproregular.ttf"); - - } - else { - - myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/roboto.ttf"); + default: + myTypeface = Typeface.createFromAsset(Objects.requireNonNull(getApplicationContext()).getAssets(), "fonts/roboto.ttf"); + break; } diff --git a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java index 4e31ec90..2fd49dca 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java @@ -43,7 +43,6 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { final Context ctx = getContext(); final TinyDB tinyDB = new TinyDB(ctx); - TextView replyToIssue = v.findViewById(R.id.replyToIssue); TextView editIssue = v.findViewById(R.id.editIssue); TextView editLabels = v.findViewById(R.id.editLabels); TextView closeIssue = v.findViewById(R.id.closeIssue); @@ -56,16 +55,6 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { TextView subscribeIssue = v.findViewById(R.id.subscribeIssue); TextView unsubscribeIssue = v.findViewById(R.id.unsubscribeIssue); - replyToIssue.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - startActivity(new Intent(ctx, ReplyToIssueActivity.class)); - dismiss(); - - } - }); - if(tinyDB.getString("issueType").equals("pr")) { editIssue.setText(R.string.editPrText); diff --git a/app/src/main/java/org/mian/gitnex/fragments/MyRepositoriesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/MyRepositoriesFragment.java index 883ca61a..83b6fd1d 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/MyRepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/MyRepositoriesFragment.java @@ -100,18 +100,18 @@ public class MyRepositoriesFragment extends Fragment { mRecyclerView.setHasFixedSize(true); mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), - DividerItemDecoration.VERTICAL); + DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL); mRecyclerView.addItemDecoration(dividerItemDecoration); createNewRepo = v.findViewById(R.id.addNewRepo); - createNewRepo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { + Intent intent = new Intent(view.getContext(), CreateRepoActivity.class); startActivity(intent); + } }); @@ -119,12 +119,13 @@ public class MyRepositoriesFragment extends Fragment { mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + if (dy > 0 && createNewRepo.isShown()) { createNewRepo.setVisibility(View.GONE); - } else if (dy < 0 ) { + } else if (dy < 0) { createNewRepo.setVisibility(View.VISIBLE); - } + } @Override diff --git a/app/src/main/res/layout/activity_issue_detail.xml b/app/src/main/res/layout/activity_issue_detail.xml index 302ff05b..b04a941a 100644 --- a/app/src/main/res/layout/activity_issue_detail.xml +++ b/app/src/main/res/layout/activity_issue_detail.xml @@ -212,6 +212,19 @@ + + \ No newline at end of file diff --git a/app/src/main/res/layout/bottom_sheet_single_issue_layout.xml b/app/src/main/res/layout/bottom_sheet_single_issue_layout.xml index 2710d58e..b9c3a215 100644 --- a/app/src/main/res/layout/bottom_sheet_single_issue_layout.xml +++ b/app/src/main/res/layout/bottom_sheet_single_issue_layout.xml @@ -30,18 +30,6 @@ android:visibility="gone" android:padding="16dp" /> - - diff --git a/app/src/main/res/layout/fragment_my_repositories.xml b/app/src/main/res/layout/fragment_my_repositories.xml index f079ce0f..764019b3 100644 --- a/app/src/main/res/layout/fragment_my_repositories.xml +++ b/app/src/main/res/layout/fragment_my_repositories.xml @@ -38,7 +38,7 @@ android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" android:background="@drawable/circle" - android:padding="12dp" + android:padding="@dimen/fab_padding" android:contentDescription="@string/addNewContent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_starred_repositories.xml b/app/src/main/res/layout/fragment_starred_repositories.xml index 24898501..acb01e21 100644 --- a/app/src/main/res/layout/fragment_starred_repositories.xml +++ b/app/src/main/res/layout/fragment_starred_repositories.xml @@ -49,7 +49,7 @@ android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" android:background="@drawable/circle" - android:padding="12dp" + android:padding="@dimen/fab_padding" android:contentDescription="@string/addNewContent" /> \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 0972fdce..b231db6d 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -6,5 +6,6 @@ 5dp 16dp + 15dp 8dp From 73950f9f2ab70b1e93993141f7b3b1add16f6ad9 Mon Sep 17 00:00:00 2001 From: 6543 <6543@noreply.gitea.io> Date: Tue, 7 Apr 2020 20:39:08 +0000 Subject: [PATCH 2/5] Crowdin [2020-04-07] + add Polish (#377) add Polish to settings and reformat code add Polish locales Crowdin Update Co-authored-by: 6543 <6543@obermui.de> Reviewed-on: https://gitea.com/gitnex/GitNex/pulls/377 Reviewed-by: M M Arif --- .../gitnex/fragments/SettingsFragment.java | 838 +++++++++--------- app/src/main/res/values-ar/strings.xml | 7 + app/src/main/res/values-de/strings.xml | 7 + app/src/main/res/values-es/strings.xml | 7 + app/src/main/res/values-fa/strings.xml | 7 + app/src/main/res/values-fi/strings.xml | 7 + app/src/main/res/values-fr/strings.xml | 43 +- app/src/main/res/values-it/strings.xml | 7 + app/src/main/res/values-lv/strings.xml | 7 + app/src/main/res/values-pl/strings.xml | 487 ++++++++++ app/src/main/res/values-pt/strings.xml | 7 + app/src/main/res/values-ru/strings.xml | 67 +- app/src/main/res/values-sr/strings.xml | 7 + app/src/main/res/values-tr/strings.xml | 7 + app/src/main/res/values-uk/strings.xml | 7 + app/src/main/res/values-zh/strings.xml | 7 + 16 files changed, 1052 insertions(+), 467 deletions(-) create mode 100644 app/src/main/res/values-pl/strings.xml diff --git a/app/src/main/java/org/mian/gitnex/fragments/SettingsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/SettingsFragment.java index 9093f923..d21214dd 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/SettingsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/SettingsFragment.java @@ -1,7 +1,6 @@ package org.mian.gitnex.fragments; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; @@ -11,16 +10,16 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.Switch; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.fragment.app.Fragment; import org.mian.gitnex.R; import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.ssl.MemorizingTrustManager; import org.mian.gitnex.util.TinyDB; import java.util.Objects; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; -import androidx.fragment.app.Fragment; /** * Author M M Arif @@ -28,453 +27,454 @@ import androidx.fragment.app.Fragment; public class SettingsFragment extends Fragment { - private Context ctx = null; + private Context ctx = null; - private static String[] langList = {"Arabic", "Chinese", "English", "Finnish", "French", "German", "Italian", "Latvian", "Persian", "Portuguese/Brazilian", "Russian", "Serbian", "Spanish", "Turkish", "Ukrainian"}; - private static int langSelectedChoice = 0; + private static String[] langList = {"Arabic", "Chinese", "English", "Finnish", "French", "German", "Italian", "Latvian", "Persian", "Polish", "Portuguese/Brazilian", "Russian", "Serbian", "Spanish", "Turkish", "Ukrainian"}; + private static int langSelectedChoice = 0; - private static String[] timeList = {"Pretty", "Normal"}; - private static int timeSelectedChoice = 0; + private static String[] timeList = {"Pretty", "Normal"}; + private static int timeSelectedChoice = 0; - private static String[] codeBlockList = {"Green - Black", "White - Black", "Grey - Black", "White - Grey", "Dark - White"}; - private static int codeBlockSelectedChoice = 0; + private static String[] codeBlockList = {"Green - Black", "White - Black", "Grey - Black", "White - Grey", "Dark - White"}; + private static int codeBlockSelectedChoice = 0; - private static String[] homeScreenList = {"My Repositories", "Starred Repositories", "Organizations", "Repositories", "Profile"}; - private static int homeScreenSelectedChoice = 0; + private static String[] homeScreenList = {"My Repositories", "Starred Repositories", "Organizations", "Repositories", "Profile"}; + private static int homeScreenSelectedChoice = 0; - private static String[] customFontList = {"Roboto", "Manrope", "Source Code Pro"}; - private static int customFontSelectedChoice = 0; - - private static String[] themeList = {"Dark", "Light"}; - private static int themeSelectedChoice = 0; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - - View v = inflater.inflate(R.layout.fragment_settings, container, false); - final TinyDB tinyDb = new TinyDB(getContext()); + private static String[] customFontList = {"Roboto", "Manrope", "Source Code Pro"}; + private static int customFontSelectedChoice = 0; + + private static String[] themeList = {"Dark", "Light"}; + private static int themeSelectedChoice = 0; + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + View v = inflater.inflate(R.layout.fragment_settings, container, false); + final TinyDB tinyDb = new TinyDB(getContext()); - final TextView tvLanguageSelected = v.findViewById(R.id.tvLanguageSelected); // setter for en, fr - final TextView tvDateTimeSelected = v.findViewById(R.id.tvDateTimeSelected); // setter for time - final TextView codeBlockSelected = v.findViewById(R.id.codeBlockSelected); // setter for code block - final TextView homeScreenSelected = v.findViewById(R.id.homeScreenSelected); // setter for home screen - final TextView customFontSelected = v.findViewById(R.id.customFontSelected); // setter for custom font - final TextView themeSelected = v.findViewById(R.id.themeSelected); // setter for theme + final TextView tvLanguageSelected = v.findViewById(R.id.tvLanguageSelected); // setter for en, fr + final TextView tvDateTimeSelected = v.findViewById(R.id.tvDateTimeSelected); // setter for time + final TextView codeBlockSelected = v.findViewById(R.id.codeBlockSelected); // setter for code block + final TextView homeScreenSelected = v.findViewById(R.id.homeScreenSelected); // setter for home screen + final TextView customFontSelected = v.findViewById(R.id.customFontSelected); // setter for custom font + final TextView themeSelected = v.findViewById(R.id.themeSelected); // setter for theme - LinearLayout langFrame = v.findViewById(R.id.langFrame); - LinearLayout timeFrame = v.findViewById(R.id.timeFrame); - LinearLayout codeBlockFrame = v.findViewById(R.id.codeBlockFrame); - LinearLayout homeScreenFrame = v.findViewById(R.id.homeScreenFrame); - LinearLayout customFontFrame = v.findViewById(R.id.customFontFrame); - LinearLayout themeFrame = v.findViewById(R.id.themeSelectionFrame); - LinearLayout certsFrame = v.findViewById(R.id.certsFrame); + LinearLayout langFrame = v.findViewById(R.id.langFrame); + LinearLayout timeFrame = v.findViewById(R.id.timeFrame); + LinearLayout codeBlockFrame = v.findViewById(R.id.codeBlockFrame); + LinearLayout homeScreenFrame = v.findViewById(R.id.homeScreenFrame); + LinearLayout customFontFrame = v.findViewById(R.id.customFontFrame); + LinearLayout themeFrame = v.findViewById(R.id.themeSelectionFrame); + LinearLayout certsFrame = v.findViewById(R.id.certsFrame); - Switch counterBadgesSwitch = v.findViewById(R.id.switchCounterBadge); - Switch pdfModeSwitch = v.findViewById(R.id.switchPdfMode); - TextView helpTranslate = v.findViewById(R.id.helpTranslate); + Switch counterBadgesSwitch = v.findViewById(R.id.switchCounterBadge); + Switch pdfModeSwitch = v.findViewById(R.id.switchPdfMode); + TextView helpTranslate = v.findViewById(R.id.helpTranslate); - helpTranslate.setOnClickListener(v12 -> { + helpTranslate.setOnClickListener(v12 -> { - Intent intent = new Intent(); - intent.setAction(Intent.ACTION_VIEW); - intent.addCategory(Intent.CATEGORY_BROWSABLE); - intent.setData(Uri.parse(getResources().getString(R.string.crowdInLink))); - startActivity(intent); + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_VIEW); + intent.addCategory(Intent.CATEGORY_BROWSABLE); + intent.setData(Uri.parse(getResources().getString(R.string.crowdInLink))); + startActivity(intent); - }); + }); - if(!tinyDb.getString("localeStr").isEmpty()) { - tvLanguageSelected.setText(tinyDb.getString("localeStr")); - } + if(!tinyDb.getString("localeStr").isEmpty()) { + tvLanguageSelected.setText(tinyDb.getString("localeStr")); + } - if(!tinyDb.getString("timeStr").isEmpty()) { - tvDateTimeSelected.setText(tinyDb.getString("timeStr")); - } - - if(!tinyDb.getString("codeBlockStr").isEmpty()) { - codeBlockSelected.setText(tinyDb.getString("codeBlockStr")); - } - - if(!tinyDb.getString("homeScreenStr").isEmpty()) { - homeScreenSelected.setText(tinyDb.getString("homeScreenStr")); - } - - if(!tinyDb.getString("customFontStr").isEmpty()) { - customFontSelected.setText(tinyDb.getString("customFontStr")); - } - - if(!tinyDb.getString("themeStr").isEmpty()) { - themeSelected.setText(tinyDb.getString("themeStr")); - } - - if(langSelectedChoice == 0) { - langSelectedChoice = tinyDb.getInt("langId"); - } - - if(timeSelectedChoice == 0) { - timeSelectedChoice = tinyDb.getInt("timeId"); - } - - if(codeBlockSelectedChoice == 0) { - codeBlockSelectedChoice = tinyDb.getInt("codeBlockId"); - } - - if(homeScreenSelectedChoice == 0) { - homeScreenSelectedChoice = tinyDb.getInt("homeScreenId"); - } - - if(customFontSelectedChoice == 0) { - customFontSelectedChoice = tinyDb.getInt("customFontId"); - } - - if(themeSelectedChoice == 0) { - themeSelectedChoice = tinyDb.getInt("themeId"); - } + if(!tinyDb.getString("timeStr").isEmpty()) { + tvDateTimeSelected.setText(tinyDb.getString("timeStr")); + } + + if(!tinyDb.getString("codeBlockStr").isEmpty()) { + codeBlockSelected.setText(tinyDb.getString("codeBlockStr")); + } + + if(!tinyDb.getString("homeScreenStr").isEmpty()) { + homeScreenSelected.setText(tinyDb.getString("homeScreenStr")); + } - if(tinyDb.getBoolean("enableCounterBadges")) { - counterBadgesSwitch.setChecked(true); - } - else { - counterBadgesSwitch.setChecked(false); - } + if(!tinyDb.getString("customFontStr").isEmpty()) { + customFontSelected.setText(tinyDb.getString("customFontStr")); + } - if(tinyDb.getBoolean("enablePdfMode")) { - pdfModeSwitch.setChecked(true); - } - else { - pdfModeSwitch.setChecked(false); - } - - // certs deletion - certsFrame.setOnClickListener(v1 -> { - - AlertDialog.Builder builder = new AlertDialog.Builder(ctx); - builder.setTitle(getResources().getString(R.string.settingsCertsPopupTitle)); - builder.setMessage(getResources().getString(R.string.settingsCertsPopupMessage)); - builder.setPositiveButton(R.string.menuDeleteText, (dialog, which) -> { - - ctx.getSharedPreferences(MemorizingTrustManager.KEYSTORE_NAME, Context.MODE_PRIVATE) - .edit() - .remove(MemorizingTrustManager.KEYSTORE_KEY) - .apply(); - - MainActivity.logout(Objects.requireNonNull(getActivity()), ctx); - - }); - - builder.setNeutralButton(R.string.cancelButton, (dialog, which) -> dialog.dismiss()); - builder.create().show(); + if(!tinyDb.getString("themeStr").isEmpty()) { + themeSelected.setText(tinyDb.getString("themeStr")); + } + + if(langSelectedChoice == 0) { + langSelectedChoice = tinyDb.getInt("langId"); + } - }); + if(timeSelectedChoice == 0) { + timeSelectedChoice = tinyDb.getInt("timeId"); + } + + if(codeBlockSelectedChoice == 0) { + codeBlockSelectedChoice = tinyDb.getInt("codeBlockId"); + } + + if(homeScreenSelectedChoice == 0) { + homeScreenSelectedChoice = tinyDb.getInt("homeScreenId"); + } - // counter badge switcher - counterBadgesSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { + if(customFontSelectedChoice == 0) { + customFontSelectedChoice = tinyDb.getInt("customFontId"); + } - if (isChecked) { - tinyDb.putBoolean("enableCounterBadges", true); - tinyDb.putString("enableCounterBadgesInit", "yes"); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - } - else { - tinyDb.putBoolean("enableCounterBadges", false); - tinyDb.putString("enableCounterBadgesInit", "yes"); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - } + if(themeSelectedChoice == 0) { + themeSelectedChoice = tinyDb.getInt("themeId"); + } - }); + if(tinyDb.getBoolean("enableCounterBadges")) { + counterBadgesSwitch.setChecked(true); + } + else { + counterBadgesSwitch.setChecked(false); + } - // pdf night mode switcher - pdfModeSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { + if(tinyDb.getBoolean("enablePdfMode")) { + pdfModeSwitch.setChecked(true); + } + else { + pdfModeSwitch.setChecked(false); + } + + // certs deletion + certsFrame.setOnClickListener(v1 -> { + + AlertDialog.Builder builder = new AlertDialog.Builder(ctx); + builder.setTitle(getResources().getString(R.string.settingsCertsPopupTitle)); + builder.setMessage(getResources().getString(R.string.settingsCertsPopupMessage)); + builder.setPositiveButton(R.string.menuDeleteText, (dialog, which) -> { + + ctx.getSharedPreferences(MemorizingTrustManager.KEYSTORE_NAME, Context.MODE_PRIVATE).edit().remove(MemorizingTrustManager.KEYSTORE_KEY).apply(); + + MainActivity.logout(Objects.requireNonNull(getActivity()), ctx); + + }); - if (isChecked) { - tinyDb.putBoolean("enablePdfMode", true); - tinyDb.putString("enablePdfModeInit", "yes"); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - } - else { - tinyDb.putBoolean("enablePdfMode", false); - tinyDb.putString("enablePdfModeInit", "yes"); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - } + builder.setNeutralButton(R.string.cancelButton, (dialog, which) -> dialog.dismiss()); + builder.create().show(); - }); + }); - // theme selection dialog - themeFrame.setOnClickListener(view -> { + // counter badge switcher + counterBadgesSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { - AlertDialog.Builder tsBuilder = new AlertDialog.Builder(ctx); + if(isChecked) { + tinyDb.putBoolean("enableCounterBadges", true); + tinyDb.putString("enableCounterBadgesInit", "yes"); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + } + else { + tinyDb.putBoolean("enableCounterBadges", false); + tinyDb.putString("enableCounterBadgesInit", "yes"); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + } - tsBuilder.setTitle(R.string.themeSelectorDialogTitle); - if(themeSelectedChoice != -1) { - tsBuilder.setCancelable(true); - } - else { - tsBuilder.setCancelable(false); - } + }); - tsBuilder.setSingleChoiceItems(themeList, themeSelectedChoice, (dialogInterfaceTheme, i) -> { + // pdf night mode switcher + pdfModeSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { - themeSelectedChoice = i; - themeSelected.setText(themeList[i]); - tinyDb.putString("themeStr", themeList[i]); - tinyDb.putInt("themeId", i); + if(isChecked) { + tinyDb.putBoolean("enablePdfMode", true); + tinyDb.putString("enablePdfModeInit", "yes"); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + } + else { + tinyDb.putBoolean("enablePdfMode", false); + tinyDb.putString("enablePdfModeInit", "yes"); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + } - Objects.requireNonNull(getActivity()).recreate(); - getActivity().overridePendingTransition(0, 0); - dialogInterfaceTheme.dismiss(); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - - }); - - AlertDialog cfDialog = tsBuilder.create(); - cfDialog.show(); - - }); - - // custom font dialog - customFontFrame.setOnClickListener(view -> { - - AlertDialog.Builder cfBuilder = new AlertDialog.Builder(ctx); - - cfBuilder.setTitle(R.string.settingsCustomFontSelectorDialogTitle); - if(customFontSelectedChoice != -1) { - cfBuilder.setCancelable(true); - } - else { - cfBuilder.setCancelable(false); - } + }); - cfBuilder.setSingleChoiceItems(customFontList, customFontSelectedChoice, (dialogInterfaceCustomFont, i) -> { + // theme selection dialog + themeFrame.setOnClickListener(view -> { - customFontSelectedChoice = i; - customFontSelected.setText(customFontList[i]); - tinyDb.putString("customFontStr", customFontList[i]); - tinyDb.putInt("customFontId", i); + AlertDialog.Builder tsBuilder = new AlertDialog.Builder(ctx); - Objects.requireNonNull(getActivity()).recreate(); - getActivity().overridePendingTransition(0, 0); - dialogInterfaceCustomFont.dismiss(); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + tsBuilder.setTitle(R.string.themeSelectorDialogTitle); + if(themeSelectedChoice != -1) { + tsBuilder.setCancelable(true); + } + else { + tsBuilder.setCancelable(false); + } - }); + tsBuilder.setSingleChoiceItems(themeList, themeSelectedChoice, (dialogInterfaceTheme, i) -> { - AlertDialog cfDialog = cfBuilder.create(); - cfDialog.show(); + themeSelectedChoice = i; + themeSelected.setText(themeList[i]); + tinyDb.putString("themeStr", themeList[i]); + tinyDb.putInt("themeId", i); - }); - - // home screen dialog - homeScreenFrame.setOnClickListener(view -> { - - AlertDialog.Builder hsBuilder = new AlertDialog.Builder(ctx); - - hsBuilder.setTitle(R.string.settingshomeScreenSelectorDialogTitle); - if(homeScreenSelectedChoice != -1) { - hsBuilder.setCancelable(true); - } - else { - hsBuilder.setCancelable(false); - } - - hsBuilder.setSingleChoiceItems(homeScreenList, homeScreenSelectedChoice, (dialogInterfaceHomeScreen, i) -> { - - homeScreenSelectedChoice = i; - homeScreenSelected.setText(homeScreenList[i]); - tinyDb.putString("homeScreenStr", homeScreenList[i]); - tinyDb.putInt("homeScreenId", i); - - dialogInterfaceHomeScreen.dismiss(); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - - }); - - AlertDialog hsDialog = hsBuilder.create(); - hsDialog.show(); - - }); - - // code block dialog - codeBlockFrame.setOnClickListener(view -> { - - AlertDialog.Builder cBuilder = new AlertDialog.Builder(ctx); - - cBuilder.setTitle(R.string.settingsCodeBlockSelectorDialogTitle); - if(codeBlockSelectedChoice != -1) { - cBuilder.setCancelable(true); - } - else { - cBuilder.setCancelable(false); - } - - cBuilder.setSingleChoiceItems(codeBlockList, codeBlockSelectedChoice, (dialogInterfaceCodeBlock, i) -> { - - codeBlockSelectedChoice = i; - codeBlockSelected.setText(codeBlockList[i]); - tinyDb.putString("codeBlockStr", codeBlockList[i]); - tinyDb.putInt("codeBlockId", i); - - switch (codeBlockList[i]) { - case "White - Black": - tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.white)); - tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.black)); - break; - case "Grey - Black": - tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.colorAccent)); - tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.black)); - break; - case "White - Grey": - tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.white)); - tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.colorAccent)); - break; - case "Dark - White": - tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.colorPrimary)); - tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.white)); - break; - default: - tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.colorLightGreen)); - tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.black)); - break; - } - - dialogInterfaceCodeBlock.dismiss(); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - - }); - - AlertDialog cDialog = cBuilder.create(); - cDialog.show(); - - }); - - // language dialog - langFrame.setOnClickListener(view -> { - - AlertDialog.Builder lBuilder = new AlertDialog.Builder(ctx); - - lBuilder.setTitle(R.string.settingsLanguageSelectorDialogTitle); - if(langSelectedChoice != -1) { - lBuilder.setCancelable(true); - } - else { - lBuilder.setCancelable(false); - } - - lBuilder.setSingleChoiceItems(langList, langSelectedChoice, (dialogInterface, i) -> { - - langSelectedChoice = i; - tvLanguageSelected.setText(langList[i]); - tinyDb.putString("localeStr", langList[i]); - tinyDb.putInt("langId", i); - - switch (langList[i]) { - case "Arabic": - tinyDb.putString("locale", "ar"); - break; - case "Chinese": - tinyDb.putString("locale", "zh"); - break; - case "Finnish": - tinyDb.putString("locale", "fi"); - break; - case "French": - tinyDb.putString("locale", "fr"); - break; - case "German": - tinyDb.putString("locale", "de"); - break; - case "Italian": - tinyDb.putString("locale", "it"); - break; - case "Latvian": - tinyDb.putString("locale", "lv"); - break; - case "Persian": - tinyDb.putString("locale", "fa"); - break; - case "Portuguese/Brazilian": - tinyDb.putString("locale", "pt"); - break; - case "Russian": - tinyDb.putString("locale", "ru"); - break; - case "Serbian": - tinyDb.putString("locale", "sr"); - break; - case "Spanish": - tinyDb.putString("locale", "es"); - break; - case "Turkish": - tinyDb.putString("locale", "tr"); - break; - case "Ukrainian": - tinyDb.putString("locale", "uk"); - break; - default: - tinyDb.putString("locale", "en"); - break; - } - - dialogInterface.dismiss(); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - Objects.requireNonNull(getActivity()).recreate(); - getActivity().overridePendingTransition(0, 0); - - }); - - lBuilder.setNegativeButton(getString(R.string.cancelButton), (dialog, which) -> dialog.dismiss()); - - AlertDialog lDialog = lBuilder.create(); - lDialog.show(); - - }); - - // time n date dialog - timeFrame.setOnClickListener(view -> { - - AlertDialog.Builder tBuilder = new AlertDialog.Builder(ctx); - - tBuilder.setTitle(R.string.settingsTimeSelectorDialogTitle); - if(timeSelectedChoice != -1) { - tBuilder.setCancelable(true); - } - else { - tBuilder.setCancelable(false); - } - - tBuilder.setSingleChoiceItems(timeList, timeSelectedChoice, (dialogInterfaceTime, i) -> { - - timeSelectedChoice = i; - tvDateTimeSelected.setText(timeList[i]); - tinyDb.putString("timeStr", timeList[i]); - tinyDb.putInt("timeId", i); - - if ("Normal".equals(timeList[i])) { - tinyDb.putString("dateFormat", "normal"); - } else { - tinyDb.putString("dateFormat", "pretty"); - } - - dialogInterfaceTime.dismiss(); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - - }); - - AlertDialog tDialog = tBuilder.create(); - tDialog.show(); - - }); - - return v; - - } - - @Override - public void onAttach(@NonNull Context context) { - - super.onAttach(context); - ctx = context; - - } + Objects.requireNonNull(getActivity()).recreate(); + getActivity().overridePendingTransition(0, 0); + dialogInterfaceTheme.dismiss(); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + + }); + + AlertDialog cfDialog = tsBuilder.create(); + cfDialog.show(); + + }); + + // custom font dialog + customFontFrame.setOnClickListener(view -> { + + AlertDialog.Builder cfBuilder = new AlertDialog.Builder(ctx); + + cfBuilder.setTitle(R.string.settingsCustomFontSelectorDialogTitle); + if(customFontSelectedChoice != -1) { + cfBuilder.setCancelable(true); + } + else { + cfBuilder.setCancelable(false); + } + + cfBuilder.setSingleChoiceItems(customFontList, customFontSelectedChoice, (dialogInterfaceCustomFont, i) -> { + + customFontSelectedChoice = i; + customFontSelected.setText(customFontList[i]); + tinyDb.putString("customFontStr", customFontList[i]); + tinyDb.putInt("customFontId", i); + + Objects.requireNonNull(getActivity()).recreate(); + getActivity().overridePendingTransition(0, 0); + dialogInterfaceCustomFont.dismiss(); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + + }); + + AlertDialog cfDialog = cfBuilder.create(); + cfDialog.show(); + + }); + + // home screen dialog + homeScreenFrame.setOnClickListener(view -> { + + AlertDialog.Builder hsBuilder = new AlertDialog.Builder(ctx); + + hsBuilder.setTitle(R.string.settingshomeScreenSelectorDialogTitle); + if(homeScreenSelectedChoice != -1) { + hsBuilder.setCancelable(true); + } + else { + hsBuilder.setCancelable(false); + } + + hsBuilder.setSingleChoiceItems(homeScreenList, homeScreenSelectedChoice, (dialogInterfaceHomeScreen, i) -> { + + homeScreenSelectedChoice = i; + homeScreenSelected.setText(homeScreenList[i]); + tinyDb.putString("homeScreenStr", homeScreenList[i]); + tinyDb.putInt("homeScreenId", i); + + dialogInterfaceHomeScreen.dismiss(); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + + }); + + AlertDialog hsDialog = hsBuilder.create(); + hsDialog.show(); + + }); + + // code block dialog + codeBlockFrame.setOnClickListener(view -> { + + AlertDialog.Builder cBuilder = new AlertDialog.Builder(ctx); + + cBuilder.setTitle(R.string.settingsCodeBlockSelectorDialogTitle); + if(codeBlockSelectedChoice != -1) { + cBuilder.setCancelable(true); + } + else { + cBuilder.setCancelable(false); + } + + cBuilder.setSingleChoiceItems(codeBlockList, codeBlockSelectedChoice, (dialogInterfaceCodeBlock, i) -> { + + codeBlockSelectedChoice = i; + codeBlockSelected.setText(codeBlockList[i]); + tinyDb.putString("codeBlockStr", codeBlockList[i]); + tinyDb.putInt("codeBlockId", i); + + switch(codeBlockList[i]) { + case "White - Black": + tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.white)); + tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.black)); + break; + case "Grey - Black": + tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.colorAccent)); + tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.black)); + break; + case "White - Grey": + tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.white)); + tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.colorAccent)); + break; + case "Dark - White": + tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.colorPrimary)); + tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.white)); + break; + default: + tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.colorLightGreen)); + tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.black)); + break; + } + + dialogInterfaceCodeBlock.dismiss(); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + + }); + + AlertDialog cDialog = cBuilder.create(); + cDialog.show(); + + }); + + // language dialog + langFrame.setOnClickListener(view -> { + + AlertDialog.Builder lBuilder = new AlertDialog.Builder(ctx); + + lBuilder.setTitle(R.string.settingsLanguageSelectorDialogTitle); + if(langSelectedChoice != -1) { + lBuilder.setCancelable(true); + } + else { + lBuilder.setCancelable(false); + } + + lBuilder.setSingleChoiceItems(langList, langSelectedChoice, (dialogInterface, i) -> { + + langSelectedChoice = i; + tvLanguageSelected.setText(langList[i]); + tinyDb.putString("localeStr", langList[i]); + tinyDb.putInt("langId", i); + + switch(langList[i]) { + case "Arabic": + tinyDb.putString("locale", "ar"); + break; + case "Chinese": + tinyDb.putString("locale", "zh"); + break; + case "Finnish": + tinyDb.putString("locale", "fi"); + break; + case "French": + tinyDb.putString("locale", "fr"); + break; + case "German": + tinyDb.putString("locale", "de"); + break; + case "Italian": + tinyDb.putString("locale", "it"); + break; + case "Latvian": + tinyDb.putString("locale", "lv"); + break; + case "Persian": + tinyDb.putString("locale", "fa"); + break; + case "Polish": + tinyDb.putString("locale", "pl"); + break; + case "Portuguese/Brazilian": + tinyDb.putString("locale", "pt"); + break; + case "Russian": + tinyDb.putString("locale", "ru"); + break; + case "Serbian": + tinyDb.putString("locale", "sr"); + break; + case "Spanish": + tinyDb.putString("locale", "es"); + break; + case "Turkish": + tinyDb.putString("locale", "tr"); + break; + case "Ukrainian": + tinyDb.putString("locale", "uk"); + break; + default: + tinyDb.putString("locale", "en"); + break; + } + + dialogInterface.dismiss(); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + Objects.requireNonNull(getActivity()).recreate(); + getActivity().overridePendingTransition(0, 0); + + }); + + lBuilder.setNegativeButton(getString(R.string.cancelButton), (dialog, which) -> dialog.dismiss()); + + AlertDialog lDialog = lBuilder.create(); + lDialog.show(); + + }); + + // time n date dialog + timeFrame.setOnClickListener(view -> { + + AlertDialog.Builder tBuilder = new AlertDialog.Builder(ctx); + + tBuilder.setTitle(R.string.settingsTimeSelectorDialogTitle); + if(timeSelectedChoice != -1) { + tBuilder.setCancelable(true); + } + else { + tBuilder.setCancelable(false); + } + + tBuilder.setSingleChoiceItems(timeList, timeSelectedChoice, (dialogInterfaceTime, i) -> { + + timeSelectedChoice = i; + tvDateTimeSelected.setText(timeList[i]); + tinyDb.putString("timeStr", timeList[i]); + tinyDb.putInt("timeId", i); + + if("Normal".equals(timeList[i])) { + tinyDb.putString("dateFormat", "normal"); + } + else { + tinyDb.putString("dateFormat", "pretty"); + } + + dialogInterfaceTime.dismiss(); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + + }); + + AlertDialog tDialog = tBuilder.create(); + tDialog.show(); + + }); + + return v; + + } + + @Override + public void onAttach(@NonNull Context context) { + + super.onAttach(context); + ctx = context; + + } } diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 00d84e56..2339af8f 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -70,6 +70,7 @@ اسم المستخدم لازم الكلمة السرية لازمة Cannot access network, please check your Internet connection + Yay, Internet connection is back اسم المستودع فارغ Repository name is not valid. [a–z A–Z 0–9 – _] Repository name is reserved @@ -307,6 +308,8 @@ Add Assignees Add / Remove Assignees Assignees updated + Subscribe + Unsubscribe Select Entries @@ -477,4 +480,8 @@ Once Abort Share Comment + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 51cc7dd1..8605a191 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -70,6 +70,7 @@ Benutzername ist erforderlich Passwort ist erforderlich Kann nicht auf das Netzwerk zugreifen. Bitte überprüfe die Internetverbindung + Yay, Internet connection is back Der Repository Name ist leer. Der Repository Name ist nicht gültig. [a–z A–Z 0–9 – _] Repository-Name ist reserviert @@ -307,6 +308,8 @@ Füge Zuständige hinzu Zuständige hinzufügen/entfernen Zuständige aktualisiert + Subscribe + Unsubscribe Einträge auswählen @@ -477,4 +480,8 @@ Einmal Abbrechen Kommentar teilen + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index afb2bd34..47edda0c 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -70,6 +70,7 @@ Se requiere el usuario Se requiere la contraseña No se puede acceder a la red, por favor comprueba tu conexión a internet + Yay, Internet connection is back El nombre del repositorio está vacío El nombre del repositorio es inválido. [a–z A–Z 0–9 – _] Nombre del repositorio reservado @@ -307,6 +308,8 @@ Add Assignees Add / Remove Assignees Assignees updated + Subscribe + Unsubscribe Select Entries @@ -477,4 +480,8 @@ Once Abort Share Comment + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 0ca5a5f5..457fce1c 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -73,6 +73,7 @@ نام کاربری اجباری است گذر واژه اجباری است عدم دسترسی به شبکه، لطفا از برقراری ارتباط با اینترنت مطمئن شوید + Yay, Internet connection is back نام مخزن خالی است نام مخزن اشتباه است. [a–z A–Z 0–9 – _] Repository name is reserved @@ -310,6 +311,8 @@ Add Assignees Add / Remove Assignees Assignees updated + Subscribe + Unsubscribe Select Entries @@ -480,4 +483,8 @@ Once Abort Share Comment + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 7accb1ac..38afd862 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -70,6 +70,7 @@ Username is required Password is required Cannot access network, please check your Internet connection + Yay, Internet connection is back Repository name is empty Repository name is not valid. [a–z A–Z 0–9 – _] Repository name is reserved @@ -307,6 +308,8 @@ Add Assignees Add / Remove Assignees Assignees updated + Subscribe + Unsubscribe Select Entries @@ -477,4 +480,8 @@ Once Abort Share Comment + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index ed33c189..d4563092 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -63,13 +63,14 @@ Se connecter à Gitea 1. Choisissez le protocole adéquat (HTTPS ou HTTP)\n2. Entrez l’URL de votre instance Gitea (ex : try.gitea.io)\n3. Si l’authentification à 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 Mauvais nom d’utilisateur/mot de passe - Couldn\'t connect to host. Please check your URL or port for any errors. + Connexion impossible. Vérifiez que l’URL et le port sont corrects. Il n’est recommandé d’utiliser le protocole HTTP que pour des tests en réseau local. JSON mal formé. Le serveur ne répond pas. URL de l’instance requise Nom d’utilisateur requis Mot de passe requis Impossible d’accéder au réseau, veuillez vérifier votre connexion Internet + Yay, Internet connection is back Nom du dépôt requis Nom de dépôt invalide [a–z A–Z 0–9 – _] Ce nom de dépôt est réservé @@ -184,10 +185,10 @@ Aucune étiquette Traduction - Security - Delete Trusted Certificates - Delete Trusted Certificates? - Are you sure to delete any manually trusted certificate or hostname? \n\nYou will also be logged out. + Sécurité + Supprimer les certificats de confiance + Supprimer les certificats de confiance ? + Supprimer les nom d’hôtes et certificats ajoutés manuellement ? \n\nVous serez déconnecté. Date et heure Réglages enregistrés Langue @@ -210,7 +211,7 @@ Thème PDF mode nuit Visionneuse de fichiers - Counter Badges + Compteurs Aucune donnée Nouvelle étiquette @@ -307,6 +308,8 @@ Ajouter des assignés Ajouter/supprimer des assignés Assignés mis à jour + Subscribe + Unsubscribe Sélection des entrées @@ -465,16 +468,20 @@ Révision de %1$s Voir révisions - Certificate Verification - Accept Unknown Certificate? - The server certificate is not signed by a known Certificate Authority. - The server certificate is expired. - Accept Mismatching Server Name? - Server could not authenticate as \"%s\". The certificate is only valid for: - Do you want to connect anyway? - Certificate details: - Trust - Once - Abort - Share Comment + Vérification du certificat + Accepter le certificat inconnu ? + Le certificat du serveur n’est pas signé par une autorité de certification connue. + Le certificat du serveur a expiré. + Accepter le nom de serveur incohérent ? + Le serveur ne peut s’authentifier comme « %s ». Le certificat est valide pour : + Se connecter malgré tout ? + Détails du certificat : + Faire confiance + Une fois + Abandonner + Partager le commentaire + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 431993a2..496e5205 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -71,6 +71,7 @@ URL è richiesto Nome utente obbligatorio Password obbligatoria Errore di connessione. Controllare la connessione Internet + Yay, Internet connection is back Il nome del repository è vuoto Nome del repository non è valido. [a–z A–Z 0–char@@9 – _] Repository name is reserved @@ -309,6 +310,8 @@ autorizzazione Aggiungi Assegnatari Aggiungi/Rimuovi Assegnatari Assegnatari aggiornati + Subscribe + Unsubscribe Elementi selezionati @@ -479,4 +482,8 @@ autorizzazione Once Abort Share Comment + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index a9c0f894..28a32085 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -70,6 +70,7 @@ Username is required Password is required Cannot access network, please check your Internet connection + Yay, Internet connection is back Repository name is empty Repository name is not valid. [a–z A–Z 0–9 – _] Repository name is reserved @@ -307,6 +308,8 @@ Add Assignees Add / Remove Assignees Assignees updated + Subscribe + Unsubscribe Select Entries @@ -477,4 +480,8 @@ Once Abort Share Comment + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml new file mode 100644 index 00000000..90279f10 --- /dev/null +++ b/app/src/main/res/values-pl/strings.xml @@ -0,0 +1,487 @@ + + + + Moje repozytoria + Ulubione repozytoria + Repozytoria + Profil + Ustawienia + Organizacje + O programie + Oceń GitNex + Wyloguj się + Przeglądaj + + + O programie + Strona główna + Moje repozytoria + Repozytoria + Profil + Nowe repozytorium + Organizacje + Problemy + Ustawienia + Nowa organizacja + Nowy etap + Nowy problem + Nowa etykieta + Podziękowania + Aktualizuj etykietę + Dawcy + Ulubione repozytoria + Nowy zespół + Dodaj adres e-mail + Nowy plik + Przeglądaj + + Wersja\u0020:\u0020 + Build nr\u0020:\u0020 + Repozytorium demo + Repozytorium z ORG + Opis demo + Nie znaleziono repozytoriów + Organizacja demo + Opis demo + Nie znaleziono organizacji + Utwórz + Aktualizuj + Nazwa repozytorium + Opis repozytorium + Prywatny + Maksymalnie 255 znaków + Właściciel + Nazwa organizacji + Opis organizacji + Maksymalnie 255 znaków + Nazwa użytkownika + Hasło + ZALOGUJ + Adres URL instancji + Otwórz szufladę nawigacji + Zamknij szufladę nawigacji + Zaloguj się do Gitea + 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. + Nieprawidłowa nazwa użytkownika/hasło + Nie można połączyć się z hostem. Sprawdź swój adres URL lub port pod kątem jakichkolwiek błędów. + Nie zaleca się używania protokołu HTTP, chyba że testujesz w sieci lokalnej. + Otrzymano błędne JSON. Odpowiedź serwera nie powiodła się. + Adres URL instancji jest wymagany + Nazwa użytkownika jest wymagana + Hasło jest wymagane + Nie można uzyskać dostępu do sieci, sprawdź swoje połączenie internetowe + Yay, Internet connection is back + Nazwa repozytorium jest pusta + Nazwa repozytorium jest nieprawidłowa. [a–z A–Z 0–9 – _] + Nazwa repozytorium jest zarezerwowana + Nazwa repozytorium zawiera zarezerwowane słowa kluczowe + Opis repozytorium przekracza limit 255 znaków + Repozytorium utworzone pomyślnie + Coś poszło nie tak, spróbuj ponownie + Repozytorium o tej nazwie już istnieje pod wybranym właścicielem + Nazwa organizacji jest pusta + Nazwa organizacji jest nieprawidłowa, [a–z A–Z 0–9 – _] + Opis organizacji przekracza limit 255 znaków + Organizacja utworzona pomyślnie + Coś poszło nie tak, spróbuj ponownie + Organizacja już istnieje + Przetwarzanie + Szukaj + Prace w toku + Zamknij + Dodaj + Org + Repozytorium + Pri + Usuń + Instancja zwróciła błąd. Kod\u0020 + Szczegółowa aktywność repozytorium + Szczegóły + Pliki + Otwarte problemy + Zamknięte problemy + Kamienie milowe + Wydania + Oddziały + Etykiety + Ustawienia + Współpracownicy + Pull Requesty + Nie znaleziono problemów + Repozytorium + Właściciel + Opis + Strona internetowa + Rozmiar + Domyślna gałąź + Adres URL SSH + Sklonuj adres URL + Adres URL repozytorium + Forki + Utworzono + Ostatnia aktualizacja + w + Otwarty\u0020 + Termin + Status: otwarte + otwarte + Status: zamknięte + zamknięty + Twórca:\u0020 + Przypisani + Typ: Problem + Typ: Pull Request + Komentujący:\u0020 + Etap %1$s + Termin %1$s + Otwarto %1$s + Przypisano do: %1$s + Komentarz + Napisz swój komentarz + Komentarz wysłany + Coś poszło nie tak, spróbuj ponownie + Awatar + Nie znaleziono kamieni milowych + Autor commit: %1$s + Hash commita \n%1$s%2$s + Tytuł wydania + Opis wydania + Pobrania + Typ wydania + Wydaj Zip + Wydaj Tar + Nie znaleziono wydań + Tag: %1$s + Współpracujący: %1$s + Nie znaleziono współpracowników + Edytuj + Tytuł + Opis + Termin + Tytuł etapu jest pusty + Tytuł etapu jest nieprawidłowy. [a–z A–Z 0–9 – _] + Opis etapu przekracza limit 255 znaków + Etap został utworzony pomyślnie + Coś poszło nie tak, spróbuj ponownie + Proszę wybrać termin + Otwarte problemy: %1$d + Zamknięte problemy: %1$d + Wybierz przypisane osoby + Wybierz etykiety + Gotowe + Anuluj + Tytuł + Przypisani + Opis + Termin + Etap + Etykiety + Tytuł problemu jest pusty + Opis problemu jest pusty + Nowy problem został pomyślnie utworzony + Coś poszło nie tak, spróbuj ponownie + Brak kamienia milowego + Nie znaleziono współpracowników + Nie znaleziono etykiet + + Tłumaczenie + Bezpieczeństwo + Usuń zaufane certyfikaty + Usunąć zaufane certyfikaty? + Czy na pewno chcesz usunąć wszystkie ręcznie zaufane certyfikaty lub nazwy hostów? \n\nZostaniesz również wylogowany. + Data & Czas + Ustawienia zapisane + Język + Angielski + Wygląd + Piękny + Wybierz język + Wybierz format czasu + Odznaka problemów + Pomóż nam przetłumaczyć GitNex na Twój język + Kolor bloku kodu + Wybór koloru bloku kodu + Ekran główny + Moje repozytoria + Wybierz ekran główny + Czcionka + Wybierz czcionkę + Roboto + Wybierz motyw aplikacji + Motyw + Tryb nocny PDF + Przeglądarka plików + Odznaki liczników + + Brak dostępnych danych + Nowa etykieta + Menu repozytorium + Nazwa etykiety + Kolor etykiety + Nazwa etykiety jest pusta + Nazwa etykiety jest nieprawidłowa + Etykieta utworzona. + Coś poszło nie tak, spróbuj ponownie + Etykieta zaktualizowana. + Nie znaleziono etykiet + Opis + Edytuj + Usuń + Etykieta usunięta + Coś poszło nie tak, spróbuj ponownie + Nie znaleziono gałęzi + Wygląd + Błąd autoryzacji + Wygląda na to, że Token Dostępu został odwołany LUB nie możesz zobaczyć tych treści. W przypadku cofnięcia tokenu, wyloguj się i zaloguj ponownie + Anuluj + Wyloguj się + Usuń\u0020 + Czy na pewno chcesz usunąć tę etykietę? + OK + Anuluj + + Szczegółowa aktywność organizacji + Repozytoria + Drużyny + Członkowie + Nowy zespół + Nie znaleziono drużyn + Nazwa zespołu + Opis zespołu + Pozwolenie: %1$s + Nie znaleziono członków + Członkowie organizacji + Członkowie zespołu organizacji + + + Nazwa zespołu + Opis + Uprawnienie + Kontrola dostępu + Członkowie mogą przeglądać i sklonować repozytoria zespołu + Członkowie mogą czytać i wysyłać do repozytoriów zespołu + Członkowie mogą ciągnąć i wypchać do repozytoriów zespołu i dodawać do nich współpracowników + Wprowadź nazwę zespołu + Nazwa zespołu powinna zawierać tylko znaki alfanumeryczne, myślniki (-), podkreślenia (_) i kropki (.) + Proszę wybrać uprawnienia + Opis zespołu ma niedozwolone znaki + Opis zespołu ma więcej niż 100 znaków + Zespół utworzony pomyślnie + Coś poszło nie tak, spróbuj ponownie + + + Edytuj komentarz + Edytuj + Komentarz zaktualizowany + + + Dodaj / Usuń współpracownika + Szukaj użytkowników + Nazwa użytkownika + Usuń\u0020 + Czy chcesz usunąć tego użytkownika z repozytorium? + Użytkownik usunięty z repozytorium. + Użytkownik dodany do repozytorium. + + + Obserwujący + Obserwowane + Dodaj adres e-mail + Zapisz + Adres e-mail + Nowy e-mail został dodany. + Adres e-mail jest pusty. + Adres e-mail jest nieprawidłowy + Adres e-mail jest już używany + Podstawowy + E-maile + + + Dodaj / Usuń etykiety + Etykiety zaktualizowane + Zamknij problem + Dodaj komentarz + Edytuj problem + Otwórz ponownie problem + Problem zamknięty + Problem ponownie otwarty + Dodaj przypisanych osób + Dodaj / Usuń przypisanych osób + Zaktualizowano przypisanych + Subscribe + Unsubscribe + + + Wybierz wpisy + Proszę wybrać co najmniej jedną opcję + Proszę wybrać co najmniej + Możesz wybrać tylko do + opcja + opcje + Zaznacz wszystkie + Odznacz wszystkie + + Meta repozytorium + + Dodaj nowego użytkownika + Użytkownicy + Administrator + + + Pełna nazwa + E-mail + Nazwa użytkownika + Hasło + Nieprawidłowa pełna nazwa + Nieprawidłowa nazwa użytkownika + Nieprawidłowy adres e-mail + Nowy użytkownik został pomyślnie dodany + Użytkownik już istnieje + + + Edytuj problem #%1$s + Zaktualizowano problem + + + Nowe wydanie + Nazwa tagu + Tytuł + Zawartość + Oznacz jako wstępne wydanie + Wybierz gałąź + Szkic + Nazwa tagu jest pusta + Tytuł jest pusty + Utworzono nową wersję + + Wprowadź kod OTP + Kod OTP powinien być liczbami. + Kod OTP (opcjonalnie) + Wprowadź kod OTP, jeśli 2FA jest włączony + Otwórz w przeglądarce + Polubienia + Obserwatorzy + Nie znaleziono gwiazdek + Nie znaleziono obserwatorów + Gwiazdka + Obserwujący + Commit + Archiwum ZIP + Archiwum Tar + + Nazwa pliku + Nazwa nowego oddziału + Zawartość pliku + Utwórz nowy plik + z folderem: app/test.md + Wiadomość commitu + Nieprawidłowa nazwa gałęzi, może zawierać tylko –,–z, 0–9 + Wiadomość commitu jest zbyt długa + Nowy plik został utworzony + Bieżące oddziały + Pola takie jak nazwa pliku, zawartość i wiadomość zatwierdzenia są wymagane + Wybranie bieżącej gałęzi spowoduje wyłączenie nowej gałęzi + np. nowa-gałąź + Nazwa nowej gałęzi nie może być pusta, jeśli nie wybrano bieżącej gałęzi + Filtr + Skopiuj adres URL zgłoszenia + Adres URL skopiowany do schowka + %1$d\uFF05 zakończony + + Nie znaleziono plików + Przeglądanie katalogu nie jest jeszcze obsługiwane + Przepraszamy, ten plik nie może być otworzony, ponieważ API zwrócił błąd + Główny + + OK + Gotowe + Anuluj + Coś poszło nie tak, spróbuj ponownie + To żądanie wymaga wyższej wersji Gitea niż zainstalowana. Proszę zaktualizować swoją instancję do najnowszej wersji Gitea. + Nie znaleziono danych + Dodaj + Usuń + Nie masz uprawnień do wykonania tej czynności. + Menu + Edytuj + Usuń + edytowano + Zapisz + Nazwa + Opis + Strona internetowa + Lokalizacja + Maksymalnie 255 znaków + Wszystkie pola są wymagane + Kontynuuj + Token + Zobacz w przeglądarce + + Przetłumacz GitNex z Crowdin + Przeglądaj repozytoria + Ogwiazdkuj repozytorium + Odgwiazdkuj repozytorium + Repozytorium dodane do listy gwiazdkowanych + Repozytorium usunięte z listy oznaczonych gwiazdką + Obserwuj repozytorium + Przestań obserwować repozytorium + Repozytorium dodane do listy obserwowanych + Repozytorium usunięte z listy obserwacyjnej + Wykryto nieobsługiwaną starą wersję(%1$s) Gitea. Proszę zaktualizować do najnowszej stabilnej wersji. Jeśli kontynuujesz, aplikacja może nie działać poprawnie. + Wykryto starą wersję Gitea, proszę zaktualizować do najnowszej stabilnej wersji + Wykryto nową wersję Gitea! Proszę AKTUALIZUJ GitNex! + Wersja Gitea jest aktualna + Wersja rozwojowa Gitea + Nie wykryto Gitea! + Powiadomienie o wersji + Nieobsługiwana wersja Gitea + Nazwa użytkownika / Hasło + Wybierz preferowaną metodę logowania, aby uzyskać dostęp do swojego konta. Token jest bezpieczniejszy! + Instancja zwróciła błąd - nieautoryzowana. Sprawdź swoje dane i spróbuj ponownie + Wprowadź poprawny token + Nie znaleziono pull requestów + Twórca:\u0020 + Edytuj Pull Request + Skopiuj Pull Request URL + Edytuj Pull Request #%1$s + Zaktualizowano Pull Request + %1$s Plików zmienionych + %1$s Plik zmieniony + Pliki zmienione + Scal Pull Request + Połącz + Scalanie może się nie powieść, jeśli nie masz uprawnień do scalania Pull Request. + Scal komentarz + Pull Request został pomyślnie scalony + Pull Request nie jest dostępny do scalenia + Pobierz ten plik + Poczekaj aż plik załaduje się do pamięci + Plik został zapisany do katalogu pobierania + Ten typ pliku nie jest obsługiwany w przeglądarce plików. Pobrać go z trzech kropkowanych menu? + Rozmiar + Udostępnij problem + Udostępnij Pull Request + Udostępnij repozytorium + Utwórz repozytorium + Commity + Commity gałęzi + Zcommitowane przez %1$s + Zobacz commity + + Weryfikacja certyfikatu + Zaakceptować nieznany certyfikat? + Certyfikat serwera nie jest podpisany przez znany organ certyfikacji. + Certyfikat serwera wygasł. + Zaakceptować niepasującą nazwę serwera? + Serwer nie mógł uwierzytelnić jako \"%s\". Certyfikat jest ważny tylko dla: + Czy mimo to chcesz się połączyć? + Szczegóły certyfikatu: + Zaufaj + Raz + Przerwij + Udostępnij komentarz + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed + diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 4076664b..1d47de96 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -70,6 +70,7 @@ Nome de usuário é necessário A senha é necessária Não é possível acessar a rede, por favor, verifique sua conexão com a Internet + Yay, Internet connection is back Nome do repositório está vazio O nome do repositório não é válido. [um–z A–Z 0–9 – _] Repository name is reserved @@ -307,6 +308,8 @@ Adicionar Designados Adicionar/Remover designados Designados atualizados + Subscribe + Unsubscribe Selecionar @@ -477,4 +480,8 @@ Once Abort Share Comment + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 395eb6dc..0fe3c0c9 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -63,17 +63,18 @@ Войти в Gitea 1. Выберите протокол (https или http) \n2. Укажите URL Gitea, например: try.gitea.io \n3. Если для учетной записи включена 2FA, введите код OTP в соответствующее поле. \n4. Для базовой аутентификации HTTP укажите USERNAME@DOMAIN.COM в поле URL. Неверные логин и/или пароль - Couldn\'t connect to host. Please check your URL or port for any errors. + Не удалось подключиться к хосту. Пожалуйста, проверьте URL-адрес или порт на наличие ошибок. Не рекомендуется использовать протокол HTTP, если вы не тестируете инстанцию в локальной сети. Неожиданный ответ от сервера. Попробуйте сменить протокол или обратитесь к администратору инстанции. Требуется URL экземпляра Требуется имя пользователя Требуется пароль Нет подключения к интернету, проверьте наличие связи. + Yay, Internet connection is back Название репозитория пустое. Недоступное название репозитория. [a–z A–Z 0–9 – _] - Repository name is reserved - Repository name contains reserved keywords + Название репозитория зарезервировано + Имя репозитория содержит зарезервированные ключевые слова Описание репозитория превышает 255 символов. Репозиторий успешно создан! Что-то пошло не так. Пожалуйста, попытайтесь еще раз. @@ -184,10 +185,10 @@ Меток не обнаружено Перевод - Security - Delete Trusted Certificates - Delete Trusted Certificates? - Are you sure to delete any manually trusted certificate or hostname? \n\nYou will also be logged out. + Безопасность + Удалить доверенные сертификаты + Удалить доверенные сертификаты? + Вы уверены, что хотите удалить любой вручную доверенный сертификат или имя хоста? \n\nВы также выйдите из системы. Дата и время Сохранено Язык @@ -210,7 +211,7 @@ Тема Ночной режим PDF Просмотрщик файла - Counter Badges + Значки счётчика Больше даных нет Создание метки @@ -307,6 +308,8 @@ Добавить исполнителей Добавить / удалить исполнителей Исполнители обновлены + Subscribe + Unsubscribe Выбрать записи @@ -412,7 +415,7 @@ Все поля обязательны для заполнения Продолжить Токен - View in Browser + Просмотреть в браузере Перевести GitNex на Crowdin Просмотреть репозитории @@ -455,26 +458,30 @@ Пожалуйста дождитесь загрузки файла Файл сохранен в папку Загрузки Этот тип файла не поддерживается в средстве просмотра файлов. Загрузить его? - Size - Share Issue - Share Pull Request - Share Repository - Create Repository - Commits - Branch Commits - Committed by %1$s - View Commits + Размер + Поделиться задачей + Поделиться запросом на слияние + Поделиться репозиторием + Создать репозиторий + Коммиты + Коммиты ветки + Коммит от %1$s + Просмотр коммитов - Certificate Verification - Accept Unknown Certificate? - The server certificate is not signed by a known Certificate Authority. - The server certificate is expired. - Accept Mismatching Server Name? - Server could not authenticate as \"%s\". The certificate is only valid for: - Do you want to connect anyway? - Certificate details: - Trust - Once - Abort - Share Comment + Проверка сертификата + Принять неизвестный сертификат? + Сертификат сервера не подписан известным центром сертификации. + Срок действия сертификата сервера истек. + Имя сервера не совпадает. Принять? + Сервер не может быть опознан как \"%s\". Сертификат действителен только для: + Вы все равно хотите продолжить? + Детали о сертификате: + Доверять + Один раз + Прервать + Поделиться комментарием + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index e528e647..f6e6f7e4 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -70,6 +70,7 @@ Корисничко име је обавезно Лозинка је обавезна Не могу да приступим мрежи, провери интернет конекцију + Yay, Internet connection is back Назив репозиторијума је обавезан Назив репозиторијума није валидан [a–z A–Z 0–9 – _] Repository name is reserved @@ -307,6 +308,8 @@ Додели Додај или уклони задужене Задужења су ажурирана + Subscribe + Unsubscribe Одабери @@ -477,4 +480,8 @@ Once Abort Share Comment + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 0f3a083a..7e7932cc 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -70,6 +70,7 @@ Kullanıcı adı gerekli Parola gerekli Ağa erişilemiyor, lütfen internet bağlantınızı kontrol edin + Yay, Internet connection is back Depo adı boş Depo adı geçerli değil. [a–z A–Z 0–9 – _] Repository name is reserved @@ -307,6 +308,8 @@ Atanan Ekle Atanan Ekle/Kaldır Atanan güncellendi + Subscribe + Unsubscribe Öğeleri Seç @@ -477,4 +480,8 @@ Once Abort Share Comment + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 4b3ff866..29e60288 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -70,6 +70,7 @@ Ім\'я користувача є обов\'язковим Пароль є обов\'язковим Неможливо отримати доступ до мережі, будь ласка, перевірте підключення до Інтернету + Yay, Internet connection is back Назва репозиторія порожня Назва репозиторія некоректна. [a–z A–Z 0–9 – _] Repository name is reserved @@ -307,6 +308,8 @@ Додати виконавців Додати / Видалити виконавців Виконавців оновлено + Subscribe + Unsubscribe Обрати записи @@ -477,4 +480,8 @@ Once Abort Share Comment + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index b097f36b..6b1e43a9 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -70,6 +70,7 @@ 用户名必填 密码为必填 连接错误: 请检查您的网络连接 + Yay, Internet connection is back 仓库名称为空 仓库名称无效。[a–z A–Z 0–9 – _] Repository name is reserved @@ -307,6 +308,8 @@ 添加被指派人 添加/移除分配人 受让人已更新 + Subscribe + Unsubscribe 选择条目 @@ -477,4 +480,8 @@ Once Abort Share Comment + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed From e07ee1acebcfd22cabacd1d6941f2b299681b1a9 Mon Sep 17 00:00:00 2001 From: opyale Date: Tue, 7 Apr 2020 20:45:40 +0000 Subject: [PATCH 3/5] Enabling counter badges by default. (#378) Merge remote-tracking branch 'remotes/main/master' into counter-badges # Conflicts: # app/src/main/java/org/mian/gitnex/fragments/SettingsFragment.java Moving to BaseActivity Enabling counter badges by default. Co-authored-by: opyale Reviewed-on: https://gitea.com/gitnex/GitNex/pulls/378 Reviewed-by: M M Arif --- .../mian/gitnex/activities/BaseActivity.java | 6 +++++ .../gitnex/fragments/SettingsFragment.java | 24 +++++++++---------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java b/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java index cd6fb798..731bfd44 100644 --- a/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java @@ -60,6 +60,12 @@ public abstract class BaseActivity extends AppCompatActivity { } + // enabling counter badges by default + if(tinyDb.getString("enableCounterBadgesInit").isEmpty()) { + tinyDb.putBoolean("enableCounterBadges", true); + tinyDb.putString("enableCounterBadgesInit", "yes"); + } + } protected abstract int getLayoutResourceId(); diff --git a/app/src/main/java/org/mian/gitnex/fragments/SettingsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/SettingsFragment.java index d21214dd..c84ac9c4 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/SettingsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/SettingsFragment.java @@ -99,9 +99,9 @@ public class SettingsFragment extends Fragment { homeScreenSelected.setText(tinyDb.getString("homeScreenStr")); } - if(!tinyDb.getString("customFontStr").isEmpty()) { - customFontSelected.setText(tinyDb.getString("customFontStr")); - } + if(!tinyDb.getString("customFontStr").isEmpty()) { + customFontSelected.setText(tinyDb.getString("customFontStr")); + } if(!tinyDb.getString("themeStr").isEmpty()) { themeSelected.setText(tinyDb.getString("themeStr")); @@ -167,16 +167,14 @@ public class SettingsFragment extends Fragment { // counter badge switcher counterBadgesSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { - if(isChecked) { - tinyDb.putBoolean("enableCounterBadges", true); - tinyDb.putString("enableCounterBadgesInit", "yes"); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - } - else { - tinyDb.putBoolean("enableCounterBadges", false); - tinyDb.putString("enableCounterBadgesInit", "yes"); - Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); - } + if (isChecked) { + tinyDb.putBoolean("enableCounterBadges", true); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + } + else { + tinyDb.putBoolean("enableCounterBadges", false); + Toasty.info(getContext(), getResources().getString(R.string.settingsSave)); + } }); From e310a16bad26b4d3ce318d833f64a60e01acbfcc Mon Sep 17 00:00:00 2001 From: opyale Date: Tue, 7 Apr 2020 21:17:12 +0000 Subject: [PATCH 4/5] Improving design of "Repository Meta" (#362) Merge branch 'master' into details-design Always open "Repository Meta" Fixing bugs. Merge remote-tracking branch 'remotes/main/master' into details-design Typo removal. Do not show pull requests when API returns null. Replacing size by watchers Removing unused imports. Moving time formatting into TimeHelper. Changing website icon and renaming button and dialog text. Further contentDescription Adding contentDescription Adding support for "timeFormat" Merge remote-tracking branch 'remotes/main/master' into details-design Full support for translation. Partially supporting translation. Adding "view additional information". Adding additional information. Adding forks count. First design changes. Improving usability by including whole header in "Details". Co-authored-by: opyale Reviewed-on: https://gitea.com/gitnex/GitNex/pulls/362 Reviewed-by: M M Arif --- .../activities/IssueDetailActivity.java | 28 +- .../gitnex/adapters/ClosedIssuesAdapter.java | 24 +- .../gitnex/adapters/IssueCommentsAdapter.java | 26 +- .../mian/gitnex/adapters/IssuesAdapter.java | 24 +- .../gitnex/adapters/PullRequestsAdapter.java | 24 +- .../gitnex/fragments/RepoInfoFragment.java | 169 ++++--- .../org/mian/gitnex/helpers/TimeHelper.java | 27 ++ .../org/mian/gitnex/items/CommitsItems.java | 24 +- .../main/res/layout/fragment_repo_info.xml | 412 ++++++++++-------- app/src/main/res/values/strings.xml | 4 + 10 files changed, 393 insertions(+), 369 deletions(-) diff --git a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java index 9a85ed5a..13c2406b 100644 --- a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java @@ -537,29 +537,11 @@ public class IssueDetailActivity extends BaseActivity { issueDescription.setLayoutParams(paramsDesc); } - switch (timeFormat) { - case "pretty": { - PrettyTime prettyTime = new PrettyTime(new Locale(locale)); - String createdTime = prettyTime.format(singleIssue.getCreated_at()); - issueCreatedTime.setText(createdTime); - issueCreatedTime.setVisibility(View.VISIBLE); - issueCreatedTime.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(singleIssue.getCreated_at()), getApplicationContext())); - break; - } - case "normal": { - DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd '" + getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale)); - String createdTime = formatter.format(singleIssue.getCreated_at()); - issueCreatedTime.setText(createdTime); - issueCreatedTime.setVisibility(View.VISIBLE); - break; - } - case "normal1": { - DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy '" + getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale)); - String createdTime = formatter.format(singleIssue.getCreated_at()); - issueCreatedTime.setText(createdTime); - issueCreatedTime.setVisibility(View.VISIBLE); - break; - } + issueCreatedTime.setText(TimeHelper.formatTime(singleIssue.getCreated_at(), new Locale(locale), timeFormat, ctx)); + issueCreatedTime.setVisibility(View.VISIBLE); + + if(timeFormat.equals("pretty")) { + issueCreatedTime.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(singleIssue.getCreated_at()), ctx)); } if(singleIssue.getMilestone() != null) { diff --git a/app/src/main/java/org/mian/gitnex/adapters/ClosedIssuesAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/ClosedIssuesAdapter.java index 98d8aadd..7a9ea6ac 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/ClosedIssuesAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/ClosedIssuesAdapter.java @@ -193,26 +193,10 @@ public class ClosedIssuesAdapter extends RecyclerView.Adapter issueNumber.setText(String.valueOf(issuesModel.getNumber())); issueCommentsCount.setText(String.valueOf(issuesModel.getComments())); - switch (timeFormat) { - case "pretty": { - PrettyTime prettyTime = new PrettyTime(new Locale(locale)); - String createdTime = prettyTime.format(issuesModel.getCreated_at()); - issueCreatedTime.setText(createdTime); - issueCreatedTime.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(issuesModel.getCreated_at()), context)); - break; - } - case "normal": { - DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd '" + context.getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale)); - String createdTime = formatter.format(issuesModel.getCreated_at()); - issueCreatedTime.setText(createdTime); - break; - } - case "normal1": { - DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy '" + context.getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale)); - String createdTime = formatter.format(issuesModel.getCreated_at()); - issueCreatedTime.setText(createdTime); - break; - } + issueCreatedTime.setText(TimeHelper.formatTime(issuesModel.getCreated_at(), new Locale(locale), timeFormat, context)); + + if(timeFormat.equals("pretty")) { + issueCreatedTime.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(issuesModel.getCreated_at()), context)); } } diff --git a/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java index 29c2bcf0..d2223994 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/PullRequestsAdapter.java @@ -181,26 +181,10 @@ public class PullRequestsAdapter extends RecyclerView.Adapter dialog.dismiss()); + alertDialog.create().show(); + + } + }); if(repoInfo.getHas_issues() != null) { tinyDb.putBoolean("hasIssues", repoInfo.getHas_issues()); @@ -253,28 +313,6 @@ public class RepoInfoFragment extends Fragment { tinyDb.putBoolean("hasIssues", true); } - switch (timeFormat) { - case "pretty": { - PrettyTime prettyTime = new PrettyTime(new Locale(locale)); - String createdTime = prettyTime.format(repoInfo.getCreated_at()); - repoCreatedAtInfo.setText(createdTime); - repoCreatedAtInfo.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(repoInfo.getCreated_at()), getContext())); - break; - } - case "normal": { - DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd '" + getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale)); - String createdTime = formatter.format(repoInfo.getCreated_at()); - repoCreatedAtInfo.setText(createdTime); - break; - } - case "normal1": { - DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy '" + getResources().getString(R.string.timeAtText) + "' HH:mm", new Locale(locale)); - String createdTime = formatter.format(repoInfo.getCreated_at()); - repoCreatedAtInfo.setText(createdTime); - break; - } - } - mProgressBar.setVisibility(View.GONE); pageContent.setVisibility(View.VISIBLE); @@ -373,13 +411,14 @@ public class RepoInfoFragment extends Fragment { .build(); Spanned bodyWithMD = null; + if (response.body() != null) { bodyWithMD = markwon.toMarkdown(response.body()); } + assert bodyWithMD != null; markwon.setParsedMarkdown(repoFileContents, bodyWithMD); - } else if (response.code() == 401) { AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle), diff --git a/app/src/main/java/org/mian/gitnex/helpers/TimeHelper.java b/app/src/main/java/org/mian/gitnex/helpers/TimeHelper.java index 6096927e..b1e6419e 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/TimeHelper.java +++ b/app/src/main/java/org/mian/gitnex/helpers/TimeHelper.java @@ -1,5 +1,8 @@ package org.mian.gitnex.helpers; +import android.content.Context; +import org.mian.gitnex.R; +import org.ocpsoft.prettytime.PrettyTime; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -25,6 +28,30 @@ public class TimeHelper { } + public static String formatTime(Date date, Locale locale, String timeFormat, Context context) { + + switch (timeFormat) { + + case "pretty": { + PrettyTime prettyTime = new PrettyTime(Locale.getDefault()); + return prettyTime.format(date); + } + + case "normal": { + DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd '" + context.getResources().getString(R.string.timeAtText) + "' HH:mm", locale); + return formatter.format(date); + } + + case "normal1": { + DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy '" + context.getResources().getString(R.string.timeAtText) + "' HH:mm", locale); + return formatter.format(date); + } + + } + + return ""; + } + public static String customDateFormatForToastDateFormat(Date customDate) { DateFormat format = DateFormat.getDateTimeInstance(); diff --git a/app/src/main/java/org/mian/gitnex/items/CommitsItems.java b/app/src/main/java/org/mian/gitnex/items/CommitsItems.java index bfa2a69f..8c3b03ef 100644 --- a/app/src/main/java/org/mian/gitnex/items/CommitsItems.java +++ b/app/src/main/java/org/mian/gitnex/items/CommitsItems.java @@ -138,26 +138,10 @@ public class CommitsItems extends AbstractItem" + ctx.getResources().getString(R.string.viewInBrowser) + " ")); diff --git a/app/src/main/res/layout/fragment_repo_info.xml b/app/src/main/res/layout/fragment_repo_info.xml index 79e7571d..e676a22f 100644 --- a/app/src/main/res/layout/fragment_repo_info.xml +++ b/app/src/main/res/layout/fragment_repo_info.xml @@ -1,5 +1,6 @@ @@ -52,214 +53,267 @@ + android:layout_height="wrap_content" + android:orientation="vertical"> - - - - + android:textSize="22sp" + android:textStyle="bold" + tools:text="GitNex" /> - - - - - - - - - - + tools:text="Android client for Gitea https://gitnex.com" /> - + android:layout_marginTop="20dp" + android:baselineAligned="false" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + android:layout_marginBottom="20dp" + android:orientation="horizontal" + android:paddingLeft="15dp" + android:paddingRight="15dp"> - + + + + + + + + + + + + android:layout_marginBottom="20dp" + android:orientation="horizontal" + android:paddingLeft="15dp" + android:paddingRight="15dp"> - + + + + + + + + + + + + android:layout_marginBottom="20dp" + android:orientation="horizontal" + android:paddingLeft="15dp" + android:paddingRight="15dp"> - + - + - + - + + - + - - - - - - - +