Compare commits

..

8 Commits

Author SHA1 Message Date
0f014c2822 Update readme (#718)
Update readme

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/718
2020-09-30 21:15:11 +02:00
996983d7a3 Release 3.2.0 (#717)
Prepare release 3.2.0

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/717
2020-09-30 21:08:48 +02:00
00cfcbc9cf Crowdin 2020-09-30 (#716)
Crowdin 2020-09-30

Co-authored-by: 6543 <6543@obermui.de>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/716
2020-09-30 20:45:50 +02:00
74669a9dcb Enhance explore repos (#715)
Enhance explore repos

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/715
2020-09-30 16:53:31 +02:00
d52d7a188e Search issues (#713)
Implement pagination

Use tabs for explore

add fragment, layout, adapter and implementation of api calls

Merge branch 'master' into 14-search-issues-pulls

Merge branch 'master' into 14-search-issues-pulls

Merge branch 'master' into 14-search-issues-pulls

Add menu item

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/713
2020-09-30 13:09:24 +02:00
d20a773d1d Extend explore repositories search (#703)
Merge branch 'master' into improve-explore-screen

improve email address input ui

Add filter query actions

Add radio buttons

improve nav accounts list images

Merge branch 'master' into improve-explore-screen

# Conflicts:
#	app/src/main/res/values/strings.xml

Implement dialog and use new input layout

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/703
2020-09-27 09:55:59 +02:00
bf19e52799 Move about and rate to settings screen (#714)
Move about and rate to settings screen

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/714
2020-09-27 09:36:57 +02:00
8612258174 Including releases in latest builds (#712)
Including releases in latest builds.

Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/712
Reviewed-by: 6543 <6543@noreply.codeberg.org>
2020-09-27 00:23:06 +02:00
53 changed files with 1429 additions and 247 deletions

View File

@ -48,6 +48,7 @@ latest:
stage: publish
only:
- master
- tags
variables:
WEBDAV_USERNAME: "GitNexBot"
PLUGIN_FILE: "signed.apk"

View File

@ -4,13 +4,13 @@
# 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.
## 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 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)
## Note about Gitea version

View File

@ -6,8 +6,8 @@ android {
applicationId "org.mian.gitnex"
minSdkVersion 21
targetSdkVersion 30
versionCode 317
versionName "3.2.0-rc1"
versionCode 320
versionName "3.2.0"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

View File

@ -1,13 +1,11 @@
package org.mian.gitnex.activities;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
@ -33,11 +31,10 @@ import org.mian.gitnex.clients.PicassoService;
import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.database.api.UserAccountsApi;
import org.mian.gitnex.database.models.UserAccount;
import org.mian.gitnex.fragments.AboutFragment;
import org.mian.gitnex.fragments.AdministrationFragment;
import org.mian.gitnex.fragments.BottomSheetDraftsFragment;
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.NotificationsFragment;
import org.mian.gitnex.fragments.OrganizationsFragment;
@ -179,7 +176,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
else if(fragmentById instanceof OrganizationsFragment) {
toolbarTitle.setText(getResources().getString(R.string.pageTitleOrganizations));
}
else if(fragmentById instanceof ExploreRepositoriesFragment) {
else if(fragmentById instanceof ExploreFragment) {
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
}
else if(fragmentById instanceof NotificationsFragment) {
@ -188,9 +185,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
else if(fragmentById instanceof ProfileFragment) {
toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile));
}
else if(fragmentById instanceof AboutFragment) {
toolbarTitle.setText(getResources().getString(R.string.pageTitleAbout));
}
else if(fragmentById instanceof DraftsFragment) {
toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
}
@ -311,6 +305,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
navigationView.setCheckedItem(R.id.nav_profile);
drawer.closeDrawers();
});
@ -390,7 +385,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
case 5:
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);
break;
@ -455,6 +450,11 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
}
}
public void setActionBarTitle(String title) {
toolbarTitle.setText(title);
}
@Override
public void onButtonClicked(String text) {
@ -544,15 +544,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
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:
toolbarTitle.setText(getResources().getString(R.string.pageTitleStarredRepos));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new StarredRepositoriesFragment()).commit();
@ -560,7 +551,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
case R.id.nav_explore:
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;
case R.id.nav_notifications:
@ -584,16 +575,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
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) {
TinyDB tinyDb = new TinyDB(ctx.getApplicationContext());

View File

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

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

@ -9,6 +9,7 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
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.TinyDB;
@ -29,6 +30,8 @@ public class AboutFragment extends Fragment {
viewBinding.userServerVersion.setText(tinyDb.getString("giteaVersion"));
viewBinding.appBuild.setText(String.valueOf(AppUtil.getAppBuildNo(requireContext())));
((MainActivity) requireActivity()).setActionBarTitle(getResources().getString(R.string.pageTitleAbout));
viewBinding.donationLinkLiberapay.setOnClickListener(v1 -> {
Intent intent = new Intent();

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;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.view.inputmethod.InputMethodManager;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import org.mian.gitnex.R;
import org.mian.gitnex.adapters.ExploreRepositoriesAdapter;
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.InfiniteScrollListener;
import org.mian.gitnex.helpers.StaticGlobalVariables;
import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Version;
import org.mian.gitnex.models.ExploreRepositories;
import org.mian.gitnex.models.UserRepositories;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import retrofit2.Call;
@ -29,189 +39,300 @@ import retrofit2.Callback;
import retrofit2.Response;
/**
* Template Author Author M M Arif
* Template Author M M Arif
* Author 6543
*/
public class ExploreRepositoriesFragment extends Fragment {
private static String repoNameF = "param2";
private static String repoOwnerF = "param1";
private ProgressBar mProgressBar;
private RecyclerView mRecyclerView;
private TextView noData;
private TextView searchKeyword;
private Boolean repoTypeInclude = true;
private FragmentExploreRepoBinding viewBinding;
private Context ctx;
private TinyDB tinyDb;
private int pageCurrentIndex = 1;
private boolean repoTypeInclude = true;
private String sort = "updated";
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() {
}
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);
}
}
private Dialog dialogFilterOptions;
private CustomExploreRepositoriesDialogBinding filterBinding;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.fragment_explore_repo, container, false);
//setHasOptionsMenu(true);
viewBinding = FragmentExploreRepoBinding.inflate(inflater, container, false);
setHasOptionsMenu(true);
TinyDB tinyDb = new TinyDB(getContext());
final String instanceUrl = tinyDb.getString("instanceUrl");
final String loginUid = tinyDb.getString("loginUid");
final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
ctx = getContext();
tinyDb = new TinyDB(getContext());
searchKeyword = v.findViewById(R.id.searchKeyword);
noData = v.findViewById(R.id.noData);
mProgressBar = v.findViewById(R.id.progress_bar);
mRecyclerView = v.findViewById(R.id.recyclerViewReposSearch);
instanceUrl = tinyDb.getString("instanceUrl");
loginUid = tinyDb.getString("loginUid");
instanceToken = "token " + tinyDb.getString(loginUid + "-token");
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(!searchKeyword.getText().toString().equals("")) {
mProgressBar.setVisibility(View.VISIBLE);
mRecyclerView.setVisibility(View.GONE);
loadSearchReposList(instanceUrl, instanceToken, loginUid, searchKeyword.getText().toString(), repoTypeInclude, sort, order, getContext(), limit);
if(!Objects.requireNonNull(viewBinding.searchKeyword.getText()).toString().equals("")) {
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;
});
int limitDefault = 25;
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>() {
viewBinding.recyclerViewReposSearch.addOnScrollListener(new InfiniteScrollListener(pageCurrentIndex, linearLayoutManager) {
@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()));
}
public void onScrolledToEnd(int firstVisibleItemPosition) {
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) {
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()));
}
pageCurrentIndex = 1;
// 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
public void onFailure(@NonNull Call<ExploreRepositories> call, @NonNull Throwable t) {
Log.i("onFailure", Objects.requireNonNull(t.getMessage()));
}
loadData(false, Objects.requireNonNull(viewBinding.searchKeyword.getText()).toString(), tinyDb.getBoolean("exploreRepoIncludeTopic"), tinyDb.getBoolean("exploreRepoIncludeDescription"), tinyDb.getBoolean("exploreRepoIncludeTemplate"), tinyDb.getBoolean("exploreRepoOnlyArchived"));
});
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);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL);
mRecyclerView.addItemDecoration(dividerItemDecoration);
if(apiCallDefaultLimit > limit) {
return;
}
if(adapter.getItemCount() > 0) {
mRecyclerView.setAdapter(adapter);
noData.setVisibility(View.GONE);
mProgressBar.setVisibility(View.GONE);
if(pageCurrentIndex == 1 || !append) {
dataList.clear();
adapter.notifyDataSetChanged();
viewBinding.pullToRefresh.setRefreshing(false);
viewBinding.progressBar.setVisibility(View.VISIBLE);
}
else {
noData.setVisibility(View.VISIBLE);
mProgressBar.setVisibility(View.GONE);
viewBinding.loadingMoreView.setVisibility(View.VISIBLE);
}
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) {
mListener.onFragmentInteraction(uri);
dialogFilterOptions = new Dialog(ctx, R.style.ThemeOverlay_MaterialComponents_Dialog_Alert);
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
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnFragmentInteractionListener {
void onFragmentInteraction(Uri uri);
}
}

