Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
0f014c2822 | |||
996983d7a3 | |||
00cfcbc9cf | |||
74669a9dcb | |||
d52d7a188e | |||
d20a773d1d | |||
bf19e52799 | |||
8612258174 |
@ -48,6 +48,7 @@ latest:
|
|||||||
stage: publish
|
stage: publish
|
||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
|
- tags
|
||||||
variables:
|
variables:
|
||||||
WEBDAV_USERNAME: "GitNexBot"
|
WEBDAV_USERNAME: "GitNexBot"
|
||||||
PLUGIN_FILE: "signed.apk"
|
PLUGIN_FILE: "signed.apk"
|
||||||
|
@ -4,13 +4,13 @@
|
|||||||
|
|
||||||
# GitNex - Android client for Gitea
|
# GitNex - Android client for Gitea
|
||||||
|
|
||||||
GitNex is a free, open-source Android client for Git repository management tool Gitea. Gitea is a community managed fork of Gogs, lightweight code hosting solution written in Go.
|
GitNex is a free/paid, open-source Android client for Git repository management tool Gitea. Gitea is a community managed fork of Gogs, lightweight code hosting solution written in Go.
|
||||||
|
|
||||||
GitNex is licensed under GPLv3 License. See the LICENSE file for the full license text. No trackers are used and source code is available here for anyone to audit.
|
GitNex is licensed under GPLv3 License. See the LICENSE file for the full license text. No trackers are used and source code is available here for anyone to audit.
|
||||||
|
|
||||||
## Downloads
|
## Downloads
|
||||||
[<img alt='Get it on F-droid' src='https://gitlab.com/fdroid/artwork/raw/master/badge/get-it-on.png' height="80"/>](https://f-droid.org/en/packages/org.mian.gitnex/)
|
[<img alt='Get it on F-droid' src='https://gitlab.com/fdroid/artwork/raw/master/badge/get-it-on.png' height="80"/>](https://f-droid.org/en/packages/org.mian.gitnex/)
|
||||||
[<img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png' height="80"/>](https://play.google.com/store/apps/details?id=org.mian.gitnex)
|
[<img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png' height="80"/>](https://play.google.com/store/apps/details?id=org.mian.gitnex.pro)
|
||||||
[<img alt='Download builds and releases' src='assets/apk-badge.png' height="82"/>](https://cloud.swatian.com/s/DN7E5xxtaw4fRbE)
|
[<img alt='Download builds and releases' src='assets/apk-badge.png' height="82"/>](https://cloud.swatian.com/s/DN7E5xxtaw4fRbE)
|
||||||
|
|
||||||
## Note about Gitea version
|
## Note about Gitea version
|
||||||
|
@ -6,8 +6,8 @@ android {
|
|||||||
applicationId "org.mian.gitnex"
|
applicationId "org.mian.gitnex"
|
||||||
minSdkVersion 21
|
minSdkVersion 21
|
||||||
targetSdkVersion 30
|
targetSdkVersion 30
|
||||||
versionCode 317
|
versionCode 320
|
||||||
versionName "3.2.0-rc1"
|
versionName "3.2.0"
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,11 @@
|
|||||||
package org.mian.gitnex.activities;
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.ActivityNotFoundException;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
@ -33,11 +31,10 @@ import org.mian.gitnex.clients.PicassoService;
|
|||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.database.api.UserAccountsApi;
|
import org.mian.gitnex.database.api.UserAccountsApi;
|
||||||
import org.mian.gitnex.database.models.UserAccount;
|
import org.mian.gitnex.database.models.UserAccount;
|
||||||
import org.mian.gitnex.fragments.AboutFragment;
|
|
||||||
import org.mian.gitnex.fragments.AdministrationFragment;
|
import org.mian.gitnex.fragments.AdministrationFragment;
|
||||||
import org.mian.gitnex.fragments.BottomSheetDraftsFragment;
|
import org.mian.gitnex.fragments.BottomSheetDraftsFragment;
|
||||||
import org.mian.gitnex.fragments.DraftsFragment;
|
import org.mian.gitnex.fragments.DraftsFragment;
|
||||||
import org.mian.gitnex.fragments.ExploreRepositoriesFragment;
|
import org.mian.gitnex.fragments.ExploreFragment;
|
||||||
import org.mian.gitnex.fragments.MyRepositoriesFragment;
|
import org.mian.gitnex.fragments.MyRepositoriesFragment;
|
||||||
import org.mian.gitnex.fragments.NotificationsFragment;
|
import org.mian.gitnex.fragments.NotificationsFragment;
|
||||||
import org.mian.gitnex.fragments.OrganizationsFragment;
|
import org.mian.gitnex.fragments.OrganizationsFragment;
|
||||||
@ -179,7 +176,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
else if(fragmentById instanceof OrganizationsFragment) {
|
else if(fragmentById instanceof OrganizationsFragment) {
|
||||||
toolbarTitle.setText(getResources().getString(R.string.pageTitleOrganizations));
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleOrganizations));
|
||||||
}
|
}
|
||||||
else if(fragmentById instanceof ExploreRepositoriesFragment) {
|
else if(fragmentById instanceof ExploreFragment) {
|
||||||
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
|
||||||
}
|
}
|
||||||
else if(fragmentById instanceof NotificationsFragment) {
|
else if(fragmentById instanceof NotificationsFragment) {
|
||||||
@ -188,9 +185,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
else if(fragmentById instanceof ProfileFragment) {
|
else if(fragmentById instanceof ProfileFragment) {
|
||||||
toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile));
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile));
|
||||||
}
|
}
|
||||||
else if(fragmentById instanceof AboutFragment) {
|
|
||||||
toolbarTitle.setText(getResources().getString(R.string.pageTitleAbout));
|
|
||||||
}
|
|
||||||
else if(fragmentById instanceof DraftsFragment) {
|
else if(fragmentById instanceof DraftsFragment) {
|
||||||
toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
|
toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
|
||||||
}
|
}
|
||||||
@ -311,6 +305,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
|
|
||||||
toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile));
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile));
|
||||||
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
|
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
|
||||||
|
navigationView.setCheckedItem(R.id.nav_profile);
|
||||||
drawer.closeDrawers();
|
drawer.closeDrawers();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -390,7 +385,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
|
||||||
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreRepositoriesFragment()).commit();
|
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreFragment()).commit();
|
||||||
navigationView.setCheckedItem(R.id.nav_explore);
|
navigationView.setCheckedItem(R.id.nav_explore);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -455,6 +450,11 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setActionBarTitle(String title) {
|
||||||
|
|
||||||
|
toolbarTitle.setText(title);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onButtonClicked(String text) {
|
public void onButtonClicked(String text) {
|
||||||
|
|
||||||
@ -544,15 +544,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
|
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case R.id.nav_about:
|
|
||||||
toolbarTitle.setText(getResources().getString(R.string.pageTitleAbout));
|
|
||||||
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new AboutFragment()).commit();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R.id.nav_rate_app:
|
|
||||||
rateThisApp();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case R.id.nav_starred_repos:
|
case R.id.nav_starred_repos:
|
||||||
toolbarTitle.setText(getResources().getString(R.string.pageTitleStarredRepos));
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleStarredRepos));
|
||||||
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new StarredRepositoriesFragment()).commit();
|
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new StarredRepositoriesFragment()).commit();
|
||||||
@ -560,7 +551,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
|
|
||||||
case R.id.nav_explore:
|
case R.id.nav_explore:
|
||||||
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
|
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
|
||||||
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreRepositoriesFragment()).commit();
|
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreFragment()).commit();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case R.id.nav_notifications:
|
case R.id.nav_notifications:
|
||||||
@ -584,16 +575,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void rateThisApp() {
|
|
||||||
|
|
||||||
try {
|
|
||||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + getPackageName())));
|
|
||||||
}
|
|
||||||
catch(ActivityNotFoundException e) {
|
|
||||||
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + getPackageName())));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void logout(Activity activity, Context ctx) {
|
public static void logout(Activity activity, Context ctx) {
|
||||||
|
|
||||||
TinyDB tinyDb = new TinyDB(ctx.getApplicationContext());
|
TinyDB tinyDb = new TinyDB(ctx.getApplicationContext());
|
||||||
|
@ -318,4 +318,9 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<ExploreRepo
|
|||||||
return searchedReposList.size();
|
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.annotation.NonNull;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.activities.MainActivity;
|
||||||
import org.mian.gitnex.databinding.FragmentAboutBinding;
|
import org.mian.gitnex.databinding.FragmentAboutBinding;
|
||||||
import org.mian.gitnex.helpers.AppUtil;
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
@ -29,6 +30,8 @@ public class AboutFragment extends Fragment {
|
|||||||
viewBinding.userServerVersion.setText(tinyDb.getString("giteaVersion"));
|
viewBinding.userServerVersion.setText(tinyDb.getString("giteaVersion"));
|
||||||
viewBinding.appBuild.setText(String.valueOf(AppUtil.getAppBuildNo(requireContext())));
|
viewBinding.appBuild.setText(String.valueOf(AppUtil.getAppBuildNo(requireContext())));
|
||||||
|
|
||||||
|
((MainActivity) requireActivity()).setActionBarTitle(getResources().getString(R.string.pageTitleAbout));
|
||||||
|
|
||||||
viewBinding.donationLinkLiberapay.setOnClickListener(v1 -> {
|
viewBinding.donationLinkLiberapay.setOnClickListener(v1 -> {
|
||||||
|
|
||||||
Intent intent = new Intent();
|
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;
|
package org.mian.gitnex.fragments;
|
||||||
|
|
||||||
|
import android.app.Dialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.graphics.Color;
|
||||||
|
import android.graphics.drawable.ColorDrawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
import android.widget.ProgressBar;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.TextView;
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.recyclerview.widget.DividerItemDecoration;
|
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
import org.mian.gitnex.adapters.ExploreRepositoriesAdapter;
|
import org.mian.gitnex.adapters.ExploreRepositoriesAdapter;
|
||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
|
import org.mian.gitnex.databinding.CustomExploreRepositoriesDialogBinding;
|
||||||
|
import org.mian.gitnex.databinding.FragmentExploreRepoBinding;
|
||||||
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.InfiniteScrollListener;
|
||||||
|
import org.mian.gitnex.helpers.StaticGlobalVariables;
|
||||||
import org.mian.gitnex.helpers.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
|
import org.mian.gitnex.helpers.Version;
|
||||||
import org.mian.gitnex.models.ExploreRepositories;
|
import org.mian.gitnex.models.ExploreRepositories;
|
||||||
import org.mian.gitnex.models.UserRepositories;
|
import org.mian.gitnex.models.UserRepositories;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
@ -29,189 +39,300 @@ import retrofit2.Callback;
|
|||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Template Author Author M M Arif
|
* Template Author M M Arif
|
||||||
* Author 6543
|
* Author 6543
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class ExploreRepositoriesFragment extends Fragment {
|
public class ExploreRepositoriesFragment extends Fragment {
|
||||||
|
|
||||||
private static String repoNameF = "param2";
|
private FragmentExploreRepoBinding viewBinding;
|
||||||
private static String repoOwnerF = "param1";
|
private Context ctx;
|
||||||
private ProgressBar mProgressBar;
|
private TinyDB tinyDb;
|
||||||
private RecyclerView mRecyclerView;
|
|
||||||
private TextView noData;
|
private int pageCurrentIndex = 1;
|
||||||
private TextView searchKeyword;
|
private boolean repoTypeInclude = true;
|
||||||
private Boolean repoTypeInclude = true;
|
|
||||||
private String sort = "updated";
|
private String sort = "updated";
|
||||||
private String order = "desc";
|
private String order = "desc";
|
||||||
private int limit = 50;
|
private int limit = 10;
|
||||||
|
private List<UserRepositories> dataList;
|
||||||
|
private ExploreRepositoriesAdapter adapter;
|
||||||
|
|
||||||
private OnFragmentInteractionListener mListener;
|
private String instanceUrl;
|
||||||
|
private String loginUid;
|
||||||
|
private String instanceToken;
|
||||||
|
|
||||||
public ExploreRepositoriesFragment() {
|
private Dialog dialogFilterOptions;
|
||||||
|
private CustomExploreRepositoriesDialogBinding filterBinding;
|
||||||
}
|
|
||||||
|
|
||||||
public static ExploreRepositoriesFragment newInstance(String param1, String param2) {
|
|
||||||
|
|
||||||
ExploreRepositoriesFragment fragment = new ExploreRepositoriesFragment();
|
|
||||||
Bundle args = new Bundle();
|
|
||||||
args.putString(repoOwnerF, param1);
|
|
||||||
args.putString(repoNameF, param2);
|
|
||||||
fragment.setArguments(args);
|
|
||||||
return fragment;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
if(getArguments() != null) {
|
|
||||||
String repoName = getArguments().getString(repoNameF);
|
|
||||||
String repoOwner = getArguments().getString(repoOwnerF);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
|
||||||
final View v = inflater.inflate(R.layout.fragment_explore_repo, container, false);
|
viewBinding = FragmentExploreRepoBinding.inflate(inflater, container, false);
|
||||||
//setHasOptionsMenu(true);
|
setHasOptionsMenu(true);
|
||||||
|
|
||||||
TinyDB tinyDb = new TinyDB(getContext());
|
ctx = getContext();
|
||||||
final String instanceUrl = tinyDb.getString("instanceUrl");
|
tinyDb = new TinyDB(getContext());
|
||||||
final String loginUid = tinyDb.getString("loginUid");
|
|
||||||
final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
|
|
||||||
|
|
||||||
searchKeyword = v.findViewById(R.id.searchKeyword);
|
instanceUrl = tinyDb.getString("instanceUrl");
|
||||||
noData = v.findViewById(R.id.noData);
|
loginUid = tinyDb.getString("loginUid");
|
||||||
mProgressBar = v.findViewById(R.id.progress_bar);
|
instanceToken = "token " + tinyDb.getString(loginUid + "-token");
|
||||||
mRecyclerView = v.findViewById(R.id.recyclerViewReposSearch);
|
|
||||||
|
|
||||||
mProgressBar.setVisibility(View.VISIBLE);
|
dataList = new ArrayList<>();
|
||||||
|
adapter = new ExploreRepositoriesAdapter(dataList, ctx);
|
||||||
|
|
||||||
searchKeyword.setOnEditorActionListener((v1, actionId, event) -> {
|
tinyDb.putBoolean("exploreRepoIncludeTopic", false);
|
||||||
|
tinyDb.putBoolean("exploreRepoIncludeDescription", false);
|
||||||
|
tinyDb.putBoolean("exploreRepoIncludeTemplate", false);
|
||||||
|
tinyDb.putBoolean("exploreRepoOnlyArchived", false);
|
||||||
|
|
||||||
|
// if gitea is 1.12 or higher use the new limit
|
||||||
|
if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
|
||||||
|
limit = StaticGlobalVariables.resultLimitNewGiteaInstances;
|
||||||
|
}
|
||||||
|
|
||||||
|
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(ctx);
|
||||||
|
|
||||||
|
viewBinding.recyclerViewReposSearch.setHasFixedSize(true);
|
||||||
|
viewBinding.recyclerViewReposSearch.setLayoutManager(linearLayoutManager);
|
||||||
|
viewBinding.recyclerViewReposSearch.setAdapter(adapter);
|
||||||
|
|
||||||
|
viewBinding.searchKeyword.setOnEditorActionListener((v1, actionId, event) -> {
|
||||||
|
|
||||||
if(actionId == EditorInfo.IME_ACTION_SEND) {
|
if(actionId == EditorInfo.IME_ACTION_SEND) {
|
||||||
if(!searchKeyword.getText().toString().equals("")) {
|
|
||||||
mProgressBar.setVisibility(View.VISIBLE);
|
if(!Objects.requireNonNull(viewBinding.searchKeyword.getText()).toString().equals("")) {
|
||||||
mRecyclerView.setVisibility(View.GONE);
|
|
||||||
loadSearchReposList(instanceUrl, instanceToken, loginUid, searchKeyword.getText().toString(), repoTypeInclude, sort, order, getContext(), limit);
|
InputMethodManager imm = (InputMethodManager) requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
imm.hideSoftInputFromWindow(viewBinding.searchKeyword.getWindowToken(), 0);
|
||||||
|
|
||||||
|
// if gitea is 1.12 or higher use the new limit
|
||||||
|
if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
|
||||||
|
limit = StaticGlobalVariables.resultLimitNewGiteaInstances;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
limit = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
pageCurrentIndex = 1;
|
||||||
|
viewBinding.progressBar.setVisibility(View.VISIBLE);
|
||||||
|
loadData(false, viewBinding.searchKeyword.getText().toString(), tinyDb.getBoolean("exploreRepoIncludeTopic"), tinyDb.getBoolean("exploreRepoIncludeDescription"), tinyDb.getBoolean("exploreRepoIncludeTemplate"), tinyDb.getBoolean("exploreRepoOnlyArchived"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
int limitDefault = 25;
|
viewBinding.recyclerViewReposSearch.addOnScrollListener(new InfiniteScrollListener(pageCurrentIndex, linearLayoutManager) {
|
||||||
loadDefaultList(instanceUrl, instanceToken, loginUid, repoTypeInclude, sort, order, getContext(), limitDefault);
|
|
||||||
|
|
||||||
return v;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private void loadDefaultList(String instanceUrl, String instanceToken, String loginUid, Boolean repoTypeInclude, String sort, String order, final Context context, int limit) {
|
|
||||||
|
|
||||||
Call<ExploreRepositories> call = RetrofitClient.getInstance(instanceUrl, getContext()).getApiInterface().queryRepos(Authorization.returnAuthentication(getContext(), loginUid, instanceToken), null, repoTypeInclude, sort, order, limit);
|
|
||||||
|
|
||||||
call.enqueue(new Callback<ExploreRepositories>() {
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(@NonNull Call<ExploreRepositories> call, @NonNull Response<ExploreRepositories> response) {
|
public void onScrolledToEnd(int firstVisibleItemPosition) {
|
||||||
|
|
||||||
if(response.isSuccessful()) {
|
|
||||||
assert response.body() != null;
|
|
||||||
getReposList(response.body().getSearchedData(), context);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Log.i("onResponse", String.valueOf(response.code()));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
pageCurrentIndex++;
|
||||||
|
loadData(true, Objects.requireNonNull(viewBinding.searchKeyword.getText()).toString(), tinyDb.getBoolean("exploreRepoIncludeTopic"), tinyDb.getBoolean("exploreRepoIncludeDescription"), tinyDb.getBoolean("exploreRepoIncludeTemplate"), tinyDb.getBoolean("exploreRepoOnlyArchived"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onFailure(@NonNull Call<ExploreRepositories> call, @NonNull Throwable t) {
|
|
||||||
|
|
||||||
Log.i("onFailure", Objects.requireNonNull(t.getMessage()));
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
viewBinding.pullToRefresh.setOnRefreshListener(() -> {
|
||||||
|
|
||||||
private void loadSearchReposList(String instanceUrl, String instanceToken, String loginUid, String searchKeyword, Boolean repoTypeInclude, String sort, String order, final Context context, int limit) {
|
pageCurrentIndex = 1;
|
||||||
|
|
||||||
Call<ExploreRepositories> call = RetrofitClient.getInstance(instanceUrl, getContext()).getApiInterface().queryRepos(Authorization.returnAuthentication(getContext(), loginUid, instanceToken), searchKeyword, repoTypeInclude, sort, order, limit);
|
|
||||||
|
|
||||||
call.enqueue(new Callback<ExploreRepositories>() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResponse(@NonNull Call<ExploreRepositories> call, @NonNull Response<ExploreRepositories> response) {
|
|
||||||
|
|
||||||
if(response.isSuccessful()) {
|
|
||||||
assert response.body() != null;
|
|
||||||
getReposList(response.body().getSearchedData(), context);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
Log.i("onResponse", String.valueOf(response.code()));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// if gitea is 1.12 or higher use the new limit
|
||||||
|
if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
|
||||||
|
limit = StaticGlobalVariables.resultLimitNewGiteaInstances;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
limit = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
loadData(false, Objects.requireNonNull(viewBinding.searchKeyword.getText()).toString(), tinyDb.getBoolean("exploreRepoIncludeTopic"), tinyDb.getBoolean("exploreRepoIncludeDescription"), tinyDb.getBoolean("exploreRepoIncludeTemplate"), tinyDb.getBoolean("exploreRepoOnlyArchived"));
|
||||||
public void onFailure(@NonNull Call<ExploreRepositories> call, @NonNull Throwable t) {
|
|
||||||
|
|
||||||
Log.i("onFailure", Objects.requireNonNull(t.getMessage()));
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
loadData(false, "", tinyDb.getBoolean("exploreRepoIncludeTopic"), tinyDb.getBoolean("exploreRepoIncludeDescription"), tinyDb.getBoolean("exploreRepoIncludeTemplate"), tinyDb.getBoolean("exploreRepoOnlyArchived"));
|
||||||
|
|
||||||
|
return viewBinding.getRoot();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getReposList(List<UserRepositories> dataList, Context context) {
|
private void loadData(boolean append, String searchKeyword, boolean exploreRepoIncludeTopic, boolean exploreRepoIncludeDescription, boolean exploreRepoIncludeTemplate, boolean exploreRepoOnlyArchived) {
|
||||||
|
|
||||||
ExploreRepositoriesAdapter adapter = new ExploreRepositoriesAdapter(dataList, context);
|
viewBinding.noData.setVisibility(View.GONE);
|
||||||
|
|
||||||
mRecyclerView.setVisibility(View.VISIBLE);
|
int apiCallDefaultLimit = 10;
|
||||||
|
// if gitea is 1.12 or higher use the new limit
|
||||||
|
if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
|
||||||
|
apiCallDefaultLimit = StaticGlobalVariables.resultLimitNewGiteaInstances;
|
||||||
|
}
|
||||||
|
|
||||||
mRecyclerView.setHasFixedSize(true);
|
if(apiCallDefaultLimit > limit) {
|
||||||
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
|
return;
|
||||||
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(mRecyclerView.getContext(), DividerItemDecoration.VERTICAL);
|
}
|
||||||
mRecyclerView.addItemDecoration(dividerItemDecoration);
|
|
||||||
|
|
||||||
if(adapter.getItemCount() > 0) {
|
if(pageCurrentIndex == 1 || !append) {
|
||||||
|
|
||||||
mRecyclerView.setAdapter(adapter);
|
|
||||||
noData.setVisibility(View.GONE);
|
|
||||||
mProgressBar.setVisibility(View.GONE);
|
|
||||||
|
|
||||||
|
dataList.clear();
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
viewBinding.pullToRefresh.setRefreshing(false);
|
||||||
|
viewBinding.progressBar.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
noData.setVisibility(View.VISIBLE);
|
viewBinding.loadingMoreView.setVisibility(View.VISIBLE);
|
||||||
mProgressBar.setVisibility(View.GONE);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Call<ExploreRepositories> call = RetrofitClient.getInstance(instanceUrl, getContext()).getApiInterface().queryRepos(Authorization.returnAuthentication(getContext(), loginUid, instanceToken), searchKeyword, repoTypeInclude, sort, order, exploreRepoIncludeTopic, exploreRepoIncludeDescription, exploreRepoIncludeTemplate, exploreRepoOnlyArchived, limit, pageCurrentIndex);
|
||||||
|
|
||||||
|
call.enqueue(new Callback<ExploreRepositories>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResponse(@NonNull Call<ExploreRepositories> call, @NonNull Response<ExploreRepositories> response) {
|
||||||
|
|
||||||
|
if(response.code() == 200) {
|
||||||
|
|
||||||
|
assert response.body() != null;
|
||||||
|
|
||||||
|
limit = response.body().getSearchedData().size();
|
||||||
|
|
||||||
|
if(!append) {
|
||||||
|
|
||||||
|
dataList.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
dataList.addAll(response.body().getSearchedData());
|
||||||
|
adapter.notifyDataSetChanged();
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
dataList.clear();
|
||||||
|
adapter.notifyDataChanged();
|
||||||
|
viewBinding.noData.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
onCleanup();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(@NonNull Call<ExploreRepositories> call, @NonNull Throwable t) {
|
||||||
|
|
||||||
|
Log.e("onFailure", Objects.requireNonNull(t.getMessage()));
|
||||||
|
onCleanup();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onCleanup() {
|
||||||
|
|
||||||
|
AppUtil.setMultiVisibility(View.GONE, viewBinding.loadingMoreView, viewBinding.progressBar);
|
||||||
|
|
||||||
|
if(dataList.isEmpty()) {
|
||||||
|
|
||||||
|
viewBinding.noData.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
|
||||||
|
|
||||||
|
menu.clear();
|
||||||
|
inflater.inflate(R.menu.filter_menu, menu);
|
||||||
|
super.onCreateOptionsMenu(menu, inflater);
|
||||||
|
|
||||||
|
MenuItem filter = menu.findItem(R.id.filter);
|
||||||
|
|
||||||
|
filter.setOnMenuItemClickListener(filter_ -> {
|
||||||
|
|
||||||
|
showFilterOptions();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onButtonPressed(Uri uri) {
|
private void showFilterOptions() {
|
||||||
|
|
||||||
if(mListener != null) {
|
dialogFilterOptions = new Dialog(ctx, R.style.ThemeOverlay_MaterialComponents_Dialog_Alert);
|
||||||
mListener.onFragmentInteraction(uri);
|
|
||||||
|
if (dialogFilterOptions.getWindow() != null) {
|
||||||
|
|
||||||
|
dialogFilterOptions.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filterBinding = CustomExploreRepositoriesDialogBinding.inflate(LayoutInflater.from(ctx));
|
||||||
|
|
||||||
|
View view = filterBinding.getRoot();
|
||||||
|
dialogFilterOptions.setContentView(view);
|
||||||
|
|
||||||
|
filterBinding.includeTopic.setOnClickListener(includeTopic -> {
|
||||||
|
|
||||||
|
if(filterBinding.includeTopic.isChecked()) {
|
||||||
|
|
||||||
|
tinyDb.putBoolean("exploreRepoIncludeTopic", true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
tinyDb.putBoolean("exploreRepoIncludeTopic", false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
filterBinding.includeDesc.setOnClickListener(includeDesc -> {
|
||||||
|
|
||||||
|
if(filterBinding.includeDesc.isChecked()) {
|
||||||
|
|
||||||
|
tinyDb.putBoolean("exploreRepoIncludeDescription", true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
tinyDb.putBoolean("exploreRepoIncludeDescription", false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
filterBinding.includeTemplate.setOnClickListener(includeTemplate -> {
|
||||||
|
|
||||||
|
if(filterBinding.includeTemplate.isChecked()) {
|
||||||
|
|
||||||
|
tinyDb.putBoolean("exploreRepoIncludeTemplate", true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
tinyDb.putBoolean("exploreRepoIncludeTemplate", false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
filterBinding.onlyArchived.setOnClickListener(onlyArchived -> {
|
||||||
|
|
||||||
|
if(filterBinding.onlyArchived.isChecked()) {
|
||||||
|
|
||||||
|
tinyDb.putBoolean("exploreRepoOnlyArchived", true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
tinyDb.putBoolean("exploreRepoOnlyArchived", false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
filterBinding.includeTopic.setChecked(tinyDb.getBoolean("exploreRepoIncludeTopic"));
|
||||||
|
filterBinding.includeDesc.setChecked(tinyDb.getBoolean("exploreRepoIncludeDescription"));
|
||||||
|
filterBinding.includeTemplate.setChecked(tinyDb.getBoolean("exploreRepoIncludeTemplate"));
|
||||||
|
filterBinding.onlyArchived.setChecked(tinyDb.getBoolean("exploreRepoOnlyArchived"));
|
||||||
|
|
||||||
|
filterBinding.cancel.setOnClickListener(editProperties -> {
|
||||||
|
dialogFilterOptions.dismiss();
|
||||||
|
});
|
||||||
|
|
||||||
|
dialogFilterOptions.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDetach() {
|
public void onDetach() {
|
||||||
|
|
||||||
super.onDetach();
|
super.onDetach();
|
||||||
mListener = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface OnFragmentInteractionListener {
|
public interface OnFragmentInteractionListener {
|
||||||
|
|
||||||
void onFragmentInteraction(Uri uri);
|
void onFragmentInteraction(Uri uri);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,6 @@ import org.mian.gitnex.interfaces.ApiInterface;
|
|||||||
import org.mian.gitnex.models.Milestones;
|
import org.mian.gitnex.models.Milestones;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
import retrofit2.Response;
|
import retrofit2.Response;
|
||||||
@ -104,7 +103,7 @@ public class MilestonesFragment extends Fragment {
|
|||||||
|
|
||||||
}, 50));
|
}, 50));
|
||||||
|
|
||||||
((RepoDetailActivity) Objects.requireNonNull(getActivity())).setFragmentRefreshListenerMilestone(milestoneState -> {
|
((RepoDetailActivity) requireActivity()).setFragmentRefreshListenerMilestone(milestoneState -> {
|
||||||
|
|
||||||
if(milestoneState.equals("closed")) {
|
if(milestoneState.equals("closed")) {
|
||||||
menu.getItem(1).setIcon(R.drawable.ic_filter_closed);
|
menu.getItem(1).setIcon(R.drawable.ic_filter_closed);
|
||||||
|
@ -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;
|
package org.mian.gitnex.fragments;
|
||||||
|
|
||||||
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@ -17,7 +19,6 @@ import org.mian.gitnex.activities.SettingsReportsActivity;
|
|||||||
import org.mian.gitnex.activities.SettingsSecurityActivity;
|
import org.mian.gitnex.activities.SettingsSecurityActivity;
|
||||||
import org.mian.gitnex.activities.SettingsTranslationActivity;
|
import org.mian.gitnex.activities.SettingsTranslationActivity;
|
||||||
import org.mian.gitnex.helpers.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Author M M Arif
|
* Author M M Arif
|
||||||
@ -37,6 +38,8 @@ public class SettingsFragment extends Fragment {
|
|||||||
LinearLayout securityFrame = v.findViewById(R.id.securityFrame);
|
LinearLayout securityFrame = v.findViewById(R.id.securityFrame);
|
||||||
LinearLayout languagesFrame = v.findViewById(R.id.languagesFrame);
|
LinearLayout languagesFrame = v.findViewById(R.id.languagesFrame);
|
||||||
LinearLayout reportsFrame = v.findViewById(R.id.reportsFrame);
|
LinearLayout reportsFrame = v.findViewById(R.id.reportsFrame);
|
||||||
|
LinearLayout rateAppFrame = v.findViewById(R.id.rateAppFrame);
|
||||||
|
LinearLayout aboutAppFrame = v.findViewById(R.id.aboutAppFrame);
|
||||||
|
|
||||||
appearanceFrame.setOnClickListener(v1 -> startActivity(new Intent(getContext(), SettingsAppearanceActivity.class)));
|
appearanceFrame.setOnClickListener(v1 -> startActivity(new Intent(getContext(), SettingsAppearanceActivity.class)));
|
||||||
|
|
||||||
@ -50,10 +53,24 @@ public class SettingsFragment extends Fragment {
|
|||||||
|
|
||||||
reportsFrame.setOnClickListener(v1 -> startActivity(new Intent(getContext(), SettingsReportsActivity.class)));
|
reportsFrame.setOnClickListener(v1 -> startActivity(new Intent(getContext(), SettingsReportsActivity.class)));
|
||||||
|
|
||||||
|
rateAppFrame.setOnClickListener(aboutApp -> rateThisApp());
|
||||||
|
|
||||||
|
aboutAppFrame.setOnClickListener(aboutApp -> requireActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new AboutFragment()).commit());
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void rateThisApp() {
|
||||||
|
|
||||||
|
try {
|
||||||
|
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + requireActivity().getPackageName())));
|
||||||
|
}
|
||||||
|
catch(ActivityNotFoundException e) {
|
||||||
|
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + requireActivity().getPackageName())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
|
|
||||||
@ -62,8 +79,8 @@ public class SettingsFragment extends Fragment {
|
|||||||
TinyDB tinyDb = new TinyDB(getContext());
|
TinyDB tinyDb = new TinyDB(getContext());
|
||||||
|
|
||||||
if(tinyDb.getBoolean("refreshParent")) {
|
if(tinyDb.getBoolean("refreshParent")) {
|
||||||
Objects.requireNonNull(getActivity()).recreate();
|
requireActivity().recreate();
|
||||||
getActivity().overridePendingTransition(0, 0);
|
requireActivity().overridePendingTransition(0, 0);
|
||||||
tinyDb.putBoolean("refreshParent", false);
|
tinyDb.putBoolean("refreshParent", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ package org.mian.gitnex.helpers;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
@ -18,17 +17,16 @@ public class ClickListener implements View.OnClickListener {
|
|||||||
private Context mCtx;
|
private Context mCtx;
|
||||||
|
|
||||||
public ClickListener(String infoText, Context mCtx) {
|
public ClickListener(String infoText, Context mCtx) {
|
||||||
|
|
||||||
this.infoText = infoText;
|
this.infoText = infoText;
|
||||||
this.mCtx = mCtx;
|
this.mCtx = mCtx;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v)
|
public void onClick(View v) {
|
||||||
{
|
|
||||||
|
|
||||||
LayoutInflater inflater1 = LayoutInflater.from(mCtx);
|
LayoutInflater inflater1 = LayoutInflater.from(mCtx);
|
||||||
View layout = inflater1.inflate(R.layout.custom_toast_success,
|
View layout = inflater1.inflate(R.layout.custom_toast_info, v.findViewById(R.id.custom_toast_container));
|
||||||
(ViewGroup) v.findViewById(R.id.custom_toast_container));
|
|
||||||
|
|
||||||
TextView text = layout.findViewById(R.id.toastText);
|
TextView text = layout.findViewById(R.id.toastText);
|
||||||
text.setText(infoText);
|
text.setText(infoText);
|
||||||
|
@ -266,7 +266,10 @@ public interface ApiInterface {
|
|||||||
Call<List<UserInfo>> getRepoWatchers(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName);
|
Call<List<UserInfo>> getRepoWatchers(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName);
|
||||||
|
|
||||||
@GET("repos/search") // get all the repos which match the query string
|
@GET("repos/search") // get all the repos which match the query string
|
||||||
Call<ExploreRepositories> queryRepos(@Header("Authorization") String token, @Query("q") String searchKeyword, @Query("private") Boolean repoTypeInclude, @Query("sort") String sort, @Query("order") String order, @Query("limit") int limit);
|
Call<ExploreRepositories> queryRepos(@Header("Authorization") String token, @Query("q") String searchKeyword, @Query("private") Boolean repoTypeInclude, @Query("sort") String sort, @Query("order") String order, @Query("topic") boolean topic, @Query("includeDesc") boolean includeDesc, @Query("template") boolean template, @Query("archived") boolean archived, @Query("limit") int limit, @Query("page") int page);
|
||||||
|
|
||||||
|
@GET("repos/issues/search") // get all the issues which match the query string
|
||||||
|
Call<List<Issues>> queryIssues(@Header("Authorization") String token, @Query("q") String searchKeyword, @Query("type") String type, @Query("state") String state, @Query("page") int page);
|
||||||
|
|
||||||
@POST("repos/{owner}/{repo}/contents/{file}") // create new file
|
@POST("repos/{owner}/{repo}/contents/{file}") // create new file
|
||||||
Call<JsonElement> createNewFile(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("file") String fileName, @Body NewFile jsonStr);
|
Call<JsonElement> createNewFile(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("file") String fileName, @Body NewFile jsonStr);
|
||||||
|
@ -27,6 +27,7 @@ public class Issues {
|
|||||||
private pullRequestObject pull_request;
|
private pullRequestObject pull_request;
|
||||||
private milestoneObject milestone;
|
private milestoneObject milestone;
|
||||||
private List<assigneesObject> assignees;
|
private List<assigneesObject> assignees;
|
||||||
|
private repositoryObject repository;
|
||||||
|
|
||||||
public Issues(String body) {
|
public Issues(String body) {
|
||||||
this.body = body;
|
this.body = body;
|
||||||
@ -193,6 +194,35 @@ public class Issues {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class repositoryObject {
|
||||||
|
|
||||||
|
private int id;
|
||||||
|
private String full_name;
|
||||||
|
private String name;
|
||||||
|
private String owner;
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFull_name() {
|
||||||
|
|
||||||
|
return full_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getOwner() {
|
||||||
|
|
||||||
|
return owner;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public int getId() {
|
public int getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
@ -267,4 +297,9 @@ public class Issues {
|
|||||||
this.html_url = html_url;
|
this.html_url = html_url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public repositoryObject getRepository() {
|
||||||
|
|
||||||
|
return repository;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout
|
<LinearLayout android:layout_width="match_parent"
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
android:orientation="vertical"
|
android:orientation="vertical"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:background="?attr/primaryBackgroundColor">
|
android:background="?attr/primaryBackgroundColor">
|
||||||
@ -50,27 +50,30 @@
|
|||||||
android:padding="16dp"
|
android:padding="16dp"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<TextView
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
|
android:id="@+id/userEmailLayout"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/profileEmailTitle"
|
app:boxBackgroundColor="?attr/inputBackgroundColor"
|
||||||
android:textColor="?attr/primaryTextColor"
|
|
||||||
android:textSize="16sp" />
|
|
||||||
|
|
||||||
<EditText
|
|
||||||
android:id="@+id/userEmail"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="10dp"
|
|
||||||
android:padding="10dp"
|
|
||||||
android:textSize="14sp"
|
|
||||||
tools:ignore="Autofill"
|
|
||||||
android:inputType="textEmailAddress"
|
|
||||||
android:labelFor="@+id/userEmail"
|
|
||||||
android:background="@drawable/shape_inputs"
|
|
||||||
android:textColor="?attr/inputTextColor"
|
|
||||||
android:textColorHint="?attr/hintColor"
|
android:textColorHint="?attr/hintColor"
|
||||||
android:textColorHighlight="?attr/primaryTextColor"/>
|
app:hintTextColor="?attr/hintColor"
|
||||||
|
app:boxStrokeErrorColor="@color/darkRed"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
app:endIconMode="clear_text"
|
||||||
|
app:endIconTint="?attr/iconsColor"
|
||||||
|
android:hint="@string/profileEmailTitle">
|
||||||
|
|
||||||
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
|
android:id="@+id/userEmail"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="?attr/inputTextColor"
|
||||||
|
android:textColorHighlight="?attr/hintColor"
|
||||||
|
android:textColorHint="?attr/hintColor"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/addEmailButton"
|
android:id="@+id/addEmailButton"
|
||||||
|
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">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<com.google.android.material.progressindicator.ProgressIndicator
|
<com.google.android.material.progressindicator.ProgressIndicator
|
||||||
android:id="@+id/progress_bar"
|
android:id="@+id/loadingMoreView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="gone"
|
||||||
|
style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate"
|
||||||
|
app:indicatorColor="?attr/progressIndicatorColor" />
|
||||||
|
|
||||||
|
<com.google.android.material.progressindicator.ProgressIndicator
|
||||||
|
android:id="@+id/progressBar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate"
|
style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate"
|
||||||
app:indicatorColor="?attr/progressIndicatorColor" />
|
app:indicatorColor="?attr/progressIndicatorColor" />
|
||||||
|
|
||||||
<EditText
|
<LinearLayout
|
||||||
android:id="@+id/searchKeyword"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="10dp"
|
|
||||||
android:textSize="14sp"
|
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="10dp"
|
||||||
android:layout_marginEnd="10dp"
|
android:layout_marginEnd="10dp"
|
||||||
android:layout_marginTop="20dp"
|
android:layout_marginTop="10dp"
|
||||||
android:layout_marginBottom="20dp"
|
android:layout_marginBottom="10dp">
|
||||||
android:inputType="text"
|
|
||||||
android:background="@drawable/shape_inputs"
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
android:textColor="?attr/inputTextColor"
|
android:id="@+id/searchKeywordLayout"
|
||||||
android:textColorHint="?attr/hintColor"
|
android:layout_width="match_parent"
|
||||||
android:hint="@string/exploreTextBoxHint"
|
android:layout_height="wrap_content"
|
||||||
android:textColorHighlight="?attr/primaryTextColor"
|
app:boxBackgroundColor="?attr/inputBackgroundColor"
|
||||||
android:imeOptions="actionSend"
|
android:textColorHint="?attr/hintColor"
|
||||||
android:autofillHints="@string/exploreTextBoxHint" />
|
app:hintTextColor="?attr/hintColor"
|
||||||
|
app:boxStrokeErrorColor="@color/darkRed"
|
||||||
|
android:layout_marginTop="8dp"
|
||||||
|
android:layout_marginBottom="8dp"
|
||||||
|
app:startIconDrawable="@drawable/ic_search"
|
||||||
|
app:startIconTint="?attr/iconsColor"
|
||||||
|
app:endIconMode="clear_text"
|
||||||
|
app:endIconTint="?attr/iconsColor"
|
||||||
|
android:hint="@string/exploreTextBoxHint">
|
||||||
|
|
||||||
|
<com.google.android.material.textfield.TextInputEditText
|
||||||
|
android:id="@+id/searchKeyword"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="?attr/inputTextColor"
|
||||||
|
android:textColorHighlight="?attr/hintColor"
|
||||||
|
android:textColorHint="?attr/hintColor"
|
||||||
|
android:imeOptions="actionSend"
|
||||||
|
android:inputType="text"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/noData"
|
android:id="@+id/noData"
|
||||||
@ -43,11 +71,18 @@
|
|||||||
android:textSize="20sp"
|
android:textSize="20sp"
|
||||||
android:visibility="gone" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
android:id="@+id/recyclerViewReposSearch"
|
android:id="@+id/pullToRefresh"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent">
|
||||||
android:background="?attr/primaryBackgroundColor"
|
|
||||||
android:scrollbars="vertical" />
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/recyclerViewReposSearch"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?attr/primaryBackgroundColor"
|
||||||
|
android:scrollbars="vertical" />
|
||||||
|
|
||||||
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
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:layout_height="match_parent"
|
||||||
android:background="?attr/primaryBackgroundColor">
|
android:background="?attr/primaryBackgroundColor">
|
||||||
|
|
||||||
<ScrollView
|
<androidx.core.widget.NestedScrollView
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:background="?attr/primaryBackgroundColor">
|
android:background="?attr/primaryBackgroundColor">
|
||||||
@ -208,8 +208,72 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/rateAppFrame"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_marginTop="25dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/rateApp"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:drawableStart="@drawable/ic_like"
|
||||||
|
android:drawablePadding="24dp"
|
||||||
|
android:paddingStart="12dp"
|
||||||
|
android:paddingEnd="12dp"
|
||||||
|
android:text="@string/navRate"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/rateAppHintText"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:text="@string/rateAppHintText"
|
||||||
|
android:paddingStart="60dp"
|
||||||
|
android:paddingEnd="12dp"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/aboutAppFrame"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_marginTop="25dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/aboutApp"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:drawableStart="@drawable/ic_info"
|
||||||
|
android:drawablePadding="24dp"
|
||||||
|
android:paddingStart="12dp"
|
||||||
|
android:paddingEnd="12dp"
|
||||||
|
android:text="@string/navAbout"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textSize="16sp" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/aboutAppHintText"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:text="@string/aboutAppHintText"
|
||||||
|
android:paddingStart="60dp"
|
||||||
|
android:paddingEnd="12dp"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textSize="12sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</ScrollView>
|
</androidx.core.widget.NestedScrollView>
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
@ -12,6 +12,12 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:visibility="invisible" />
|
android:visibility="invisible" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/repoFullName"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:visibility="invisible" />
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/mainFrame"
|
android:id="@+id/mainFrame"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
android:gravity="end"
|
android:gravity="end"
|
||||||
android:paddingEnd="25dp"
|
android:paddingEnd="25dp"
|
||||||
android:paddingStart="15dp"
|
android:paddingStart="15dp"
|
||||||
android:paddingTop="10dp"
|
android:paddingTop="6dp"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/userAccountAvatar"
|
android:id="@+id/userAccountAvatar"
|
||||||
android:layout_width="32dp"
|
android:layout_width="36dp"
|
||||||
android:layout_height="32dp"
|
android:layout_height="36dp"
|
||||||
|
android:paddingStart="4dp"
|
||||||
|
android:paddingEnd="4dp"
|
||||||
android:contentDescription="@string/generalImgContentText"
|
android:contentDescription="@string/generalImgContentText"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android" />
|
xmlns:android="http://schemas.android.com/apk/res/android" />
|
||||||
|
@ -56,19 +56,6 @@
|
|||||||
android:icon="@drawable/ic_settings"
|
android:icon="@drawable/ic_settings"
|
||||||
android:title="@string/navSettings" />
|
android:title="@string/navSettings" />
|
||||||
|
|
||||||
<item android:id="@+id/nav_about"
|
|
||||||
android:icon="@drawable/ic_info"
|
|
||||||
android:title="@string/navAbout" />
|
|
||||||
|
|
||||||
</group>
|
|
||||||
|
|
||||||
<item android:id="@+id/nav_rate_app"
|
|
||||||
android:icon="@drawable/ic_like"
|
|
||||||
android:title="@string/navRate" />
|
|
||||||
|
|
||||||
<group android:checkableBehavior="single"
|
|
||||||
android:id="@+id/nav_extra">
|
|
||||||
|
|
||||||
<item android:id="@+id/nav_logout"
|
<item android:id="@+id/nav_logout"
|
||||||
android:icon="@drawable/ic_logout"
|
android:icon="@drawable/ic_logout"
|
||||||
android:title="@string/navLogout" />
|
android:title="@string/navLogout" />
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
<string name="navLogout">الخروج</string>
|
<string name="navLogout">الخروج</string>
|
||||||
<string name="navExplore">استكشف</string>
|
<string name="navExplore">استكشف</string>
|
||||||
<string name="navAdministration">Administration</string>
|
<string name="navAdministration">Administration</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">عن التطبيق</string>
|
<string name="pageTitleAbout">عن التطبيق</string>
|
||||||
@ -519,6 +520,8 @@
|
|||||||
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
||||||
<string name="languagesHintText">Languages</string>
|
<string name="languagesHintText">Languages</string>
|
||||||
<string name="reportsHintText">Crash reports</string>
|
<string name="reportsHintText">Crash reports</string>
|
||||||
|
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
|
||||||
|
<string name="aboutAppHintText">App version, build, user gitea version</string>
|
||||||
<string name="archivedRepository">Archived</string>
|
<string name="archivedRepository">Archived</string>
|
||||||
<string name="accountDeletedMessage">Account deleted successfully</string>
|
<string name="accountDeletedMessage">Account deleted successfully</string>
|
||||||
<string name="removeAccountPopupTitle">Remove Account</string>
|
<string name="removeAccountPopupTitle">Remove Account</string>
|
||||||
@ -569,6 +572,12 @@
|
|||||||
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
||||||
<string name="repoTransferOwnerError">New owner is required</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="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="mergeIntoBranch">Merge Into</string>
|
||||||
<string name="pullFromBranch">Pull From</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="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="navLogout">Odhlásit se</string>
|
||||||
<string name="navExplore">Prozkoumat</string>
|
<string name="navExplore">Prozkoumat</string>
|
||||||
<string name="navAdministration">Administrace</string>
|
<string name="navAdministration">Administrace</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">O aplikaci</string>
|
<string name="pageTitleAbout">O aplikaci</string>
|
||||||
@ -519,6 +520,8 @@
|
|||||||
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
||||||
<string name="languagesHintText">Languages</string>
|
<string name="languagesHintText">Languages</string>
|
||||||
<string name="reportsHintText">Crash reports</string>
|
<string name="reportsHintText">Crash reports</string>
|
||||||
|
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
|
||||||
|
<string name="aboutAppHintText">App version, build, user gitea version</string>
|
||||||
<string name="archivedRepository">Archived</string>
|
<string name="archivedRepository">Archived</string>
|
||||||
<string name="accountDeletedMessage">Account deleted successfully</string>
|
<string name="accountDeletedMessage">Account deleted successfully</string>
|
||||||
<string name="removeAccountPopupTitle">Remove Account</string>
|
<string name="removeAccountPopupTitle">Remove Account</string>
|
||||||
@ -569,6 +572,12 @@
|
|||||||
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
||||||
<string name="repoTransferOwnerError">New owner is required</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="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="mergeIntoBranch">Merge Into</string>
|
||||||
<string name="pullFromBranch">Pull From</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="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="navLogout">Ausloggen</string>
|
||||||
<string name="navExplore">Erkunden</string>
|
<string name="navExplore">Erkunden</string>
|
||||||
<string name="navAdministration">Administration</string>
|
<string name="navAdministration">Administration</string>
|
||||||
|
<string name="navSearchIssuesPulls">Issues Suche</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">Über</string>
|
<string name="pageTitleAbout">Über</string>
|
||||||
@ -519,6 +520,8 @@
|
|||||||
<string name="securityHintText">SSL-Zertifikate, Cache, Abfrageverzögerung</string>
|
<string name="securityHintText">SSL-Zertifikate, Cache, Abfrageverzögerung</string>
|
||||||
<string name="languagesHintText">Sprachen</string>
|
<string name="languagesHintText">Sprachen</string>
|
||||||
<string name="reportsHintText">Absturzberichte</string>
|
<string name="reportsHintText">Absturzberichte</string>
|
||||||
|
<string name="rateAppHintText">Wenn dir GitNex gefällt, hinterlassen Feedback</string>
|
||||||
|
<string name="aboutAppHintText">App-Version, Build, Gitea Version</string>
|
||||||
<string name="archivedRepository">Archiviert</string>
|
<string name="archivedRepository">Archiviert</string>
|
||||||
<string name="accountDeletedMessage">Konto erfolgreich gelöscht</string>
|
<string name="accountDeletedMessage">Konto erfolgreich gelöscht</string>
|
||||||
<string name="removeAccountPopupTitle">Konto entfernen</string>
|
<string name="removeAccountPopupTitle">Konto entfernen</string>
|
||||||
@ -569,6 +572,12 @@
|
|||||||
<string name="repoTransferSuccess">Repository erfolgreich übertragen</string>
|
<string name="repoTransferSuccess">Repository erfolgreich übertragen</string>
|
||||||
<string name="repoTransferOwnerError">Neuer Besitzer ist erforderlich</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="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="mergeIntoBranch">Zusammenführen in</string>
|
||||||
<string name="pullFromBranch">Pull-Request von</string>
|
<string name="pullFromBranch">Pull-Request von</string>
|
||||||
<string name="sameBranchesError">Diese Branches sind gleich. Es besteht keine Notwendigkeit, einen Pull-Request zu erstellen</string>
|
<string name="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="navLogout">Cerrar sesión</string>
|
||||||
<string name="navExplore">Explorar</string>
|
<string name="navExplore">Explorar</string>
|
||||||
<string name="navAdministration">Administration</string>
|
<string name="navAdministration">Administration</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">Sobre</string>
|
<string name="pageTitleAbout">Sobre</string>
|
||||||
@ -519,6 +520,8 @@
|
|||||||
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
||||||
<string name="languagesHintText">Languages</string>
|
<string name="languagesHintText">Languages</string>
|
||||||
<string name="reportsHintText">Crash reports</string>
|
<string name="reportsHintText">Crash reports</string>
|
||||||
|
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
|
||||||
|
<string name="aboutAppHintText">App version, build, user gitea version</string>
|
||||||
<string name="archivedRepository">Archived</string>
|
<string name="archivedRepository">Archived</string>
|
||||||
<string name="accountDeletedMessage">Account deleted successfully</string>
|
<string name="accountDeletedMessage">Account deleted successfully</string>
|
||||||
<string name="removeAccountPopupTitle">Remove Account</string>
|
<string name="removeAccountPopupTitle">Remove Account</string>
|
||||||
@ -569,6 +572,12 @@
|
|||||||
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
||||||
<string name="repoTransferOwnerError">New owner is required</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="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="mergeIntoBranch">Merge Into</string>
|
||||||
<string name="pullFromBranch">Pull From</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="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="navLogout">خروج از حساب کاربری</string>
|
||||||
<string name="navExplore">جست و جو</string>
|
<string name="navExplore">جست و جو</string>
|
||||||
<string name="navAdministration">Administration</string>
|
<string name="navAdministration">Administration</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">در مورد ما</string>
|
<string name="pageTitleAbout">در مورد ما</string>
|
||||||
@ -522,6 +523,8 @@
|
|||||||
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
||||||
<string name="languagesHintText">Languages</string>
|
<string name="languagesHintText">Languages</string>
|
||||||
<string name="reportsHintText">Crash reports</string>
|
<string name="reportsHintText">Crash reports</string>
|
||||||
|
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
|
||||||
|
<string name="aboutAppHintText">App version, build, user gitea version</string>
|
||||||
<string name="archivedRepository">Archived</string>
|
<string name="archivedRepository">Archived</string>
|
||||||
<string name="accountDeletedMessage">Account deleted successfully</string>
|
<string name="accountDeletedMessage">Account deleted successfully</string>
|
||||||
<string name="removeAccountPopupTitle">Remove Account</string>
|
<string name="removeAccountPopupTitle">Remove Account</string>
|
||||||
@ -572,6 +575,12 @@
|
|||||||
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
||||||
<string name="repoTransferOwnerError">New owner is required</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="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="mergeIntoBranch">Merge Into</string>
|
||||||
<string name="pullFromBranch">Pull From</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="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="navLogout">Kirjaudu ulos</string>
|
||||||
<string name="navExplore">Explore</string>
|
<string name="navExplore">Explore</string>
|
||||||
<string name="navAdministration">Administration</string>
|
<string name="navAdministration">Administration</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">Tietoja</string>
|
<string name="pageTitleAbout">Tietoja</string>
|
||||||
@ -519,6 +520,8 @@
|
|||||||
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
||||||
<string name="languagesHintText">Languages</string>
|
<string name="languagesHintText">Languages</string>
|
||||||
<string name="reportsHintText">Crash reports</string>
|
<string name="reportsHintText">Crash reports</string>
|
||||||
|
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
|
||||||
|
<string name="aboutAppHintText">App version, build, user gitea version</string>
|
||||||
<string name="archivedRepository">Archived</string>
|
<string name="archivedRepository">Archived</string>
|
||||||
<string name="accountDeletedMessage">Account deleted successfully</string>
|
<string name="accountDeletedMessage">Account deleted successfully</string>
|
||||||
<string name="removeAccountPopupTitle">Remove Account</string>
|
<string name="removeAccountPopupTitle">Remove Account</string>
|
||||||
@ -569,6 +572,12 @@
|
|||||||
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
||||||
<string name="repoTransferOwnerError">New owner is required</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="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="mergeIntoBranch">Merge Into</string>
|
||||||
<string name="pullFromBranch">Pull From</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="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="navLogout">Déconnexion</string>
|
||||||
<string name="navExplore">Explorer</string>
|
<string name="navExplore">Explorer</string>
|
||||||
<string name="navAdministration">Administration</string>
|
<string name="navAdministration">Administration</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">À propos</string>
|
<string name="pageTitleAbout">À propos</string>
|
||||||
@ -37,7 +38,7 @@
|
|||||||
<string name="pageTitleExplore">Explorer</string>
|
<string name="pageTitleExplore">Explorer</string>
|
||||||
<string name="pageTitleAdministration">Administration de Gitea</string>
|
<string name="pageTitleAdministration">Administration de Gitea</string>
|
||||||
<string name="pageTitleUserAccounts">Gestion des comptes</string>
|
<string name="pageTitleUserAccounts">Gestion des comptes</string>
|
||||||
<string name="pageTitleNewPullRequest">New Pull Request</string>
|
<string name="pageTitleNewPullRequest">Nouvelle demande de tirage</string>
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="repoName">Dépôt de démonstration</string>
|
<string name="repoName">Dépôt de démonstration</string>
|
||||||
<string name="repoFullname">Nom complet du dépôt</string>
|
<string name="repoFullname">Nom complet du dépôt</string>
|
||||||
@ -519,6 +520,8 @@
|
|||||||
<string name="securityHintText">Certificats SSL, cache, scrutation des notifications</string>
|
<string name="securityHintText">Certificats SSL, cache, scrutation des notifications</string>
|
||||||
<string name="languagesHintText">Langues</string>
|
<string name="languagesHintText">Langues</string>
|
||||||
<string name="reportsHintText">Rapports de plantage</string>
|
<string name="reportsHintText">Rapports de plantage</string>
|
||||||
|
<string name="rateAppHintText">Vous aimez GitNex ? Mettez-lui un pouce !</string>
|
||||||
|
<string name="aboutAppHintText">app, build, gitea</string>
|
||||||
<string name="archivedRepository">Archivé</string>
|
<string name="archivedRepository">Archivé</string>
|
||||||
<string name="accountDeletedMessage">Compte supprimé</string>
|
<string name="accountDeletedMessage">Compte supprimé</string>
|
||||||
<string name="removeAccountPopupTitle">Supprimer le compte</string>
|
<string name="removeAccountPopupTitle">Supprimer le compte</string>
|
||||||
@ -569,12 +572,18 @@
|
|||||||
<string name="repoTransferSuccess">Dépôt transféré</string>
|
<string name="repoTransferSuccess">Dépôt transféré</string>
|
||||||
<string name="repoTransferOwnerError">Un nouveau propriétaire est requis</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="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="exploreFilterDialogTitle">Filtrer les dépôts</string>
|
||||||
<string name="pullFromBranch">Pull From</string>
|
<string name="exploreFilterIncludeTopic">Rechercher uniquement dans le sujet</string>
|
||||||
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
|
<string name="exploreFilterIncludeDesc">Rechercher dans la description</string>
|
||||||
<string name="mergeIntoError">Merge into branch is required</string>
|
<string name="exploreFilterIncludeArchive">Dépôts archivés seulement</string>
|
||||||
<string name="pullFromError">Pull from branch is required</string>
|
<string name="exploreFilterIncludePrivate">Dépôts privés seulement</string>
|
||||||
<string name="titleError">Title is required</string>
|
<string name="exploreFilterIncludeTemplateRepos">Rechercher dans les dépôts modèles</string>
|
||||||
<string name="prCreateSuccess">Pull Request created successfully</string>
|
<string name="mergeIntoBranch">Fusionner dans</string>
|
||||||
<string name="prAlreadyExists">A pull request between these branches already exists</string>
|
<string name="pullFromBranch">Tirer depuis</string>
|
||||||
|
<string name="sameBranchesError">Ces branches sont identiques. La requête de tirage est inutile.</string>
|
||||||
|
<string name="mergeIntoError">Fusion de branche requise</string>
|
||||||
|
<string name="pullFromError">Tirage de branche requis</string>
|
||||||
|
<string name="titleError">Titre requis</string>
|
||||||
|
<string name="prCreateSuccess">Requête de tirage créé</string>
|
||||||
|
<string name="prAlreadyExists">Une requête de tirage existe déjà entre ces branches</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
<string name="navLogout">Esci</string>
|
<string name="navLogout">Esci</string>
|
||||||
<string name="navExplore">Esplora</string>
|
<string name="navExplore">Esplora</string>
|
||||||
<string name="navAdministration">Amministrazione</string>
|
<string name="navAdministration">Amministrazione</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">Info su</string>
|
<string name="pageTitleAbout">Info su</string>
|
||||||
@ -521,6 +522,8 @@ autorizzazione</string>
|
|||||||
<string name="securityHintText">Certificati SSL, cache, ricerca di notifiche</string>
|
<string name="securityHintText">Certificati SSL, cache, ricerca di notifiche</string>
|
||||||
<string name="languagesHintText">Lingue</string>
|
<string name="languagesHintText">Lingue</string>
|
||||||
<string name="reportsHintText">Rapporti crash</string>
|
<string name="reportsHintText">Rapporti crash</string>
|
||||||
|
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
|
||||||
|
<string name="aboutAppHintText">App version, build, user gitea version</string>
|
||||||
<string name="archivedRepository">Archiviato</string>
|
<string name="archivedRepository">Archiviato</string>
|
||||||
<string name="accountDeletedMessage">Account eliminato con successo</string>
|
<string name="accountDeletedMessage">Account eliminato con successo</string>
|
||||||
<string name="removeAccountPopupTitle">Remove Account</string>
|
<string name="removeAccountPopupTitle">Remove Account</string>
|
||||||
@ -571,6 +574,12 @@ autorizzazione</string>
|
|||||||
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
||||||
<string name="repoTransferOwnerError">New owner is required</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="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="mergeIntoBranch">Merge Into</string>
|
||||||
<string name="pullFromBranch">Pull From</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="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="navLogout">Logout</string>
|
||||||
<string name="navExplore">Izpētīt</string>
|
<string name="navExplore">Izpētīt</string>
|
||||||
<string name="navAdministration">Administration</string>
|
<string name="navAdministration">Administration</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">Par</string>
|
<string name="pageTitleAbout">Par</string>
|
||||||
@ -519,6 +520,8 @@
|
|||||||
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
||||||
<string name="languagesHintText">Languages</string>
|
<string name="languagesHintText">Languages</string>
|
||||||
<string name="reportsHintText">Crash reports</string>
|
<string name="reportsHintText">Crash reports</string>
|
||||||
|
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
|
||||||
|
<string name="aboutAppHintText">App version, build, user gitea version</string>
|
||||||
<string name="archivedRepository">Archived</string>
|
<string name="archivedRepository">Archived</string>
|
||||||
<string name="accountDeletedMessage">Account deleted successfully</string>
|
<string name="accountDeletedMessage">Account deleted successfully</string>
|
||||||
<string name="removeAccountPopupTitle">Remove Account</string>
|
<string name="removeAccountPopupTitle">Remove Account</string>
|
||||||
@ -569,6 +572,12 @@
|
|||||||
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
||||||
<string name="repoTransferOwnerError">New owner is required</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="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="mergeIntoBranch">Merge Into</string>
|
||||||
<string name="pullFromBranch">Pull From</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="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="navLogout">Wyloguj się</string>
|
||||||
<string name="navExplore">Przeglądaj</string>
|
<string name="navExplore">Przeglądaj</string>
|
||||||
<string name="navAdministration">Administration</string>
|
<string name="navAdministration">Administration</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">O programie</string>
|
<string name="pageTitleAbout">O programie</string>
|
||||||
@ -519,6 +520,8 @@
|
|||||||
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
||||||
<string name="languagesHintText">Languages</string>
|
<string name="languagesHintText">Languages</string>
|
||||||
<string name="reportsHintText">Crash reports</string>
|
<string name="reportsHintText">Crash reports</string>
|
||||||
|
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
|
||||||
|
<string name="aboutAppHintText">App version, build, user gitea version</string>
|
||||||
<string name="archivedRepository">Archived</string>
|
<string name="archivedRepository">Archived</string>
|
||||||
<string name="accountDeletedMessage">Account deleted successfully</string>
|
<string name="accountDeletedMessage">Account deleted successfully</string>
|
||||||
<string name="removeAccountPopupTitle">Remove Account</string>
|
<string name="removeAccountPopupTitle">Remove Account</string>
|
||||||
@ -569,6 +572,12 @@
|
|||||||
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
||||||
<string name="repoTransferOwnerError">New owner is required</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="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="mergeIntoBranch">Merge Into</string>
|
||||||
<string name="pullFromBranch">Pull From</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="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="navLogout">Sair</string>
|
||||||
<string name="navExplore">Explorar</string>
|
<string name="navExplore">Explorar</string>
|
||||||
<string name="navAdministration">Administração</string>
|
<string name="navAdministration">Administração</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">Sobre</string>
|
<string name="pageTitleAbout">Sobre</string>
|
||||||
@ -519,6 +520,8 @@
|
|||||||
<string name="securityHintText">Certificados SSL, cache e atraso de pesquisa</string>
|
<string name="securityHintText">Certificados SSL, cache e atraso de pesquisa</string>
|
||||||
<string name="languagesHintText">Idiomas</string>
|
<string name="languagesHintText">Idiomas</string>
|
||||||
<string name="reportsHintText">Relatórios de erros</string>
|
<string name="reportsHintText">Relatórios de erros</string>
|
||||||
|
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
|
||||||
|
<string name="aboutAppHintText">App version, build, user gitea version</string>
|
||||||
<string name="archivedRepository">Arquivado</string>
|
<string name="archivedRepository">Arquivado</string>
|
||||||
<string name="accountDeletedMessage">Conta excluída com êxito</string>
|
<string name="accountDeletedMessage">Conta excluída com êxito</string>
|
||||||
<string name="removeAccountPopupTitle">Excluir Conta</string>
|
<string name="removeAccountPopupTitle">Excluir Conta</string>
|
||||||
@ -569,6 +572,12 @@
|
|||||||
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
||||||
<string name="repoTransferOwnerError">New owner is required</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="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="mergeIntoBranch">Merge Into</string>
|
||||||
<string name="pullFromBranch">Pull From</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="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="navLogout">Выход</string>
|
||||||
<string name="navExplore">Обзор</string>
|
<string name="navExplore">Обзор</string>
|
||||||
<string name="navAdministration">Администрирование</string>
|
<string name="navAdministration">Администрирование</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">О программе</string>
|
<string name="pageTitleAbout">О программе</string>
|
||||||
@ -519,6 +520,8 @@
|
|||||||
<string name="securityHintText">SSL-сертификаты, кэш, задержка опроса</string>
|
<string name="securityHintText">SSL-сертификаты, кэш, задержка опроса</string>
|
||||||
<string name="languagesHintText">Языки</string>
|
<string name="languagesHintText">Языки</string>
|
||||||
<string name="reportsHintText">Отчёты об ошибках</string>
|
<string name="reportsHintText">Отчёты об ошибках</string>
|
||||||
|
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
|
||||||
|
<string name="aboutAppHintText">App version, build, user gitea version</string>
|
||||||
<string name="archivedRepository">Архивировано</string>
|
<string name="archivedRepository">Архивировано</string>
|
||||||
<string name="accountDeletedMessage">Учётная запись успешно удалена</string>
|
<string name="accountDeletedMessage">Учётная запись успешно удалена</string>
|
||||||
<string name="removeAccountPopupTitle">Удалить учётную запись</string>
|
<string name="removeAccountPopupTitle">Удалить учётную запись</string>
|
||||||
@ -569,6 +572,12 @@
|
|||||||
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
||||||
<string name="repoTransferOwnerError">New owner is required</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="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="mergeIntoBranch">Merge Into</string>
|
||||||
<string name="pullFromBranch">Pull From</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="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="navLogout">Одјави ме</string>
|
||||||
<string name="navExplore">Претражи репозиторијуме</string>
|
<string name="navExplore">Претражи репозиторијуме</string>
|
||||||
<string name="navAdministration">Administration</string>
|
<string name="navAdministration">Administration</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">О програму</string>
|
<string name="pageTitleAbout">О програму</string>
|
||||||
@ -519,6 +520,8 @@
|
|||||||
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
||||||
<string name="languagesHintText">Languages</string>
|
<string name="languagesHintText">Languages</string>
|
||||||
<string name="reportsHintText">Crash reports</string>
|
<string name="reportsHintText">Crash reports</string>
|
||||||
|
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
|
||||||
|
<string name="aboutAppHintText">App version, build, user gitea version</string>
|
||||||
<string name="archivedRepository">Archived</string>
|
<string name="archivedRepository">Archived</string>
|
||||||
<string name="accountDeletedMessage">Account deleted successfully</string>
|
<string name="accountDeletedMessage">Account deleted successfully</string>
|
||||||
<string name="removeAccountPopupTitle">Remove Account</string>
|
<string name="removeAccountPopupTitle">Remove Account</string>
|
||||||
@ -569,6 +572,12 @@
|
|||||||
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
||||||
<string name="repoTransferOwnerError">New owner is required</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="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="mergeIntoBranch">Merge Into</string>
|
||||||
<string name="pullFromBranch">Pull From</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="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="navLogout">Çıkış Yap</string>
|
||||||
<string name="navExplore">Keşfet</string>
|
<string name="navExplore">Keşfet</string>
|
||||||
<string name="navAdministration">Administration</string>
|
<string name="navAdministration">Administration</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">Hakkında</string>
|
<string name="pageTitleAbout">Hakkında</string>
|
||||||
@ -519,6 +520,8 @@
|
|||||||
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
||||||
<string name="languagesHintText">Languages</string>
|
<string name="languagesHintText">Languages</string>
|
||||||
<string name="reportsHintText">Crash reports</string>
|
<string name="reportsHintText">Crash reports</string>
|
||||||
|
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
|
||||||
|
<string name="aboutAppHintText">App version, build, user gitea version</string>
|
||||||
<string name="archivedRepository">Archived</string>
|
<string name="archivedRepository">Archived</string>
|
||||||
<string name="accountDeletedMessage">Account deleted successfully</string>
|
<string name="accountDeletedMessage">Account deleted successfully</string>
|
||||||
<string name="removeAccountPopupTitle">Remove Account</string>
|
<string name="removeAccountPopupTitle">Remove Account</string>
|
||||||
@ -569,6 +572,12 @@
|
|||||||
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
||||||
<string name="repoTransferOwnerError">New owner is required</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="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="mergeIntoBranch">Merge Into</string>
|
||||||
<string name="pullFromBranch">Pull From</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="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="navLogout">Вийти</string>
|
||||||
<string name="navExplore">Огляд</string>
|
<string name="navExplore">Огляд</string>
|
||||||
<string name="navAdministration">Адміністрування</string>
|
<string name="navAdministration">Адміністрування</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">Про додаток</string>
|
<string name="pageTitleAbout">Про додаток</string>
|
||||||
@ -519,6 +520,8 @@
|
|||||||
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
||||||
<string name="languagesHintText">Мови</string>
|
<string name="languagesHintText">Мови</string>
|
||||||
<string name="reportsHintText">Звіти про падіння</string>
|
<string name="reportsHintText">Звіти про падіння</string>
|
||||||
|
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
|
||||||
|
<string name="aboutAppHintText">App version, build, user gitea version</string>
|
||||||
<string name="archivedRepository">Архівовано</string>
|
<string name="archivedRepository">Архівовано</string>
|
||||||
<string name="accountDeletedMessage">Account deleted successfully</string>
|
<string name="accountDeletedMessage">Account deleted successfully</string>
|
||||||
<string name="removeAccountPopupTitle">Remove Account</string>
|
<string name="removeAccountPopupTitle">Remove Account</string>
|
||||||
@ -569,6 +572,12 @@
|
|||||||
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
<string name="repoTransferSuccess">Repository transferred successfully</string>
|
||||||
<string name="repoTransferOwnerError">New owner is required</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="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="mergeIntoBranch">Merge Into</string>
|
||||||
<string name="pullFromBranch">Pull From</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="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="navLogout">退出</string>
|
||||||
<string name="navExplore">探索</string>
|
<string name="navExplore">探索</string>
|
||||||
<string name="navAdministration">管理</string>
|
<string name="navAdministration">管理</string>
|
||||||
|
<string name="navSearchIssuesPulls">搜索问题</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="pageTitleAbout">关于</string>
|
<string name="pageTitleAbout">关于</string>
|
||||||
@ -37,7 +38,7 @@
|
|||||||
<string name="pageTitleExplore">探索</string>
|
<string name="pageTitleExplore">探索</string>
|
||||||
<string name="pageTitleAdministration">Gitea 管理</string>
|
<string name="pageTitleAdministration">Gitea 管理</string>
|
||||||
<string name="pageTitleUserAccounts">管理账户</string>
|
<string name="pageTitleUserAccounts">管理账户</string>
|
||||||
<string name="pageTitleNewPullRequest">New Pull Request</string>
|
<string name="pageTitleNewPullRequest">新拉取请求</string>
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
<string name="repoName">演示仓库</string>
|
<string name="repoName">演示仓库</string>
|
||||||
<string name="repoFullname">有组织的存储库</string>
|
<string name="repoFullname">有组织的存储库</string>
|
||||||
@ -519,6 +520,8 @@
|
|||||||
<string name="securityHintText">SSL 证书、缓存、轮询延迟</string>
|
<string name="securityHintText">SSL 证书、缓存、轮询延迟</string>
|
||||||
<string name="languagesHintText">语言</string>
|
<string name="languagesHintText">语言</string>
|
||||||
<string name="reportsHintText">崩溃报告</string>
|
<string name="reportsHintText">崩溃报告</string>
|
||||||
|
<string name="rateAppHintText">如果你喜欢GitNex,你可以给它点赞</string>
|
||||||
|
<string name="aboutAppHintText">应用程序版本、构建、用户gitea版本</string>
|
||||||
<string name="archivedRepository">已存档</string>
|
<string name="archivedRepository">已存档</string>
|
||||||
<string name="accountDeletedMessage">帐户删除成功</string>
|
<string name="accountDeletedMessage">帐户删除成功</string>
|
||||||
<string name="removeAccountPopupTitle">删除账户</string>
|
<string name="removeAccountPopupTitle">删除账户</string>
|
||||||
@ -569,12 +572,18 @@
|
|||||||
<string name="repoTransferSuccess">成功移交存储库</string>
|
<string name="repoTransferSuccess">成功移交存储库</string>
|
||||||
<string name="repoTransferOwnerError">需要新的所有者</string>
|
<string name="repoTransferOwnerError">需要新的所有者</string>
|
||||||
<string name="repoTransferError">所有者名称有问题。确保新所有者存在</string>
|
<string name="repoTransferError">所有者名称有问题。确保新所有者存在</string>
|
||||||
<string name="mergeIntoBranch">Merge Into</string>
|
<string name="exploreFilterDialogTitle">过滤仓库</string>
|
||||||
<string name="pullFromBranch">Pull From</string>
|
<string name="exploreFilterIncludeTopic">仅在话题中搜索</string>
|
||||||
<string name="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
|
<string name="exploreFilterIncludeDesc">在描述中搜索</string>
|
||||||
<string name="mergeIntoError">Merge into branch is required</string>
|
<string name="exploreFilterIncludeArchive">仅存档仓库</string>
|
||||||
<string name="pullFromError">Pull from branch is required</string>
|
<string name="exploreFilterIncludePrivate">仅私有仓库</string>
|
||||||
<string name="titleError">Title is required</string>
|
<string name="exploreFilterIncludeTemplateRepos">在模板仓库中搜索</string>
|
||||||
<string name="prCreateSuccess">Pull Request created successfully</string>
|
<string name="mergeIntoBranch">合并到</string>
|
||||||
<string name="prAlreadyExists">A pull request between these branches already exists</string>
|
<string name="pullFromBranch">拉取自</string>
|
||||||
|
<string name="sameBranchesError">这些分支是相等的。 无需创建拉取请求</string>
|
||||||
|
<string name="mergeIntoError">必须合并到分支</string>
|
||||||
|
<string name="pullFromError">需要从分支下拉</string>
|
||||||
|
<string name="titleError">标题不可为空</string>
|
||||||
|
<string name="prCreateSuccess">拉取请求创建成功</string>
|
||||||
|
<string name="prAlreadyExists">这些分支之间的拉取请求已存在</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
<string name="navLogout">Logout</string>
|
<string name="navLogout">Logout</string>
|
||||||
<string name="navExplore">Explore</string>
|
<string name="navExplore">Explore</string>
|
||||||
<string name="navAdministration">Administration</string>
|
<string name="navAdministration">Administration</string>
|
||||||
|
<string name="navSearchIssuesPulls">Search Issues</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
|
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
@ -634,6 +635,8 @@
|
|||||||
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
<string name="securityHintText">SSL certificates, cache, polling delay</string>
|
||||||
<string name="languagesHintText">Languages</string>
|
<string name="languagesHintText">Languages</string>
|
||||||
<string name="reportsHintText">Crash reports</string>
|
<string name="reportsHintText">Crash reports</string>
|
||||||
|
<string name="rateAppHintText">If you like GitNex you can give it a thumbs up</string>
|
||||||
|
<string name="aboutAppHintText">App version, build, user gitea version</string>
|
||||||
|
|
||||||
<string name="archivedRepository">Archived</string>
|
<string name="archivedRepository">Archived</string>
|
||||||
|
|
||||||
@ -693,6 +696,13 @@
|
|||||||
<string name="repoTransferOwnerError">New owner is required</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="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="mergeIntoBranch">Merge Into</string>
|
||||||
<string name="pullFromBranch">Pull From</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="sameBranchesError">These branches are equal. There is no need to create a pull request</string>
|
||||||
|
@ -210,7 +210,7 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="AppThemeCheckBoxStyle" parent="Base.Widget.AppCompat.CompoundButton.CheckBox">
|
<style name="AppThemeCheckBoxStyle" parent="Base.Widget.AppCompat.CompoundButton.CheckBox">
|
||||||
<item name="buttonTint">@color/colorWhite</item>
|
<item name="buttonTint">?attr/iconsColor</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<!-- Retro theme styles -->
|
<!-- Retro theme styles -->
|
||||||
|
@ -1,8 +1,19 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<changelog>
|
<changelog>
|
||||||
|
|
||||||
<release version="3.2.0-rc1" versioncode="317">
|
<release version="3.2.0" versioncode="320">
|
||||||
<change>3.2.0 RC1 release brings create pr, repository settings for admins and many more new features</change>
|
<change>New: Create pull request</change>
|
||||||
|
<change>New: Edit repository properties (Admins only)</change>
|
||||||
|
<change>New: Delete repository (Admins only)</change>
|
||||||
|
<change>New: Transfer repository ownership (Admins only)</change>
|
||||||
|
<change>New: Notification badge in navigation menu</change>
|
||||||
|
<change>New: Search issues across all repositories</change>
|
||||||
|
<change>New: Show issues/pr states in single view mode</change>
|
||||||
|
<change>New: Explore repositories filter</change>
|
||||||
|
<change>New: Android 11 support</change>
|
||||||
|
<change>New: Commits under Files branches</change>
|
||||||
|
<change>Bugfix: Fix crash when create issue with labels removed</change>
|
||||||
|
<change>Bugfix: Fix active account selector</change>
|
||||||
</release>
|
</release>
|
||||||
|
|
||||||
</changelog>
|
</changelog>
|
||||||
|
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 |