diff --git a/app/build.gradle b/app/build.gradle index bb395af1..d682f12c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,7 +4,7 @@ android { compileSdkVersion 31 defaultConfig { applicationId "org.mian.gitnex" - minSdkVersion 22 + minSdkVersion 23 targetSdkVersion 31 versionCode 425 versionName "4.3.0" diff --git a/app/src/main/java/org/mian/gitnex/actions/RepositoryActions.java b/app/src/main/java/org/mian/gitnex/actions/RepositoryActions.java index 30696583..a6814701 100644 --- a/app/src/main/java/org/mian/gitnex/actions/RepositoryActions.java +++ b/app/src/main/java/org/mian/gitnex/actions/RepositoryActions.java @@ -32,7 +32,7 @@ public class RepositoryActions { if(response.isSuccessful()) { if(response.code() == 204) { - MainActivity.repoCreated = true; + MainActivity.reloadRepos = true; Toasty.success(context, context.getString(R.string.starRepositorySuccess)); } } @@ -78,7 +78,7 @@ public class RepositoryActions { if(response.isSuccessful()) { if(response.code() == 204) { - MainActivity.repoCreated = true; + MainActivity.reloadRepos = true; Toasty.success(context, context.getString(R.string.unStarRepositorySuccess)); } } diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateFileActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateFileActivity.java index 9f4cf680..cf99972c 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateFileActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateFileActivity.java @@ -91,7 +91,7 @@ public class CreateFileActivity extends BaseActivity { filePath = getIntent().getStringExtra("filePath"); fileSha = getIntent().getStringExtra("fileSha"); - toolbarTitle.setText(getString(R.string.deleteFileText, filePath)); + toolbarTitle.setText(getString(R.string.deleteGenericTitle, filePath)); binding.newFileCreate.setText(R.string.deleteFile); diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java index b0c257f1..dc8f53ee 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java @@ -256,7 +256,7 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis Toasty.success(ctx, getString(R.string.issueCreated)); enableProcessButton(); RepoDetailActivity.updateRepo = true; - MainActivity.repoCreated = true; + MainActivity.reloadRepos = true; finish(); } else if(response2.code() == 401) { diff --git a/app/src/main/java/org/mian/gitnex/activities/CreatePullRequestActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreatePullRequestActivity.java index 66192274..79de1298 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreatePullRequestActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreatePullRequestActivity.java @@ -180,7 +180,7 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis Toasty.success(ctx, getString(R.string.prCreateSuccess)); RepoDetailActivity.updateRepo = true; PullRequestsFragment.resumePullRequests = true; - MainActivity.repoCreated = true; + MainActivity.reloadRepos = true; finish(); } else if(response.code() == 409 || response.message().equals("Conflict")) { diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java index c080179b..4db9316d 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java @@ -178,7 +178,7 @@ public class CreateRepoActivity extends BaseActivity { if(response.code() == 201) { - MainActivity.repoCreated = true; + MainActivity.reloadRepos = true; Toasty.success(ctx, getString(R.string.repoCreated)); enableProcessButton(); finish(); diff --git a/app/src/main/java/org/mian/gitnex/activities/MainActivity.java b/app/src/main/java/org/mian/gitnex/activities/MainActivity.java index c1f86ca3..9cb381a4 100644 --- a/app/src/main/java/org/mian/gitnex/activities/MainActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/MainActivity.java @@ -69,7 +69,7 @@ import retrofit2.Callback; public class MainActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener, BottomSheetListener { public static boolean refActivity = false; - public static boolean repoCreated = false; + public static boolean reloadRepos = false; private DrawerLayout drawer; private TextView toolbarTitle; diff --git a/app/src/main/java/org/mian/gitnex/activities/RepositorySettingsActivity.java b/app/src/main/java/org/mian/gitnex/activities/RepositorySettingsActivity.java index d8c3b6d6..4d990c43 100644 --- a/app/src/main/java/org/mian/gitnex/activities/RepositorySettingsActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/RepositorySettingsActivity.java @@ -23,11 +23,12 @@ import org.mian.gitnex.databinding.CustomRepositoryEditPropertiesDialogBinding; import org.mian.gitnex.databinding.CustomRepositoryTransferDialogBinding; import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.helpers.contexts.RepositoryContext; +import java.util.Objects; import retrofit2.Call; import retrofit2.Callback; /** - * Author M M Arif + * @author M M Arif */ public class RepositorySettingsActivity extends BaseActivity { @@ -58,15 +59,9 @@ public class RepositorySettingsActivity extends BaseActivity { initCloseListener(); closeActivity.setOnClickListener(onClickListener); - // require gitea 1.12 or higher - if(getAccount().requiresVersion("1.12.0")) { - - viewBinding.transferOwnerFrame.setVisibility(View.VISIBLE); - } - viewBinding.editProperties.setOnClickListener(editProperties -> showRepositoryProperties()); - viewBinding.deleteRepository.setOnClickListener(deleteRepository -> showDeleteRepository()); + viewBinding.deleteRepositoryFrame.setOnClickListener(deleteRepository -> showDeleteRepository()); viewBinding.transferOwnerFrame.setOnClickListener(transferRepositoryOwnership -> showTransferRepository()); } @@ -133,7 +128,7 @@ public class RepositorySettingsActivity extends BaseActivity { Toasty.success(ctx, getString(R.string.repoTransferSuccess)); finish(); - BaseApi.getInstance(ctx, RepositoriesApi.class).deleteRepository(repository.getRepositoryId()); + Objects.requireNonNull(BaseApi.getInstance(ctx, RepositoriesApi.class)).deleteRepository(repository.getRepositoryId()); Intent intent = new Intent(RepositorySettingsActivity.this, MainActivity.class); RepositorySettingsActivity.this.startActivity(intent); } @@ -214,7 +209,7 @@ public class RepositorySettingsActivity extends BaseActivity { Toasty.success(ctx, getString(R.string.repoDeletionSuccess)); finish(); - BaseApi.getInstance(ctx, RepositoriesApi.class).deleteRepository(repository.getRepositoryId()); + Objects.requireNonNull(BaseApi.getInstance(ctx, RepositoriesApi.class)).deleteRepository(repository.getRepositoryId()); Intent intent = new Intent(RepositorySettingsActivity.this, MainActivity.class); RepositorySettingsActivity.this.startActivity(intent); } @@ -346,7 +341,8 @@ public class RepositorySettingsActivity extends BaseActivity { repository.setRepository(response.body()); if(!repository.getName().equals(repoName)) { - BaseApi.getInstance(ctx, RepositoriesApi.class).updateRepositoryOwnerAndName(repository.getOwner(), repoName, repository.getRepositoryId()); + Objects.requireNonNull(BaseApi.getInstance(ctx, RepositoriesApi.class)) + .updateRepositoryOwnerAndName(repository.getOwner(), repoName, repository.getRepositoryId()); Intent result = new Intent(); result.putExtra("nameChanged", true); setResult(200, result); diff --git a/app/src/main/java/org/mian/gitnex/adapters/ReleasesAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/ReleasesAdapter.java index bcfc4e70..b514dcd8 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/ReleasesAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/ReleasesAdapter.java @@ -10,21 +10,31 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.google.android.material.bottomsheet.BottomSheetDialog; import org.gitnex.tea4j.v2.models.Release; import org.mian.gitnex.R; +import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.activities.ProfileActivity; +import org.mian.gitnex.activities.RepoDetailActivity; import org.mian.gitnex.clients.PicassoService; +import org.mian.gitnex.clients.RetrofitClient; +import org.mian.gitnex.databinding.FragmentReleasesBinding; import org.mian.gitnex.helpers.AppUtil; import org.mian.gitnex.helpers.ClickListener; import org.mian.gitnex.helpers.Markdown; import org.mian.gitnex.helpers.RoundedTransformation; import org.mian.gitnex.helpers.TimeHelper; import org.mian.gitnex.helpers.TinyDB; +import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.structs.FragmentRefreshListener; import java.util.List; import java.util.Locale; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; /** * @author M M Arif @@ -34,12 +44,15 @@ public class ReleasesAdapter extends RecyclerView.Adapter releasesList; private final Context context; + private final String repoOwner; + private final String repoName; private OnLoadMoreListener loadMoreListener; private boolean isLoading = false, isMoreDataAvailable = true; private final FragmentRefreshListener startDownload; + private final FragmentReleasesBinding fragmentReleasesBinding; - static class ReleasesViewHolder extends RecyclerView.ViewHolder { + protected class ReleasesViewHolder extends RecyclerView.ViewHolder { private Release releases; @@ -56,6 +69,7 @@ public class ReleasesAdapter extends RecyclerView.Adapter { + final Context context = v.getContext(); + + @SuppressLint("InflateParams") + View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_release_in_list, null); + + TextView deleteRelease = view.findViewById(R.id.deleteRelease); + + BottomSheetDialog dialog = new BottomSheetDialog(context); + dialog.setContentView(view); + dialog.show(); + + deleteRelease.setOnClickListener(v1 -> { + deleteRelease(context, releases.getName(), releases.getId(), repoOwner, repoName, getBindingAdapterPosition()); + dialog.dismiss(); + }); + }); } } - public ReleasesAdapter(Context ctx, List releasesMain, FragmentRefreshListener startDownload) { + public ReleasesAdapter(Context ctx, List releasesMain, FragmentRefreshListener startDownload, String repoOwner, String repoName, FragmentReleasesBinding fragmentReleasesBinding) { this.context = ctx; this.releasesList = releasesMain; this.startDownload = startDownload; + this.repoOwner = repoOwner; + this.repoName = repoName; + this.fragmentReleasesBinding = fragmentReleasesBinding; } @NonNull @@ -178,6 +214,10 @@ public class ReleasesAdapter extends RecyclerView.Adapter RetrofitClient + .getApiInterface(context).repoDeleteRelease(owner, repo, releaseId).enqueue(new Callback<>() { + + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) { + + if(response.isSuccessful()) { + updateAdapter(position); + Toasty.success(context, context.getString(R.string.releaseDeleted)); + MainActivity.reloadRepos = true; + if(getItemCount() == 0) { + fragmentReleasesBinding.noDataReleases.setVisibility(View.VISIBLE); + } + } + else if(response.code() == 403) { + Toasty.error(context, context.getString(R.string.authorizeError)); + } + else { + Toasty.error(context, context.getString(R.string.genericError)); + } + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + + Toasty.error(context, context.getString(R.string.genericError)); + } + })) + .setNeutralButton(R.string.cancelButton, null).show(); + } } diff --git a/app/src/main/java/org/mian/gitnex/adapters/TagsAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/TagsAdapter.java index 7f14bd1d..f7347113 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/TagsAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/TagsAdapter.java @@ -16,6 +16,7 @@ import org.gitnex.tea4j.v2.models.Tag; import org.mian.gitnex.R; import org.mian.gitnex.activities.RepoDetailActivity; import org.mian.gitnex.clients.RetrofitClient; +import org.mian.gitnex.databinding.FragmentReleasesBinding; import org.mian.gitnex.helpers.Markdown; import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.structs.FragmentRefreshListener; @@ -35,11 +36,11 @@ public class TagsAdapter extends RecyclerView.Adapter releasesMain, String repoOwner, String repoName, FragmentRefreshListener startDownload) { + public TagsAdapter(Context ctx, List releasesMain, String repoOwner, String repoName, FragmentRefreshListener startDownload, FragmentReleasesBinding fragmentReleasesBinding) { this.context = ctx; this.tags = releasesMain; owner = repoOwner; repo = repoName; this.startDownload = startDownload; + this.fragmentReleasesBinding = fragmentReleasesBinding; } @NonNull @@ -180,10 +182,10 @@ public class TagsAdapter extends RecyclerView.Adapter RetrofitClient @@ -195,6 +197,9 @@ public class TagsAdapter extends RecyclerView.Adapter { + bottomSheetUserProfileBinding.followUser.setOnClickListener(v1 -> { bmListener.onButtonClicked("follow"); dismiss(); - }); + bottomSheetUserProfileBinding.unfollowUser.setOnClickListener(v1 -> { + + bmListener.onButtonClicked("follow"); + dismiss(); + }); + return bottomSheetUserProfileBinding.getRoot(); } @@ -60,8 +60,7 @@ public class BottomSheetUserProfileFragment extends BottomSheetDialogFragment { bmListener = (BottomSheetListener) context; } catch (ClassCastException e) { - throw new ClassCastException(context.toString() + " must implement BottomSheetListener"); + throw new ClassCastException(context + " must implement BottomSheetListener"); } } - } diff --git a/app/src/main/java/org/mian/gitnex/fragments/ExploreRepositoriesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/ExploreRepositoriesFragment.java index b4e12e70..bda0ebf6 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/ExploreRepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/ExploreRepositoriesFragment.java @@ -252,10 +252,10 @@ public class ExploreRepositoriesFragment extends Fragment { public void onResume() { super.onResume(); - if(MainActivity.repoCreated) { + if(MainActivity.reloadRepos) { dataList.clear(); loadInitial(searchQuery, resultLimit); - MainActivity.repoCreated = false; + MainActivity.reloadRepos = false; } } diff --git a/app/src/main/java/org/mian/gitnex/fragments/MyRepositoriesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/MyRepositoriesFragment.java index 06a628cf..57550792 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/MyRepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/MyRepositoriesFragment.java @@ -12,10 +12,11 @@ import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import org.mian.gitnex.R; import org.mian.gitnex.activities.BaseActivity; import org.mian.gitnex.activities.CreateRepoActivity; @@ -23,6 +24,7 @@ import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.adapters.ReposListAdapter; import org.mian.gitnex.databinding.FragmentRepositoriesBinding; import org.mian.gitnex.helpers.Constants; +import org.mian.gitnex.helpers.DividerItemDecorator; import org.mian.gitnex.viewmodels.RepositoriesViewModel; /** @@ -56,10 +58,13 @@ public class MyRepositoriesFragment extends Fragment { fragmentRepositoriesBinding.recyclerView.setHasFixedSize(true); fragmentRepositoriesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(fragmentRepositoriesBinding.recyclerView.getContext(), - DividerItemDecoration.VERTICAL); + + RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(requireContext(), R.drawable.shape_list_divider)); fragmentRepositoriesBinding.recyclerView.addItemDecoration(dividerItemDecoration); + fragmentRepositoriesBinding.recyclerView.setPadding(0, 0, 0, 200); + fragmentRepositoriesBinding.recyclerView.setClipToPadding(false); + fragmentRepositoriesBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { page = 1; @@ -114,10 +119,10 @@ public class MyRepositoriesFragment extends Fragment { super.onResume(); final String userLogin = ((BaseActivity) requireActivity()).getAccount().getAccount().getUserName(); - if(MainActivity.repoCreated) { + if(MainActivity.reloadRepos) { page = 1; fetchDataAsync(userLogin); - MainActivity.repoCreated = false; + MainActivity.reloadRepos = false; } } diff --git a/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamInfoReposFragment.java b/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamInfoReposFragment.java index 5611800f..c5055ec8 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamInfoReposFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationTeamInfoReposFragment.java @@ -126,7 +126,7 @@ public class OrganizationTeamInfoReposFragment extends Fragment { if(repoAdded) { page = 1; fetchDataAsync(); - MainActivity.repoCreated = false; + MainActivity.reloadRepos = false; } } diff --git a/app/src/main/java/org/mian/gitnex/fragments/OrganizationsFragment.java b/app/src/main/java/org/mian/gitnex/fragments/OrganizationsFragment.java index 430293df..e1c04f78 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/OrganizationsFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/OrganizationsFragment.java @@ -61,6 +61,9 @@ public class OrganizationsFragment extends Fragment { RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(requireContext(), R.drawable.shape_list_divider)); fragmentOrganizationsBinding.recyclerView.addItemDecoration(dividerItemDecoration); + fragmentOrganizationsBinding.recyclerView.setPadding(0, 0, 0, 200); + fragmentOrganizationsBinding.recyclerView.setClipToPadding(false); + fragmentOrganizationsBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { page = 1; diff --git a/app/src/main/java/org/mian/gitnex/fragments/ReleasesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/ReleasesFragment.java index 53b08dca..5339382a 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/ReleasesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/ReleasesFragment.java @@ -41,6 +41,7 @@ import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.List; +import java.util.Objects; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.X509TrustManager; @@ -128,7 +129,7 @@ public class ReleasesFragment extends Fragment { releasesModel.getReleasesList(owner, repo, getContext()).observe(getViewLifecycleOwner(), releasesListMain -> { if(!repository.isReleasesViewTypeIsTag()) { - adapter = new ReleasesAdapter(getContext(), releasesListMain, this::requestFileDownload); + adapter = new ReleasesAdapter(getContext(), releasesListMain, this::requestFileDownload, repository.getOwner(), repository.getName(), fragmentReleasesBinding); adapter.setLoadMoreListener(new ReleasesAdapter.OnLoadMoreListener() { @Override @@ -165,7 +166,7 @@ public class ReleasesFragment extends Fragment { releasesModel.getTagsList(owner, repo, getContext()).observe(getViewLifecycleOwner(), tagList -> { if(repository.isReleasesViewTypeIsTag()) { - tagsAdapter = new TagsAdapter(getContext(), tagList, owner, repo, this::requestFileDownload); + tagsAdapter = new TagsAdapter(getContext(), tagList, owner, repo, this::requestFileDownload, fragmentReleasesBinding); tagsAdapter.setLoadMoreListener(new TagsAdapter.OnLoadMoreListener() { @Override @@ -270,7 +271,7 @@ public class ReleasesFragment extends Fragment { OutputStream outputStream = requireContext().getContentResolver().openOutputStream(result.getData().getData()); - AppUtil.copyProgress(response.body().byteStream(), outputStream, 0, p -> {}); + AppUtil.copyProgress(Objects.requireNonNull(response.body()).byteStream(), outputStream, 0, p -> {}); builder.setContentTitle(getString(R.string.fileViewerNotificationTitleFinished)) .setContentText(getString(R.string.fileViewerNotificationDescriptionFinished, Uri.parse(currentDownloadUrl).getLastPathSegment())).setOngoing(false); diff --git a/app/src/main/java/org/mian/gitnex/fragments/RepositoriesByOrgFragment.java b/app/src/main/java/org/mian/gitnex/fragments/RepositoriesByOrgFragment.java index f3722d65..7b6b983f 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/RepositoriesByOrgFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/RepositoriesByOrgFragment.java @@ -126,9 +126,9 @@ public class RepositoriesByOrgFragment extends Fragment { super.onResume(); - if(MainActivity.repoCreated) { + if(MainActivity.reloadRepos) { repositoriesViewModel.loadReposList(page, resultLimit, null, "org", orgName, getContext()); - MainActivity.repoCreated = false; + MainActivity.reloadRepos = false; } } diff --git a/app/src/main/java/org/mian/gitnex/fragments/RepositoriesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/RepositoriesFragment.java index 30d2f42d..e689cab0 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/RepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/RepositoriesFragment.java @@ -59,6 +59,9 @@ public class RepositoriesFragment extends Fragment { RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(requireContext(), R.drawable.shape_list_divider)); fragmentRepositoriesBinding.recyclerView.addItemDecoration(dividerItemDecoration); + fragmentRepositoriesBinding.recyclerView.setPadding(0, 0, 0, 200); + fragmentRepositoriesBinding.recyclerView.setClipToPadding(false); + fragmentRepositoriesBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { page = 1; @@ -112,10 +115,10 @@ public class RepositoriesFragment extends Fragment { public void onResume() { super.onResume(); - if(MainActivity.repoCreated) { + if(MainActivity.reloadRepos) { page = 1; fetchDataAsync(); - MainActivity.repoCreated = false; + MainActivity.reloadRepos = false; } } diff --git a/app/src/main/java/org/mian/gitnex/fragments/StarredRepositoriesFragment.java b/app/src/main/java/org/mian/gitnex/fragments/StarredRepositoriesFragment.java index 4d4fc2bf..fffbdde1 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/StarredRepositoriesFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/StarredRepositoriesFragment.java @@ -12,16 +12,18 @@ import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import androidx.recyclerview.widget.DividerItemDecoration; import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import org.mian.gitnex.R; import org.mian.gitnex.activities.CreateRepoActivity; import org.mian.gitnex.activities.MainActivity; import org.mian.gitnex.adapters.ReposListAdapter; import org.mian.gitnex.databinding.FragmentRepositoriesBinding; import org.mian.gitnex.helpers.Constants; +import org.mian.gitnex.helpers.DividerItemDecorator; import org.mian.gitnex.viewmodels.RepositoriesViewModel; /** @@ -53,10 +55,13 @@ public class StarredRepositoriesFragment extends Fragment { fragmentRepositoriesBinding.recyclerView.setHasFixedSize(true); fragmentRepositoriesBinding.recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); - DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(fragmentRepositoriesBinding.recyclerView.getContext(), - DividerItemDecoration.VERTICAL); + + RecyclerView.ItemDecoration dividerItemDecoration = new DividerItemDecorator(ContextCompat.getDrawable(requireContext(), R.drawable.shape_list_divider)); fragmentRepositoriesBinding.recyclerView.addItemDecoration(dividerItemDecoration); + fragmentRepositoriesBinding.recyclerView.setPadding(0, 0, 0, 200); + fragmentRepositoriesBinding.recyclerView.setClipToPadding(false); + fragmentRepositoriesBinding.pullToRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> { page = 1; @@ -137,10 +142,10 @@ public class StarredRepositoriesFragment extends Fragment { public void onResume() { super.onResume(); - if(MainActivity.repoCreated) { + if(MainActivity.reloadRepos) { page = 1; fetchDataAsync(); - MainActivity.repoCreated = false; + MainActivity.reloadRepos = false; } } diff --git a/app/src/main/java/org/mian/gitnex/helpers/AlertDialogs.java b/app/src/main/java/org/mian/gitnex/helpers/AlertDialogs.java index b5a2d7f6..1a457b0d 100644 --- a/app/src/main/java/org/mian/gitnex/helpers/AlertDialogs.java +++ b/app/src/main/java/org/mian/gitnex/helpers/AlertDialogs.java @@ -57,7 +57,7 @@ public class AlertDialogs { RepositoryContext repository) { new AlertDialog.Builder(context) - .setTitle(context.getString(R.string.deleteLabelTitle, labelTitle)) + .setTitle(context.getString(R.string.deleteGenericTitle, labelTitle)) .setMessage(R.string.labelDeleteMessage) .setIcon(R.drawable.ic_delete) .setPositiveButton(R.string.menuDeleteText, (dialog, whichButton) -> { diff --git a/app/src/main/res/layout/activity_repository_settings.xml b/app/src/main/res/layout/activity_repository_settings.xml index e2c05b51..346ff102 100644 --- a/app/src/main/res/layout/activity_repository_settings.xml +++ b/app/src/main/res/layout/activity_repository_settings.xml @@ -85,7 +85,6 @@ android:orientation="vertical" android:focusable="true" android:clickable="true" - android:visibility="gone" tools:visibility="visible"> + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/bottom_sheet_user_profile.xml b/app/src/main/res/layout/bottom_sheet_user_profile.xml index 8867f485..301255ed 100644 --- a/app/src/main/res/layout/bottom_sheet_user_profile.xml +++ b/app/src/main/res/layout/bottom_sheet_user_profile.xml @@ -46,7 +46,7 @@ app:alignContent="stretch" > + + diff --git a/app/src/main/res/layout/fragment_organizations.xml b/app/src/main/res/layout/fragment_organizations.xml index 3abc005f..609391b0 100644 --- a/app/src/main/res/layout/fragment_organizations.xml +++ b/app/src/main/res/layout/fragment_organizations.xml @@ -15,8 +15,6 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/primaryBackgroundColor" - android:paddingBottom="64dp" - android:clipToPadding="false" android:scrollbars="vertical" /> diff --git a/app/src/main/res/layout/fragment_repositories.xml b/app/src/main/res/layout/fragment_repositories.xml index f172846a..7c3ad7de 100644 --- a/app/src/main/res/layout/fragment_repositories.xml +++ b/app/src/main/res/layout/fragment_repositories.xml @@ -17,8 +17,6 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="?attr/primaryBackgroundColor" - android:paddingBottom="64dp" - android:clipToPadding="false" android:scrollbars="vertical" /> diff --git a/app/src/main/res/layout/list_releases.xml b/app/src/main/res/layout/list_releases.xml index 554f867b..1c206db8 100644 --- a/app/src/main/res/layout/list_releases.xml +++ b/app/src/main/res/layout/list_releases.xml @@ -29,16 +29,15 @@ android:textSize="16sp" android:textStyle="bold" /> - + android:layout_gravity="center_vertical|end" + android:contentDescription="@string/labelMenuContentDesc" + android:background="?android:attr/selectableItemBackgroundBorderless" + android:src="@drawable/ic_dotted_menu_horizontal" /> @@ -77,6 +76,25 @@ android:gravity="end" android:orientation="vertical"> + + + + + + Authorization Error It seems that the Access Token is revoked OR your are not allowed to see these contents.\n\nIn case of revoked Token, please logout and login again - Delete %s Do you really want to delete this label? @@ -404,6 +403,8 @@ Tag name is empty Title is empty New release created + Do you really want to delete this release? + Release deleted OTP code should be numbers @@ -469,7 +470,7 @@ Edit Delete Copy - Quote and Reply + Quote Reply \u0020\u0020\u0020\u25CF\u0020\u0020\u0020 edited Save @@ -506,6 +507,7 @@ Download Reopen Open in Browser + Delete %s Explore users @@ -561,7 +563,6 @@ This file type/size is not supported in file viewer. You can download it from the menu. Delete This File Edit This File - Delete %1$s File is set for deletion by branch %1$s Edit %1$s File is modified by branch %1$s @@ -750,7 +751,7 @@ Tag created Use as reference Do you really want to delete this tag? - Delete tag %s + Tag deleted A tag attached to a release cannot be deleted directly Use Custom Tabs