diff --git a/app/src/main/java/org/mian/gitnex/actions/IssueActions.java b/app/src/main/java/org/mian/gitnex/actions/IssueActions.java index 922e59b2..43af1993 100644 --- a/app/src/main/java/org/mian/gitnex/actions/IssueActions.java +++ b/app/src/main/java/org/mian/gitnex/actions/IssueActions.java @@ -2,6 +2,8 @@ package org.mian.gitnex.actions; import android.content.Context; import android.util.Log; +import android.view.View; +import android.widget.TextView; import com.google.gson.JsonElement; import org.mian.gitnex.R; import org.mian.gitnex.activities.ReplyToIssueActivity; @@ -22,9 +24,9 @@ import retrofit2.Callback; public class IssueActions { - public static void editIssueComment(final Context context, final int commentId, final String commentBody) { + public static void editIssueComment(final Context ctx, final int commentId, final String commentBody) { - final TinyDB tinyDb = new TinyDB(context); + final TinyDB tinyDb = new TinyDB(ctx); final String instanceUrl = tinyDb.getString("instanceUrl"); final String loginUid = tinyDb.getString("loginUid"); final String instanceToken = "token " + tinyDb.getString(loginUid + "-token"); @@ -37,9 +39,9 @@ public class IssueActions { Call call; call = RetrofitClient - .getInstance(instanceUrl, context) + .getInstance(instanceUrl, ctx) .getApiInterface() - .patchIssueComment(Authorization.returnAuthentication(context, loginUid, instanceToken), repoOwner, repoName, commentId, commentBodyJson); + .patchIssueComment(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, commentId, commentBodyJson); call.enqueue(new Callback() { @@ -50,32 +52,32 @@ public class IssueActions { if(response.code() == 200) { tinyDb.putBoolean("commentEdited", true); - Toasty.info(context, context.getString(R.string.editCommentUpdatedText)); - ((ReplyToIssueActivity)context).finish(); + Toasty.info(ctx, ctx.getString(R.string.editCommentUpdatedText)); + ((ReplyToIssueActivity)ctx).finish(); } } else if(response.code() == 401) { - AlertDialogs.authorizationTokenRevokedDialog(context, context.getResources().getString(R.string.alertDialogTokenRevokedTitle), - context.getResources().getString(R.string.alertDialogTokenRevokedMessage), - context.getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton), - context.getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton)); + AlertDialogs.authorizationTokenRevokedDialog(ctx, ctx.getResources().getString(R.string.alertDialogTokenRevokedTitle), + ctx.getResources().getString(R.string.alertDialogTokenRevokedMessage), + ctx.getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton), + ctx.getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton)); } else if(response.code() == 403) { - Toasty.info(context, context.getString(R.string.authorizeError)); + Toasty.info(ctx, ctx.getString(R.string.authorizeError)); } else if(response.code() == 404) { - Toasty.info(context, context.getString(R.string.apiNotFound)); + Toasty.info(ctx, ctx.getString(R.string.apiNotFound)); } else { - Toasty.info(context, context.getString(R.string.genericError)); + Toasty.info(ctx, ctx.getString(R.string.genericError)); } @@ -89,9 +91,9 @@ public class IssueActions { } - public static void closeReopenIssue(final Context context, final int issueIndex, final String issueState) { + public static void closeReopenIssue(final Context ctx, final int issueIndex, final String issueState) { - final TinyDB tinyDb = new TinyDB(context); + final TinyDB tinyDb = new TinyDB(ctx); final String instanceUrl = tinyDb.getString("instanceUrl"); final String loginUid = tinyDb.getString("loginUid"); final String instanceToken = "token " + tinyDb.getString(loginUid + "-token"); @@ -104,9 +106,9 @@ public class IssueActions { Call call; call = RetrofitClient - .getInstance(instanceUrl, context) + .getInstance(instanceUrl, ctx) .getApiInterface() - .closeReopenIssue(Authorization.returnAuthentication(context, loginUid, instanceToken), repoOwner, repoName, issueIndex, issueStatJson); + .closeReopenIssue(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex, issueStatJson); call.enqueue(new Callback() { @@ -119,35 +121,35 @@ public class IssueActions { tinyDb.putBoolean("resumeIssues", true); tinyDb.putBoolean("resumeClosedIssues", true); if(issueState.equals("closed")) { - Toasty.info(context, context.getString(R.string.issueStateClosed)); + Toasty.info(ctx, ctx.getString(R.string.issueStateClosed)); } else if(issueState.equals("open")) { - Toasty.info(context, context.getString(R.string.issueStateReopened)); + Toasty.info(ctx, ctx.getString(R.string.issueStateReopened)); } } } else if(response.code() == 401) { - AlertDialogs.authorizationTokenRevokedDialog(context, context.getResources().getString(R.string.alertDialogTokenRevokedTitle), - context.getResources().getString(R.string.alertDialogTokenRevokedMessage), - context.getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton), - context.getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton)); + AlertDialogs.authorizationTokenRevokedDialog(ctx, ctx.getResources().getString(R.string.alertDialogTokenRevokedTitle), + ctx.getResources().getString(R.string.alertDialogTokenRevokedMessage), + ctx.getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton), + ctx.getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton)); } else if(response.code() == 403) { - Toasty.info(context, context.getString(R.string.authorizeError)); + Toasty.info(ctx, ctx.getString(R.string.authorizeError)); } else if(response.code() == 404) { - Toasty.info(context, context.getString(R.string.apiNotFound)); + Toasty.info(ctx, ctx.getString(R.string.apiNotFound)); } else { - Toasty.info(context, context.getString(R.string.genericError)); + Toasty.info(ctx, ctx.getString(R.string.genericError)); } @@ -161,4 +163,117 @@ public class IssueActions { } + public static void subscribe(final Context ctx, final TextView subscribeIssue, final TextView unsubscribeIssue) { + + final TinyDB tinyDB = new TinyDB(ctx); + + final String instanceUrl = tinyDB.getString("instanceUrl"); + String repoFullName = tinyDB.getString("repoFullName"); + String[] parts = repoFullName.split("/"); + final String repoOwner = parts[0]; + final String repoName = parts[1]; + final String loginUid = tinyDB.getString("loginUid"); + final String userLogin = tinyDB.getString("userLogin"); + final String token = "token " + tinyDB.getString(loginUid + "-token"); + final int issueNr = Integer.parseInt(tinyDB.getString("issueNumber")); + + Call call; + + call = RetrofitClient + .getInstance(instanceUrl, ctx) + .getApiInterface() + .addIssueSubscriber(token, repoOwner, repoName, issueNr, userLogin); + + call.enqueue(new Callback() { + + @Override + public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { + + if(response.isSuccessful()) { + + Toasty.info(ctx, ctx.getString(R.string.issueSubscribtion)); + subscribeIssue.setVisibility(View.GONE); + unsubscribeIssue.setVisibility(View.VISIBLE); + + } + else if(response.code() == 401) { + + AlertDialogs.authorizationTokenRevokedDialog(ctx, ctx.getResources().getString(R.string.alertDialogTokenRevokedTitle), + ctx.getResources().getString(R.string.alertDialogTokenRevokedMessage), + ctx.getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton), + ctx.getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton)); + + } + else { + + Toasty.info(ctx, ctx.getString(R.string.issueSubscribtionError)); + + } + + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + Toasty.info(ctx, ctx.getString(R.string.issueSubscribtionError)); + } + }); + + } + + public static void unsubscribe(final Context ctx, final TextView subscribeIssue, final TextView unsubscribeIssue) { + + final TinyDB tinyDB = new TinyDB(ctx); + + final String instanceUrl = tinyDB.getString("instanceUrl"); + String repoFullName = tinyDB.getString("repoFullName"); + String[] parts = repoFullName.split("/"); + final String repoOwner = parts[0]; + final String repoName = parts[1]; + final String loginUid = tinyDB.getString("loginUid"); + final String userLogin = tinyDB.getString("userLogin"); + final String token = "token " + tinyDB.getString(loginUid + "-token"); + final int issueNr = Integer.parseInt(tinyDB.getString("issueNumber")); + + Call call; + + call = RetrofitClient + .getInstance(instanceUrl, ctx) + .getApiInterface() + .delIssueSubscriber(token, repoOwner, repoName, issueNr, userLogin); + + call.enqueue(new Callback() { + + @Override + public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { + + if(response.isSuccessful()) { + + Toasty.info(ctx, ctx.getString(R.string.issueUnsubscribtion)); + unsubscribeIssue.setVisibility(View.GONE); + subscribeIssue.setVisibility(View.VISIBLE); + + } + else if(response.code() == 401) { + + AlertDialogs.authorizationTokenRevokedDialog(ctx, ctx.getResources().getString(R.string.alertDialogTokenRevokedTitle), + ctx.getResources().getString(R.string.alertDialogTokenRevokedMessage), + ctx.getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton), + ctx.getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton)); + + } + else { + + Toasty.info(ctx, ctx.getString(R.string.issueUnsubscribtionError)); + + } + + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + Toasty.info(ctx, ctx.getString(R.string.issueUnsubscribtionError)); + } + }); + } + } diff --git a/app/src/main/java/org/mian/gitnex/adapters/ExploreRepositoriesAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/ExploreRepositoriesAdapter.java index 472cef03..2965dbf6 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/ExploreRepositoriesAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/ExploreRepositoriesAdapter.java @@ -20,10 +20,16 @@ import org.mian.gitnex.activities.RepoDetailActivity; import org.mian.gitnex.activities.RepoStargazersActivity; import org.mian.gitnex.activities.RepoWatchersActivity; import org.mian.gitnex.clients.PicassoService; +import org.mian.gitnex.clients.RetrofitClient; +import org.mian.gitnex.helpers.AlertDialogs; import org.mian.gitnex.helpers.RoundedTransformation; +import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.models.UserRepositories; +import org.mian.gitnex.models.WatchRepository; import org.mian.gitnex.util.TinyDB; import java.util.List; +import retrofit2.Call; +import retrofit2.Callback; /** * Author M M Arif @@ -75,6 +81,50 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter call; + + call = RetrofitClient.getInstance(instanceUrl, context).getApiInterface().checkRepoWatchStatus(token, repoOwner, repoName); + + call.enqueue(new Callback() { + + @Override + public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { + + if(response.isSuccessful()) { + + tinyDb.putBoolean("repoWatch", response.body().getSubscribed()); + + } + else { + + tinyDb.putBoolean("repoWatch", false); + Toasty.info(context, context.getString(R.string.genericApiStatusError)); + + } + + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + + tinyDb.putBoolean("repoWatch", false); + Toasty.info(context, context.getString(R.string.genericApiStatusError)); + + } + }); + } + context.startActivity(intent); }); diff --git a/app/src/main/java/org/mian/gitnex/adapters/MyReposListAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/MyReposListAdapter.java index 237fa9c4..5f750cb9 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/MyReposListAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/MyReposListAdapter.java @@ -20,13 +20,18 @@ import org.mian.gitnex.activities.RepoDetailActivity; import org.mian.gitnex.activities.RepoStargazersActivity; import org.mian.gitnex.activities.RepoWatchersActivity; import org.mian.gitnex.clients.PicassoService; +import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.helpers.RoundedTransformation; +import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.models.UserRepositories; +import org.mian.gitnex.models.WatchRepository; import org.mian.gitnex.util.TinyDB; import java.util.ArrayList; import java.util.List; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import retrofit2.Call; +import retrofit2.Callback; /** * Author M M Arif @@ -74,6 +79,50 @@ public class MyReposListAdapter extends RecyclerView.Adapter call; + + call = RetrofitClient.getInstance(instanceUrl, context).getApiInterface().checkRepoWatchStatus(token, repoOwner, repoName); + + call.enqueue(new Callback() { + + @Override + public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { + + if(response.isSuccessful()) { + + tinyDb.putBoolean("repoWatch", response.body().getSubscribed()); + + } + else { + + tinyDb.putBoolean("repoWatch", false); + Toasty.info(context, context.getString(R.string.genericApiStatusError)); + + } + + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + + tinyDb.putBoolean("repoWatch", false); + Toasty.info(context, context.getString(R.string.genericApiStatusError)); + + } + }); + } + context.startActivity(intent); }); diff --git a/app/src/main/java/org/mian/gitnex/adapters/ReposListAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/ReposListAdapter.java index 9c83b49c..e553ca1c 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/ReposListAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/ReposListAdapter.java @@ -22,11 +22,16 @@ import org.mian.gitnex.activities.RepoDetailActivity; import org.mian.gitnex.activities.RepoStargazersActivity; import org.mian.gitnex.activities.RepoWatchersActivity; import org.mian.gitnex.clients.PicassoService; +import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.helpers.RoundedTransformation; +import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.models.UserRepositories; +import org.mian.gitnex.models.WatchRepository; import org.mian.gitnex.util.TinyDB; import java.util.ArrayList; import java.util.List; +import retrofit2.Call; +import retrofit2.Callback; /** * Author M M Arif @@ -77,6 +82,50 @@ public class ReposListAdapter extends RecyclerView.Adapter call; + + call = RetrofitClient.getInstance(instanceUrl, context).getApiInterface().checkRepoWatchStatus(token, repoOwner, repoName); + + call.enqueue(new Callback() { + + @Override + public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { + + if(response.isSuccessful()) { + + tinyDb.putBoolean("repoWatch", response.body().getSubscribed()); + + } + else { + + tinyDb.putBoolean("repoWatch", false); + Toasty.info(context, context.getString(R.string.genericApiStatusError)); + + } + + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + + tinyDb.putBoolean("repoWatch", false); + Toasty.info(context, context.getString(R.string.genericApiStatusError)); + + } + }); + } + context.startActivity(intent); }); diff --git a/app/src/main/java/org/mian/gitnex/adapters/RepositoriesByOrgAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/RepositoriesByOrgAdapter.java index 42967f8a..2c707f38 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/RepositoriesByOrgAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/RepositoriesByOrgAdapter.java @@ -20,13 +20,18 @@ import org.mian.gitnex.activities.RepoDetailActivity; import org.mian.gitnex.activities.RepoStargazersActivity; import org.mian.gitnex.activities.RepoWatchersActivity; import org.mian.gitnex.clients.PicassoService; +import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.helpers.RoundedTransformation; +import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.models.UserRepositories; +import org.mian.gitnex.models.WatchRepository; import org.mian.gitnex.util.TinyDB; import java.util.ArrayList; import java.util.List; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import retrofit2.Call; +import retrofit2.Callback; /** * Author M M Arif @@ -74,8 +79,51 @@ public class RepositoriesByOrgAdapter extends RecyclerView.Adapter call; + + call = RetrofitClient.getInstance(instanceUrl, context).getApiInterface().checkRepoWatchStatus(token, repoOwner, repoName); + + call.enqueue(new Callback() { + + @Override + public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { + + if(response.isSuccessful()) { + + tinyDb.putBoolean("repoWatch", response.body().getSubscribed()); + + } + else { + + tinyDb.putBoolean("repoWatch", false); + Toasty.info(context, context.getString(R.string.genericApiStatusError)); + + } + + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + + tinyDb.putBoolean("repoWatch", false); + Toasty.info(context, context.getString(R.string.genericApiStatusError)); + + } + }); + } + + context.startActivity(intent); }); reposDropdownMenu.setOnClickListener(v -> { diff --git a/app/src/main/java/org/mian/gitnex/adapters/StarredReposListAdapter.java b/app/src/main/java/org/mian/gitnex/adapters/StarredReposListAdapter.java index 215b13a0..16d010d8 100644 --- a/app/src/main/java/org/mian/gitnex/adapters/StarredReposListAdapter.java +++ b/app/src/main/java/org/mian/gitnex/adapters/StarredReposListAdapter.java @@ -20,13 +20,18 @@ import org.mian.gitnex.activities.RepoDetailActivity; import org.mian.gitnex.activities.RepoStargazersActivity; import org.mian.gitnex.activities.RepoWatchersActivity; import org.mian.gitnex.clients.PicassoService; +import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.helpers.RoundedTransformation; +import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.models.UserRepositories; +import org.mian.gitnex.models.WatchRepository; import org.mian.gitnex.util.TinyDB; import java.util.ArrayList; import java.util.List; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import retrofit2.Call; +import retrofit2.Callback; /** * Author M M Arif @@ -74,6 +79,50 @@ public class StarredReposListAdapter extends RecyclerView.Adapter call; + + call = RetrofitClient.getInstance(instanceUrl, context).getApiInterface().checkRepoWatchStatus(token, repoOwner, repoName); + + call.enqueue(new Callback() { + + @Override + public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) { + + if(response.isSuccessful()) { + + tinyDb.putBoolean("repoWatch", response.body().getSubscribed()); + + } + else { + + tinyDb.putBoolean("repoWatch", false); + Toasty.info(context, context.getString(R.string.genericApiStatusError)); + + } + + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + + tinyDb.putBoolean("repoWatch", false); + Toasty.info(context, context.getString(R.string.genericApiStatusError)); + + } + }); + } + context.startActivity(intent); }); diff --git a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java index c6f22921..4e31ec90 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java @@ -1,5 +1,6 @@ package org.mian.gitnex.fragments; +import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.LayoutInflater; @@ -15,6 +16,8 @@ import org.mian.gitnex.activities.EditIssueActivity; import org.mian.gitnex.activities.FileDiffActivity; import org.mian.gitnex.activities.MergePullRequestActivity; import org.mian.gitnex.activities.ReplyToIssueActivity; +import org.mian.gitnex.clients.RetrofitClient; +import org.mian.gitnex.helpers.AlertDialogs; import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.util.TinyDB; import androidx.annotation.NonNull; @@ -22,6 +25,8 @@ import androidx.annotation.Nullable; import android.content.ClipboardManager; import android.content.ClipData; import java.util.Objects; +import retrofit2.Call; +import retrofit2.Callback; /** * Author M M Arif @@ -35,7 +40,8 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { View v = inflater.inflate(R.layout.bottom_sheet_single_issue_layout, container, false); - final TinyDB tinyDB = new TinyDB(getContext()); + final Context ctx = getContext(); + final TinyDB tinyDB = new TinyDB(ctx); TextView replyToIssue = v.findViewById(R.id.replyToIssue); TextView editIssue = v.findViewById(R.id.editIssue); @@ -47,12 +53,14 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { TextView openFilesDiff = v.findViewById(R.id.openFilesDiff); TextView mergePullRequest = v.findViewById(R.id.mergePullRequest); TextView shareIssue = v.findViewById(R.id.shareIssue); + TextView subscribeIssue = v.findViewById(R.id.subscribeIssue); + TextView unsubscribeIssue = v.findViewById(R.id.unsubscribeIssue); replyToIssue.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - startActivity(new Intent(getContext(), ReplyToIssueActivity.class)); + startActivity(new Intent(ctx, ReplyToIssueActivity.class)); dismiss(); } @@ -89,7 +97,7 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { @Override public void onClick(View v) { - startActivity(new Intent(getContext(), MergePullRequestActivity.class)); + startActivity(new Intent(ctx, MergePullRequestActivity.class)); dismiss(); } @@ -99,7 +107,7 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { @Override public void onClick(View v) { - startActivity(new Intent(getContext(), FileDiffActivity.class)); + startActivity(new Intent(ctx, FileDiffActivity.class)); dismiss(); } @@ -109,7 +117,7 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { @Override public void onClick(View v) { - startActivity(new Intent(getContext(), EditIssueActivity.class)); + startActivity(new Intent(ctx, EditIssueActivity.class)); dismiss(); } @@ -119,7 +127,7 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { @Override public void onClick(View v) { - startActivity(new Intent(getContext(), AddRemoveLabelsActivity.class)); + startActivity(new Intent(ctx, AddRemoveLabelsActivity.class)); dismiss(); } @@ -129,7 +137,7 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { @Override public void onClick(View v) { - startActivity(new Intent(getContext(), AddRemoveAssigneesActivity.class)); + startActivity(new Intent(ctx, AddRemoveAssigneesActivity.class)); dismiss(); } @@ -173,14 +181,14 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { String issueUrl = instanceUrlWithProtocol + "/" + repoFullName + "/issues/" + tinyDB.getString("issueNumber"); // copy to clipboard - ClipboardManager clipboard = (ClipboardManager) Objects.requireNonNull(getContext()).getSystemService(android.content.Context.CLIPBOARD_SERVICE); + ClipboardManager clipboard = (ClipboardManager) Objects.requireNonNull(ctx).getSystemService(android.content.Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("issueUrl", issueUrl); assert clipboard != null; clipboard.setPrimaryClip(clip); dismiss(); - Toasty.info(getContext(), getContext().getString(R.string.copyIssueUrlToastMsg)); + Toasty.info(ctx, ctx.getString(R.string.copyIssueUrlToastMsg)); } }); @@ -195,7 +203,7 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { @Override public void onClick(View v) { - IssueActions.closeReopenIssue(getContext(), Integer.parseInt(tinyDB.getString("issueNumber")), "closed"); + IssueActions.closeReopenIssue(ctx, Integer.parseInt(tinyDB.getString("issueNumber")), "closed"); dismiss(); } @@ -210,7 +218,7 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { @Override public void onClick(View v) { - IssueActions.closeReopenIssue(getContext(), Integer.parseInt(tinyDB.getString("issueNumber")), "open"); + IssueActions.closeReopenIssue(ctx, Integer.parseInt(tinyDB.getString("issueNumber")), "open"); dismiss(); } @@ -226,7 +234,32 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { } + subscribeIssue.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + IssueActions.subscribe(ctx, subscribeIssue, unsubscribeIssue); + + } + }); + + unsubscribeIssue.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + IssueActions.unsubscribe(ctx, subscribeIssue, unsubscribeIssue); + + } + }); + + //if RepoWatch True Provide Unsubscribe first + // ToDo: API to check if user is subscribed to an issue (do not exist can be guessed by many api endpoints :/) + if (tinyDB.getBoolean("repoWatch")) { + subscribeIssue.setVisibility(View.GONE); + unsubscribeIssue.setVisibility(View.VISIBLE); + } + return v; } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/mian/gitnex/interfaces/ApiInterface.java b/app/src/main/java/org/mian/gitnex/interfaces/ApiInterface.java index 75aa0148..5f4a086b 100644 --- a/app/src/main/java/org/mian/gitnex/interfaces/ApiInterface.java +++ b/app/src/main/java/org/mian/gitnex/interfaces/ApiInterface.java @@ -252,6 +252,12 @@ public interface ApiInterface { @DELETE("repos/{owner}/{repo}/subscription") // un watch a repository Call unWatchRepository(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName); + @PUT("repos/{owner}/{repo}/issues/{index}/subscriptions/{user}") // subscribe user to issue + Call addIssueSubscriber(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("index") int issueIndex, @Path("user") String issueSubscriber); + + @DELETE("repos/{owner}/{repo}/issues/{index}/subscriptions/{user}") // unsubscribe user to issue + Call delIssueSubscriber(@Header("Authorization") String token, @Path("owner") String ownerName, @Path("repo") String repoName, @Path("index") int issueIndex, @Path("user") String issueSubscriber); + @GET("repos/{owner}/{repo}/pulls") // get repository pull requests Call> getPullRequests(@Header("Authorization") String token, @Path("owner") String owner, @Path("repo") String repo, @Query("page") int page, @Query("state") String state, @Query("limit") int limit); diff --git a/app/src/main/res/layout/bottom_sheet_single_issue_layout.xml b/app/src/main/res/layout/bottom_sheet_single_issue_layout.xml index 74d397a8..ca43e54f 100644 --- a/app/src/main/res/layout/bottom_sheet_single_issue_layout.xml +++ b/app/src/main/res/layout/bottom_sheet_single_issue_layout.xml @@ -90,6 +90,31 @@ android:textSize="16sp" android:padding="16dp" /> + + + + + android:padding="16dp" + android:visibility="gone" /> - \ No newline at end of file + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6f8922e9..4bb5cfa4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -387,6 +387,8 @@ Add Assignees Add / Remove Assignees Assignees updated + Subscribe + Unsubscribe @@ -591,4 +593,9 @@ Abort Share Comment + + Issue Subscribed + Issue Subscription failed + Issue Unsubscribed + Issue Un-Subscription failed