View File

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

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;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
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.SettingsTranslationActivity;
import org.mian.gitnex.helpers.TinyDB;
import java.util.Objects;
/**
* Author M M Arif
@ -37,6 +38,8 @@ public class SettingsFragment extends Fragment {
LinearLayout securityFrame = v.findViewById(R.id.securityFrame);
LinearLayout languagesFrame = v.findViewById(R.id.languagesFrame);
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)));
@ -50,10 +53,24 @@ public class SettingsFragment extends Fragment {
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;
}
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
public void onResume() {
@ -62,8 +79,8 @@ public class SettingsFragment extends Fragment {
TinyDB tinyDb = new TinyDB(getContext());
if(tinyDb.getBoolean("refreshParent")) {
Objects.requireNonNull(getActivity()).recreate();
getActivity().overridePendingTransition(0, 0);
requireActivity().recreate();
requireActivity().overridePendingTransition(0, 0);
tinyDb.putBoolean("refreshParent", false);
}

View File

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

View File

@ -266,7 +266,10 @@ public interface ApiInterface {
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
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
Call<JsonElement> createNewFile(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("file") String fileName, @Body NewFile jsonStr);

View File

@ -27,6 +27,7 @@ public class Issues {
private pullRequestObject pull_request;
private milestoneObject milestone;
private List<assigneesObject> assignees;
private repositoryObject repository;
public Issues(String 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() {
return id;
}
@ -267,4 +297,9 @@ public class Issues {
this.html_url = html_url;
}
public repositoryObject getRepository() {
return repository;
}
}

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
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">
@ -50,27 +50,30 @@
android:padding="16dp"
android:orientation="vertical">
<TextView
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/userEmailLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/profileEmailTitle"
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"
app:boxBackgroundColor="?attr/inputBackgroundColor"
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
android:id="@+id/addEmailButton"

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,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">
<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_height="wrap_content"
style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate"
app:indicatorColor="?attr/progressIndicatorColor" />
<EditText
android:id="@+id/searchKeyword"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:textSize="14sp"
android:layout_marginStart="10dp"
android:layout_marginEnd="10dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:inputType="text"
android:background="@drawable/shape_inputs"
android:textColor="?attr/inputTextColor"
android:textColorHint="?attr/hintColor"
android:hint="@string/exploreTextBoxHint"
android:textColorHighlight="?attr/primaryTextColor"
android:imeOptions="actionSend"
android:autofillHints="@string/exploreTextBoxHint" />
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/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
android:id="@+id/noData"
@ -43,11 +71,18 @@
android:textSize="20sp"
android:visibility="gone" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerViewReposSearch"
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/pullToRefresh"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/primaryBackgroundColor"
android:scrollbars="vertical" />
android:layout_height="match_parent">
<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>

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:background="?attr/primaryBackgroundColor">
<ScrollView
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?attr/primaryBackgroundColor">
@ -208,8 +208,72 @@
</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>
</ScrollView>
</androidx.core.widget.NestedScrollView>
</RelativeLayout>

View File

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

View File

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

View File

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

View File

@ -56,19 +56,6 @@
android:icon="@drawable/ic_settings"
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"
android:icon="@drawable/ic_logout"
android:title="@string/navLogout" />

View File

@ -12,6 +12,7 @@
<string name="navLogout">الخروج</string>
<string name="navExplore">استكشف</string>
<string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">عن التطبيق</string>
@ -519,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</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="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string>
@ -569,6 +572,12 @@
<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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Odhlásit se</string>
<string name="navExplore">Prozkoumat</string>
<string name="navAdministration">Administrace</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">O aplikaci</string>
@ -519,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</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="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string>
@ -569,6 +572,12 @@
<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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Ausloggen</string>
<string name="navExplore">Erkunden</string>
<string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Issues Suche</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">Über</string>
@ -519,6 +520,8 @@
<string name="securityHintText">SSL-Zertifikate, Cache, Abfrageverzögerung</string>
<string name="languagesHintText">Sprachen</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="accountDeletedMessage">Konto erfolgreich gelöscht</string>
<string name="removeAccountPopupTitle">Konto entfernen</string>
@ -569,6 +572,12 @@
<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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Cerrar sesión</string>
<string name="navExplore">Explorar</string>
<string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">Sobre</string>
@ -519,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</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="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string>
@ -569,6 +572,12 @@
<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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">خروج از حساب کاربری</string>
<string name="navExplore">جست و جو</string>
<string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">در مورد ما</string>
@ -522,6 +523,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</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="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string>
@ -572,6 +575,12 @@
<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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Kirjaudu ulos</string>
<string name="navExplore">Explore</string>
<string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">Tietoja</string>
@ -519,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</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="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string>
@ -569,6 +572,12 @@
<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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Déconnexion</string>
<string name="navExplore">Explorer</string>
<string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">À propos</string>
@ -37,7 +38,7 @@
<string name="pageTitleExplore">Explorer</string>
<string name="pageTitleAdministration">Administration de Gitea</string>
<string name="pageTitleUserAccounts">Gestion des comptes</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<string name="pageTitleNewPullRequest">Nouvelle demande de tirage</string>
<!-- page titles -->
<string name="repoName">Dépôt de démonstration</string>
<string name="repoFullname">Nom complet du dépôt</string>
@ -519,6 +520,8 @@
<string name="securityHintText">Certificats SSL, cache, scrutation des notifications</string>
<string name="languagesHintText">Langues</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="accountDeletedMessage">Compte supprimé</string>
<string name="removeAccountPopupTitle">Supprimer le compte</string>
@ -569,12 +572,18 @@
<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="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>
<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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Esci</string>
<string name="navExplore">Esplora</string>
<string name="navAdministration">Amministrazione</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">Info su</string>
@ -521,6 +522,8 @@ autorizzazione</string>
<string name="securityHintText">Certificati SSL, cache, ricerca di notifiche</string>
<string name="languagesHintText">Lingue</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="accountDeletedMessage">Account eliminato con successo</string>
<string name="removeAccountPopupTitle">Remove Account</string>
@ -571,6 +574,12 @@ autorizzazione</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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Logout</string>
<string name="navExplore">Izpētīt</string>
<string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">Par</string>
@ -519,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</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="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string>
@ -569,6 +572,12 @@
<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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Wyloguj się</string>
<string name="navExplore">Przeglądaj</string>
<string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">O programie</string>
@ -519,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</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="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string>
@ -569,6 +572,12 @@
<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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Sair</string>
<string name="navExplore">Explorar</string>
<string name="navAdministration">Administração</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">Sobre</string>
@ -519,6 +520,8 @@
<string name="securityHintText">Certificados SSL, cache e atraso de pesquisa</string>
<string name="languagesHintText">Idiomas</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="accountDeletedMessage">Conta excluída com êxito</string>
<string name="removeAccountPopupTitle">Excluir Conta</string>
@ -569,6 +572,12 @@
<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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Выход</string>
<string name="navExplore">Обзор</string>
<string name="navAdministration">Администрирование</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">О программе</string>
@ -519,6 +520,8 @@
<string name="securityHintText">SSL-сертификаты, кэш, задержка опроса</string>
<string name="languagesHintText">Языки</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="accountDeletedMessage">Учётная запись успешно удалена</string>
<string name="removeAccountPopupTitle">Удалить учётную запись</string>
@ -569,6 +572,12 @@
<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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Одјави ме</string>
<string name="navExplore">Претражи репозиторијуме</string>
<string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">О програму</string>
@ -519,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</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="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string>
@ -569,6 +572,12 @@
<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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Çıkış Yap</string>
<string name="navExplore">Keşfet</string>
<string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">Hakkında</string>
@ -519,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</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="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string>
@ -569,6 +572,12 @@
<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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">Вийти</string>
<string name="navExplore">Огляд</string>
<string name="navAdministration">Адміністрування</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">Про додаток</string>
@ -519,6 +520,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Мови</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="accountDeletedMessage">Account deleted successfully</string>
<string name="removeAccountPopupTitle">Remove Account</string>
@ -569,6 +572,12 @@
<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>

View File

@ -12,6 +12,7 @@
<string name="navLogout">退出</string>
<string name="navExplore">探索</string>
<string name="navAdministration">管理</string>
<string name="navSearchIssuesPulls">搜索问题</string>
<!-- menu items -->
<!-- page titles -->
<string name="pageTitleAbout">关于</string>
@ -37,7 +38,7 @@
<string name="pageTitleExplore">探索</string>
<string name="pageTitleAdministration">Gitea 管理</string>
<string name="pageTitleUserAccounts">管理账户</string>
<string name="pageTitleNewPullRequest">New Pull Request</string>
<string name="pageTitleNewPullRequest">新拉取请求</string>
<!-- page titles -->
<string name="repoName">演示仓库</string>
<string name="repoFullname">有组织的存储库</string>
@ -519,6 +520,8 @@
<string name="securityHintText">SSL 证书、缓存、轮询延迟</string>
<string name="languagesHintText">语言</string>
<string name="reportsHintText">崩溃报告</string>
<string name="rateAppHintText">如果你喜欢GitNex你可以给它点赞</string>
<string name="aboutAppHintText">应用程序版本、构建、用户gitea版本</string>
<string name="archivedRepository">已存档</string>
<string name="accountDeletedMessage">帐户删除成功</string>
<string name="removeAccountPopupTitle">删除账户</string>
@ -569,12 +572,18 @@
<string name="repoTransferSuccess">成功移交存储库</string>
<string name="repoTransferOwnerError">需要新的所有者</string>
<string name="repoTransferError">所有者名称有问题。确保新所有者存在</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>
<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>

View File

@ -32,6 +32,7 @@
<string name="navLogout">Logout</string>
<string name="navExplore">Explore</string>
<string name="navAdministration">Administration</string>
<string name="navSearchIssuesPulls">Search Issues</string>
<!-- menu items -->
<!-- page titles -->
@ -634,6 +635,8 @@
<string name="securityHintText">SSL certificates, cache, polling delay</string>
<string name="languagesHintText">Languages</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>
@ -693,6 +696,13 @@
<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>

View File

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

View File

@ -1,8 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<changelog>
<release version="3.2.0-rc1" versioncode="317">
<change>3.2.0 RC1 release brings create pr, repository settings for admins and many more new features</change>
<release version="3.2.0" versioncode="320">
<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>
</changelog>

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

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

After

Width:  |  Height:  |  Size: 113 KiB