Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
0f014c2822 | |||
996983d7a3 | |||
00cfcbc9cf | |||
74669a9dcb | |||
d52d7a188e | |||
d20a773d1d | |||
bf19e52799 | |||
8612258174 |
@ -48,6 +48,7 @@ latest:
|
||||
stage: publish
|
||||
only:
|
||||
- master
|
||||
- tags
|
||||
variables:
|
||||
WEBDAV_USERNAME: "GitNexBot"
|
||||
PLUGIN_FILE: "signed.apk"
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
}
|
||||
|
@ -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());
|
||||
|
@ -318,4 +318,9 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<ExploreRepo
|
||||
return searchedReposList.size();
|
||||
}
|
||||
|
||||
public void notifyDataChanged() {
|
||||
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
@ -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();
|
||||
|
129
app/src/main/java/org/mian/gitnex/fragments/ExploreFragment.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -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);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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"
|
||||
|
116
app/src/main/res/layout/custom_explore_repositories_dialog.xml
Normal 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>
|
||||
|
48
app/src/main/res/layout/fragment_explore.xml
Normal 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>
|
@ -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>
|
||||
|
88
app/src/main/res/layout/fragment_search_issues.xml
Normal 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>
|
@ -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>
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
|
@ -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" />
|
||||
|
@ -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" />
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
@ -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 -->
|
||||
|
@ -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>
|
||||
|
14
fastlane/metadata/android/en-US/changelogs/320.txt
Normal 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
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 144 KiB After Width: | Height: | Size: 99 KiB |
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 98 KiB |
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 64 KiB |
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 105 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 92 KiB After Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 113 KiB |