diff --git a/.gitea/issue_template.md b/.gitea/issue_template.md
index 7551ec81..d1307a05 100644
--- a/.gitea/issue_template.md
+++ b/.gitea/issue_template.md
@@ -1,32 +1,37 @@
## # What do you want to address?
-(This step is required; examples are shown below)
+
- [ ] Bug
- [ ] Feature
- [ ] Suggestion
## # Describe your matter briefly
-(This step is required)
+
+
-
-##### What did you expect? (Useful when addressing bugs)
+##### What did you expect?
---
-_(This step is optional)_
+
+
-
-##### Some additional details (Useful, when we are trying to reproduce a bug)
+##### Some additional details
---
-_(This step is optional; an example is shown below)_
+
* The version of **Gitea** you are using:
* The version of **GitNex** you are using:
-* Phone **OS** version and model:
-* The type of certificate you are using (self-signed, signed):
+* Source of installation (Play Store, F-Droid, APK):
+* Current android version and phone model/manufacturer:
+* The type of certificate your instance is using (self-signed, signed):
* How you used to log in (via password or token):
-
+
##### We would appreciate some screenshots or stacktrace's, but this is also not required.
---
-_(Screenshots and stacktrace's can go here)_
+
+
+
+- [ ] I carefully read the [contribution guidelines](https://codeberg.org/GitNex/GitNex/src/branch/master/CONTRIBUTING.md).
+
#### Thank you for your time.
\ No newline at end of file
diff --git a/.gitea/pull_request_template.md b/.gitea/pull_request_template.md
index d5a4d998..dd43dcc3 100644
--- a/.gitea/pull_request_template.md
+++ b/.gitea/pull_request_template.md
@@ -1,8 +1,9 @@
-Please check the following:
+### Describe what your pull request does and which issue you’re targeting
+
+
-1. Make sure you are targeting the `master` branch, pull requests on release branches are only allowed for bug fixes.
-2. Read contributing guidelines: [CONTRIBUTING.md](https://gitea.com/GitNex/GitNex/src/branch/master/CONTRIBUTING.md)
-3. Please follow the [Code-Standards](https://gitea.com/gitnex/GitNex/wiki/Code-Standards)
-4. Describe what your pull request does and which issue you’re targeting (create one if does not exist)
+
-**You MUST delete the content above including this line before posting, otherwise your pull request will be invalid.**
+- [ ] I carefully read the [contribution guidelines](https://codeberg.org/GitNex/GitNex/src/branch/master/CONTRIBUTING.md).
+- [ ] I'm following the code standards as defined [here](https://codeberg.org/gitnex/GitNex/wiki/Code-Standards).
+- [ ] By submitting this pull request, I permit GitNex to license my work under the [GNU General Public License v3](https://codeberg.org/GitNex/GitNex/src/branch/master/LICENSE).
\ No newline at end of file
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 78aa8157..40c66e59 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -180,4 +180,4 @@
-
+
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index a98f6ed1..43385f65 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -2,26 +2,35 @@
Please take a few minutes to read this document to make the process of contribution more easy and healthy for all involved.
-## Pull Requests
-Patches, enhancements, features are always welcome. The PR should focus on the scope of work and avoid many unnecessary commits. Please provide as much detail and context as possible to explain the work submitted.
+### General
+> **Be polite and gentle while commenting or creating new issues to maintain a healthy environment in which __everyone__ is able to feel comfortable.**
+
-Please ask if you are not sure about the scope of work to be submitted to avoid waste of time spent on the work.
+### Issues and Reports
+Before creating an issue please take a moment and search the repository issues(open/closed) to avoid duplicate issues either it's a bug or feature.
+In case you want to submit a bug report, please provide as much details as possible to better debug the problem. The important part is how to reproduce the bug and steps to reproduce are appreciated.
+**Note:** Please contact the project directly via [email](mailto:gitnex@swatian.com) if have to share sensitive and security related details.
+
-**Code Standards**
+### Pull Requests
+Patches, enhancements and features are always welcome.
+The PR should focus on the scope of work and avoid many unnecessary commits.
+Please provide as much detail and context as possible to explain the work submitted.
+
+**Please ask if you are not sure about the scope of work to be submitted to avoid waste of time spent on the work.** (Submit an issue, __before__ submitting a PR)
+
+**Code Standards**
Please follow the code standards, this will help other developers to understand your code too.
It also helps maintaining the code afterwards.
It is documented in the Wiki: [Code-Standards](https://codeberg.org/gitnex/GitNex/wiki/Code-Standards)
-**How to submit a PR**
-Fork this repository. Pull the forked repository from your namespace to your local machine. Create new branch and work on the bug/feature/enhancement you would like to submit. Push it to your forked version. From there create Pull Request(PR) against **master** branch.
+**How to submit a PR (Pull Request)**
+1. Fork this repository.
+2. Clone the forked repository from your namespace to your local machine.
+3. Create a new branch and work on your feature, enhancement or patch.
+4. Push your commits to your forked version.
+5. You can now create a PR using the web interface against **master** branch.
-**IMPORTANT:** By submitting PR, you agree to allow GitNex to license your work under the same license as that used by GitNex.
+For more information, click [here](http://makeapullrequest.com/).
-## Issues and Reports
-*1st of please be polite and gentle while commenting or creating new issue to maintain a healthy environment.*
-
-Before creating an issue please take a moment and search the repository issues(open/closed) to avoid duplicate issues either it's a bug or feature.
-
-In case you want to submit a bug report, please provide as much details as possible to better debug the problem. The important part is how to reproduce the bug and steps to reproduce are appreciated.
-
-**Note:** Please contact the project directly via email(gitnex@swatian.com) if have to share sensitive and security related details.
+**IMPORTANT:** By submitting PR, you agree to allow GitNex to license your work under the same license as that used by GitNex.
\ No newline at end of file
diff --git a/README.md b/README.md
index e6ac43f6..a03a0cb7 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-[](https://www.gnu.org/licenses/gpl-3.0)  [](https://codeberg.org/gitnex/GitNex/releases) [](https://crowdin.com/project/gitnex) [](https://discord.gg/FbSS4rf)
+[](https://www.gnu.org/licenses/gpl-3.0) [](https://gitlab.com/opyale/gitnex/-/pipelines) [](https://codeberg.org/gitnex/GitNex/releases) [](https://crowdin.com/project/gitnex) [](https://discord.gg/FbSS4rf)
-[
](https://www.patreon.com/mmarif) [
](https://liberapay.com/mmarif/donate)
+[
](https://www.patreon.com/mmarif)
# GitNex - Android client for Gitea
@@ -11,7 +11,7 @@ GitNex is licensed under GPLv3 License. See the LICENSE file for the full licens
## Downloads
[
](https://f-droid.org/en/packages/org.mian.gitnex/)
[
](https://play.google.com/store/apps/details?id=org.mian.gitnex.pro)
-[
](https://cloud.swatian.com/s/DN7E5xxtaw4fRbE)
+[
](https://cloud.swatian.com/s/DN7E5xxtaw4fRbE)
## Note about Gitea version
Please make sure that you are on latest stable release or later for better app experience.
@@ -74,11 +74,11 @@ Thanks to all the open source libraries, contributors and donators.
- Okhttp
- Picasso
- Markwon
+- Prism4j
- Prettytime
- Amulyakhare/textdrawable
- Vdurmont/emoji-java
- Pes/materialcolorpicker
-- Hendraanggrian/socialview
- HamidrezaAmz/BreadcrumbsView
- Chrisbanes/PhotoView
- Pddstudio/highlightjs-android
diff --git a/app/build.gradle b/app/build.gradle
index 54a3b468..1c8913b3 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -6,8 +6,8 @@ android {
applicationId "org.mian.gitnex"
minSdkVersion 21
targetSdkVersion 30
- versionCode 327
- versionName "3.3.0-dev"
+ versionCode 346
+ versionName "3.5.0-dev"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -38,8 +38,10 @@ android {
abortOnError false
}
compileOptions {
- targetCompatibility = "8"
- sourceCompatibility = "8"
+ coreLibraryDesugaringEnabled true
+
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig{
vectorDrawables.useSupportLibrary = true
@@ -52,18 +54,18 @@ configurations {
}
dependencies {
- def lifecycle_version = '2.3.0-beta01'
- def markwon_version = '4.6.0'
+ def lifecycle_version = '2.3.0-rc01'
+ def markwon_version = '4.6.1'
def work_version = "2.4.0"
- def acra = "5.5.0"
+ def acra = "5.7.0"
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.3.0-alpha02'
implementation 'com.google.android.material:material:1.3.0-alpha03'
- implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation "androidx.legacy:legacy-support-v4:1.0.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
- testImplementation "junit:junit:4.13"
+ testImplementation 'junit:junit:4.13.1'
androidTestImplementation 'androidx.test:runner:1.3.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation 'com.squareup.okhttp3:okhttp:4.9.0'
@@ -74,8 +76,7 @@ dependencies {
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.0'
- implementation 'org.ocpsoft.prettytime:prettytime:4.0.6.Final'
- implementation "com.vdurmont:emoji-java:5.1.1"
+ implementation 'org.ocpsoft.prettytime:prettytime:5.0.0.Final'
implementation "com.pes.materialcolorpicker:library:1.2.5"
implementation "io.noties.markwon:core:$markwon_version"
implementation "io.noties.markwon:ext-latex:$markwon_version"
@@ -90,10 +91,11 @@ dependencies {
implementation "io.noties.markwon:recycler-table:$markwon_version"
implementation "io.noties.markwon:simple-ext:$markwon_version"
implementation "io.noties.markwon:syntax-highlight:$markwon_version"
+ implementation "io.noties.markwon:image-picasso:$markwon_version"
+ implementation "io.noties:prism4j:2.0.0"
+ annotationProcessor "io.noties:prism4j-bundler:2.0.0"
implementation "com.caverock:androidsvg:1.4"
- implementation "pl.droidsonroids.gif:android-gif-drawable:1.2.19"
- implementation "com.hendraanggrian.appcompat:socialview:0.2"
- implementation "com.hendraanggrian.appcompat:socialview-commons:0.2"
+ implementation "pl.droidsonroids.gif:android-gif-drawable:1.2.21"
implementation "com.github.HamidrezaAmz:BreadcrumbsView:0.2.9"
implementation "commons-io:commons-io:20030203.000550"
implementation 'org.apache.commons:commons-lang3:3.11'
@@ -102,10 +104,12 @@ dependencies {
implementation "ch.acra:acra-mail:$acra"
implementation "ch.acra:acra-limiter:$acra"
implementation "ch.acra:acra-notification:$acra"
- implementation "androidx.room:room-runtime:2.2.5"
- annotationProcessor "androidx.room:room-compiler:2.2.5"
+ implementation 'androidx.room:room-runtime:2.2.6'
+ annotationProcessor 'androidx.room:room-compiler:2.2.6'
implementation "androidx.work:work-runtime:$work_version"
- implementation "com.eightbitlab:blurview:1.6.3"
+ implementation "com.eightbitlab:blurview:1.6.4"
implementation "io.mikael:urlbuilder:2.0.9"
+ implementation "org.codeberg.gitnex-garage:emoji-java:v5.1.2"
+ coreLibraryDesugaring "com.android.tools:desugar_jdk_libs:1.1.1"
}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ddfa3c9f..80e1c62d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -6,6 +6,7 @@
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/app_logo-playstore.png b/app/src/main/app_logo-playstore.png
index f78fac3d..b5690e64 100644
Binary files a/app/src/main/app_logo-playstore.png and b/app/src/main/app_logo-playstore.png differ
diff --git a/app/src/main/java/org/mian/gitnex/actions/AssigneesActions.java b/app/src/main/java/org/mian/gitnex/actions/AssigneesActions.java
index c013e970..a2fd5895 100644
--- a/app/src/main/java/org/mian/gitnex/actions/AssigneesActions.java
+++ b/app/src/main/java/org/mian/gitnex/actions/AssigneesActions.java
@@ -24,12 +24,11 @@ import retrofit2.Callback;
public class AssigneesActions {
- public static void getCurrentIssueAssignees(Context ctx, String instanceUrl, String loginUid, String instanceToken, String repoOwner, String repoName, int issueIndex, List currentAssignees) {
+ public static void getCurrentIssueAssignees(Context ctx, String repoOwner, String repoName, int issueIndex, List currentAssignees) {
Call callSingleIssueLabels = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .getIssueByIndex(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex);
+ .getApiInterface(ctx)
+ .getIssueByIndex(Authorization.get(ctx), repoOwner, repoName, issueIndex);
callSingleIssueLabels.enqueue(new Callback() {
@@ -63,14 +62,13 @@ public class AssigneesActions {
});
}
- public static void getRepositoryAssignees(Context ctx, String instanceUrl, String instanceToken, String repoOwner, String repoName, List assigneesList, Dialog dialogAssignees, AssigneesListAdapter assigneesAdapter, CustomAssigneesSelectionDialogBinding assigneesBinding) {
+ public static void getRepositoryAssignees(Context ctx, String repoOwner, String repoName, List assigneesList, Dialog dialogAssignees, AssigneesListAdapter assigneesAdapter, CustomAssigneesSelectionDialogBinding assigneesBinding) {
- TinyDB tinyDB = new TinyDB(ctx);
+ TinyDB tinyDB = TinyDB.getInstance(ctx);
Call> call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .getCollaborators(instanceToken, repoOwner, repoName);
+ .getApiInterface(ctx)
+ .getCollaborators(Authorization.get(ctx), repoOwner, repoName);
call.enqueue(new Callback>() {
@@ -89,8 +87,6 @@ public class AssigneesActions {
if(assigneesList_.size() > 0) {
- dialogAssignees.show();
-
assigneesList.add(new Collaborators(tinyDB.getString("userFullname"), tinyDB.getString("loginUid"), tinyDB.getString("userAvatar")));
assigneesList.addAll(assigneesList_);
}
diff --git a/app/src/main/java/org/mian/gitnex/actions/CollaboratorActions.java b/app/src/main/java/org/mian/gitnex/actions/CollaboratorActions.java
index 03bb66fa..bd0d988a 100644
--- a/app/src/main/java/org/mian/gitnex/actions/CollaboratorActions.java
+++ b/app/src/main/java/org/mian/gitnex/actions/CollaboratorActions.java
@@ -25,21 +25,16 @@ public class CollaboratorActions {
public static void deleteCollaborator(final Context context, final String searchKeyword, String userName) {
- final TinyDB tinyDb = new TinyDB(context);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ final TinyDB tinyDb = TinyDB.getInstance(context);
+
String repoFullName = tinyDb.getString("repoFullName");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
final String repoName = parts[1];
- Call call;
-
- call = RetrofitClient
- .getInstance(instanceUrl, context)
- .getApiInterface()
- .deleteCollaborator(Authorization.returnAuthentication(context, loginUid, instanceToken), repoOwner, repoName, userName);
+ Call call = RetrofitClient
+ .getApiInterface(context)
+ .deleteCollaborator(Authorization.get(context), repoOwner, repoName, userName);
call.enqueue(new Callback() {
@@ -54,7 +49,7 @@ public class CollaboratorActions {
//Log.i("addCollaboratorSearch", addCollaboratorSearch.getText().toString());
//tinyDb.putBoolean("updateDataSet", true);
//AddCollaboratorToRepositoryActivity usersSearchData = new AddCollaboratorToRepositoryActivity();
- //usersSearchData.loadUserSearchList(instanceUrl, instanceToken, searchKeyword, context);
+ //usersSearchData.loadUserSearchList(instanceToken, searchKeyword, context);
}
}
@@ -94,22 +89,18 @@ public class CollaboratorActions {
public static void addCollaborator(final Context context, String permission, String userName) {
- final TinyDB tinyDb = new TinyDB(context);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ final TinyDB tinyDb = TinyDB.getInstance(context);
+
String repoFullName = tinyDb.getString("repoFullName");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
final String repoName = parts[1];
Permission permissionString = new Permission(permission);
- Call call;
- call = RetrofitClient
- .getInstance(instanceUrl, context)
- .getApiInterface()
- .addCollaborator(Authorization.returnAuthentication(context, loginUid, instanceToken), repoOwner, repoName, userName, permissionString);
+ Call call = RetrofitClient
+ .getApiInterface(context)
+ .addCollaborator(Authorization.get(context), repoOwner, repoName, userName, permissionString);
call.enqueue(new Callback() {
@@ -122,7 +113,7 @@ public class CollaboratorActions {
Toasty.success(context, context.getString(R.string.addCollaboratorToastText));
((AddCollaboratorToRepositoryActivity)context).finish();
//AddCollaboratorToRepositoryActivity usersSearchData = new AddCollaboratorToRepositoryActivity();
- //usersSearchData.loadUserSearchList(instanceUrl, instanceToken, searchKeyword, context);
+ //usersSearchData.loadUserSearchList(instanceToken, searchKeyword, context);
}
}
@@ -164,11 +155,7 @@ public class CollaboratorActions {
public static ActionResult> getCollaborators(Context context) {
ActionResult> actionResult = new ActionResult<>();
- TinyDB tinyDb = new TinyDB(context);
-
- String instanceUrl = tinyDb.getString("instanceUrl");
- String loginUid = tinyDb.getString("loginUid");
- String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ TinyDB tinyDb = TinyDB.getInstance(context);
String repoFullName = tinyDb.getString("repoFullName");
String[] parts = repoFullName.split("/");
@@ -176,9 +163,8 @@ public class CollaboratorActions {
String repoName = parts[1];
Call> call = RetrofitClient
- .getInstance(instanceUrl, context)
- .getApiInterface()
- .getCollaborators(Authorization.returnAuthentication(context, loginUid, instanceToken), repoOwner, repoName);
+ .getApiInterface(context)
+ .getCollaborators(Authorization.get(context), repoOwner, repoName);
call.enqueue(new Callback>() {
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 57b68b11..79244e18 100644
--- a/app/src/main/java/org/mian/gitnex/actions/IssueActions.java
+++ b/app/src/main/java/org/mian/gitnex/actions/IssueActions.java
@@ -5,7 +5,6 @@ import androidx.annotation.NonNull;
import com.google.gson.JsonElement;
import org.mian.gitnex.R;
import org.mian.gitnex.clients.RetrofitClient;
-import org.mian.gitnex.database.api.DraftsApi;
import org.mian.gitnex.helpers.AlertDialogs;
import org.mian.gitnex.helpers.Authorization;
import org.mian.gitnex.helpers.TinyDB;
@@ -15,6 +14,7 @@ import org.mian.gitnex.models.Issues;
import org.mian.gitnex.models.UpdateIssueState;
import retrofit2.Call;
import retrofit2.Callback;
+import retrofit2.Response;
/**
* Author M M Arif
@@ -22,85 +22,72 @@ import retrofit2.Callback;
public class IssueActions {
- public static void editIssueComment(final Context ctx, final int commentId, final String commentBody, long draftIdOnCreate) {
+ public static ActionResult> edit(Context context, String comment, int commentId) {
+
+ ActionResult> actionResult = new ActionResult<>();
+
+ TinyDB tinyDb = TinyDB.getInstance(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");
String repoFullName = tinyDb.getString("repoFullName");
String[] parts = repoFullName.split("/");
- final String repoOwner = parts[0];
- final String repoName = parts[1];
- IssueComments commentBodyJson = new IssueComments(commentBody);
- Call call;
+ String repoOwner = parts[0];
+ String repoName = parts[1];
- call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().patchIssueComment(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, commentId, commentBodyJson);
+ Call call = RetrofitClient
+ .getApiInterface(context)
+ .patchIssueComment(Authorization.get(context), repoOwner, repoName, commentId, new IssueComments(comment));
call.enqueue(new Callback() {
@Override
public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) {
- if(response.isSuccessful()) {
- if(response.code() == 200) {
+ switch(response.code()) {
- tinyDb.putBoolean("commentEdited", true);
- Toasty.info(ctx, ctx.getString(R.string.editCommentUpdatedText));
+ case 200:
+ actionResult.finish(ActionResult.Status.SUCCESS);
+ break;
- DraftsApi draftsApi = new DraftsApi(ctx);
- draftsApi.deleteSingleDraft((int) draftIdOnCreate);
+ case 401:
+ actionResult.finish(ActionResult.Status.FAILED, response);
+ 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));
+ break;
- }
- }
- 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));
+ default:
+ actionResult.finish(ActionResult.Status.FAILED, response);
+ break;
}
- else if(response.code() == 403) {
-
- Toasty.error(ctx, ctx.getString(R.string.authorizeError));
-
- }
- else if(response.code() == 404) {
-
- Toasty.warning(ctx, ctx.getString(R.string.apiNotFound));
-
- }
- else {
-
- Toasty.error(ctx, ctx.getString(R.string.genericError));
-
- }
-
}
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
- Toasty.error(ctx, ctx.getResources().getString(R.string.genericServerResponseError));
+ actionResult.finish(ActionResult.Status.FAILED);
}
});
+ return actionResult;
+
}
public static void closeReopenIssue(final Context ctx, final int issueIndex, final String issueState) {
- 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");
+ final TinyDB tinyDb = TinyDB.getInstance(ctx);
+
String repoFullName = tinyDb.getString("repoFullName");
String[] parts = repoFullName.split("/");
+
final String repoOwner = parts[0];
final String repoName = parts[1];
UpdateIssueState issueStatJson = new UpdateIssueState(issueState);
Call call;
- call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().closeReopenIssue(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex, issueStatJson);
+ call = RetrofitClient
+ .getApiInterface(ctx)
+ .closeReopenIssue(Authorization.get(ctx), repoOwner, repoName, issueIndex, issueStatJson);
call.enqueue(new Callback() {
@@ -162,20 +149,23 @@ public class IssueActions {
public static void subscribe(final Context ctx) {
- final TinyDB tinyDB = new TinyDB(ctx);
+ final TinyDB tinyDB = TinyDB.getInstance(ctx);
- final String instanceUrl = tinyDB.getString("instanceUrl");
String[] repoFullName = tinyDB.getString("repoFullName").split("/");
+
if(repoFullName.length != 2) {
return;
}
+
final String userLogin = tinyDB.getString("userLogin");
final String token = "token " + tinyDB.getString(tinyDB.getString("loginUid") + "-token");
final int issueNr = Integer.parseInt(tinyDB.getString("issueNumber"));
Call call;
- call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().addIssueSubscriber(token, repoFullName[0], repoFullName[1], issueNr, userLogin);
+ call = RetrofitClient
+ .getApiInterface(ctx)
+ .addIssueSubscriber(token, repoFullName[0], repoFullName[1], issueNr, userLogin);
call.enqueue(new Callback() {
@@ -222,9 +212,8 @@ public class IssueActions {
public static void unsubscribe(final Context ctx) {
- final TinyDB tinyDB = new TinyDB(ctx);
+ final TinyDB tinyDB = TinyDB.getInstance(ctx);
- final String instanceUrl = tinyDB.getString("instanceUrl");
String[] repoFullName = tinyDB.getString("repoFullName").split("/");
if(repoFullName.length != 2) {
return;
@@ -235,7 +224,7 @@ public class IssueActions {
Call call;
- call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().delIssueSubscriber(token, repoFullName[0], repoFullName[1], issueNr, userLogin);
+ call = RetrofitClient.getApiInterface(ctx).delIssueSubscriber(token, repoFullName[0], repoFullName[1], issueNr, userLogin);
call.enqueue(new Callback() {
@@ -282,11 +271,8 @@ public class IssueActions {
public static ActionResult reply(Context context, String comment, int issueIndex) {
ActionResult actionResult = new ActionResult<>();
- TinyDB tinyDb = new TinyDB(context);
- String instanceUrl = tinyDb.getString("instanceUrl");
- String loginUid = tinyDb.getString("loginUid");
- String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ TinyDB tinyDb = TinyDB.getInstance(context);
String repoFullName = tinyDb.getString("repoFullName");
String[] parts = repoFullName.split("/");
@@ -296,9 +282,8 @@ public class IssueActions {
Issues issueComment = new Issues(comment);
Call call = RetrofitClient
- .getInstance(instanceUrl, context)
- .getApiInterface()
- .replyCommentToIssue(Authorization.returnAuthentication(context, loginUid, instanceToken), repoOwner, repoName, issueIndex, issueComment);
+ .getApiInterface(context)
+ .replyCommentToIssue(Authorization.get(context), repoOwner, repoName, issueIndex, issueComment);
call.enqueue(new Callback() {
diff --git a/app/src/main/java/org/mian/gitnex/actions/LabelsActions.java b/app/src/main/java/org/mian/gitnex/actions/LabelsActions.java
index e6338617..72c48521 100644
--- a/app/src/main/java/org/mian/gitnex/actions/LabelsActions.java
+++ b/app/src/main/java/org/mian/gitnex/actions/LabelsActions.java
@@ -22,12 +22,11 @@ import retrofit2.Callback;
public class LabelsActions {
- public static void getCurrentIssueLabels(Context ctx, String instanceUrl, String loginUid, String instanceToken, String repoOwner, String repoName, int issueIndex, List currentLabelsIds) {
+ public static void getCurrentIssueLabels(Context ctx, String repoOwner, String repoName, int issueIndex, List currentLabelsIds) {
Call> callSingleIssueLabels = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .getIssueLabels(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex);
+ .getApiInterface(ctx)
+ .getIssueLabels(Authorization.get(ctx), repoOwner, repoName, issueIndex);
callSingleIssueLabels.enqueue(new Callback>() {
@@ -60,12 +59,11 @@ public class LabelsActions {
});
}
- public static void getRepositoryLabels(Context ctx, String instanceUrl, String instanceToken, String repoOwner, String repoName, List labelsList, Dialog dialogLabels, LabelsListAdapter labelsAdapter, CustomLabelsSelectionDialogBinding labelsBinding) {
+ public static void getRepositoryLabels(Context ctx, String repoOwner, String repoName, List labelsList, Dialog dialogLabels, LabelsListAdapter labelsAdapter, CustomLabelsSelectionDialogBinding labelsBinding) {
Call> call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .getlabels(instanceToken, repoOwner, repoName);
+ .getApiInterface(ctx)
+ .getLabels(Authorization.get(ctx), repoOwner, repoName);
call.enqueue(new Callback>() {
@@ -73,28 +71,45 @@ public class LabelsActions {
public void onResponse(@NonNull Call> call, @NonNull retrofit2.Response> response) {
labelsList.clear();
- List labelsList_ = response.body();
-
- labelsBinding.progressBar.setVisibility(View.GONE);
- labelsBinding.dialogFrame.setVisibility(View.VISIBLE);
if (response.code() == 200) {
- assert labelsList_ != null;
+ if(response.body() != null) {
- if(labelsList_.size() > 0) {
-
- dialogLabels.show();
-
- labelsList.addAll(labelsList_);
- }
- else {
-
- dialogLabels.dismiss();
- Toasty.warning(ctx, ctx.getResources().getString(R.string.noLabelsFound));
+ labelsList.addAll(response.body());
}
- labelsBinding.labelsRecyclerView.setAdapter(labelsAdapter);
+ // Load organization labels
+ Call> callOrgLabels = RetrofitClient
+ .getApiInterface(ctx)
+ .getOrganizationLabels(Authorization.get(ctx), repoOwner);
+
+ callOrgLabels.enqueue(new Callback>() {
+
+ @Override
+ public void onResponse(@NonNull Call> call, @NonNull retrofit2.Response> responseOrg) {
+
+ labelsBinding.progressBar.setVisibility(View.GONE);
+ labelsBinding.dialogFrame.setVisibility(View.VISIBLE);
+
+ if(responseOrg.body() != null) {
+
+ labelsList.addAll(responseOrg.body());
+ }
+
+ if(labelsList.isEmpty()) {
+
+ dialogLabels.dismiss();
+ Toasty.warning(ctx, ctx.getResources().getString(R.string.noLabelsFound));
+
+ }
+
+ labelsBinding.labelsRecyclerView.setAdapter(labelsAdapter);
+ }
+
+ @Override public void onFailure(@NonNull Call> call, @NonNull Throwable t) {}
+
+ });
}
else {
diff --git a/app/src/main/java/org/mian/gitnex/actions/MilestoneActions.java b/app/src/main/java/org/mian/gitnex/actions/MilestoneActions.java
index bf3d8358..fbe21173 100644
--- a/app/src/main/java/org/mian/gitnex/actions/MilestoneActions.java
+++ b/app/src/main/java/org/mian/gitnex/actions/MilestoneActions.java
@@ -23,9 +23,8 @@ public class MilestoneActions {
public static void closeMilestone(final Context ctx, int milestoneId_) {
- final TinyDB tinyDB = new TinyDB(ctx);
+ final TinyDB tinyDB = TinyDB.getInstance(ctx);
- final String instanceUrl = tinyDB.getString("instanceUrl");
String repoFullName = tinyDB.getString("repoFullName");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
@@ -37,8 +36,7 @@ public class MilestoneActions {
Call call;
call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
+ .getApiInterface(ctx)
.closeReopenMilestone(token, repoOwner, repoName, milestoneId_, milestoneStateJson);
call.enqueue(new Callback() {
@@ -81,9 +79,8 @@ public class MilestoneActions {
public static void openMilestone(final Context ctx, int milestoneId_) {
- final TinyDB tinyDB = new TinyDB(ctx);
+ final TinyDB tinyDB = TinyDB.getInstance(ctx);
- final String instanceUrl = tinyDB.getString("instanceUrl");
String repoFullName = tinyDB.getString("repoFullName");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
@@ -95,8 +92,7 @@ public class MilestoneActions {
Call call;
call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
+ .getApiInterface(ctx)
.closeReopenMilestone(token, repoOwner, repoName, milestoneId_, milestoneStateJson);
call.enqueue(new Callback() {
diff --git a/app/src/main/java/org/mian/gitnex/actions/NotificationsActions.java b/app/src/main/java/org/mian/gitnex/actions/NotificationsActions.java
index 35239248..0ea9da90 100644
--- a/app/src/main/java/org/mian/gitnex/actions/NotificationsActions.java
+++ b/app/src/main/java/org/mian/gitnex/actions/NotificationsActions.java
@@ -20,24 +20,22 @@ public class NotificationsActions {
private TinyDB tinyDB;
private Context context;
- private String instanceUrl;
private String instanceToken;
public NotificationsActions(Context context) {
this.context = context;
- this.tinyDB = new TinyDB(context);
+ this.tinyDB = TinyDB.getInstance(context);
String loginUid = tinyDB.getString("loginUid");
- instanceUrl = tinyDB.getString("instanceUrl");
instanceToken = "token " + tinyDB.getString(loginUid + "-token");
}
public void setNotificationStatus(NotificationThread notificationThread, NotificationStatus notificationStatus) throws IOException {
- Call call = RetrofitClient.getInstance(instanceUrl, context).getApiInterface()
+ Call call = RetrofitClient.getApiInterface(context)
.markNotificationThreadAsRead(instanceToken, notificationThread.getId(), notificationStatus.name());
if(!call.execute().isSuccessful()) {
@@ -48,7 +46,7 @@ public class NotificationsActions {
public boolean setAllNotificationsRead(Date date) throws IOException {
- Call call = RetrofitClient.getInstance(instanceUrl, context).getApiInterface()
+ Call call = RetrofitClient.getApiInterface(context)
.markNotificationThreadsAsRead(instanceToken, AppUtil.getTimestampFromDate(context, date), true,
new String[]{"unread", "pinned"}, "read");
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 da7e80f7..f4e0d9fb 100644
--- a/app/src/main/java/org/mian/gitnex/actions/RepositoryActions.java
+++ b/app/src/main/java/org/mian/gitnex/actions/RepositoryActions.java
@@ -21,10 +21,8 @@ public class RepositoryActions {
public static void starRepository(final Context context) {
- final TinyDB tinyDb = new TinyDB(context);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ final TinyDB tinyDb = TinyDB.getInstance(context);
+
String repoFullName = tinyDb.getString("repoFullName");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
@@ -33,9 +31,8 @@ public class RepositoryActions {
Call call;
call = RetrofitClient
- .getInstance(instanceUrl, context)
- .getApiInterface()
- .starRepository(Authorization.returnAuthentication(context, loginUid, instanceToken), repoOwner, repoName);
+ .getApiInterface(context)
+ .starRepository(Authorization.get(context), repoOwner, repoName);
call.enqueue(new Callback() {
@@ -86,10 +83,8 @@ public class RepositoryActions {
public static void unStarRepository(final Context context) {
- final TinyDB tinyDb = new TinyDB(context);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ final TinyDB tinyDb = TinyDB.getInstance(context);
+
String repoFullName = tinyDb.getString("repoFullName");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
@@ -98,9 +93,8 @@ public class RepositoryActions {
Call call;
call = RetrofitClient
- .getInstance(instanceUrl, context)
- .getApiInterface()
- .unStarRepository(Authorization.returnAuthentication(context, loginUid, instanceToken), repoOwner, repoName);
+ .getApiInterface(context)
+ .unStarRepository(Authorization.get(context), repoOwner, repoName);
call.enqueue(new Callback() {
@@ -151,10 +145,8 @@ public class RepositoryActions {
public static void watchRepository(final Context context) {
- final TinyDB tinyDb = new TinyDB(context);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ final TinyDB tinyDb = TinyDB.getInstance(context);
+
String repoFullName = tinyDb.getString("repoFullName");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
@@ -163,9 +155,8 @@ public class RepositoryActions {
Call call;
call = RetrofitClient
- .getInstance(instanceUrl, context)
- .getApiInterface()
- .watchRepository(Authorization.returnAuthentication(context, loginUid, instanceToken), repoOwner, repoName);
+ .getApiInterface(context)
+ .watchRepository(Authorization.get(context), repoOwner, repoName);
call.enqueue(new Callback() {
@@ -216,10 +207,8 @@ public class RepositoryActions {
public static void unWatchRepository(final Context context) {
- final TinyDB tinyDb = new TinyDB(context);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ final TinyDB tinyDb = TinyDB.getInstance(context);
+
String repoFullName = tinyDb.getString("repoFullName");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
@@ -228,9 +217,8 @@ public class RepositoryActions {
Call call;
call = RetrofitClient
- .getInstance(instanceUrl, context)
- .getApiInterface()
- .unWatchRepository(Authorization.returnAuthentication(context, loginUid, instanceToken), repoOwner, repoName);
+ .getApiInterface(context)
+ .unWatchRepository(Authorization.get(context), repoOwner, repoName);
call.enqueue(new Callback() {
diff --git a/app/src/main/java/org/mian/gitnex/actions/TeamActions.java b/app/src/main/java/org/mian/gitnex/actions/TeamActions.java
index 28a854cc..e97a0b9e 100644
--- a/app/src/main/java/org/mian/gitnex/actions/TeamActions.java
+++ b/app/src/main/java/org/mian/gitnex/actions/TeamActions.java
@@ -21,17 +21,13 @@ public class TeamActions {
public static void removeTeamMember(final Context context, String userName, int teamId) {
- final TinyDB tinyDb = new TinyDB(context);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ final TinyDB tinyDb = TinyDB.getInstance(context);
Call call;
call = RetrofitClient
- .getInstance(instanceUrl, context)
- .getApiInterface()
- .removeTeamMember(Authorization.returnAuthentication(context, loginUid, instanceToken), teamId, userName);
+ .getApiInterface(context)
+ .removeTeamMember(Authorization.get(context), teamId, userName);
call.enqueue(new Callback() {
@@ -87,17 +83,11 @@ public class TeamActions {
public static void addTeamMember(final Context context, String userName, int teamId) {
- final TinyDB tinyDb = new TinyDB(context);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ final TinyDB tinyDb = TinyDB.getInstance(context);
- Call call;
-
- call = RetrofitClient
- .getInstance(instanceUrl, context)
- .getApiInterface()
- .addTeamMember(Authorization.returnAuthentication(context, loginUid, instanceToken), teamId, userName);
+ Call call = RetrofitClient
+ .getApiInterface(context)
+ .addTeamMember(Authorization.get(context), teamId, userName);
call.enqueue(new Callback() {
diff --git a/app/src/main/java/org/mian/gitnex/activities/AddCollaboratorToRepositoryActivity.java b/app/src/main/java/org/mian/gitnex/activities/AddCollaboratorToRepositoryActivity.java
index f438f4db..80e17d01 100644
--- a/app/src/main/java/org/mian/gitnex/activities/AddCollaboratorToRepositoryActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/AddCollaboratorToRepositoryActivity.java
@@ -17,7 +17,6 @@ import org.mian.gitnex.R;
import org.mian.gitnex.adapters.UserSearchAdapter;
import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.helpers.Authorization;
-import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.models.UserInfo;
import org.mian.gitnex.models.UserSearch;
import java.util.List;
@@ -32,8 +31,6 @@ import retrofit2.Response;
public class AddCollaboratorToRepositoryActivity extends BaseActivity {
private View.OnClickListener onClickListener;
- final Context ctx = this;
- private Context appCtx;
private TextView addCollaboratorSearch;
private TextView noData;
private ProgressBar mProgressBar;
@@ -49,21 +46,13 @@ public class AddCollaboratorToRepositoryActivity extends BaseActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- TinyDB tinyDb = new TinyDB(appCtx);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- String repoFullName = tinyDb.getString("repoFullName");
- String[] parts = repoFullName.split("/");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
-
ImageView closeActivity = findViewById(R.id.close);
addCollaboratorSearch = findViewById(R.id.addCollaboratorSearch);
mRecyclerView = findViewById(R.id.recyclerViewUserSearch);
- mProgressBar = findViewById(R.id.progress_bar);
+ mProgressBar = findViewById(R.id.progressBar);
noData = findViewById(R.id.noData);
addCollaboratorSearch.requestFocus();
@@ -76,8 +65,11 @@ public class AddCollaboratorToRepositoryActivity extends BaseActivity {
addCollaboratorSearch.setOnEditorActionListener((v, actionId, event) -> {
if (actionId == EditorInfo.IME_ACTION_SEND) {
+
if(!addCollaboratorSearch.getText().toString().equals("")) {
- loadUserSearchList(instanceUrl, instanceToken, addCollaboratorSearch.getText().toString(), loginUid);
+
+ mProgressBar.setVisibility(View.VISIBLE);
+ loadUserSearchList(addCollaboratorSearch.getText().toString());
}
}
@@ -87,22 +79,26 @@ public class AddCollaboratorToRepositoryActivity extends BaseActivity {
}
- public void loadUserSearchList(String instanceUrl, String token, String searchKeyword, String loginUid) {
+ public void loadUserSearchList(String searchKeyword) {
Call call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .getUserBySearch(Authorization.returnAuthentication(ctx, loginUid, token), searchKeyword, 10);
+ .getApiInterface(appCtx)
+ .getUserBySearch(Authorization.get(ctx), searchKeyword, 10);
call.enqueue(new Callback() {
@Override
public void onResponse(@NonNull Call call, @NonNull Response response) {
- if (response.isSuccessful()) {
+ mProgressBar.setVisibility(View.GONE);
+
+ if (response.code() == 200) {
+
assert response.body() != null;
getUsersList(response.body().getData(), ctx);
- } else {
+ }
+ else {
+
Log.i("onResponse", String.valueOf(response.code()));
}
@@ -129,15 +125,16 @@ public class AddCollaboratorToRepositoryActivity extends BaseActivity {
mProgressBar.setVisibility(View.VISIBLE);
if(adapter.getItemCount() > 0) {
+
mRecyclerView.setAdapter(adapter);
noData.setVisibility(View.GONE);
- mProgressBar.setVisibility(View.GONE);
}
else {
+
noData.setVisibility(View.VISIBLE);
- mProgressBar.setVisibility(View.GONE);
}
+ mProgressBar.setVisibility(View.GONE);
}
private void initCloseListener() {
diff --git a/app/src/main/java/org/mian/gitnex/activities/AddNewAccountActivity.java b/app/src/main/java/org/mian/gitnex/activities/AddNewAccountActivity.java
index cc89cb43..d0b76ccb 100644
--- a/app/src/main/java/org/mian/gitnex/activities/AddNewAccountActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/AddNewAccountActivity.java
@@ -1,6 +1,5 @@
package org.mian.gitnex.activities;
-import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
@@ -15,7 +14,6 @@ import org.mian.gitnex.database.api.UserAccountsApi;
import org.mian.gitnex.databinding.ActivityAddNewAccountBinding;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.PathsHelper;
-import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.helpers.UrlHelper;
import org.mian.gitnex.helpers.Version;
@@ -32,10 +30,6 @@ import retrofit2.Callback;
public class AddNewAccountActivity extends BaseActivity {
- final Context ctx = this;
- private Context appCtx;
- private TinyDB tinyDB;
-
private View.OnClickListener onClickListener;
private ActivityAddNewAccountBinding viewBinding;
@@ -52,8 +46,6 @@ public class AddNewAccountActivity extends BaseActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
- tinyDB = new TinyDB(appCtx);
viewBinding = ActivityAddNewAccountBinding.inflate(getLayoutInflater());
View view = viewBinding.getRoot();
@@ -76,7 +68,6 @@ public class AddNewAccountActivity extends BaseActivity {
if(!connToInternet) {
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
-
}
else {
@@ -132,7 +123,7 @@ public class AddNewAccountActivity extends BaseActivity {
Call callVersion;
- callVersion = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getGiteaVersionWithToken("token " + loginToken);
+ callVersion = RetrofitClient.getApiInterface(ctx).getGiteaVersionWithToken("token " + loginToken);
callVersion.enqueue(new Callback() {
@@ -144,7 +135,9 @@ public class AddNewAccountActivity extends BaseActivity {
GiteaVersion version = responseVersion.body();
assert version != null;
+
if(!Version.valid(version.getVersion())) {
+
Toasty.error(ctx, getResources().getString(R.string.versionUnknown));
return;
}
@@ -170,7 +163,6 @@ public class AddNewAccountActivity extends BaseActivity {
});
alertDialogBuilder.create().show();
-
}
else if(giteaVersion.lessOrEqual(getString(R.string.versionHigh))) {
@@ -180,7 +172,6 @@ public class AddNewAccountActivity extends BaseActivity {
Toasty.warning(ctx, getResources().getString(R.string.versionUnsupportedNew));
login(instanceUrl, loginToken);
-
}
}
@@ -193,7 +184,6 @@ public class AddNewAccountActivity extends BaseActivity {
private void login(String instanceUrl, String loginToken) {
setupNewAccountWithToken(instanceUrl, loginToken);
-
}
@Override
@@ -207,7 +197,7 @@ public class AddNewAccountActivity extends BaseActivity {
private void setupNewAccountWithToken(String instanceUrl, final String loginToken) {
- Call call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getUserInfo("token " + loginToken);
+ Call call = RetrofitClient.getApiInterface(ctx, instanceUrl).getUserInfo("token " + loginToken);
call.enqueue(new Callback() {
diff --git a/app/src/main/java/org/mian/gitnex/activities/AddNewTeamMemberActivity.java b/app/src/main/java/org/mian/gitnex/activities/AddNewTeamMemberActivity.java
index 2085cf13..11b65d02 100644
--- a/app/src/main/java/org/mian/gitnex/activities/AddNewTeamMemberActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/AddNewTeamMemberActivity.java
@@ -18,7 +18,6 @@ import org.mian.gitnex.R;
import org.mian.gitnex.adapters.UserSearchForTeamMemberAdapter;
import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.helpers.Authorization;
-import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.models.UserInfo;
import org.mian.gitnex.models.UserSearch;
import java.util.ArrayList;
@@ -35,8 +34,6 @@ import retrofit2.Response;
public class AddNewTeamMemberActivity extends BaseActivity {
private View.OnClickListener onClickListener;
- final Context ctx = this;
- private Context appCtx;
private TextView addNewTeamMember;
private TextView noData;
private ProgressBar mProgressBar;
@@ -56,17 +53,9 @@ public class AddNewTeamMemberActivity extends BaseActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- TinyDB tinyDb = new TinyDB(appCtx);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- String repoFullName = tinyDb.getString("repoFullName");
- String[] parts = repoFullName.split("/");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
-
ImageView closeActivity = findViewById(R.id.close);
addNewTeamMember = findViewById(R.id.addNewTeamMember);
mRecyclerView = findViewById(R.id.recyclerViewUserSearch);
@@ -81,9 +70,11 @@ public class AddNewTeamMemberActivity extends BaseActivity {
closeActivity.setOnClickListener(onClickListener);
if(getIntent().getStringExtra("teamId") != null && !Objects.requireNonNull(getIntent().getStringExtra("teamId")).equals("")) {
+
teamId = getIntent().getStringExtra("teamId");
}
else {
+
teamId = "0";
}
@@ -103,10 +94,8 @@ public class AddNewTeamMemberActivity extends BaseActivity {
if(!addNewTeamMember.getText().toString().equals("") && addNewTeamMember.getText().toString().length() > 1) {
adapter = new UserSearchForTeamMemberAdapter(dataList, ctx, Integer.parseInt(teamId));
- loadUserSearchList(instanceUrl, instanceToken, addNewTeamMember.getText().toString(), loginUid, teamId);
-
+ loadUserSearchList(addNewTeamMember.getText().toString(), teamId);
}
-
}
@Override
@@ -121,9 +110,9 @@ public class AddNewTeamMemberActivity extends BaseActivity {
}
- public void loadUserSearchList(String instanceUrl, String token, String searchKeyword, String loginUid, String teamId) {
+ public void loadUserSearchList(String searchKeyword, String teamId) {
- Call call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getUserBySearch(Authorization.returnAuthentication(ctx, loginUid, token), searchKeyword, 10);
+ Call call = RetrofitClient.getApiInterface(ctx).getUserBySearch(Authorization.get(ctx), searchKeyword, 10);
mProgressBar.setVisibility(View.VISIBLE);
@@ -141,16 +130,13 @@ public class AddNewTeamMemberActivity extends BaseActivity {
dataList.addAll(response.body().getData());
mRecyclerView.setAdapter(adapter);
noData.setVisibility(View.GONE);
- mProgressBar.setVisibility(View.GONE);
-
}
else {
noData.setVisibility(View.VISIBLE);
- mProgressBar.setVisibility(View.GONE);
-
}
+ mProgressBar.setVisibility(View.GONE);
}
}
diff --git a/app/src/main/java/org/mian/gitnex/activities/AdminGetUsersActivity.java b/app/src/main/java/org/mian/gitnex/activities/AdminGetUsersActivity.java
index c49bbab0..07addcf7 100644
--- a/app/src/main/java/org/mian/gitnex/activities/AdminGetUsersActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/AdminGetUsersActivity.java
@@ -24,7 +24,6 @@ import org.mian.gitnex.adapters.AdminGetUsersAdapter;
import org.mian.gitnex.fragments.BottomSheetAdminUsersFragment;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.Authorization;
-import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.viewmodels.AdminGetUsersViewModel;
/**
@@ -34,8 +33,6 @@ import org.mian.gitnex.viewmodels.AdminGetUsersViewModel;
public class AdminGetUsersActivity extends BaseActivity implements BottomSheetAdminUsersFragment.BottomSheetListener {
private View.OnClickListener onClickListener;
- final Context ctx = this;
- private Context appCtx;
private AdminGetUsersAdapter adapter;
private RecyclerView mRecyclerView;
private TextView noDataUsers;
@@ -50,12 +47,6 @@ public class AdminGetUsersActivity extends BaseActivity implements BottomSheetAd
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
-
- TinyDB tinyDb = new TinyDB(appCtx);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
ImageView closeActivity = findViewById(R.id.close);
noDataUsers = findViewById(R.id.noDataUsers);
@@ -79,30 +70,30 @@ public class AdminGetUsersActivity extends BaseActivity implements BottomSheetAd
swipeRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> {
swipeRefresh.setRefreshing(false);
- AdminGetUsersViewModel.loadUsersList(ctx, instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken));
+ AdminGetUsersViewModel.loadUsersList(ctx, Authorization.get(ctx));
}, 500));
- fetchDataAsync(ctx, instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken));
+ fetchDataAsync(ctx, Authorization.get(ctx));
}
- private void fetchDataAsync(Context ctx, String instanceUrl, String instanceToken) {
+ private void fetchDataAsync(Context ctx, String instanceToken) {
AdminGetUsersViewModel usersModel = new ViewModelProvider(this).get(AdminGetUsersViewModel.class);
- usersModel.getUsersList(ctx, instanceUrl, instanceToken).observe(this, usersListMain -> {
+ usersModel.getUsersList(ctx, instanceToken).observe(this, usersListMain -> {
adapter = new AdminGetUsersAdapter(ctx, usersListMain);
if(adapter.getItemCount() > 0) {
+
mRecyclerView.setVisibility(View.VISIBLE);
mRecyclerView.setAdapter(adapter);
noDataUsers.setVisibility(View.GONE);
searchFilter = true;
}
else {
- //adapter.notifyDataSetChanged();
- //mRecyclerView.setAdapter(adapter);
+
mRecyclerView.setVisibility(View.GONE);
noDataUsers.setVisibility(View.VISIBLE);
}
@@ -140,6 +131,7 @@ public class AdminGetUsersActivity extends BaseActivity implements BottomSheetAd
@Override
public boolean onQueryTextChange(String newText) {
+
adapter.getFilter().filter(newText);
return false;
}
@@ -157,18 +149,21 @@ public class AdminGetUsersActivity extends BaseActivity implements BottomSheetAd
int id = item.getItemId();
- switch (id) {
- case android.R.id.home:
- finish();
- return true;
- case R.id.genericMenu:
- BottomSheetAdminUsersFragment bottomSheet = new BottomSheetAdminUsersFragment();
- bottomSheet.show(getSupportFragmentManager(), "usersBottomSheet");
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
+ if(id == android.R.id.home) {
+ finish();
+ return true;
+ }
+ else if(id == R.id.genericMenu) {
+
+ BottomSheetAdminUsersFragment bottomSheet = new BottomSheetAdminUsersFragment();
+ bottomSheet.show(getSupportFragmentManager(), "usersBottomSheet");
+ return true;
+ }
+ else {
+
+ return super.onOptionsItemSelected(item);
+ }
}
@Override
diff --git a/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java b/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java
index 87007716..4fb677d0 100644
--- a/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java
@@ -1,5 +1,6 @@
package org.mian.gitnex.activities;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
@@ -14,6 +15,7 @@ import org.acra.data.StringFormat;
import org.mian.gitnex.R;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.FontsOverride;
+import org.mian.gitnex.helpers.StaticGlobalVariables;
import org.mian.gitnex.helpers.TimeHelper;
import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.notifications.NotificationsMaster;
@@ -25,6 +27,7 @@ import static org.acra.ReportField.STACK_TRACE;
* Author M M Arif
*/
+@SuppressLint("NonConstantResourceId")
@AcraNotification(resIcon = R.drawable.gitnex_transparent,
resTitle = R.string.crashTitle,
resChannelName = R.string.setCrashReports,
@@ -33,119 +36,144 @@ import static org.acra.ReportField.STACK_TRACE;
public abstract class BaseActivity extends AppCompatActivity {
- private Context appCtx;
+ protected TinyDB tinyDB;
+
+ protected Context ctx = this;
+ protected Context appCtx;
@Override
public void onCreate(Bundle savedInstanceState) {
- appCtx = getApplicationContext();
- final TinyDB tinyDb = new TinyDB(appCtx);
+ this.appCtx = getApplicationContext();
+ this.tinyDB = TinyDB.getInstance(appCtx);
- switch(tinyDb.getInt("themeId")) {
+ switch(tinyDB.getInt("themeId")) {
case 1:
+
+ tinyDB.putString("currentTheme", "light");
setTheme(R.style.AppThemeLight);
break;
-
case 2:
+
if(TimeHelper.timeBetweenHours(18, 6)) { // 6pm to 6am
+
+ tinyDB.putString("currentTheme", "dark");
setTheme(R.style.AppTheme);
}
else {
+
+ tinyDB.putString("currentTheme", "light");
setTheme(R.style.AppThemeLight);
}
break;
-
case 3:
+
+ tinyDB.putString("currentTheme", "light");
setTheme(R.style.AppThemeRetro);
break;
-
case 4:
if(TimeHelper.timeBetweenHours(18, 6)) { // 6pm to 6am
+
+ tinyDB.putString("currentTheme", "dark");
setTheme(R.style.AppTheme);
}
else {
+
+ tinyDB.putString("currentTheme", "light");
setTheme(R.style.AppThemeRetro);
}
break;
+ case 5:
- default:
- setTheme(R.style.AppTheme);
+ tinyDB.putString("currentTheme", "dark");
+ setTheme(R.style.AppThemePitchBlack);
break;
+ default:
+
+ tinyDB.putString("currentTheme", "dark");
+ setTheme(R.style.AppTheme);
}
- String appLocale = tinyDb.getString("locale");
+ String appLocale = tinyDB.getString("locale");
AppUtil.setAppLocale(getResources(), appLocale);
super.onCreate(savedInstanceState);
setContentView(getLayoutResourceId());
- switch(tinyDb.getInt("customFontId", -1)) {
+ // FIXME Performance nightmare
+ switch(tinyDB.getInt("customFontId", -1)) {
case 0:
+
FontsOverride.setDefaultFont(this, "DEFAULT", "fonts/roboto.ttf");
FontsOverride.setDefaultFont(this, "MONOSPACE", "fonts/roboto.ttf");
FontsOverride.setDefaultFont(this, "SERIF", "fonts/roboto.ttf");
FontsOverride.setDefaultFont(this, "SANS_SERIF", "fonts/roboto.ttf");
break;
-
case 2:
+
FontsOverride.setDefaultFont(this, "DEFAULT", "fonts/sourcecodeproregular.ttf");
FontsOverride.setDefaultFont(this, "MONOSPACE", "fonts/sourcecodeproregular.ttf");
FontsOverride.setDefaultFont(this, "SERIF", "fonts/sourcecodeproregular.ttf");
FontsOverride.setDefaultFont(this, "SANS_SERIF", "fonts/sourcecodeproregular.ttf");
break;
-
default:
+
FontsOverride.setDefaultFont(this, "DEFAULT", "fonts/manroperegular.ttf");
FontsOverride.setDefaultFont(this, "MONOSPACE", "fonts/manroperegular.ttf");
FontsOverride.setDefaultFont(this, "SERIF", "fonts/manroperegular.ttf");
FontsOverride.setDefaultFont(this, "SANS_SERIF", "fonts/manroperegular.ttf");
- break;
-
}
- if(tinyDb.getInt("pollingDelayMinutes") == 0) {
- tinyDb.putInt("pollingDelayMinutes", 15);
+ if(tinyDB.getInt("pollingDelayMinutes", 0) <= 0) {
+
+ tinyDB.putInt("pollingDelayMinutes", StaticGlobalVariables.defaultPollingDelay);
}
+ // FIXME Performance nightmare
NotificationsMaster.hireWorker(appCtx);
// enabling counter badges by default
- if(tinyDb.getString("enableCounterBadgesInit").isEmpty()) {
- tinyDb.putBoolean("enableCounterBadges", true);
- tinyDb.putString("enableCounterBadgesInit", "yes");
+ if(tinyDB.getString("enableCounterBadgesInit").isEmpty()) {
+
+ tinyDB.putBoolean("enableCounterBadges", true);
+ tinyDB.putString("enableCounterBadgesInit", "yes");
}
// enable crash reports by default
- if(tinyDb.getString("crashReportingEnabledInit").isEmpty()) {
- tinyDb.putBoolean("crashReportingEnabled", true);
- tinyDb.putString("crashReportingEnabledInit", "yes");
+ if(tinyDB.getString("crashReportingEnabledInit").isEmpty()) {
+
+ tinyDB.putBoolean("crashReportingEnabled", true);
+ tinyDB.putString("crashReportingEnabledInit", "yes");
}
// default cache setter
- if(tinyDb.getString("cacheSizeStr").isEmpty()) {
- tinyDb.putString("cacheSizeStr", getResources().getString(R.string.cacheSizeDataSelectionSelectedText));
+ if(tinyDB.getString("cacheSizeStr").isEmpty()) {
+
+ tinyDB.putString("cacheSizeStr", getResources().getString(R.string.cacheSizeDataSelectionSelectedText));
}
- if(tinyDb.getString("cacheSizeImagesStr").isEmpty()) {
- tinyDb.putString("cacheSizeImagesStr", getResources().getString(R.string.cacheSizeImagesSelectionSelectedText));
+ if(tinyDB.getString("cacheSizeImagesStr").isEmpty()) {
+
+ tinyDB.putString("cacheSizeImagesStr", getResources().getString(R.string.cacheSizeImagesSelectionSelectedText));
}
// enable comment drafts by default
- if(tinyDb.getString("draftsCommentsDeletionEnabledInit").isEmpty()) {
- tinyDb.putBoolean("draftsCommentsDeletionEnabled", true);
- tinyDb.putString("draftsCommentsDeletionEnabledInit", "yes");
+ if(tinyDB.getString("draftsCommentsDeletionEnabledInit").isEmpty()) {
+
+ tinyDB.putBoolean("draftsCommentsDeletionEnabled", true);
+ tinyDB.putString("draftsCommentsDeletionEnabledInit", "yes");
}
- if (tinyDb.getBoolean("crashReportingEnabled")) {
+ // FIXME Performance nightmare
+ if (tinyDB.getBoolean("crashReportingEnabled")) {
CoreConfigurationBuilder ACRABuilder = new CoreConfigurationBuilder(this);
ACRABuilder.setBuildConfigClass(BuildConfig.class).setReportFormat(StringFormat.KEY_VALUE_LIST);
ACRABuilder.getPluginConfigurationBuilder(MailSenderConfigurationBuilder.class).setReportAsFile(true).setMailTo(getResources().getString(R.string.appEmail)).setSubject(getResources().getString(R.string.crashReportEmailSubject, AppUtil.getAppBuildNo(getApplicationContext()))).setEnabled(true);
ACRABuilder.getPluginConfigurationBuilder(LimiterConfigurationBuilder.class).setEnabled(true);
ACRA.init(getApplication(), ACRABuilder);
-
}
}
diff --git a/app/src/main/java/org/mian/gitnex/activities/CommitsActivity.java b/app/src/main/java/org/mian/gitnex/activities/CommitsActivity.java
index f360ef3b..59fd7b3b 100644
--- a/app/src/main/java/org/mian/gitnex/activities/CommitsActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/CommitsActivity.java
@@ -1,6 +1,5 @@
package org.mian.gitnex.activities;
-import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -21,13 +20,11 @@ import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import org.mian.gitnex.R;
import org.mian.gitnex.adapters.CommitsAdapter;
-import org.mian.gitnex.clients.AppApiService;
+import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.helpers.Authorization;
import org.mian.gitnex.helpers.StaticGlobalVariables;
-import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.helpers.Version;
-import org.mian.gitnex.interfaces.ApiInterface;
import org.mian.gitnex.models.Commits;
import java.util.ArrayList;
import java.util.List;
@@ -41,8 +38,6 @@ import retrofit2.Response;
public class CommitsActivity extends BaseActivity {
- final Context ctx = this;
- private Context appCtx;
private View.OnClickListener onClickListener;
private TextView noData;
private ProgressBar progressBar;
@@ -53,7 +48,6 @@ public class CommitsActivity extends BaseActivity {
private RecyclerView recyclerView;
private List commitsList;
private CommitsAdapter adapter;
- private ApiInterface api;
private ProgressBar progressLoadMore;
@Override
@@ -66,15 +60,10 @@ public class CommitsActivity extends BaseActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
- TinyDB tinyDb = new TinyDB(appCtx);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
- String repoFullName = tinyDb.getString("repoFullName");
+ String repoFullName = tinyDB.getString("repoFullName");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
final String repoName = parts[1];
@@ -95,7 +84,8 @@ public class CommitsActivity extends BaseActivity {
closeActivity.setOnClickListener(onClickListener);
// if gitea is 1.12 or higher use the new limit (resultLimitNewGiteaInstances)
- if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12")) {
+ if(new Version(tinyDB.getString("giteaVersion")).higherOrEqual("1.12")) {
+
resultLimit = StaticGlobalVariables.resultLimitNewGiteaInstances;
}
@@ -105,9 +95,8 @@ public class CommitsActivity extends BaseActivity {
swipeRefresh.setOnRefreshListener(() -> new Handler(Looper.getMainLooper()).postDelayed(() -> {
swipeRefresh.setRefreshing(false);
- loadInitial(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, branchName, resultLimit);
+ loadInitial(Authorization.get(ctx), repoOwner, repoName, branchName, resultLimit);
adapter.notifyDataChanged();
-
}, 200));
adapter = new CommitsAdapter(ctx, commitsList);
@@ -116,23 +105,20 @@ public class CommitsActivity extends BaseActivity {
if(commitsList.size() == resultLimit || pageSize == resultLimit) {
int page = (commitsList.size() + resultLimit) / resultLimit;
- loadMore(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, page, branchName, resultLimit);
+ loadMore(Authorization.get(ctx), repoOwner, repoName, page, branchName, resultLimit);
}
-
}));
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(ctx));
recyclerView.setAdapter(adapter);
- api = AppApiService.createService(ApiInterface.class, instanceUrl, ctx);
- loadInitial(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, branchName, resultLimit);
-
+ loadInitial(Authorization.get(ctx), repoOwner, repoName, branchName, resultLimit);
}
private void loadInitial(String token, String repoOwner, String repoName, String branchName, int resultLimit) {
- Call> call = api.getRepositoryCommits(token, repoOwner, repoName, 1, branchName, resultLimit);
+ Call> call = RetrofitClient.getApiInterface(ctx).getRepositoryCommits(token, repoOwner, repoName, 1, branchName, resultLimit);
call.enqueue(new Callback>() {
@@ -148,7 +134,6 @@ public class CommitsActivity extends BaseActivity {
commitsList.addAll(response.body());
adapter.notifyDataChanged();
noData.setVisibility(View.GONE);
-
}
else {
@@ -164,7 +149,6 @@ public class CommitsActivity extends BaseActivity {
else {
Log.e(TAG, String.valueOf(response.code()));
-
}
progressBar.setVisibility(View.GONE);
@@ -184,7 +168,7 @@ public class CommitsActivity extends BaseActivity {
progressLoadMore.setVisibility(View.VISIBLE);
- Call> call = api.getRepositoryCommits(token, repoOwner, repoName, page, branchName, resultLimit);
+ Call> call = RetrofitClient.getApiInterface(ctx).getRepositoryCommits(token, repoOwner, repoName, page, branchName, resultLimit);
call.enqueue(new Callback>() {
@@ -211,7 +195,6 @@ public class CommitsActivity extends BaseActivity {
else {
Log.e(TAG, String.valueOf(response.code()));
-
}
progressLoadMore.setVisibility(View.GONE);
@@ -255,7 +238,6 @@ public class CommitsActivity extends BaseActivity {
});
return super.onCreateOptionsMenu(menu);
-
}
private void filter(String text) {
@@ -263,7 +245,9 @@ public class CommitsActivity extends BaseActivity {
List arr = new ArrayList<>();
for(Commits d : commitsList) {
+
if(d.getCommit().getMessage().toLowerCase().contains(text) || d.getSha().toLowerCase().contains(text)) {
+
arr.add(d);
}
}
@@ -274,6 +258,7 @@ public class CommitsActivity extends BaseActivity {
private void initCloseListener() {
onClickListener = view -> {
+
getIntent().removeExtra("branchName");
finish();
};
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 0e6c74ad..d0ed6187 100644
--- a/app/src/main/java/org/mian/gitnex/activities/CreateFileActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/CreateFileActivity.java
@@ -1,16 +1,17 @@
package org.mian.gitnex.activities;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
+import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
-import android.widget.AdapterView;
import android.widget.ArrayAdapter;
+import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
-import android.widget.Spinner;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.google.gson.JsonElement;
@@ -19,7 +20,6 @@ import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.helpers.AlertDialogs;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.Authorization;
-import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.models.Branches;
import org.mian.gitnex.models.DeleteFile;
@@ -44,49 +44,48 @@ public class CreateFileActivity extends BaseActivity {
private EditText newFileContent;
private EditText newFileBranchName;
private EditText newFileCommitMessage;
- private Spinner newFileBranchesSpinner;
+ private AutoCompleteTextView newFileBranchesSpinner;
private String filePath;
private String fileSha;
private int fileAction = 0; // 0 = create, 1 = delete, 2 = edit
- final Context ctx = this;
- private Context appCtx;
- private TinyDB tinyDb;
List branchesList = new ArrayList<>();
+ private String loginUid;
+ private String repoOwner;
+ private String repoName;
+ private String instanceToken;
+
+ private String selectedBranch;
+
@Override
protected int getLayoutResourceId(){
return R.layout.activity_new_file;
}
+ @SuppressLint("ClickableViewAccessibility")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
- tinyDb = new TinyDB(appCtx);
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- String repoFullName = tinyDb.getString("repoFullName");
+ loginUid = tinyDB.getString("loginUid");
+ String repoFullName = tinyDB.getString("repoFullName");
String[] parts = repoFullName.split("/");
- final String repoOwner = parts[0];
- final String repoName = parts[1];
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ repoOwner = parts[0];
+ repoName = parts[1];
+ instanceToken = "token " + tinyDB.getString(loginUid + "-token");
closeActivity = findViewById(R.id.close);
newFileName = findViewById(R.id.newFileName);
newFileContent = findViewById(R.id.newFileContent);
newFileBranchName = findViewById(R.id.newFileBranchName);
newFileCommitMessage = findViewById(R.id.newFileCommitMessage);
- TextView branchNameId = findViewById(R.id.branchNameId);
- TextView branchNameHintText = findViewById(R.id.branchNameHintText);
TextView toolbarTitle = findViewById(R.id.toolbarTitle);
- TextView fileNameHint = findViewById(R.id.fileNameHint);
newFileName.requestFocus();
assert imm != null;
@@ -97,9 +96,19 @@ public class CreateFileActivity extends BaseActivity {
newFileCreate = findViewById(R.id.newFileCreate);
+ newFileContent.setOnTouchListener((touchView, motionEvent) -> {
+
+ touchView.getParent().requestDisallowInterceptTouchEvent(true);
+
+ if ((motionEvent.getAction() & MotionEvent.ACTION_UP) != 0 && (motionEvent.getActionMasked() & MotionEvent.ACTION_UP) != 0) {
+
+ touchView.getParent().requestDisallowInterceptTouchEvent(false);
+ }
+ return false;
+ });
+
if(getIntent().getStringExtra("filePath") != null && getIntent().getIntExtra("fileAction", 1) == 1) {
- fileNameHint.setVisibility(View.GONE);
fileAction = getIntent().getIntExtra("fileAction", 1);
filePath = getIntent().getStringExtra("filePath");
@@ -120,7 +129,6 @@ public class CreateFileActivity extends BaseActivity {
if(getIntent().getStringExtra("filePath") != null && getIntent().getIntExtra("fileAction", 2) == 2) {
- fileNameHint.setVisibility(View.GONE);
fileAction = getIntent().getIntExtra("fileAction", 2);
filePath = getIntent().getStringExtra("filePath");
@@ -141,33 +149,7 @@ public class CreateFileActivity extends BaseActivity {
closeActivity.setOnClickListener(onClickListener);
newFileBranchesSpinner = findViewById(R.id.newFileBranchesSpinner);
- getBranches(instanceUrl, instanceToken, repoOwner, repoName, loginUid);
-
- newFileBranchesSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
- {
- public void onItemSelected(AdapterView> arg0,
- View arg1, int arg2, long arg3)
- {
- Branches bModelValue = (Branches) newFileBranchesSpinner.getSelectedItem();
-
- if(bModelValue.toString().equals("No branch")) {
- newFileBranchName.setEnabled(true);
- newFileBranchName.setVisibility(View.VISIBLE);
- branchNameId.setVisibility(View.VISIBLE);
- branchNameHintText.setVisibility(View.VISIBLE);
- }
- else {
- newFileBranchName.setEnabled(false);
- newFileBranchName.setVisibility(View.GONE);
- branchNameId.setVisibility(View.GONE);
- branchNameHintText.setVisibility(View.GONE);
- newFileBranchName.setText("");
- }
-
- }
-
- public void onNothingSelected(AdapterView> arg0) {}
- });
+ getBranches(instanceToken, repoOwner, repoName, loginUid);
disableProcessButton();
@@ -182,54 +164,43 @@ public class CreateFileActivity extends BaseActivity {
}
- private View.OnClickListener createFileListener = v -> processNewFile();
+ private final View.OnClickListener createFileListener = v -> processNewFile();
private void processNewFile() {
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
AppUtil appUtil = new AppUtil();
- TinyDB tinyDb = new TinyDB(appCtx);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
- String repoFullName = tinyDb.getString("repoFullName");
- String[] parts = repoFullName.split("/");
- final String repoOwner = parts[0];
- final String repoName = parts[1];
String newFileName_ = newFileName.getText().toString();
String newFileContent_ = newFileContent.getText().toString();
String newFileBranchName_ = newFileBranchName.getText().toString();
String newFileCommitMessage_ = newFileCommitMessage.getText().toString();
- Branches currentBranch = (Branches) newFileBranchesSpinner.getSelectedItem();
-
if(!connToInternet) {
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
return;
-
}
if(newFileName_.equals("") || newFileContent_.equals("") || newFileCommitMessage_.equals("")) {
Toasty.error(ctx, getString(R.string.newFileRequiredFields));
return;
-
}
- if(currentBranch.toString().equals("No branch")) {
+ if(selectedBranch.equals("No branch")) {
if(newFileBranchName_.equals("")) {
+
Toasty.error(ctx, getString(R.string.newFileRequiredFieldNewBranchName));
return;
}
else {
+
if(!appUtil.checkStringsWithDash(newFileBranchName_)) {
Toasty.error(ctx, getString(R.string.newFileInvalidBranchName));
return;
-
}
}
@@ -238,7 +209,6 @@ public class CreateFileActivity extends BaseActivity {
if(appUtil.charactersLength(newFileCommitMessage_) > 255) {
Toasty.warning(ctx, getString(R.string.newFileCommitMessageError));
-
}
else {
@@ -246,37 +216,38 @@ public class CreateFileActivity extends BaseActivity {
if(fileAction == 1) {
- deleteFile(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, filePath,
- newFileBranchName_, newFileCommitMessage_, currentBranch.toString(), fileSha);
+ deleteFile(Authorization.get(ctx), repoOwner, repoName, filePath,
+ newFileBranchName_, newFileCommitMessage_, selectedBranch, fileSha);
}
else if(fileAction == 2) {
- editFile(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, filePath,
- appUtil.encodeBase64(newFileContent_), newFileBranchName_, newFileCommitMessage_, currentBranch.toString(), fileSha);
+ editFile(Authorization.get(ctx), repoOwner, repoName, filePath,
+ appUtil.encodeBase64(newFileContent_), newFileBranchName_, newFileCommitMessage_, selectedBranch, fileSha);
}
else {
- createNewFile(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, newFileName_,
- appUtil.encodeBase64(newFileContent_), newFileBranchName_, newFileCommitMessage_, currentBranch.toString());
+ createNewFile(Authorization.get(ctx), repoOwner, repoName, newFileName_,
+ appUtil.encodeBase64(newFileContent_), newFileBranchName_, newFileCommitMessage_, selectedBranch);
}
}
}
- private void createNewFile(final String instanceUrl, final String token, String repoOwner, String repoName, String fileName, String fileContent, String fileBranchName, String fileCommitMessage, String currentBranch) {
+ private void createNewFile(final String token, String repoOwner, String repoName, String fileName, String fileContent, String fileBranchName, String fileCommitMessage, String currentBranch) {
NewFile createNewFileJsonStr;
if(currentBranch.equals("No branch")) {
+
createNewFileJsonStr = new NewFile("", fileContent, fileCommitMessage, fileBranchName);
}
else {
+
createNewFileJsonStr = new NewFile(currentBranch, fileContent, fileCommitMessage, "");
}
Call call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
+ .getApiInterface(ctx)
.createNewFile(token, repoOwner, repoName, fileName, createNewFileJsonStr);
call.enqueue(new Callback() {
@@ -289,7 +260,6 @@ public class CreateFileActivity extends BaseActivity {
enableProcessButton();
Toasty.success(ctx, getString(R.string.newFileSuccessMessage));
finish();
-
}
else if(response.code() == 401) {
@@ -298,21 +268,20 @@ public class CreateFileActivity extends BaseActivity {
getResources().getString(R.string.alertDialogTokenRevokedMessage),
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
else {
if(response.code() == 404) {
+
enableProcessButton();
Toasty.warning(ctx, getString(R.string.apiNotFound));
}
else {
+
enableProcessButton();
Toasty.error(ctx, getString(R.string.orgCreatedError));
}
-
}
-
}
@Override
@@ -325,10 +294,11 @@ public class CreateFileActivity extends BaseActivity {
}
- private void deleteFile(final String instanceUrl, final String token, String repoOwner, String repoName, String fileName, String fileBranchName, String fileCommitMessage, String currentBranch, String fileSha) {
+ private void deleteFile(final String token, String repoOwner, String repoName, String fileName, String fileBranchName, String fileCommitMessage, String currentBranch, String fileSha) {
String branchName;
DeleteFile deleteFileJsonStr;
+
if(currentBranch.equals("No branch")) {
branchName = fileBranchName;
@@ -341,8 +311,7 @@ public class CreateFileActivity extends BaseActivity {
}
Call call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
+ .getApiInterface(ctx)
.deleteFile(token, repoOwner, repoName, fileName, deleteFileJsonStr);
call.enqueue(new Callback() {
@@ -358,7 +327,6 @@ public class CreateFileActivity extends BaseActivity {
getIntent().removeExtra("fileSha");
getIntent().removeExtra("fileContents");
finish();
-
}
else if(response.code() == 401) {
@@ -367,7 +335,6 @@ public class CreateFileActivity extends BaseActivity {
getResources().getString(R.string.alertDialogTokenRevokedMessage),
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
else {
@@ -381,9 +348,7 @@ public class CreateFileActivity extends BaseActivity {
enableProcessButton();
Toasty.info(ctx, getString(R.string.genericError));
}
-
}
-
}
@Override
@@ -396,10 +361,11 @@ public class CreateFileActivity extends BaseActivity {
}
- private void editFile(final String instanceUrl, final String token, String repoOwner, String repoName, String fileName, String fileContent, String fileBranchName, String fileCommitMessage, String currentBranch, String fileSha) {
+ private void editFile(final String token, String repoOwner, String repoName, String fileName, String fileContent, String fileBranchName, String fileCommitMessage, String currentBranch, String fileSha) {
String branchName;
EditFile editFileJsonStr;
+
if(currentBranch.equals("No branch")) {
branchName = fileBranchName;
@@ -412,8 +378,7 @@ public class CreateFileActivity extends BaseActivity {
}
Call call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
+ .getApiInterface(ctx)
.editFile(token, repoOwner, repoName, fileName, editFileJsonStr);
call.enqueue(new Callback() {
@@ -428,9 +393,8 @@ public class CreateFileActivity extends BaseActivity {
getIntent().removeExtra("filePath");
getIntent().removeExtra("fileSha");
getIntent().removeExtra("fileContents");
- tinyDb.putBoolean("fileModified", true);
+ tinyDB.putBoolean("fileModified", true);
finish();
-
}
else if(response.code() == 401) {
@@ -439,7 +403,6 @@ public class CreateFileActivity extends BaseActivity {
getResources().getString(R.string.alertDialogTokenRevokedMessage),
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
else {
@@ -453,9 +416,7 @@ public class CreateFileActivity extends BaseActivity {
enableProcessButton();
Toasty.info(ctx, getString(R.string.genericError));
}
-
}
-
}
@Override
@@ -468,12 +429,11 @@ public class CreateFileActivity extends BaseActivity {
}
- private void getBranches(String instanceUrl, String instanceToken, String repoOwner, String repoName, String loginUid) {
+ private void getBranches(String instanceToken, String repoOwner, String repoName, String loginUid) {
Call> call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .getBranches(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName);
+ .getApiInterface(ctx)
+ .getBranches(Authorization.get(ctx), repoOwner, repoName);
call.enqueue(new Callback>() {
@@ -481,37 +441,53 @@ public class CreateFileActivity extends BaseActivity {
public void onResponse(@NonNull Call> call, @NonNull retrofit2.Response> response) {
if(response.isSuccessful()) {
+
if(response.code() == 200) {
List branchesList_ = response.body();
branchesList.add(new Branches("No branch"));
assert branchesList_ != null;
+
if(branchesList_.size() > 0) {
+
for (int i = 0; i < branchesList_.size(); i++) {
- Branches data = new Branches(
- branchesList_.get(i).getName()
- );
+ Branches data = new Branches(branchesList_.get(i).getName());
branchesList.add(data);
-
}
}
ArrayAdapter adapter = new ArrayAdapter<>(CreateFileActivity.this,
- R.layout.spinner_item, branchesList);
+ R.layout.list_spinner_items, branchesList);
- adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
newFileBranchesSpinner.setAdapter(adapter);
enableProcessButton();
+ newFileBranchesSpinner.setOnItemClickListener ((parent, view, position, id) -> {
+
+ selectedBranch = branchesList.get(position).getName();
+
+ if(selectedBranch.equals("No branch")) {
+
+ newFileBranchName.setEnabled(true);
+ newFileBranchName.setVisibility(View.VISIBLE);
+ }
+ else {
+
+ newFileBranchName.setEnabled(false);
+ newFileBranchName.setVisibility(View.GONE);
+ newFileBranchName.setText("");
+ }
+
+ });
}
}
-
}
@Override
public void onFailure(@NonNull Call> call, @NonNull Throwable t) {
+
Log.e("onFailure", t.toString());
}
});
@@ -519,6 +495,7 @@ public class CreateFileActivity extends BaseActivity {
}
private void initCloseListener() {
+
onClickListener = view -> finish();
}
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 52e060b1..6b2bb2f2 100644
--- a/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java
@@ -1,5 +1,6 @@
package org.mian.gitnex.activities;
+import android.annotation.SuppressLint;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Context;
@@ -7,6 +8,7 @@ import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
@@ -49,9 +51,6 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
private CustomLabelsSelectionDialogBinding labelsBinding;
private CustomAssigneesSelectionDialogBinding assigneesBinding;
private View.OnClickListener onClickListener;
- final Context ctx = this;
- private Context appCtx;
- private TinyDB tinyDb;
private int resultLimit = StaticGlobalVariables.resultLimitOldGiteaInstances;
private Dialog dialogLabels;
private Dialog dialogAssignees;
@@ -59,9 +58,7 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
private String assigneesSetter;
private int milestoneId;
- private String instanceUrl;
private String loginUid;
- private String instanceToken;
private String repoOwner;
private String repoName;
@@ -79,12 +76,11 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
return R.layout.activity_create_issue;
}
+ @SuppressLint("ClickableViewAccessibility")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
- tinyDb = new TinyDB(appCtx);
viewBinding = ActivityCreateIssueBinding.inflate(getLayoutInflater());
View view = viewBinding.getRoot();
@@ -94,17 +90,14 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- instanceUrl = tinyDb.getString("instanceUrl");
- loginUid = tinyDb.getString("loginUid");
- final String loginFullName = tinyDb.getString("userFullname");
- String repoFullName = tinyDb.getString("repoFullName");
+ loginUid = tinyDB.getString("loginUid");
+ String repoFullName = tinyDB.getString("repoFullName");
String[] parts = repoFullName.split("/");
repoOwner = parts[0];
repoName = parts[1];
- instanceToken = "token " + tinyDb.getString(loginUid + "-token");
// require gitea 1.12 or higher
- if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
+ if(new Version(tinyDB.getString("giteaVersion")).higherOrEqual("1.12.0")) {
resultLimit = StaticGlobalVariables.resultLimitNewGiteaInstances;
}
@@ -113,6 +106,17 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
assert imm != null;
imm.showSoftInput(viewBinding.newIssueTitle, InputMethodManager.SHOW_IMPLICIT);
+ viewBinding.newIssueDescription.setOnTouchListener((touchView, motionEvent) -> {
+
+ touchView.getParent().requestDisallowInterceptTouchEvent(true);
+
+ if ((motionEvent.getAction() & MotionEvent.ACTION_UP) != 0 && (motionEvent.getActionMasked() & MotionEvent.ACTION_UP) != 0) {
+
+ touchView.getParent().requestDisallowInterceptTouchEvent(false);
+ }
+ return false;
+ });
+
labelsAdapter = new LabelsListAdapter(labelsList, CreateIssueActivity.this, labelsIds);
assigneesAdapter = new AssigneesListAdapter(ctx, assigneesList, CreateIssueActivity.this, assigneesListData);
@@ -123,17 +127,13 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
viewBinding.newIssueLabels.setOnClickListener(this);
viewBinding.newIssueDueDate.setOnClickListener(this);
- getMilestones(instanceUrl, instanceToken, repoOwner, repoName, loginUid, resultLimit);
+ getMilestones(repoOwner, repoName, resultLimit);
disableProcessButton();
- viewBinding.newIssueLabels.setOnClickListener(newIssueLabels ->
- showLabels()
- );
+ viewBinding.newIssueLabels.setOnClickListener(newIssueLabels -> showLabels());
- viewBinding.newIssueAssigneesList.setOnClickListener(newIssueAssigneesList ->
- showAssignees()
- );
+ viewBinding.newIssueAssigneesList.setOnClickListener(newIssueAssigneesList -> showAssignees());
if(!connToInternet) {
@@ -181,11 +181,10 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
View view = assigneesBinding.getRoot();
dialogAssignees.setContentView(view);
- assigneesBinding.cancel.setOnClickListener(assigneesBinding_ ->
- dialogAssignees.dismiss()
- );
+ assigneesBinding.cancel.setOnClickListener(assigneesBinding_ -> dialogAssignees.dismiss());
- AssigneesActions.getRepositoryAssignees(ctx, instanceUrl, instanceToken, repoOwner, repoName, assigneesList, dialogAssignees, assigneesAdapter, assigneesBinding);
+ dialogAssignees.show();
+ AssigneesActions.getRepositoryAssignees(ctx, repoOwner, repoName, assigneesList, dialogAssignees, assigneesAdapter, assigneesBinding);
}
private void showLabels() {
@@ -202,11 +201,10 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
View view = labelsBinding.getRoot();
dialogLabels.setContentView(view);
- labelsBinding.cancel.setOnClickListener(labelsBinding_ ->
- dialogLabels.dismiss()
- );
+ labelsBinding.cancel.setOnClickListener(labelsBinding_ -> dialogLabels.dismiss());
- LabelsActions.getRepositoryLabels(ctx, instanceUrl, instanceToken, repoOwner, repoName, labelsList, dialogLabels, labelsAdapter, labelsBinding);
+ dialogLabels.show();
+ LabelsActions.getRepositoryLabels(ctx, repoOwner, repoName, labelsList, dialogLabels, labelsAdapter, labelsBinding);
}
private void processNewIssue() {
@@ -221,7 +219,6 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
return;
-
}
if (newIssueTitleForm.equals("")) {
@@ -240,20 +237,18 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
}
disableProcessButton();
- createNewIssueFunc(instanceUrl, instanceToken, repoOwner, repoName, loginUid, newIssueDescriptionForm, newIssueDueDateForm, milestoneId, newIssueTitleForm);
-
+ createNewIssueFunc(repoOwner, repoName, loginUid, newIssueDescriptionForm, newIssueDueDateForm, milestoneId, newIssueTitleForm);
}
- private void createNewIssueFunc(final String instanceUrl, final String instanceToken, String repoOwner, String repoName, String loginUid, String newIssueDescriptionForm, String newIssueDueDateForm, int newIssueMilestoneIdForm, String newIssueTitleForm) {
+ private void createNewIssueFunc(String repoOwner, String repoName, String loginUid, String newIssueDescriptionForm, String newIssueDueDateForm, int newIssueMilestoneIdForm, String newIssueTitleForm) {
CreateIssue createNewIssueJson = new CreateIssue(loginUid, newIssueDescriptionForm, false, newIssueDueDateForm, newIssueMilestoneIdForm, newIssueTitleForm, assigneesListData, labelsIds);
Call call3;
call3 = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .createNewIssue(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, createNewIssueJson);
+ .getApiInterface(ctx)
+ .createNewIssue(Authorization.get(ctx), repoOwner, repoName, createNewIssueJson);
call3.enqueue(new Callback() {
@@ -262,7 +257,7 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
if(response2.code() == 201) {
- TinyDB tinyDb = new TinyDB(appCtx);
+ TinyDB tinyDb = TinyDB.getInstance(appCtx);
tinyDb.putBoolean("resumeIssues", true);
Toasty.success(ctx, getString(R.string.issueCreated));
@@ -300,13 +295,12 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
onClickListener = view -> finish();
}
- private void getMilestones(String instanceUrl, String instanceToken, String repoOwner, String repoName, String loginUid, int resultLimit) {
+ private void getMilestones(String repoOwner, String repoName, int resultLimit) {
String msState = "open";
Call> call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .getMilestones(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, 1, resultLimit, msState);
+ .getApiInterface(ctx)
+ .getMilestones(Authorization.get(ctx), repoOwner, repoName, 1, resultLimit, msState);
call.enqueue(new Callback>() {
@@ -314,13 +308,16 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
public void onResponse(@NonNull Call> call, @NonNull retrofit2.Response> response) {
if(response.isSuccessful()) {
+
if(response.code() == 200) {
List milestonesList_ = response.body();
milestonesList.add(new Milestones(0,getString(R.string.issueCreatedNoMilestone)));
assert milestonesList_ != null;
+
if(milestonesList_.size() > 0) {
+
for (int i = 0; i < milestonesList_.size(); i++) {
//Don't translate "open" is a enum
@@ -331,7 +328,6 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
);
milestonesList.add(data);
}
-
}
}
@@ -375,9 +371,9 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
datePickerDialog.show();
}
else if(v == viewBinding.createNewIssueButton) {
+
processNewIssue();
}
-
}
private void disableProcessButton() {
diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateLabelActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateLabelActivity.java
index 9a75f8e1..cb88c139 100644
--- a/app/src/main/java/org/mian/gitnex/activities/CreateLabelActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/CreateLabelActivity.java
@@ -10,11 +10,9 @@ import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
-import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import com.pes.androidmaterialcolorpickerdialog.ColorPicker;
-import com.pes.androidmaterialcolorpickerdialog.ColorPickerCallback;
import org.mian.gitnex.R;
import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.helpers.AlertDialogs;
@@ -25,6 +23,7 @@ import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.models.CreateLabel;
import org.mian.gitnex.models.Labels;
import org.mian.gitnex.viewmodels.LabelsViewModel;
+import org.mian.gitnex.viewmodels.OrganizationLabelsViewModel;
import java.util.Objects;
import retrofit2.Call;
import retrofit2.Callback;
@@ -39,8 +38,7 @@ public class CreateLabelActivity extends BaseActivity {
private TextView colorPicker;
private EditText labelName;
private Button createLabelButton;
- final Context ctx = this;
- private Context appCtx;
+ private TinyDB tinyDB;
@Override
protected int getLayoutResourceId(){
@@ -51,25 +49,20 @@ public class CreateLabelActivity extends BaseActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- final TinyDB tinyDb = new TinyDB(appCtx);
- String repoFullName = tinyDb.getString("repoFullName");
+ tinyDB = TinyDB.getInstance(appCtx);
+ String repoFullName = tinyDB.getString("repoFullName");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
final String repoName = parts[1];
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
if(getIntent().getStringExtra("labelAction") != null && Objects.requireNonNull(getIntent().getStringExtra("labelAction")).equals("delete")) {
- deleteLabel(instanceUrl, instanceToken, repoOwner, repoName, Integer.parseInt(Objects.requireNonNull(getIntent().getStringExtra("labelId"))), loginUid);
+ deleteLabel(repoOwner, repoName, Integer.parseInt(Objects.requireNonNull(getIntent().getStringExtra("labelId"))));
finish();
return;
-
}
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
@@ -87,22 +80,14 @@ public class CreateLabelActivity extends BaseActivity {
initCloseListener();
closeActivity.setOnClickListener(onClickListener);
- colorPicker.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- cp.show();
- }
- });
+ colorPicker.setOnClickListener(v -> cp.show());
- cp.setCallback(new ColorPickerCallback() {
- @Override
- public void onColorChosen(@ColorInt int color) {
+ cp.setCallback(color -> {
- //Log.i("#Hex no alpha", String.format("#%06X", (0xFFFFFF & color)));
- colorPicker.setBackgroundColor(color);
- tinyDb.putString("labelColor", String.format("#%06X", (0xFFFFFF & color)));
- cp.dismiss();
-
- }
+ //Log.i("#Hex no alpha", String.format("#%06X", (0xFFFFFF & color)));
+ colorPicker.setBackgroundColor(color);
+ tinyDB.putString("labelColor", String.format("#%06X", (0xFFFFFF & color)));
+ cp.dismiss();
});
if(getIntent().getStringExtra("labelAction") != null && Objects.requireNonNull(getIntent().getStringExtra("labelAction")).equals("edit")) {
@@ -110,7 +95,7 @@ public class CreateLabelActivity extends BaseActivity {
labelName.setText(getIntent().getStringExtra("labelTitle"));
int labelColor_ = Color.parseColor("#" + getIntent().getStringExtra("labelColor"));
colorPicker.setBackgroundColor(labelColor_);
- tinyDb.putString("labelColorDefault", "#" + getIntent().getStringExtra("labelColor"));
+ tinyDB.putString("labelColorDefault", "#" + getIntent().getStringExtra("labelColor"));
TextView toolbar_title = findViewById(R.id.toolbar_title);
toolbar_title.setText(getResources().getString(R.string.pageTitleLabelUpdate));
@@ -131,57 +116,52 @@ public class CreateLabelActivity extends BaseActivity {
}
- private View.OnClickListener createLabelListener = v -> processCreateLabel();
+ private final View.OnClickListener createLabelListener = v -> processCreateLabel();
- private View.OnClickListener updateLabelListener = v -> processUpdateLabel();
+ private final View.OnClickListener updateLabelListener = v -> processUpdateLabel();
private void processUpdateLabel() {
- final TinyDB tinyDb = new TinyDB(appCtx);
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
AppUtil appUtil = new AppUtil();
- String repoFullName = tinyDb.getString("repoFullName");
+ String repoFullName = tinyDB.getString("repoFullName");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
final String repoName = parts[1];
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
String updateLabelName = labelName.getText().toString();
String updateLabelColor;
- if(tinyDb.getString("labelColor").isEmpty()) {
- updateLabelColor = tinyDb.getString("labelColorDefault");
+ if(tinyDB.getString("labelColor").isEmpty()) {
+
+ updateLabelColor = tinyDB.getString("labelColorDefault");
}
else {
- updateLabelColor = tinyDb.getString("labelColor");
+
+ updateLabelColor = tinyDB.getString("labelColor");
}
if(!connToInternet) {
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
return;
-
}
if(updateLabelName.equals("")) {
Toasty.error(ctx, getString(R.string.labelEmptyError));
return;
-
}
if(!appUtil.checkStrings(updateLabelName)) {
Toasty.error(ctx, getString(R.string.labelNameError));
return;
-
}
disableProcessButton();
- patchLabel(instanceUrl, instanceToken, repoOwner, repoName, updateLabelName, updateLabelColor, Integer.parseInt(
- Objects.requireNonNull(getIntent().getStringExtra("labelId"))), loginUid);
+ patchLabel(repoOwner, repoName, updateLabelName, updateLabelColor, Integer.parseInt(
+ Objects.requireNonNull(getIntent().getStringExtra("labelId"))));
}
@@ -189,61 +169,60 @@ public class CreateLabelActivity extends BaseActivity {
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
AppUtil appUtil = new AppUtil();
- TinyDB tinyDb = new TinyDB(appCtx);
- String repoFullName = tinyDb.getString("repoFullName");
+
+ String repoFullName = tinyDB.getString("repoFullName");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
final String repoName = parts[1];
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
String newLabelName = labelName.getText().toString();
String newLabelColor;
- if(tinyDb.getString("labelColor").isEmpty()) {
+
+ if(tinyDB.getString("labelColor").isEmpty()) {
+
newLabelColor = String.format("#%06X", (0xFFFFFF & ContextCompat.getColor(ctx, R.color.releasePre)));
}
else {
- newLabelColor = tinyDb.getString("labelColor");
+
+ newLabelColor = tinyDB.getString("labelColor");
}
if(!connToInternet) {
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
return;
-
}
if(newLabelName.equals("")) {
Toasty.error(ctx, getString(R.string.labelEmptyError));
return;
-
}
if(!appUtil.checkStrings(newLabelName)) {
Toasty.error(ctx, getString(R.string.labelNameError));
return;
-
}
disableProcessButton();
- createNewLabel(instanceUrl, instanceToken, repoOwner, repoName, newLabelName, newLabelColor, loginUid);
-
+ createNewLabel(repoOwner, repoName, newLabelName, newLabelColor);
}
- private void createNewLabel(final String instanceUrl, final String instanceToken, String repoOwner, String repoName, String newLabelName, String newLabelColor, String loginUid) {
+ private void createNewLabel(String repoOwner, String repoName, String newLabelName, String newLabelColor) {
CreateLabel createLabelFunc = new CreateLabel(newLabelName, newLabelColor);
- final TinyDB tinyDb = new TinyDB(appCtx);
Call call;
- call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .createLabel(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, createLabelFunc);
+ if(getIntent().getStringExtra("type") != null && Objects.requireNonNull(getIntent().getStringExtra("type")).equals("org")) {
+
+ call = RetrofitClient.getApiInterface(ctx).createOrganizationLabel(Authorization.get(ctx), getIntent().getStringExtra("orgName"), createLabelFunc);
+ }
+ else {
+
+ call = RetrofitClient.getApiInterface(ctx).createLabel(Authorization.get(ctx), repoOwner, repoName, createLabelFunc);
+ }
call.enqueue(new Callback() {
@@ -253,10 +232,9 @@ public class CreateLabelActivity extends BaseActivity {
if(response.code() == 201) {
Toasty.success(ctx, getString(R.string.labelCreated));
- tinyDb.putString("labelColor", "");
- tinyDb.putBoolean("labelsRefresh", true);
+ tinyDB.putString("labelColor", "");
+ tinyDB.putBoolean("labelsRefresh", true);
finish();
-
}
else if(response.code() == 401) {
@@ -265,22 +243,19 @@ public class CreateLabelActivity extends BaseActivity {
getResources().getString(R.string.alertDialogTokenRevokedMessage),
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
else {
enableProcessButton();
- tinyDb.putString("labelColor", "");
+ tinyDB.putString("labelColor", "");
Toasty.error(ctx, getString(R.string.labelGeneralError));
-
}
-
}
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
- tinyDb.putString("labelColor", "");
+ tinyDB.putString("labelColor", "");
Log.e("onFailure", t.toString());
enableProcessButton();
}
@@ -288,17 +263,20 @@ public class CreateLabelActivity extends BaseActivity {
}
- private void patchLabel(final String instanceUrl, final String instanceToken, String repoOwner, String repoName, String updateLabelName, String updateLabelColor, int labelId, String loginUid) {
+ private void patchLabel(String repoOwner, String repoName, String updateLabelName, String updateLabelColor, int labelId) {
CreateLabel createLabelFunc = new CreateLabel(updateLabelName, updateLabelColor);
- final TinyDB tinyDb = new TinyDB(appCtx);
Call call;
- call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .patchLabel(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, labelId, createLabelFunc);
+ if(getIntent().getStringExtra("type") != null && Objects.requireNonNull(getIntent().getStringExtra("type")).equals("org")) {
+
+ call = RetrofitClient.getApiInterface(ctx).patchOrganizationLabel(Authorization.get(ctx), getIntent().getStringExtra("orgName"), labelId, createLabelFunc);
+ }
+ else {
+
+ call = RetrofitClient.getApiInterface(appCtx).patchLabel(Authorization.get(ctx), repoOwner, repoName, labelId, createLabelFunc);
+ }
call.enqueue(new Callback() {
@@ -306,18 +284,19 @@ public class CreateLabelActivity extends BaseActivity {
public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) {
if(response.isSuccessful()) {
+
if(response.code() == 200) {
Toasty.success(ctx, getString(R.string.labelUpdated));
- tinyDb.putString("labelColor", "");
- tinyDb.putBoolean("labelsRefresh", true);
- tinyDb.putString("labelColorDefault", "");
+ tinyDB.putString("labelColor", "");
+ tinyDB.putBoolean("labelsRefresh", true);
+ tinyDB.putString("labelColorDefault", "");
getIntent().removeExtra("labelAction");
getIntent().removeExtra("labelId");
getIntent().removeExtra("labelTitle");
getIntent().removeExtra("labelColor");
+ getIntent().removeExtra("type");
finish();
-
}
}
else if(response.code() == 401) {
@@ -327,24 +306,21 @@ public class CreateLabelActivity extends BaseActivity {
getResources().getString(R.string.alertDialogTokenRevokedMessage),
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
else {
enableProcessButton();
- tinyDb.putString("labelColor", "");
- tinyDb.putString("labelColorDefault", "");
+ tinyDB.putString("labelColor", "");
+ tinyDB.putString("labelColorDefault", "");
Toasty.error(ctx, getString(R.string.labelGeneralError));
-
}
-
}
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
- tinyDb.putString("labelColor", "");
- tinyDb.putString("labelColorDefault", "");
+ tinyDB.putString("labelColor", "");
+ tinyDB.putString("labelColorDefault", "");
Log.e("onFailure", t.toString());
enableProcessButton();
}
@@ -353,26 +329,30 @@ public class CreateLabelActivity extends BaseActivity {
}
private void initCloseListener() {
- onClickListener = new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- getIntent().removeExtra("labelAction");
- getIntent().removeExtra("labelId");
- getIntent().removeExtra("labelTitle");
- getIntent().removeExtra("labelColor");
- finish();
- }
+
+ onClickListener = view -> {
+
+ getIntent().removeExtra("labelAction");
+ getIntent().removeExtra("labelId");
+ getIntent().removeExtra("labelTitle");
+ getIntent().removeExtra("labelColor");
+ getIntent().removeExtra("type");
+ finish();
};
}
- private void deleteLabel(final String instanceUrl, final String instanceToken, final String repoOwner, final String repoName, int labelId, String loginUid) {
+ private void deleteLabel(final String repoOwner, final String repoName, int labelId) {
Call call;
- call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .deleteLabel(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, labelId);
+ if(getIntent().getStringExtra("type") != null && Objects.requireNonNull(getIntent().getStringExtra("type")).equals("org")) {
+
+ call = RetrofitClient.getApiInterface(appCtx).deleteOrganizationLabel(Authorization.get(ctx), getIntent().getStringExtra("orgName"), labelId);
+ }
+ else {
+
+ call = RetrofitClient.getApiInterface(appCtx).deleteLabel(Authorization.get(ctx), repoOwner, repoName, labelId);
+ }
call.enqueue(new Callback() {
@@ -380,13 +360,21 @@ public class CreateLabelActivity extends BaseActivity {
public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) {
if(response.isSuccessful()) {
+
if(response.code() == 204) {
Toasty.success(ctx, getString(R.string.labelDeleteText));
- LabelsViewModel.loadLabelsList(instanceUrl, instanceToken, repoOwner, repoName, ctx);
+ if(getIntent().getStringExtra("type") != null && Objects.requireNonNull(getIntent().getStringExtra("type")).equals("org")) {
+
+ OrganizationLabelsViewModel.loadOrgLabelsList(Authorization.get(ctx), getIntent().getStringExtra("orgName"), ctx, null, null);
+ }
+ else {
+
+ LabelsViewModel.loadLabelsList(Authorization.get(ctx), repoOwner, repoName, ctx);
+ }
getIntent().removeExtra("labelAction");
getIntent().removeExtra("labelId");
-
+ getIntent().removeExtra("type");
}
}
else if(response.code() == 401) {
@@ -395,14 +383,11 @@ public class CreateLabelActivity extends BaseActivity {
getResources().getString(R.string.alertDialogTokenRevokedMessage),
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
else {
Toasty.error(ctx, getString(R.string.labelDeleteErrorText));
-
}
-
}
@Override
diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateMilestoneActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateMilestoneActivity.java
index fc94bfdc..3c910bce 100644
--- a/app/src/main/java/org/mian/gitnex/activities/CreateMilestoneActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/CreateMilestoneActivity.java
@@ -1,13 +1,14 @@
package org.mian.gitnex.activities;
+import android.annotation.SuppressLint;
import android.app.DatePickerDialog;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
+import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
-import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageView;
import androidx.annotation.NonNull;
@@ -35,19 +36,17 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
private EditText milestoneTitle;
private EditText milestoneDescription;
private Button createNewMilestoneButton;
- final Context ctx = this;
- private Context appCtx;
@Override
protected int getLayoutResourceId(){
return R.layout.activity_new_milestone;
}
+ @SuppressLint("ClickableViewAccessibility")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
@@ -63,6 +62,17 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
assert imm != null;
imm.showSoftInput(milestoneTitle, InputMethodManager.SHOW_IMPLICIT);
+ milestoneDescription.setOnTouchListener((touchView, motionEvent) -> {
+
+ touchView.getParent().requestDisallowInterceptTouchEvent(true);
+
+ if ((motionEvent.getAction() & MotionEvent.ACTION_UP) != 0 && (motionEvent.getActionMasked() & MotionEvent.ACTION_UP) != 0) {
+
+ touchView.getParent().requestDisallowInterceptTouchEvent(false);
+ }
+ return false;
+ });
+
initCloseListener();
closeActivity.setOnClickListener(onClickListener);
milestoneDueDate.setOnClickListener(this);
@@ -78,21 +88,17 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
}
- private View.OnClickListener createMilestoneListener = v -> processNewMilestone();
+ private final View.OnClickListener createMilestoneListener = v -> processNewMilestone();
private void processNewMilestone() {
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
AppUtil appUtil = new AppUtil();
- TinyDB tinyDb = new TinyDB(appCtx);
+ TinyDB tinyDb = TinyDB.getInstance(appCtx);
String repoFullName = tinyDb.getString("repoFullName");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
final String repoName = parts[1];
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
- //String appLocale = tinyDb.getString("locale");
String newMilestoneTitle = milestoneTitle.getText().toString();
String newMilestoneDescription = milestoneDescription.getText().toString();
@@ -102,26 +108,25 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
return;
-
}
if(newMilestoneTitle.equals("")) {
Toasty.error(ctx, getString(R.string.milestoneNameErrorEmpty));
return;
-
}
if(!newMilestoneDescription.equals("")) {
+
if (appUtil.charactersLength(newMilestoneDescription) > 255) {
Toasty.warning(ctx, getString(R.string.milestoneDescError));
return;
-
}
}
String finalMilestoneDueDate = null;
+
if(!newMilestoneDueDate.isEmpty()) {
finalMilestoneDueDate = (AppUtil.customDateCombine(AppUtil.customDateFormat(newMilestoneDueDate)));
@@ -134,19 +139,17 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
}
disableProcessButton();
- createNewMilestone(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, newMilestoneTitle, newMilestoneDescription, finalMilestoneDueDate);
-
+ createNewMilestone(Authorization.get(ctx), repoOwner, repoName, newMilestoneTitle, newMilestoneDescription, finalMilestoneDueDate);
}
- private void createNewMilestone(final String instanceUrl, final String token, String repoOwner, String repoName, String newMilestoneTitle, String newMilestoneDescription, String newMilestoneDueDate) {
+ private void createNewMilestone(final String token, String repoOwner, String repoName, String newMilestoneTitle, String newMilestoneDescription, String newMilestoneDueDate) {
Milestones createMilestone = new Milestones(newMilestoneDescription, newMilestoneTitle, newMilestoneDueDate);
Call call;
call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
+ .getApiInterface(appCtx)
.createMilestone(token, repoOwner, repoName, createMilestone);
call.enqueue(new Callback() {
@@ -155,14 +158,14 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) {
if(response.isSuccessful()) {
+
if(response.code() == 201) {
- TinyDB tinyDb = new TinyDB(appCtx);
+ TinyDB tinyDb = TinyDB.getInstance(appCtx);
tinyDb.putBoolean("milestoneCreated", true);
Toasty.success(ctx, getString(R.string.milestoneCreated));
enableProcessButton();
finish();
-
}
}
else if(response.code() == 401) {
@@ -172,19 +175,17 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
getResources().getString(R.string.alertDialogTokenRevokedMessage),
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
else {
enableProcessButton();
Toasty.error(ctx, getString(R.string.milestoneCreatedError));
-
}
-
}
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
+
Log.e("onFailure", t.toString());
enableProcessButton();
}
@@ -203,16 +204,7 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
final int mDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(this,
- new DatePickerDialog.OnDateSetListener() {
-
- @Override
- public void onDateSet(DatePicker view, int year,
- int monthOfYear, int dayOfMonth) {
-
- milestoneDueDate.setText(getString(R.string.setDueDate, year, (monthOfYear + 1), dayOfMonth));
-
- }
- }, mYear, mMonth, mDay);
+ (view, year, monthOfYear, dayOfMonth) -> milestoneDueDate.setText(getString(R.string.setDueDate, year, (monthOfYear + 1), dayOfMonth)), mYear, mMonth, mDay);
datePickerDialog.show();
}
diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateNewUserActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateNewUserActivity.java
index 49f69ad2..9c056743 100644
--- a/app/src/main/java/org/mian/gitnex/activities/CreateNewUserActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/CreateNewUserActivity.java
@@ -33,8 +33,6 @@ public class CreateNewUserActivity extends BaseActivity {
private EditText userEmail;
private EditText userPassword;
private Button createUserButton;
- final Context ctx = this;
- private Context appCtx;
@Override
protected int getLayoutResourceId(){
@@ -45,7 +43,6 @@ public class CreateNewUserActivity extends BaseActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
@@ -73,17 +70,13 @@ public class CreateNewUserActivity extends BaseActivity {
createUserButton.setOnClickListener(createNewUserListener);
}
-
}
private void processCreateNewUser() {
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
AppUtil appUtil = new AppUtil();
- TinyDB tinyDb = new TinyDB(appCtx);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ TinyDB tinyDb = TinyDB.getInstance(appCtx);
String newFullName = fullName.getText().toString().trim();
String newUserName = userUserName.getText().toString().trim();
@@ -94,51 +87,44 @@ public class CreateNewUserActivity extends BaseActivity {
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
return;
-
}
if(newFullName.equals("") || newUserName.equals("") | newUserEmail.equals("") || newUserPassword.equals("")) {
Toasty.error(ctx, getString(R.string.emptyFields));
return;
-
}
if(!appUtil.checkStrings(newFullName)) {
Toasty.error(ctx, getString(R.string.userInvalidFullName));
return;
-
}
if(!appUtil.checkStringsWithAlphaNumeric(newUserName)) {
Toasty.error(ctx, getString(R.string.userInvalidUserName));
return;
-
}
if(!Patterns.EMAIL_ADDRESS.matcher(newUserEmail).matches()) {
Toasty.error(ctx, getString(R.string.userInvalidEmail));
return;
-
}
disableProcessButton();
- createNewUser(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), newFullName, newUserName, newUserEmail, newUserPassword);
-
+ createNewUser(Authorization.get(ctx), newFullName, newUserName, newUserEmail, newUserPassword);
}
- private void createNewUser(final String instanceUrl, final String instanceToken, String newFullName, String newUserName, String newUserEmail, String newUserPassword) {
+ private void createNewUser(final String instanceToken, String newFullName, String newUserName, String newUserEmail, String newUserPassword) {
UserInfo createUser = new UserInfo(newUserEmail, newFullName, newUserName, newUserPassword, newUserName, 0, true);
Call call;
call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
+ .getApiInterface(appCtx)
.createNewUser(instanceToken, createUser);
call.enqueue(new Callback() {
@@ -151,7 +137,6 @@ public class CreateNewUserActivity extends BaseActivity {
Toasty.success(ctx, getString(R.string.userCreatedText));
enableProcessButton();
finish();
-
}
else if(response.code() == 401) {
@@ -160,33 +145,27 @@ public class CreateNewUserActivity extends BaseActivity {
getResources().getString(R.string.alertDialogTokenRevokedMessage),
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
else if(response.code() == 403) {
enableProcessButton();
Toasty.error(ctx, ctx.getString(R.string.authorizeError));
-
}
else if(response.code() == 404) {
enableProcessButton();
Toasty.warning(ctx, ctx.getString(R.string.apiNotFound));
-
}
else if(response.code() == 422) {
enableProcessButton();
Toasty.warning(ctx, ctx.getString(R.string.userExistsError));
-
}
else {
enableProcessButton();
Toasty.error(ctx, getString(R.string.genericError));
-
}
-
}
@Override
@@ -199,7 +178,7 @@ public class CreateNewUserActivity extends BaseActivity {
}
- private View.OnClickListener createNewUserListener = v -> processCreateNewUser();
+ private final View.OnClickListener createNewUserListener = v -> processCreateNewUser();
private void initCloseListener() {
diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateOrganizationActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateOrganizationActivity.java
index e3e6b259..dc4ae0db 100644
--- a/app/src/main/java/org/mian/gitnex/activities/CreateOrganizationActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/CreateOrganizationActivity.java
@@ -1,8 +1,10 @@
package org.mian.gitnex.activities;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
+import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
@@ -32,19 +34,17 @@ public class CreateOrganizationActivity extends BaseActivity {
private EditText orgName;
private EditText orgDesc;
- final Context ctx = this;
- private Context appCtx;
@Override
protected int getLayoutResourceId(){
return R.layout.activity_new_organization;
}
+ @SuppressLint("ClickableViewAccessibility")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
@@ -58,6 +58,17 @@ public class CreateOrganizationActivity extends BaseActivity {
assert imm != null;
imm.showSoftInput(orgName, InputMethodManager.SHOW_IMPLICIT);
+ orgDesc.setOnTouchListener((touchView, motionEvent) -> {
+
+ touchView.getParent().requestDisallowInterceptTouchEvent(true);
+
+ if ((motionEvent.getAction() & MotionEvent.ACTION_UP) != 0 && (motionEvent.getActionMasked() & MotionEvent.ACTION_UP) != 0) {
+
+ touchView.getParent().requestDisallowInterceptTouchEvent(false);
+ }
+ return false;
+ });
+
initCloseListener();
closeActivity.setOnClickListener(onClickListener);
@@ -75,28 +86,17 @@ public class CreateOrganizationActivity extends BaseActivity {
}
private void initCloseListener() {
- onClickListener = new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- finish();
- }
- };
+
+ onClickListener = view -> finish();
}
- private View.OnClickListener createOrgListener = new View.OnClickListener() {
- public void onClick(View v) {
- processNewOrganization();
- }
- };
+ private final View.OnClickListener createOrgListener = v -> processNewOrganization();
private void processNewOrganization() {
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
AppUtil appUtil = new AppUtil();
- TinyDB tinyDb = new TinyDB(appCtx);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ TinyDB tinyDb = TinyDB.getInstance(appCtx);
String newOrgName = orgName.getText().toString();
String newOrgDesc = orgDesc.getText().toString();
@@ -105,44 +105,39 @@ public class CreateOrganizationActivity extends BaseActivity {
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
return;
-
}
if(!newOrgDesc.equals("")) {
+
if (appUtil.charactersLength(newOrgDesc) > 255) {
Toasty.warning(ctx, getString(R.string.orgDescError));
return;
-
}
}
if(newOrgName.equals("")) {
Toasty.error(ctx, getString(R.string.orgNameErrorEmpty));
-
}
else if(!appUtil.checkStrings(newOrgName)) {
Toasty.warning(ctx, getString(R.string.orgNameErrorInvalid));
-
}
else {
disableProcessButton();
- createNewOrganization(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), newOrgName, newOrgDesc);
-
+ createNewOrganization(Authorization.get(ctx), newOrgName, newOrgDesc);
}
}
- private void createNewOrganization(final String instanceUrl, final String token, String orgName, String orgDesc) {
+ private void createNewOrganization(final String token, String orgName, String orgDesc) {
UserOrganizations createOrganization = new UserOrganizations(orgName, null, orgDesc, null, null);
Call call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
+ .getApiInterface(appCtx)
.createNewOrganization(token, createOrganization);
call.enqueue(new Callback() {
@@ -152,12 +147,11 @@ public class CreateOrganizationActivity extends BaseActivity {
if(response.code() == 201) {
- TinyDB tinyDb = new TinyDB(appCtx);
+ TinyDB tinyDb = TinyDB.getInstance(appCtx);
tinyDb.putBoolean("orgCreated", true);
enableProcessButton();
Toasty.success(ctx, getString(R.string.orgCreated));
finish();
-
}
else if(response.code() == 401) {
@@ -166,37 +160,35 @@ public class CreateOrganizationActivity extends BaseActivity {
getResources().getString(R.string.alertDialogTokenRevokedMessage),
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
else if(response.code() == 409) {
enableProcessButton();
Toasty.warning(ctx, getString(R.string.orgExistsError));
-
}
else if(response.code() == 422) {
enableProcessButton();
Toasty.warning(ctx, getString(R.string.orgExistsError));
-
}
else {
if(response.code() == 404) {
+
enableProcessButton();
Toasty.warning(ctx, getString(R.string.apiNotFound));
}
else {
+
enableProcessButton();
Toasty.error(ctx, getString(R.string.orgCreatedError));
}
-
}
-
}
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
+
Log.e("onFailure", t.toString());
enableProcessButton();
}
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 0809b0ba..ed13ab48 100644
--- a/app/src/main/java/org/mian/gitnex/activities/CreatePullRequestActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/CreatePullRequestActivity.java
@@ -1,12 +1,13 @@
package org.mian.gitnex.activities;
+import android.annotation.SuppressLint;
import android.app.DatePickerDialog;
import android.app.Dialog;
-import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
@@ -20,7 +21,6 @@ import org.mian.gitnex.databinding.CustomLabelsSelectionDialogBinding;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.Authorization;
import org.mian.gitnex.helpers.StaticGlobalVariables;
-import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.helpers.Version;
import org.mian.gitnex.models.Branches;
@@ -41,9 +41,6 @@ import retrofit2.Callback;
public class CreatePullRequestActivity extends BaseActivity implements LabelsListAdapter.LabelsListAdapterListener {
private View.OnClickListener onClickListener;
- private Context ctx = this;
- private Context appCtx;
- private TinyDB tinyDb;
private ActivityCreatePrBinding viewBinding;
private CustomLabelsSelectionDialogBinding labelsBinding;
private int resultLimit = StaticGlobalVariables.resultLimitOldGiteaInstances;
@@ -53,7 +50,6 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis
private List assignees = new ArrayList<>();
private int milestoneId;
- private String instanceUrl;
private String loginUid;
private String instanceToken;
private String repoOwner;
@@ -73,30 +69,40 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis
return R.layout.activity_create_pr;
}
+ @SuppressLint("ClickableViewAccessibility")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
- tinyDb = new TinyDB(appCtx);
viewBinding = ActivityCreatePrBinding.inflate(getLayoutInflater());
View view = viewBinding.getRoot();
setContentView(view);
- instanceUrl = tinyDb.getString("instanceUrl");
- loginUid = tinyDb.getString("loginUid");
- String repoFullName = tinyDb.getString("repoFullName");
+ loginUid = tinyDB.getString("loginUid");
+ String repoFullName = tinyDB.getString("repoFullName");
String[] parts = repoFullName.split("/");
repoOwner = parts[0];
repoName = parts[1];
- instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ instanceToken = "token " + tinyDB.getString(loginUid + "-token");
// require gitea 1.12 or higher
- if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
+ if(new Version(tinyDB.getString("giteaVersion")).higherOrEqual("1.12.0")) {
+
resultLimit = StaticGlobalVariables.resultLimitNewGiteaInstances;
}
+ viewBinding.prBody.setOnTouchListener((touchView, motionEvent) -> {
+
+ touchView.getParent().requestDisallowInterceptTouchEvent(true);
+
+ if ((motionEvent.getAction() & MotionEvent.ACTION_UP) != 0 && (motionEvent.getActionMasked() & MotionEvent.ACTION_UP) != 0) {
+
+ touchView.getParent().requestDisallowInterceptTouchEvent(false);
+ }
+ return false;
+ });
+
labelsAdapter = new LabelsListAdapter(labelsList, CreatePullRequestActivity.this, labelsIds);
ImageView closeActivity = findViewById(R.id.close);
@@ -110,16 +116,12 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis
disableProcessButton();
- getMilestones(instanceUrl, instanceToken, repoOwner, repoName, loginUid, resultLimit);
- getBranches(instanceUrl, instanceToken, repoOwner, repoName, loginUid);
+ getMilestones(repoOwner, repoName, resultLimit);
+ getBranches(repoOwner, repoName);
- viewBinding.prLabels.setOnClickListener(prLabels ->
- showLabels()
- );
+ viewBinding.prLabels.setOnClickListener(prLabels -> showLabels());
- viewBinding.createPr.setOnClickListener(createPr ->
- processPullRequest()
- );
+ viewBinding.createPr.setOnClickListener(createPr -> processPullRequest());
}
private void processPullRequest() {
@@ -133,13 +135,16 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis
assignees.add("");
if (labelsIds.size() == 0) {
+
labelsIds.add(0);
}
if (dueDate.matches("")) {
+
dueDate = null;
}
else {
+
dueDate = AppUtil.customDateCombine(AppUtil.customDateFormat(dueDate));
}
@@ -160,9 +165,9 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis
Toasty.error(ctx, getString(R.string.sameBranchesError));
}
else {
+
createPullRequest(prTitle, prDescription, mergeInto, pullFrom, milestoneId, dueDate, assignees);
}
- //Log.e("processPullRequest", String.valueOf(milestoneId));
}
private void createPullRequest(String prTitle, String prDescription, String mergeInto, String pullFrom, int milestoneId, String dueDate, List assignees) {
@@ -170,8 +175,7 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis
CreatePullRequest createPullRequest = new CreatePullRequest(prTitle, prDescription, loginUid, mergeInto, pullFrom, milestoneId, dueDate, assignees, labelsIds);
Call transferCall = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
+ .getApiInterface(appCtx)
.createPullRequest(instanceToken, repoOwner, repoName, createPullRequest);
transferCall.enqueue(new Callback() {
@@ -201,7 +205,6 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis
enableProcessButton();
Toasty.error(ctx, getString(R.string.genericError));
}
-
}
@Override
@@ -231,6 +234,7 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis
dialogLabels = new Dialog(ctx, R.style.ThemeOverlay_MaterialComponents_Dialog_Alert);
if (dialogLabels.getWindow() != null) {
+
dialogLabels.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
}
@@ -239,19 +243,17 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis
View view = labelsBinding.getRoot();
dialogLabels.setContentView(view);
- labelsBinding.cancel.setOnClickListener(editProperties ->
- dialogLabels.dismiss()
- );
+ labelsBinding.cancel.setOnClickListener(editProperties -> dialogLabels.dismiss());
- LabelsActions.getRepositoryLabels(ctx, instanceUrl, instanceToken, repoOwner, repoName, labelsList, dialogLabels, labelsAdapter, labelsBinding);
+ dialogLabels.show();
+ LabelsActions.getRepositoryLabels(ctx, repoOwner, repoName, labelsList, dialogLabels, labelsAdapter, labelsBinding);
}
- private void getBranches(String instanceUrl, String instanceToken, String repoOwner, String repoName, String loginUid) {
+ private void getBranches(String repoOwner, String repoName) {
Call> call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .getBranches(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName);
+ .getApiInterface(ctx)
+ .getBranches(Authorization.get(ctx), repoOwner, repoName);
call.enqueue(new Callback>() {
@@ -259,19 +261,18 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis
public void onResponse(@NonNull Call> call, @NonNull retrofit2.Response> response) {
if(response.isSuccessful()) {
+
if(response.code() == 200) {
List branchesList_ = response.body();
-
assert branchesList_ != null;
+
if(branchesList_.size() > 0) {
+
for (int i = 0; i < branchesList_.size(); i++) {
- Branches data = new Branches(
- branchesList_.get(i).getName()
- );
+ Branches data = new Branches(branchesList_.get(i).getName());
branchesList.add(data);
-
}
}
@@ -296,13 +297,12 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis
}
- private void getMilestones(String instanceUrl, String instanceToken, String repoOwner, String repoName, String loginUid, int resultLimit) {
+ private void getMilestones(String repoOwner, String repoName, int resultLimit) {
String msState = "open";
Call> call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .getMilestones(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, 1, resultLimit, msState);
+ .getApiInterface(appCtx)
+ .getMilestones(Authorization.get(ctx), repoOwner, repoName, 1, resultLimit, msState);
call.enqueue(new Callback>() {
@@ -315,7 +315,9 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis
milestonesList.add(new Milestones(0,getString(R.string.issueCreatedNoMilestone)));
assert milestonesList_ != null;
+
if(milestonesList_.size() > 0) {
+
for (int i = 0; i < milestonesList_.size(); i++) {
//Don't translate "open" is a enum
@@ -326,7 +328,6 @@ public class CreatePullRequestActivity extends BaseActivity implements LabelsLis
);
milestonesList.add(data);
}
-
}
}
diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java
index 99cba7d3..7125d0ca 100644
--- a/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java
@@ -1,24 +1,24 @@
package org.mian.gitnex.activities;
+import android.annotation.SuppressLint;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
+import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
-import android.widget.AdapterView;
import android.widget.ArrayAdapter;
+import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
-import android.widget.Spinner;
import androidx.annotation.NonNull;
import org.mian.gitnex.R;
import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.helpers.AlertDialogs;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.Authorization;
-import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.models.Branches;
import org.mian.gitnex.models.Releases;
@@ -36,14 +36,16 @@ public class CreateReleaseActivity extends BaseActivity {
private View.OnClickListener onClickListener;
public ImageView closeActivity;
private EditText releaseTagName;
- private Spinner releaseBranch;
+ private AutoCompleteTextView releaseBranch;
private EditText releaseTitle;
private EditText releaseContent;
private CheckBox releaseType;
private CheckBox releaseDraft;
private Button createNewRelease;
- final Context ctx = this;
- private Context appCtx;
+ private String selectedBranch;
+
+ private String repoOwner;
+ private String repoName;
List branchesList = new ArrayList<>();
@@ -52,24 +54,20 @@ public class CreateReleaseActivity extends BaseActivity {
return R.layout.activity_create_release;
}
+ @SuppressLint("ClickableViewAccessibility")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- TinyDB tinyDb = new TinyDB(appCtx);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
- String repoFullName = tinyDb.getString("repoFullName");
+ String repoFullName = tinyDB.getString("repoFullName");
String[] parts = repoFullName.split("/");
- final String repoOwner = parts[0];
- final String repoName = parts[1];
+ repoOwner = parts[0];
+ repoName = parts[1];
closeActivity = findViewById(R.id.close);
releaseTagName = findViewById(R.id.releaseTagName);
@@ -78,26 +76,26 @@ public class CreateReleaseActivity extends BaseActivity {
releaseType = findViewById(R.id.releaseType);
releaseDraft = findViewById(R.id.releaseDraft);
- releaseTagName.requestFocus();
+ releaseTitle.requestFocus();
assert imm != null;
- imm.showSoftInput(releaseTagName, InputMethodManager.SHOW_IMPLICIT);
+ imm.showSoftInput(releaseTitle, InputMethodManager.SHOW_IMPLICIT);
+
+ releaseContent.setOnTouchListener((touchView, motionEvent) -> {
+
+ touchView.getParent().requestDisallowInterceptTouchEvent(true);
+
+ if ((motionEvent.getAction() & MotionEvent.ACTION_UP) != 0 && (motionEvent.getActionMasked() & MotionEvent.ACTION_UP) != 0) {
+
+ touchView.getParent().requestDisallowInterceptTouchEvent(false);
+ }
+ return false;
+ });
initCloseListener();
closeActivity.setOnClickListener(onClickListener);
releaseBranch = findViewById(R.id.releaseBranch);
- getBranches(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName);
- releaseBranch.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView> parent, View view, int position, long id) {
- Branches branch = (Branches) parent.getSelectedItem();
- }
-
- @Override
- public void onNothingSelected(AdapterView> parent) {
-
- }
- });
+ getBranches(Authorization.get(ctx), repoOwner, repoName);
createNewRelease = findViewById(R.id.createNewRelease);
disableProcessButton();
@@ -113,25 +111,16 @@ public class CreateReleaseActivity extends BaseActivity {
}
- private View.OnClickListener createReleaseListener = v -> processNewRelease();
+ private final View.OnClickListener createReleaseListener = v -> processNewRelease();
private void processNewRelease() {
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
- TinyDB tinyDb = new TinyDB(appCtx);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
- String repoFullName = tinyDb.getString("repoFullName");
- String[] parts = repoFullName.split("/");
- final String repoOwner = parts[0];
- final String repoName = parts[1];
-
String newReleaseTagName = releaseTagName.getText().toString();
String newReleaseTitle = releaseTitle.getText().toString();
String newReleaseContent = releaseContent.getText().toString();
- String newReleaseBranch = releaseBranch.getSelectedItem().toString();
+ String checkBranch = selectedBranch;
boolean newReleaseType = releaseType.isChecked();
boolean newReleaseDraft = releaseDraft.isChecked();
@@ -139,37 +128,38 @@ public class CreateReleaseActivity extends BaseActivity {
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
return;
-
}
+ if(newReleaseTitle.equals("")) {
+
+ Toasty.error(ctx, getString(R.string.titleErrorEmpty));
+ return;
+ }
+
if(newReleaseTagName.equals("")) {
Toasty.error(ctx, getString(R.string.tagNameErrorEmpty));
return;
-
}
- if(newReleaseTitle.equals("")) {
+ if(checkBranch == null) {
- Toasty.error(ctx, getString(R.string.titleErrorEmpty));
- return;
-
- }
+ Toasty.error(ctx, getString(R.string.selectBranchError));
+ return;
+ }
disableProcessButton();
- createNewReleaseFunc(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, newReleaseTagName, newReleaseTitle, newReleaseContent, newReleaseBranch, newReleaseType, newReleaseDraft);
-
+ createNewReleaseFunc(Authorization.get(ctx), repoOwner, repoName, newReleaseTagName, newReleaseTitle, newReleaseContent, selectedBranch, newReleaseType, newReleaseDraft);
}
- private void createNewReleaseFunc(final String instanceUrl, final String token, String repoOwner, String repoName, String newReleaseTagName, String newReleaseTitle, String newReleaseContent, String newReleaseBranch, boolean newReleaseType, boolean newReleaseDraft) {
+ private void createNewReleaseFunc(final String token, String repoOwner, String repoName, String newReleaseTagName, String newReleaseTitle, String newReleaseContent, String selectedBranch, boolean newReleaseType, boolean newReleaseDraft) {
- Releases createReleaseJson = new Releases(newReleaseContent, newReleaseDraft, newReleaseTitle, newReleaseType, newReleaseTagName, newReleaseBranch);
+ Releases createReleaseJson = new Releases(newReleaseContent, newReleaseDraft, newReleaseTitle, newReleaseType, newReleaseTagName, selectedBranch);
Call call;
call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
+ .getApiInterface(ctx)
.createNewRelease(token, repoOwner, repoName, createReleaseJson);
call.enqueue(new Callback() {
@@ -179,12 +169,10 @@ public class CreateReleaseActivity extends BaseActivity {
if (response.code() == 201) {
- TinyDB tinyDb = new TinyDB(appCtx);
- tinyDb.putBoolean("updateReleases", true);
+ tinyDB.putBoolean("updateReleases", true);
Toasty.success(ctx, getString(R.string.releaseCreatedText));
enableProcessButton();
finish();
-
}
else if(response.code() == 401) {
@@ -193,31 +181,27 @@ public class CreateReleaseActivity extends BaseActivity {
ctx.getResources().getString(R.string.alertDialogTokenRevokedMessage),
ctx.getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
ctx.getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
else if(response.code() == 403) {
enableProcessButton();
Toasty.error(ctx, ctx.getString(R.string.authorizeError));
-
}
else if(response.code() == 404) {
enableProcessButton();
Toasty.warning(ctx, ctx.getString(R.string.apiNotFound));
-
}
else {
enableProcessButton();
Toasty.error(ctx, ctx.getString(R.string.genericError));
-
}
-
}
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
+
Log.e("onFailure", t.toString());
enableProcessButton();
}
@@ -225,11 +209,10 @@ public class CreateReleaseActivity extends BaseActivity {
}
- private void getBranches(String instanceUrl, String instanceToken, final String repoOwner, final String repoName) {
+ private void getBranches(String instanceToken, final String repoOwner, final String repoName) {
Call> call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
+ .getApiInterface(ctx)
.getBranches(instanceToken, repoOwner, repoName);
call.enqueue(new Callback>() {
@@ -238,29 +221,27 @@ public class CreateReleaseActivity extends BaseActivity {
public void onResponse(@NonNull Call> call, @NonNull retrofit2.Response> response) {
if(response.isSuccessful()) {
+
if(response.code() == 200) {
List branchesList_ = response.body();
assert branchesList_ != null;
if(branchesList_.size() > 0) {
- for (int i = 0; i < branchesList_.size(); i++) {
- Branches data = new Branches(
- branchesList_.get(i).getName()
- );
- branchesList.add(data);
-
- }
+ branchesList.addAll(branchesList_);
}
- ArrayAdapter adapter = new ArrayAdapter<>(CreateReleaseActivity.this,
- R.layout.spinner_item, branchesList);
+ ArrayAdapter adapter = new ArrayAdapter<>(CreateReleaseActivity.this,
+ R.layout.list_spinner_items, branchesList);
- adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
releaseBranch.setAdapter(adapter);
enableProcessButton();
+ releaseBranch.setOnItemClickListener ((parent, view, position, id) ->
+
+ selectedBranch = branchesList.get(position).getName()
+ );
}
}
else if(response.code() == 401) {
@@ -269,13 +250,13 @@ public class CreateReleaseActivity extends BaseActivity {
getResources().getString(R.string.alertDialogTokenRevokedMessage),
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
}
@Override
public void onFailure(@NonNull Call> call, @NonNull Throwable t) {
+
Log.e("onFailure", t.toString());
}
});
@@ -283,12 +264,8 @@ public class CreateReleaseActivity extends BaseActivity {
}
private void initCloseListener() {
- onClickListener = new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- finish();
- }
- };
+
+ onClickListener = view -> finish();
}
private void disableProcessButton() {
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 c231068d..88d6028a 100644
--- a/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java
@@ -2,16 +2,17 @@ package org.mian.gitnex.activities;
import android.content.Context;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
-import android.widget.AdapterView;
import android.widget.ArrayAdapter;
+import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
-import android.widget.Spinner;
import androidx.annotation.NonNull;
import org.mian.gitnex.R;
import org.mian.gitnex.clients.RetrofitClient;
@@ -37,15 +38,18 @@ public class CreateRepoActivity extends BaseActivity {
public ImageView closeActivity;
private View.OnClickListener onClickListener;
- private Spinner spinner;
+ private AutoCompleteTextView spinner;
private Button createRepo;
private EditText repoName;
private EditText repoDesc;
private CheckBox repoAccess;
- final Context ctx = this;
- private Context appCtx;
- List organizationsList = new ArrayList<>();
+ private String loginUid;
+ private String userLogin;
+
+ private String selectedOwner;
+
+ List organizationsList = new ArrayList<>();
//https://github.com/go-gitea/gitea/blob/52cfd2743c0e85b36081cf80a850e6a5901f1865/models/repo.go#L964-L967
final List reservedRepoNames = Arrays.asList(".", "..");
@@ -60,15 +64,11 @@ public class CreateRepoActivity extends BaseActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
boolean connToInternet = AppUtil.hasNetworkConnection(ctx);
- TinyDB tinyDb = new TinyDB(appCtx);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String userLogin = tinyDb.getString("userLogin");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ loginUid = tinyDB.getString("loginUid");
+ userLogin = tinyDB.getString("userLogin");
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
@@ -85,19 +85,7 @@ public class CreateRepoActivity extends BaseActivity {
closeActivity.setOnClickListener(onClickListener);
spinner = findViewById(R.id.ownerSpinner);
- getOrganizations(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), userLogin);
-
- spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView> parent, View view, int position, long id) {
- OrgOwner user = (OrgOwner) parent.getSelectedItem();
- }
-
- @Override
- public void onNothingSelected(AdapterView> parent) {
-
- }
- });
+ getOrganizations(Authorization.get(ctx), userLogin);
createRepo = findViewById(R.id.createNewRepoButton);
disableProcessButton();
@@ -112,24 +100,15 @@ public class CreateRepoActivity extends BaseActivity {
}
}
- private View.OnClickListener createRepoListener = new View.OnClickListener() {
- public void onClick(View v) {
- processNewRepo();
- }
- };
+ private final View.OnClickListener createRepoListener = v -> processNewRepo();
private void processNewRepo() {
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
AppUtil appUtil = new AppUtil();
- TinyDB tinyDb = new TinyDB(appCtx);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
String newRepoName = repoName.getText().toString();
String newRepoDesc = repoDesc.getText().toString();
- String repoOwner = spinner.getSelectedItem().toString();
boolean newRepoAccess = repoAccess.isChecked();
if(!connToInternet) {
@@ -139,6 +118,7 @@ public class CreateRepoActivity extends BaseActivity {
}
if(!newRepoDesc.equals("")) {
+
if (appUtil.charactersLength(newRepoDesc) > 255) {
Toasty.warning(ctx, getString(R.string.repoDescError));
@@ -161,32 +141,34 @@ public class CreateRepoActivity extends BaseActivity {
else if (reservedRepoPatterns.matcher(newRepoName).find()) {
Toasty.warning(ctx, getString(R.string.repoNameErrorReservedPatterns));
+ }
+ else if(selectedOwner == null) {
+
+ Toasty.error(ctx, getString(R.string.repoOwnerError));
}
else {
disableProcessButton();
- createNewRepository(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), loginUid, newRepoName, newRepoDesc, repoOwner, newRepoAccess);
+ createNewRepository(Authorization.get(ctx), loginUid, newRepoName, newRepoDesc, selectedOwner, newRepoAccess);
}
}
- private void createNewRepository(final String instanceUrl, final String token, String loginUid, String repoName, String repoDesc, String repoOwner, boolean isPrivate) {
+ private void createNewRepository(final String token, String loginUid, String repoName, String repoDesc, String selectedOwner, boolean isPrivate) {
OrganizationRepository createRepository = new OrganizationRepository(true, repoDesc, null, null, repoName, isPrivate, "Default");
Call call;
- if(repoOwner.equals(loginUid)) {
+ if(selectedOwner.equals(loginUid)) {
call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
+ .getApiInterface(ctx)
.createNewUserRepository(token, createRepository);
}
else {
call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .createNewUserOrgRepository(token, repoOwner, createRepository);
+ .getApiInterface(ctx)
+ .createNewUserOrgRepository(token, selectedOwner, createRepository);
}
call.enqueue(new Callback() {
@@ -196,7 +178,7 @@ public class CreateRepoActivity extends BaseActivity {
if(response.code() == 201) {
- TinyDB tinyDb = new TinyDB(appCtx);
+ TinyDB tinyDb = TinyDB.getInstance(appCtx);
tinyDb.putBoolean("repoCreated", true);
Toasty.success(ctx, getString(R.string.repoCreated));
enableProcessButton();
@@ -220,7 +202,6 @@ public class CreateRepoActivity extends BaseActivity {
enableProcessButton();
Toasty.error(ctx, getString(R.string.repoCreatedError));
}
-
}
@Override
@@ -232,13 +213,10 @@ public class CreateRepoActivity extends BaseActivity {
});
}
- private void getOrganizations(String instanceUrl, String instanceToken, final String userLogin) {
-
- TinyDB tinyDb = new TinyDB(appCtx);
+ private void getOrganizations(String instanceToken, final String userLogin) {
Call> call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
+ .getApiInterface(ctx)
.getOrgOwners(instanceToken);
call.enqueue(new Callback>() {
@@ -246,59 +224,58 @@ public class CreateRepoActivity extends BaseActivity {
@Override
public void onResponse(@NonNull Call> call, @NonNull retrofit2.Response> response) {
- if(response.isSuccessful()) {
- if(response.code() == 200) {
+ if(response.code() == 200) {
- int organizationId = 0;
+ int organizationId = 0;
- List organizationsList_ = response.body();
+ List organizationsList_ = response.body();
- organizationsList.add(new OrgOwner(userLogin));
- assert organizationsList_ != null;
- if(organizationsList_.size() > 0) {
+ organizationsList.add(new OrgOwner(userLogin));
+ assert organizationsList_ != null;
- for (int i = 0; i < organizationsList_.size(); i++) {
+ if(organizationsList_.size() > 0) {
- if(!tinyDb.getString("organizationId").isEmpty()) {
+ for(int i = 0; i < organizationsList_.size(); i++) {
- if (Integer.parseInt(tinyDb.getString("organizationId")) == organizationsList_.get(i).getId()) {
- organizationId = i + 1;
- }
- }
+ if(!tinyDB.getString("organizationId").isEmpty()) {
- OrgOwner data = new OrgOwner(
- organizationsList_.get(i).getUsername()
- );
- organizationsList.add(data);
+ if(Integer.parseInt(tinyDB.getString("organizationId")) == organizationsList_.get(i).getId()) {
+ organizationId = i + 1;
+ }
+ }
- }
- }
+ OrgOwner data = new OrgOwner(organizationsList_.get(i).getUsername());
+ organizationsList.add(data);
+ }
+ }
- ArrayAdapter adapter = new ArrayAdapter<>(CreateRepoActivity.this,
- R.layout.spinner_item, organizationsList);
+ ArrayAdapter adapter = new ArrayAdapter<>(CreateRepoActivity.this, R.layout.list_spinner_items, organizationsList);
- adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
- spinner.setAdapter(adapter);
+ spinner.setAdapter(adapter);
- if (tinyDb.getBoolean("organizationAction") & organizationId != 0) {
+ spinner.setOnItemClickListener ((parent, view, position, id) -> selectedOwner = organizationsList.get(position).getUsername());
- spinner.setSelection(organizationId);
- tinyDb.putBoolean("organizationAction", false);
- }
+ if(tinyDB.getBoolean("organizationAction") & organizationId != 0) {
- enableProcessButton();
+ int selectOwnerById = organizationId;
+ new Handler(Looper.getMainLooper()).postDelayed(() -> {
- }
- }
- else if(response.code() == 401) {
+ spinner.setText(organizationsList.get(selectOwnerById).getUsername(), false);
+ selectedOwner = organizationsList.get(selectOwnerById).getUsername();
+ }, 500);
- enableProcessButton();
- AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle),
- getResources().getString(R.string.alertDialogTokenRevokedMessage),
- getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
- getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
- }
+ tinyDB.putBoolean("organizationAction", false);
+ }
+ enableProcessButton();
+ }
+
+ else if(response.code() == 401) {
+
+ enableProcessButton();
+ AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle), getResources().getString(R.string.alertDialogTokenRevokedMessage),
+ getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton), getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
+ }
}
@Override
diff --git a/app/src/main/java/org/mian/gitnex/activities/CreateTeamByOrgActivity.java b/app/src/main/java/org/mian/gitnex/activities/CreateTeamByOrgActivity.java
index 7f7739de..0abc64be 100644
--- a/app/src/main/java/org/mian/gitnex/activities/CreateTeamByOrgActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/CreateTeamByOrgActivity.java
@@ -31,8 +31,6 @@ import retrofit2.Callback;
public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClickListener {
- final Context ctx = CreateTeamByOrgActivity.this;
- private Context appCtx;
private View.OnClickListener onClickListener;
private TextView teamName;
private TextView teamDesc;
@@ -41,7 +39,7 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
private TextView teamAccessControls;
private TextView teamAccessControlsArray;
private Button createTeamButton;
- private String[] permissionList = {"Read", "Write", "Admin"};
+ private final String[] permissionList = {"Read", "Write", "Admin"};
public int permissionSelectedChoice = -1;
@Override
@@ -49,7 +47,7 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
return R.layout.activity_create_team_by_org;
}
- private String[] accessControlsList = new String[] {
+ private final String[] accessControlsList = new String[] {
"Code",
"Issues",
"Pull Request",
@@ -61,7 +59,7 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
private List pushAccessList;
- private boolean[] selectedAccessControlsTrueFalse = new boolean[]{
+ private final boolean[] selectedAccessControlsTrueFalse = new boolean[]{
false,
false,
false,
@@ -75,7 +73,6 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
@@ -102,12 +99,8 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
AlertDialog.Builder pBuilder = new AlertDialog.Builder(ctx);
pBuilder.setTitle(R.string.newTeamPermission);
- if(permissionSelectedChoice != -1) {
- pBuilder.setCancelable(true);
- }
- else {
- pBuilder.setCancelable(false);
- }
+ pBuilder.setCancelable(permissionSelectedChoice != -1);
+
pBuilder.setSingleChoiceItems(permissionList, permissionSelectedChoice, (dialogInterface, i) -> {
permissionSelectedChoice = i;
@@ -136,15 +129,12 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
}
dialogInterface.dismiss();
-
});
AlertDialog pDialog = pBuilder.create();
pDialog.show();
-
});
-
teamAccessControls.setOnClickListener(v -> {
teamAccessControls.setText("");
@@ -189,6 +179,7 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
}
if(value){
+
teamAccessControls.setText(getString(R.string.newTeamPermissionValues, teamAccessControls.getText(), pushAccessList.get(selectedVal)));
teamAccessControlsArray.setText(getString(R.string.newTeamPermissionValuesFinal, teamAccessControlsArray.getText(), repoCode));
}
@@ -198,15 +189,16 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
String data = String.valueOf(teamAccessControls.getText());
if(!data.equals("")) {
+
teamAccessControls.setText(data.substring(0, data.length() - 2));
}
String dataArray = String.valueOf(teamAccessControlsArray.getText());
+
if(!dataArray.equals("")) {
+
teamAccessControlsArray.setText(dataArray.substring(0, dataArray.length() - 2));
}
- //Log.i("orgName", String.valueOf(teamAccessControlsArray.getText()));
-
});
AlertDialog aDialog = aDialogBuilder.create();
@@ -222,21 +214,18 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
shape.setCornerRadius( 8 );
shape.setColor(getResources().getColor(R.color.hintColor));
createTeamButton.setBackground(shape);
-
- } else {
+ }
+ else {
createTeamButton.setEnabled(true);
createTeamButton.setOnClickListener(this);
-
}
-
}
private void processCreateTeam() {
AppUtil appUtil = new AppUtil();
- final TinyDB tinyDb = new TinyDB(appCtx);
- final String instanceUrl = tinyDb.getString("instanceUrl");
+ final TinyDB tinyDb = TinyDB.getInstance(appCtx);
final String loginUid = tinyDb.getString("loginUid");
final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
final String orgName = tinyDb.getString("orgName");;
@@ -251,64 +240,60 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
return;
-
}
if (newTeamName.equals("")) {
Toasty.error(ctx, getString(R.string.teamNameEmpty));
return;
-
}
if(!appUtil.checkStringsWithAlphaNumericDashDotUnderscore(newTeamName)) {
Toasty.warning(ctx, getString(R.string.teamNameError));
return;
-
}
if(!newTeamDesc.equals("")) {
if(!appUtil.checkStrings(newTeamDesc)) {
+
Toasty.warning(ctx, getString(R.string.teamDescError));
return;
}
if(newTeamDesc.length() > 100) {
+
Toasty.warning(ctx, getString(R.string.teamDescLimit));
return;
}
-
}
if (newTeamPermission.equals("")) {
Toasty.error(ctx, getString(R.string.teamPermissionEmpty));
return;
-
}
List newTeamAccessControls_ = new ArrayList<>(Arrays.asList(newTeamAccessControls.split(",")));
for (int i = 0; i < newTeamAccessControls_.size(); i++) {
+
newTeamAccessControls_.set(i, newTeamAccessControls_.get(i).trim());
}
- createNewTeamCall(instanceUrl, instanceToken, orgName, newTeamName, newTeamDesc, newTeamPermission, newTeamAccessControls_, loginUid);
-
+ createNewTeamCall(instanceToken, orgName, newTeamName, newTeamDesc, newTeamPermission, newTeamAccessControls_, loginUid);
}
- private void createNewTeamCall(final String instanceUrl, final String instanceToken, String orgName, String newTeamName, String newTeamDesc, String newTeamPermission, List newTeamAccessControls, String loginUid) {
+ private void createNewTeamCall(final String instanceToken, String orgName, String newTeamName, String newTeamDesc, String newTeamPermission, List newTeamAccessControls, String loginUid) {
Teams createNewTeamJson = new Teams(newTeamName, newTeamDesc, newTeamPermission, newTeamAccessControls);
Call call3;
call3 = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .createTeamsByOrg(Authorization.returnAuthentication(ctx, loginUid, instanceToken), orgName, createNewTeamJson);
+ .getApiInterface(ctx)
+ .createTeamsByOrg(Authorization.get(ctx), orgName, createNewTeamJson);
call3.enqueue(new Callback() {
@@ -316,15 +301,15 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response2) {
if(response2.isSuccessful()) {
+
if(response2.code() == 201) {
- TinyDB tinyDb = new TinyDB(appCtx);
+ TinyDB tinyDb = TinyDB.getInstance(appCtx);
tinyDb.putBoolean("resumeTeams", true);
Toasty.success(ctx, getString(R.string.teamCreated));
finish();
}
-
}
else if(response2.code() == 404) {
@@ -341,7 +326,6 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
Toasty.error(ctx, getString(R.string.teamCreatedError));
}
-
}
@Override
@@ -356,6 +340,7 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
public void onClick(View v) {
if(v == createTeamButton) {
+
processCreateTeam();
}
}
diff --git a/app/src/main/java/org/mian/gitnex/activities/DeepLinksActivity.java b/app/src/main/java/org/mian/gitnex/activities/DeepLinksActivity.java
new file mode 100644
index 00000000..cdb39050
--- /dev/null
+++ b/app/src/main/java/org/mian/gitnex/activities/DeepLinksActivity.java
@@ -0,0 +1,455 @@
+package org.mian.gitnex.activities;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.util.Log;
+import android.view.View;
+import androidx.annotation.NonNull;
+import org.apache.commons.lang3.StringUtils;
+import org.mian.gitnex.R;
+import org.mian.gitnex.clients.RetrofitClient;
+import org.mian.gitnex.database.api.RepositoriesApi;
+import org.mian.gitnex.database.api.UserAccountsApi;
+import org.mian.gitnex.database.models.Repository;
+import org.mian.gitnex.database.models.UserAccount;
+import org.mian.gitnex.databinding.ActivityDeeplinksBinding;
+import org.mian.gitnex.helpers.UrlHelper;
+import org.mian.gitnex.models.PullRequests;
+import org.mian.gitnex.models.UserRepositories;
+import java.net.URI;
+import java.util.List;
+import java.util.Objects;
+import io.mikael.urlbuilder.UrlBuilder;
+import retrofit2.Call;
+import retrofit2.Callback;
+
+/**
+ * Author M M Arif
+ */
+
+public class DeepLinksActivity extends BaseActivity {
+
+ private ActivityDeeplinksBinding viewBinding;
+ private String currentInstance;
+ private String instanceToken;
+ private boolean accountFound = false;
+
+ private Intent mainIntent;
+ private Intent issueIntent;
+ private Intent repoIntent;
+
+ @Override
+ protected int getLayoutResourceId() {
+
+ return R.layout.activity_deeplinks;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+
+ super.onCreate(savedInstanceState);
+
+ viewBinding = ActivityDeeplinksBinding.inflate(getLayoutInflater());
+ View view = viewBinding.getRoot();
+ setContentView(view);
+
+ mainIntent = new Intent(ctx, MainActivity.class);
+ issueIntent = new Intent(ctx, IssueDetailActivity.class);
+ repoIntent = new Intent(ctx, RepoDetailActivity.class);
+
+ Intent intent = getIntent();
+ Uri data = intent.getData();
+ assert data != null;
+
+ // check for login
+ if(!tinyDB.getBoolean("loggedInMode")) {
+
+ finish();
+ ctx.startActivity(new Intent(ctx, LoginActivity.class));
+ }
+
+ // check for the links(URI) to be in the db
+ UserAccountsApi userAccountsApi = new UserAccountsApi(ctx);
+ List userAccounts = userAccountsApi.usersAccounts();
+
+ for(UserAccount userAccount : userAccounts) {
+
+ String hostUri = userAccount.getInstanceUrl();
+
+ currentInstance = userAccount.getInstanceUrl();
+ instanceToken = userAccount.getToken();
+
+ if(hostUri.toLowerCase().contains(Objects.requireNonNull(data.getHost().toLowerCase()))) {
+
+ accountFound = true;
+ break;
+ }
+ }
+
+ if(accountFound) {
+
+ // redirect to proper fragment/activity, If no action is there, show options where user to want to go like repos, profile, notifications etc
+ if(data.getPathSegments().size() > 0) {
+
+ viewBinding.progressBar.setVisibility(View.GONE);
+ String[] restOfUrl = Objects.requireNonNull(data.getPath()).split("/");
+
+ if(data.getPathSegments().contains("issues")) { // issue
+
+ if(!Objects.requireNonNull(data.getLastPathSegment()).contains("issues") & StringUtils.isNumeric(data.getLastPathSegment())) {
+
+ issueIntent.putExtra("issueNumber", data.getLastPathSegment());
+
+ tinyDB.putString("issueNumber", data.getLastPathSegment());
+ tinyDB.putString("issueType", "Issue");
+
+ tinyDB.putString("repoFullName", restOfUrl[restOfUrl.length - 4] + "/" + restOfUrl[restOfUrl.length - 3]);
+
+ final String repoOwner = restOfUrl[restOfUrl.length - 4];
+ final String repoName = restOfUrl[restOfUrl.length - 3];
+
+ int currentActiveAccountId = tinyDB.getInt("currentActiveAccountId");
+ RepositoriesApi repositoryData = new RepositoriesApi(ctx);
+
+ Integer count = repositoryData.checkRepository(currentActiveAccountId, repoOwner, repoName);
+
+ if(count == 0) {
+
+ long id = repositoryData.insertRepository(currentActiveAccountId, repoOwner, repoName);
+ tinyDB.putLong("repositoryId", id);
+ }
+ else {
+
+ Repository dataRepo = repositoryData.getRepository(currentActiveAccountId, repoOwner, repoName);
+ tinyDB.putLong("repositoryId", dataRepo.getRepositoryId());
+ }
+
+ ctx.startActivity(issueIntent);
+ finish();
+ }
+ else if(Objects.requireNonNull(data.getLastPathSegment()).contains("issues")) {
+
+ new Handler(Looper.getMainLooper()).postDelayed(() -> {
+
+ goToRepoSection(currentInstance, instanceToken, restOfUrl[restOfUrl.length - 3], restOfUrl[restOfUrl.length - 2], "issue");
+ }, 500);
+ }
+ else {
+
+ ctx.startActivity(mainIntent);
+ finish();
+ }
+ }
+ else if(data.getPathSegments().contains("pulls")) { // pr
+
+ if(!Objects.requireNonNull(data.getLastPathSegment()).contains("pulls") & StringUtils.isNumeric(data.getLastPathSegment())) {
+
+ new Handler(Looper.getMainLooper()).postDelayed(() -> {
+
+ getPullRequest(currentInstance, instanceToken, restOfUrl[restOfUrl.length - 4], restOfUrl[restOfUrl.length - 3], Integer.parseInt(data.getLastPathSegment()));
+ }, 500);
+
+ }
+ else if(Objects.requireNonNull(data.getLastPathSegment()).contains("pulls")) {
+
+ new Handler(Looper.getMainLooper()).postDelayed(() -> {
+
+ goToRepoSection(currentInstance, instanceToken, restOfUrl[restOfUrl.length - 3], restOfUrl[restOfUrl.length - 2], "pull");
+ }, 500);
+ }
+ else {
+
+ ctx.startActivity(mainIntent);
+ finish();
+ }
+ }
+ else if(data.getPathSegments().contains("commit")) { // commits (no API yet to properly implement)
+
+ new Handler(Looper.getMainLooper()).postDelayed(() -> {
+
+ goToRepoSection(currentInstance, instanceToken, restOfUrl[restOfUrl.length - 4], restOfUrl[restOfUrl.length - 3], "pull");
+ }, 500);
+ }
+ else if(!restOfUrl[restOfUrl.length - 2].equals("") & !restOfUrl[restOfUrl.length - 1].equals("")) { // go to repo
+
+ new Handler(Looper.getMainLooper()).postDelayed(() -> {
+
+ goToRepoSection(currentInstance, instanceToken, restOfUrl[restOfUrl.length - 2], restOfUrl[restOfUrl.length - 1], "repo");
+ }, 500);
+ }
+ else { // no action, show options
+
+ if(tinyDB.getInt("defaultScreenId") == 1) { // repos
+
+ mainIntent.putExtra("launchFragmentByLinkHandler", "repos");
+ ctx.startActivity(mainIntent);
+ finish();
+ }
+ else if(tinyDB.getInt("defaultScreenId") == 2) { // org
+
+ mainIntent.putExtra("launchFragmentByLinkHandler", "org");
+ ctx.startActivity(mainIntent);
+ finish();
+ }
+ else if(tinyDB.getInt("defaultScreenId") == 3) { // notifications
+
+ mainIntent.putExtra("launchFragmentByLinkHandler", "notification");
+ ctx.startActivity(mainIntent);
+ finish();
+ }
+ else if(tinyDB.getInt("defaultScreenId") == 4) { // explore
+
+ mainIntent.putExtra("launchFragmentByLinkHandler", "explore");
+ ctx.startActivity(mainIntent);
+ finish();
+ }
+ else if(tinyDB.getInt("defaultScreenId") == 0) { // show options
+
+ viewBinding.noActionFrame.setVisibility(View.VISIBLE);
+ viewBinding.addNewAccountFrame.setVisibility(View.GONE);
+
+ viewBinding.repository.setOnClickListener(repository -> {
+
+ tinyDB.putInt("defaultScreenId", 1);
+ mainIntent.putExtra("launchFragmentByLinkHandler", "repos");
+ ctx.startActivity(mainIntent);
+ finish();
+ });
+
+ viewBinding.organization.setOnClickListener(organization -> {
+
+ tinyDB.putInt("defaultScreenId", 2);
+ mainIntent.putExtra("launchFragmentByLinkHandler", "org");
+ ctx.startActivity(mainIntent);
+ finish();
+ });
+
+ viewBinding.notification.setOnClickListener(notification -> {
+
+ tinyDB.putInt("defaultScreenId", 3);
+ mainIntent.putExtra("launchFragmentByLinkHandler", "notification");
+ ctx.startActivity(mainIntent);
+ finish();
+ });
+
+ viewBinding.explore.setOnClickListener(explore -> {
+
+ tinyDB.putInt("defaultScreenId", 4);
+ mainIntent.putExtra("launchFragmentByLinkHandler", "explore");
+ ctx.startActivity(mainIntent);
+ finish();
+ });
+
+ viewBinding.launchApp2.setOnClickListener(launchApp2 -> {
+
+ tinyDB.putInt("defaultScreenId", 0);
+ ctx.startActivity(mainIntent);
+ finish();
+ });
+ }
+ }
+ }
+ else {
+
+ startActivity(mainIntent);
+ finish();
+ }
+ }
+ else {
+
+ viewBinding.progressBar.setVisibility(View.GONE);
+ viewBinding.addNewAccountFrame.setVisibility(View.VISIBLE);
+ viewBinding.noActionFrame.setVisibility(View.GONE);
+ viewBinding.addAccountText.setText(String.format(getResources().getString(R.string.accountDoesNotExist), data.getHost()));
+
+ viewBinding.addNewAccount.setOnClickListener(addNewAccount -> {
+
+ Intent accountIntent = new Intent(ctx, AddNewAccountActivity.class);
+ startActivity(accountIntent);
+ finish();
+ });
+
+ viewBinding.openInBrowser.setOnClickListener(addNewAccount -> {
+
+ Integer port = data.getPort() >= 0 ? data.getPort() : null;
+
+ URI host = UrlBuilder.fromString(UrlHelper.fixScheme(data.getHost(), "https"))
+ .withPort(port)
+ .toUri();
+
+ Intent intentBrowser = new Intent();
+
+ intentBrowser.setAction(Intent.ACTION_VIEW);
+ intentBrowser.addCategory(Intent.CATEGORY_BROWSABLE);
+ intentBrowser.setData(Uri.parse(String.valueOf(host)));
+
+ startActivity(intentBrowser);
+ finish();
+
+ });
+
+ viewBinding.launchApp.setOnClickListener(launchApp -> {
+
+ startActivity(mainIntent);
+ finish();
+ });
+ }
+ }
+
+ private void getPullRequest(String url, String token, String repoOwner, String repoName, int index) {
+
+ Call call = RetrofitClient
+ .getApiInterface(ctx, url)
+ .getPullRequestByIndex(token, repoOwner, repoName, index);
+
+ call.enqueue(new Callback() {
+
+ @Override
+ public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) {
+
+ PullRequests prInfo = response.body();
+
+ if (response.code() == 200) {
+
+ assert prInfo != null;
+
+ issueIntent.putExtra("issueNumber", index);
+ issueIntent.putExtra("prMergeable", prInfo.isMergeable());
+
+ if(prInfo.getHead() != null) {
+
+ issueIntent.putExtra("prHeadBranch", prInfo.getHead().getRef());
+ tinyDB.putString("prHeadBranch", prInfo.getHead().getRef());
+
+ if(prInfo.getHead().getRepo() != null) {
+
+ tinyDB.putString("prIsFork", String.valueOf(prInfo.getHead().getRepo().isFork()));
+ tinyDB.putString("prForkFullName", prInfo.getHead().getRepo().getFull_name());
+ }
+ else {
+
+ // pull was done from a deleted fork
+ tinyDB.putString("prIsFork", "true");
+ tinyDB.putString("prForkFullName", ctx.getString(R.string.prDeletedFrok));
+ }
+ }
+
+ tinyDB.putString("issueNumber", String.valueOf(index));
+ tinyDB.putString("prMergeable", String.valueOf(prInfo.isMergeable()));
+ tinyDB.putString("issueType", "Pull");
+
+ tinyDB.putString("repoFullName", repoOwner + "/" + repoName);
+
+ int currentActiveAccountId = tinyDB.getInt("currentActiveAccountId");
+ RepositoriesApi repositoryData = new RepositoriesApi(ctx);
+
+ Integer count = repositoryData.checkRepository(currentActiveAccountId, repoOwner, repoName);
+
+ if(count == 0) {
+
+ long id = repositoryData.insertRepository(currentActiveAccountId, repoOwner, repoName);
+ tinyDB.putLong("repositoryId", id);
+ }
+ else {
+
+ Repository dataRepo = repositoryData.getRepository(currentActiveAccountId, repoOwner, repoName);
+ tinyDB.putLong("repositoryId", dataRepo.getRepositoryId());
+ }
+
+ ctx.startActivity(issueIntent);
+ finish();
+ }
+
+ else {
+
+ ctx.startActivity(issueIntent);
+ finish();
+ Log.e("onFailure-links-pr", String.valueOf(response.code()));
+ }
+ }
+
+ @Override
+ public void onFailure(@NonNull Call call, @NonNull Throwable t) {
+
+ ctx.startActivity(issueIntent);
+ finish();
+ Log.e("onFailure-links-pr", t.toString());
+ }
+ });
+ }
+
+ private void goToRepoSection(String url, String token, String repoOwner, String repoName, String type) {
+
+ Call call = RetrofitClient
+ .getApiInterface(ctx, url)
+ .getUserRepository(token, repoOwner, repoName);
+
+ call.enqueue(new Callback() {
+
+ @Override
+ public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) {
+
+ UserRepositories repoInfo = response.body();
+
+ if (response.code() == 200) {
+
+ assert repoInfo != null;
+
+ repoIntent.putExtra("repoFullName", repoInfo.getFullName());
+ repoIntent.putExtra("goToSection", "yes");
+ repoIntent.putExtra("goToSectionType", type);
+
+ tinyDB.putString("repoFullName", repoInfo.getFullName());
+ if(repoInfo.getPrivateFlag()) {
+
+ tinyDB.putString("repoType", getResources().getString(R.string.strPrivate));
+ }
+ else {
+
+ tinyDB.putString("repoType", getResources().getString(R.string.strPublic));
+ }
+ tinyDB.putBoolean("isRepoAdmin", repoInfo.getPermissions().isAdmin());
+ tinyDB.putString("repoBranch", repoInfo.getDefault_branch());
+
+ int currentActiveAccountId = tinyDB.getInt("currentActiveAccountId");
+ RepositoriesApi repositoryData = new RepositoriesApi(ctx);
+
+ 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());
+ }
+
+ ctx.startActivity(repoIntent);
+ finish();
+ }
+
+ else {
+
+ ctx.startActivity(mainIntent);
+ finish();
+ Log.e("onFailure-goToRepo", String.valueOf(response.code()));
+ }
+
+ }
+
+ @Override
+ public void onFailure(@NonNull Call call, @NonNull Throwable t) {
+
+ ctx.startActivity(mainIntent);
+ finish();
+ Log.e("onFailure-goToRepo", t.toString());
+ }
+ });
+ }
+}
diff --git a/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java b/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java
index 9c0b84c6..0e8b6344 100644
--- a/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java
@@ -4,31 +4,28 @@ import android.annotation.SuppressLint;
import android.app.DatePickerDialog;
import android.content.Context;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
import android.util.Log;
+import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
+import android.widget.AutoCompleteTextView;
import android.widget.Button;
-import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ImageView;
-import android.widget.Spinner;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.google.gson.JsonElement;
-import com.hendraanggrian.appcompat.socialview.Mention;
-import com.hendraanggrian.appcompat.widget.MentionArrayAdapter;
-import com.hendraanggrian.appcompat.widget.SocialAutoCompleteTextView;
import org.mian.gitnex.R;
import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.helpers.AlertDialogs;
import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.Authorization;
import org.mian.gitnex.helpers.StaticGlobalVariables;
-import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.helpers.Version;
-import org.mian.gitnex.models.Collaborators;
import org.mian.gitnex.models.CreateIssue;
import org.mian.gitnex.models.Issues;
import org.mian.gitnex.models.Milestones;
@@ -39,7 +36,6 @@ import java.util.Calendar;
import java.util.List;
import retrofit2.Call;
import retrofit2.Callback;
-import retrofit2.Response;
/**
* Author M M Arif
@@ -47,45 +43,46 @@ import retrofit2.Response;
public class EditIssueActivity extends BaseActivity implements View.OnClickListener {
- final Context ctx = this;
- private Context appCtx;
private View.OnClickListener onClickListener;
private int resultLimit = StaticGlobalVariables.resultLimitOldGiteaInstances;
private EditText editIssueTitle;
- private SocialAutoCompleteTextView editIssueDescription;
+ private EditText editIssueDescription;
private TextView editIssueDueDate;
private Button editIssueButton;
- private Spinner editIssueMilestoneSpinner;
+ private AutoCompleteTextView editIssueMilestoneSpinner;
private String msState = "open";
+ private int milestoneId;
List milestonesList = new ArrayList<>();
- private ArrayAdapter defaultMentionAdapter;
+
+ private String loginUid;
+ private String instanceToken;
+ private String repoOwner;
+ private String repoName;
+ private int issueIndex;
@Override
protected int getLayoutResourceId(){
return R.layout.activity_edit_issue;
}
+ @SuppressLint("ClickableViewAccessibility")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
- final TinyDB tinyDb = new TinyDB(appCtx);
-
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
- String repoFullName = tinyDb.getString("repoFullName");
+ loginUid = tinyDB.getString("loginUid");
+ instanceToken = "token " + tinyDB.getString(loginUid + "-token");
+ String repoFullName = tinyDB.getString("repoFullName");
String[] parts = repoFullName.split("/");
- final String repoOwner = parts[0];
- final String repoName = parts[1];
- final int issueIndex = Integer.parseInt(tinyDb.getString("issueNumber"));
+ repoOwner = parts[0];
+ repoName = parts[1];
+ issueIndex = Integer.parseInt(tinyDB.getString("issueNumber"));
ImageView closeActivity = findViewById(R.id.close);
editIssueButton = findViewById(R.id.editIssueButton);
@@ -95,7 +92,8 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
editIssueDueDate = findViewById(R.id.editIssueDueDate);
// if gitea is 1.12 or higher use the new limit
- if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
+ if(new Version(tinyDB.getString("giteaVersion")).higherOrEqual("1.12.0")) {
+
resultLimit = StaticGlobalVariables.resultLimitNewGiteaInstances;
}
@@ -103,110 +101,49 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
assert imm != null;
imm.showSoftInput(editIssueTitle, InputMethodManager.SHOW_IMPLICIT);
- defaultMentionAdapter = new MentionArrayAdapter<>(this);
- loadCollaboratorsList();
+ editIssueDescription.setOnTouchListener((touchView, motionEvent) -> {
+
+ touchView.getParent().requestDisallowInterceptTouchEvent(true);
+
+ if ((motionEvent.getAction() & MotionEvent.ACTION_UP) != 0 && (motionEvent.getActionMasked() & MotionEvent.ACTION_UP) != 0) {
+
+ touchView.getParent().requestDisallowInterceptTouchEvent(false);
+ }
+ return false;
+ });
editIssueMilestoneSpinner = findViewById(R.id.editIssueMilestoneSpinner);
- editIssueDescription.setMentionAdapter(defaultMentionAdapter);
-
initCloseListener();
closeActivity.setOnClickListener(onClickListener);
editIssueDueDate.setOnClickListener(this);
editIssueButton.setOnClickListener(this);
- if(!tinyDb.getString("issueNumber").isEmpty()) {
+ if(!tinyDB.getString("issueNumber").isEmpty()) {
+
+ if(tinyDB.getString("issueType").equalsIgnoreCase("Pull")) {
- if(tinyDb.getString("issueType").equalsIgnoreCase("Pull")) {
toolbar_title.setText(getString(R.string.editPrNavHeader, String.valueOf(issueIndex)));
}
else {
+
toolbar_title.setText(getString(R.string.editIssueNavHeader, String.valueOf(issueIndex)));
}
}
disableProcessButton();
- getIssue(instanceUrl, instanceToken, loginUid, repoOwner, repoName, issueIndex, resultLimit);
-
-
- }
-
- public void loadCollaboratorsList() {
-
- final TinyDB tinyDb = new TinyDB(appCtx);
-
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
- String repoFullName = tinyDb.getString("repoFullName");
- String[] parts = repoFullName.split("/");
- final String repoOwner = parts[0];
- final String repoName = parts[1];
-
- Call> call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .getCollaborators(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName);
-
- call.enqueue(new Callback>() {
-
- @Override
- public void onResponse(@NonNull Call> call, @NonNull Response> response) {
-
- if (response.isSuccessful()) {
-
- assert response.body() != null;
- String fullName = "";
- for (int i = 0; i < response.body().size(); i++) {
- if(!response.body().get(i).getFull_name().equals("")) {
- fullName = response.body().get(i).getFull_name();
- }
- defaultMentionAdapter.add(
- new Mention(response.body().get(i).getUsername(), fullName, response.body().get(i).getAvatar_url()));
- }
-
- } else {
-
- Log.i("onResponse", String.valueOf(response.code()));
-
- }
-
- }
-
- @Override
- public void onFailure(@NonNull Call> call, @NonNull Throwable t) {
- Log.i("onFailure", t.toString());
- }
-
- });
+ getIssue(instanceToken, loginUid, repoOwner, repoName, issueIndex, resultLimit);
}
private void initCloseListener() {
- onClickListener = new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- finish();
- }
- };
+
+ onClickListener = view -> finish();
}
private void processEditIssue() {
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
- TinyDB tinyDb = new TinyDB(appCtx);
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- String repoFullName = tinyDb.getString("repoFullName");
- String[] parts = repoFullName.split("/");
- final String repoOwner = parts[0];
- final String repoName = parts[1];
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
- final int issueIndex = Integer.parseInt(tinyDb.getString("issueNumber"));
-
- Milestones mModel = (Milestones) editIssueMilestoneSpinner.getSelectedItem();
-
- int editIssueMilestoneId = mModel.getId();
String editIssueTitleForm = editIssueTitle.getText().toString();
String editIssueDescriptionForm = editIssueDescription.getText().toString();
@@ -216,45 +153,34 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
return;
-
}
if (editIssueTitleForm.equals("")) {
Toasty.error(ctx, getString(R.string.issueTitleEmpty));
return;
-
}
- /*if (editIssueDescriptionForm.equals("")) {
-
- Toasty.info(ctx, getString(R.string.issueDescriptionEmpty));
- return;
-
- }*/
-
if (editIssueDueDateForm.equals("")) {
+
editIssueDueDateForm = null;
- } else {
+ }
+ else {
+
editIssueDueDateForm = (AppUtil.customDateCombine(AppUtil.customDateFormat(editIssueDueDateForm)));
}
- //Log.i("editIssueDueDateForm", String.valueOf(editIssueDueDateForm));
disableProcessButton();
- editIssue(instanceUrl, instanceToken, repoOwner, repoName, issueIndex, loginUid, editIssueTitleForm, editIssueDescriptionForm, editIssueDueDateForm, editIssueMilestoneId);
-
+ editIssue(instanceToken, repoOwner, repoName, issueIndex, loginUid, editIssueTitleForm, editIssueDescriptionForm, editIssueDueDateForm, milestoneId);
}
- private void editIssue(String instanceUrl, String instanceToken, String repoOwner, String repoName, int issueIndex, String loginUid, String title, String description, String dueDate, int editIssueMilestoneId) {
+ private void editIssue(String instanceToken, String repoOwner, String repoName, int issueIndex, String loginUid, String title, String description, String dueDate, int milestoneId) {
- final TinyDB tinyDb = new TinyDB(appCtx);
-
- CreateIssue issueData = new CreateIssue(title, description, dueDate, editIssueMilestoneId);
+ CreateIssue issueData = new CreateIssue(title, description, dueDate, milestoneId);
Call call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .patchIssue(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex, issueData);
+ .getApiInterface(ctx)
+ .patchIssue(Authorization.get(ctx), repoOwner, repoName, issueIndex, issueData);
call.enqueue(new Callback() {
@@ -263,17 +189,18 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
if(response.code() == 201) {
- if(tinyDb.getString("issueType").equalsIgnoreCase("Pull")) {
+ if(tinyDB.getString("issueType").equalsIgnoreCase("Pull")) {
+
Toasty.success(ctx, getString(R.string.editPrSuccessMessage));
}
else {
+
Toasty.success(ctx, getString(R.string.editIssueSuccessMessage));
}
- tinyDb.putBoolean("issueEdited", true);
- tinyDb.putBoolean("resumeIssues", true);
+ tinyDB.putBoolean("issueEdited", true);
+ tinyDB.putBoolean("resumeIssues", true);
finish();
-
}
else if(response.code() == 401) {
@@ -282,19 +209,17 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
getResources().getString(R.string.alertDialogTokenRevokedMessage),
getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton),
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
else {
enableProcessButton();
Toasty.error(ctx, getString(R.string.genericError));
-
}
-
}
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
+
Log.e("onFailure", t.toString());
enableProcessButton();
}
@@ -302,7 +227,6 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
}
-
@Override
public void onClick(View v) {
@@ -314,31 +238,21 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
final int mDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(this,
- new DatePickerDialog.OnDateSetListener() {
-
- @Override
- public void onDateSet(DatePicker view, int year,
- int monthOfYear, int dayOfMonth) {
-
- editIssueDueDate.setText(getString(R.string.setDueDate, year, (monthOfYear + 1), dayOfMonth));
-
- }
- }, mYear, mMonth, mDay);
+ (view, year, monthOfYear, dayOfMonth) -> editIssueDueDate.setText(getString(R.string.setDueDate, year, (monthOfYear + 1), dayOfMonth)), mYear, mMonth, mDay);
datePickerDialog.show();
-
}
else if(v == editIssueButton) {
+
processEditIssue();
}
}
- private void getIssue(final String instanceUrl, final String instanceToken, final String loginUid, final String repoOwner, final String repoName, int issueIndex, int resultLimit) {
+ private void getIssue(final String instanceToken, final String loginUid, final String repoOwner, final String repoName, int issueIndex, int resultLimit) {
Call call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .getIssueByIndex(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex);
+ .getApiInterface(ctx)
+ .getIssueByIndex(Authorization.get(ctx), repoOwner, repoName, issueIndex);
call.enqueue(new Callback() {
@@ -351,27 +265,27 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
editIssueTitle.setText(response.body().getTitle());
editIssueDescription.setText(response.body().getBody());
- int msId = 0;
+ int currentMilestoneId = 0;
if(response.body().getMilestone() != null) {
- msId = response.body().getMilestone().getId();
+
+ currentMilestoneId = response.body().getMilestone().getId();
}
// get milestones list
if(response.body().getId() > 0) {
Call> call_ = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .getMilestones(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, 1, resultLimit, msState);
+ .getApiInterface(ctx)
+ .getMilestones(Authorization.get(ctx), repoOwner, repoName, 1, resultLimit, msState);
- final int finalMsId = msId;
+ int checkMilestoneId = currentMilestoneId;
- call_.enqueue(new Callback>() {
+ call_.enqueue(new Callback>() {
@Override
public void onResponse(@NonNull Call> call, @NonNull retrofit2.Response> response_) {
- int finalMsId1 = 0;
+ int getSelectedMilestoneId = 0;
if (response_.code() == 200) {
@@ -379,39 +293,40 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
milestonesList.add(new Milestones(0, "No milestone"));
assert milestonesList_ != null;
+
if (milestonesList_.size() > 0) {
+
+ milestonesList.addAll(milestonesList_);
+
for (int i = 0; i < milestonesList_.size(); i++) {
- Milestones data = new Milestones(
- milestonesList_.get(i).getId(),
- milestonesList_.get(i).getTitle()
- );
- milestonesList.add(data);
-
- if(finalMsId == milestonesList_.get(i).getId()) {
- finalMsId1 = i + 1;
+ if(checkMilestoneId == milestonesList_.get(i).getId()) {
+ getSelectedMilestoneId = i + 1;
}
-
}
}
- ArrayAdapter adapter_ = new ArrayAdapter<>(EditIssueActivity.this,
- R.layout.spinner_item, milestonesList);
+ ArrayAdapter adapter = new ArrayAdapter<>(EditIssueActivity.this,
+ R.layout.list_spinner_items, milestonesList);
- adapter_.setDropDownViewResource(R.layout.spinner_dropdown_item);
- editIssueMilestoneSpinner.setAdapter(adapter_);
+ editIssueMilestoneSpinner.setAdapter(adapter);
+
+ editIssueMilestoneSpinner.setOnItemClickListener ((parent, view, position, id) -> milestoneId = milestonesList.get(position).getId());
+
+ int finalMsId = getSelectedMilestoneId;
+ new Handler(Looper.getMainLooper()).postDelayed(() -> {
+
+ editIssueMilestoneSpinner.setText(milestonesList.get(finalMsId).getTitle(),false);
+ milestoneId = milestonesList.get(finalMsId).getId();
+ }, 500);
- if(milestonesList_.size() > 0) {
- editIssueMilestoneSpinner.setSelection(finalMsId1);
- }
enableProcessButton();
-
}
-
}
@Override
public void onFailure(@NonNull Call> call, @NonNull Throwable t) {
+
Log.e("onFailure", t.toString());
}
});
@@ -439,11 +354,11 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
Toasty.error(ctx, getString(R.string.genericError));
}
-
}
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
+
Log.e("onFailure", t.toString());
}
});
diff --git a/app/src/main/java/org/mian/gitnex/activities/FileDiffActivity.java b/app/src/main/java/org/mian/gitnex/activities/FileDiffActivity.java
index 62827d23..8200119e 100644
--- a/app/src/main/java/org/mian/gitnex/activities/FileDiffActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/FileDiffActivity.java
@@ -1,6 +1,5 @@
package org.mian.gitnex.activities;
-import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
@@ -14,7 +13,6 @@ import org.mian.gitnex.R;
import org.mian.gitnex.adapters.FilesDiffAdapter;
import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.helpers.AlertDialogs;
-import org.mian.gitnex.helpers.AppUtil;
import org.mian.gitnex.helpers.ParseDiff;
import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty;
@@ -36,8 +34,6 @@ public class FileDiffActivity extends BaseActivity {
private TextView toolbarTitle;
private ListView mListView;
private ProgressBar mProgressBar;
- final Context ctx = this;
- private Context appCtx;
@Override
protected int getLayoutResourceId() {
@@ -49,12 +45,11 @@ public class FileDiffActivity extends BaseActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
- final TinyDB tinyDb = new TinyDB(appCtx);
+ final TinyDB tinyDb = TinyDB.getInstance(appCtx);
String repoFullName = tinyDb.getString("repoFullName");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
@@ -77,28 +72,21 @@ public class FileDiffActivity extends BaseActivity {
String pullIndex = tinyDb.getString("issueNumber");
- boolean apiCall = true;
- String instanceUrl = tinyDb.getString("instanceUrl");
-
- // fallback for old gitea instances
- if(new Version(tinyDb.getString("giteaVersion")).less("1.13.0")) {
-
- apiCall = false;
- instanceUrl = instanceUrl.substring(0, instanceUrl.lastIndexOf("api/v1/"));
- }
-
- getPullDiffContent(instanceUrl, repoOwner, repoName, pullIndex, instanceToken, apiCall);
+ boolean apiCall = !new Version(tinyDb.getString("giteaVersion")).less("1.13.0");
+ getPullDiffContent(repoOwner, repoName, pullIndex, instanceToken, apiCall);
}
- private void getPullDiffContent(String instanceUrl, String owner, String repo, String pullIndex, String token, boolean apiCall) {
+ private void getPullDiffContent(String owner, String repo, String pullIndex, String token, boolean apiCall) {
Call call;
if(apiCall) {
- call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getPullDiffContent(token, owner, repo, pullIndex);
+
+ call = RetrofitClient.getApiInterface(ctx).getPullDiffContent(token, owner, repo, pullIndex);
}
else {
- call = RetrofitClient.getInstance(instanceUrl, ctx).getWebInterface().getPullDiffContent(owner, repo, pullIndex);
+
+ call = RetrofitClient.getWebInterface(ctx).getPullDiffContent(owner, repo, pullIndex);
}
call.enqueue(new Callback() {
@@ -109,16 +97,18 @@ public class FileDiffActivity extends BaseActivity {
if(response.code() == 200) {
try {
+
assert response.body() != null;
- AppUtil appUtil = new AppUtil();
List fileContentsArray = ParseDiff.getFileDiffViewArray(response.body().string());
int filesCount = fileContentsArray.size();
if(filesCount > 1) {
+
toolbarTitle.setText(getResources().getString(R.string.fileDiffViewHeader, Integer.toString(filesCount)));
}
else {
+
toolbarTitle.setText(getResources().getString(R.string.fileDiffViewHeaderSingle, Integer.toString(filesCount)));
}
@@ -126,34 +116,28 @@ public class FileDiffActivity extends BaseActivity {
mListView.setAdapter(adapter);
mProgressBar.setVisibility(View.GONE);
-
}
catch(IOException e) {
+
e.printStackTrace();
}
-
}
else if(response.code() == 401) {
AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle), getResources().getString(R.string.alertDialogTokenRevokedMessage), getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton), getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
else if(response.code() == 403) {
Toasty.error(ctx, ctx.getString(R.string.authorizeError));
-
}
else if(response.code() == 404) {
Toasty.warning(ctx, ctx.getString(R.string.apiNotFound));
-
}
else {
Toasty.error(ctx, getString(R.string.labelGeneralError));
-
}
-
}
@Override
@@ -174,5 +158,4 @@ public class FileDiffActivity extends BaseActivity {
};
}
-
}
diff --git a/app/src/main/java/org/mian/gitnex/activities/FileViewActivity.java b/app/src/main/java/org/mian/gitnex/activities/FileViewActivity.java
index 4586a4ac..f3cc9040 100644
--- a/app/src/main/java/org/mian/gitnex/activities/FileViewActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/FileViewActivity.java
@@ -1,6 +1,6 @@
package org.mian.gitnex.activities;
-import android.content.Context;
+import android.app.Activity;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.graphics.Typeface;
@@ -8,7 +8,6 @@ import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
-import android.text.Spanned;
import android.text.method.ScrollingMovementMethod;
import android.util.Base64;
import android.util.Log;
@@ -21,8 +20,11 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
+import androidx.activity.result.ActivityResult;
+import androidx.activity.result.ActivityResultCallback;
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.appcompat.widget.Toolbar;
import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.util.FitPolicy;
@@ -33,7 +35,7 @@ import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.fragments.BottomSheetFileViewerFragment;
import org.mian.gitnex.helpers.AlertDialogs;
import org.mian.gitnex.helpers.AppUtil;
-import org.mian.gitnex.helpers.TinyDB;
+import org.mian.gitnex.helpers.Markdown;
import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.helpers.highlightjs.HighlightJsView;
import org.mian.gitnex.helpers.highlightjs.models.Theme;
@@ -43,24 +45,7 @@ import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
-import java.util.Collection;
-import java.util.Collections;
import java.util.Objects;
-import io.noties.markwon.AbstractMarkwonPlugin;
-import io.noties.markwon.Markwon;
-import io.noties.markwon.core.CorePlugin;
-import io.noties.markwon.core.MarkwonTheme;
-import io.noties.markwon.ext.strikethrough.StrikethroughPlugin;
-import io.noties.markwon.ext.tables.TablePlugin;
-import io.noties.markwon.ext.tasklist.TaskListPlugin;
-import io.noties.markwon.html.HtmlPlugin;
-import io.noties.markwon.image.DefaultMediaDecoder;
-import io.noties.markwon.image.ImageItem;
-import io.noties.markwon.image.ImagesPlugin;
-import io.noties.markwon.image.SchemeHandler;
-import io.noties.markwon.image.gif.GifMediaDecoder;
-import io.noties.markwon.image.svg.SvgMediaDecoder;
-import io.noties.markwon.linkify.LinkifyPlugin;
import retrofit2.Call;
import retrofit2.Callback;
@@ -75,8 +60,6 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
private LinearLayout singleFileContentsFrame;
private HighlightJsView singleCodeContents;
private PhotoView imageView;
- final Context ctx = this;
- private Context appCtx;
private ProgressBar mProgressBar;
private byte[] imageData;
private PDFView pdfView;
@@ -86,7 +69,6 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
private String singleFileName;
private String fileSha;
private AppUtil appUtil;
- private TinyDB tinyDb;
@Override
protected int getLayoutResourceId() {
@@ -98,23 +80,20 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
appUtil = new AppUtil();
- tinyDb = new TinyDB(appCtx);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
- String repoFullName = tinyDb.getString("repoFullName");
- String repoBranch = tinyDb.getString("repoBranch");
+ String repoFullName = tinyDB.getString("repoFullName");
+ String repoBranch = tinyDB.getString("repoBranch");
String[] parts = repoFullName.split("/");
final String repoOwner = parts[0];
final String repoName = parts[1];
- final String instanceUrl = tinyDb.getString("instanceUrl");
- final String loginUid = tinyDb.getString("loginUid");
- final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ final String loginUid = tinyDB.getString("loginUid");
+ final String instanceToken = "token " + tinyDB.getString(loginUid + "-token");
- tinyDb.putBoolean("enableMarkdownInFileView", false);
+ tinyDB.putBoolean("enableMarkdownInFileView", false);
ImageView closeActivity = findViewById(R.id.close);
singleFileContents = findViewById(R.id.singleFileContents);
@@ -133,25 +112,22 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
initCloseListener();
closeActivity.setOnClickListener(onClickListener);
- tinyDb.putString("downloadFileContents", "");
+ tinyDB.putString("downloadFileContents", "");
try {
singleFileName = URLDecoder.decode(singleFileName, "UTF-8");
singleFileName = singleFileName.replaceAll("//", "/");
singleFileName = singleFileName.startsWith("/") ? singleFileName.substring(1) : singleFileName;
-
}
catch(UnsupportedEncodingException e) {
Log.i("singleFileName", singleFileName);
-
}
toolbar_title.setText(singleFileName);
- getSingleFileContents(instanceUrl, instanceToken, repoOwner, repoName, singleFileName, repoBranch);
-
+ getSingleFileContents(instanceToken, repoOwner, repoName, singleFileName, repoBranch);
}
@Override
@@ -159,25 +135,25 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
super.onResume();
- String repoFullName = tinyDb.getString("repoFullName");
- String repoBranch = tinyDb.getString("repoBranch");
+ String repoFullName = tinyDB.getString("repoFullName");
+ String repoBranch = tinyDB.getString("repoBranch");
String[] parts = repoFullName.split("/");
String repoOwner = parts[0];
String repoName = parts[1];
- String instanceUrl = tinyDb.getString("instanceUrl");
- String loginUid = tinyDb.getString("loginUid");
- String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ String loginUid = tinyDB.getString("loginUid");
+ String instanceToken = "token " + tinyDB.getString(loginUid + "-token");
- if(tinyDb.getBoolean("fileModified")) {
- getSingleFileContents(instanceUrl, instanceToken, repoOwner, repoName, singleFileName, repoBranch);
- tinyDb.putBoolean("fileModified", false);
+ if(tinyDB.getBoolean("fileModified")) {
+
+ getSingleFileContents(instanceToken, repoOwner, repoName, singleFileName, repoBranch);
+ tinyDB.putBoolean("fileModified", false);
}
}
- private void getSingleFileContents(String instanceUrl, String token, final String owner, String repo, final String filename, String ref) {
+ private void getSingleFileContents(String token, final String owner, String repo, final String filename, String ref) {
- Call call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getSingleFileContents(token, owner, repo, filename, ref);
+ Call call = RetrofitClient.getApiInterface(ctx).getSingleFileContents(token, owner, repo, filename, ref);
call.enqueue(new Callback() {
@@ -196,8 +172,8 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
fileSha = response.body().getSha();
// download file meta
- tinyDb.putString("downloadFileName", filename);
- tinyDb.putString("downloadFileContents", response.body().getContent());
+ tinyDB.putString("downloadFileName", filename);
+ tinyDB.putString("downloadFileContents", response.body().getContent());
if(appUtil.imageExtension(fileExtension)) { // file is image
@@ -209,7 +185,6 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
imageData = Base64.decode(response.body().getContent(), Base64.DEFAULT);
Drawable imageDrawable = new BitmapDrawable(getResources(), BitmapFactory.decodeByteArray(imageData, 0, imageData.length));
imageView.setImageDrawable(imageDrawable);
-
}
else if(appUtil.sourceCodeExtension(fileExtension)) { // file is sourcecode
@@ -218,28 +193,34 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
pdfViewFrame.setVisibility(View.GONE);
singleCodeContents.setVisibility(View.VISIBLE);
- switch(tinyDb.getInt("fileviewerSourceCodeThemeId")) {
+ switch(tinyDB.getInt("fileviewerSourceCodeThemeId")) {
+
case 1:
+
singleCodeContents.setTheme(Theme.ARDUINO_LIGHT);
break;
case 2:
+
singleCodeContents.setTheme(Theme.GITHUB);
break;
case 3:
+
singleCodeContents.setTheme(Theme.FAR);
break;
case 4:
+
singleCodeContents.setTheme(Theme.IR_BLACK);
break;
case 5:
+
singleCodeContents.setTheme(Theme.ANDROID_STUDIO);
break;
default:
+
singleCodeContents.setTheme(Theme.MONOKAI_SUBLIME);
}
singleCodeContents.setSource(appUtil.decodeBase64(response.body().getContent()));
-
}
else if(appUtil.pdfExtension(fileExtension)) { // file is pdf
@@ -248,7 +229,7 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
singleCodeContents.setVisibility(View.GONE);
pdfViewFrame.setVisibility(View.VISIBLE);
- pdfNightMode = tinyDb.getBoolean("enablePdfMode");
+ pdfNightMode = tinyDB.getBoolean("enablePdfMode");
decodedPdf = Base64.decode(response.body().getContent(), Base64.DEFAULT);
pdfView.fromBytes(decodedPdf).enableSwipe(true).swipeHorizontal(false).enableDoubletap(true).defaultPage(0).enableAnnotationRendering(false).password(null).scrollHandle(null).enableAntialiasing(true).spacing(0).autoSpacing(true).pageFitPolicy(FitPolicy.WIDTH).fitEachPage(true).pageSnap(false).pageFling(true).nightMode(pdfNightMode).load();
@@ -264,7 +245,6 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
singleFileContents.setText(getResources().getString(R.string.excludeFilesInFileviewer));
singleFileContents.setGravity(Gravity.CENTER);
singleFileContents.setTypeface(null, Typeface.BOLD);
-
}
else { // file type not known - plain text view
@@ -274,37 +254,30 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
singleFileContentsFrame.setVisibility(View.VISIBLE);
singleFileContents.setText(appUtil.decodeBase64(response.body().getContent()));
-
}
-
}
else {
+
singleFileContents.setText("");
mProgressBar.setVisibility(View.GONE);
}
-
}
else if(response.code() == 401) {
AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle), getResources().getString(R.string.alertDialogTokenRevokedMessage), getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton), getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
else if(response.code() == 403) {
Toasty.error(ctx, ctx.getString(R.string.authorizeError));
-
}
else if(response.code() == 404) {
Toasty.warning(ctx, ctx.getString(R.string.apiNotFound));
-
}
else {
Toasty.error(ctx, getString(R.string.labelGeneralError));
-
}
-
}
@Override
@@ -324,7 +297,9 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
inflater.inflate(R.menu.files_view_menu, menu);
String fileExtension = FileUtils.getExtension(singleFileName);
+
if(!fileExtension.equalsIgnoreCase("md")) {
+
menu.getItem(0).setVisible(false);
}
@@ -336,89 +311,42 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
int id = item.getItemId();
- switch(id) {
- case android.R.id.home:
+ if(id == android.R.id.home) {
- finish();
- return true;
- case R.id.genericMenu:
-
- BottomSheetFileViewerFragment bottomSheet = new BottomSheetFileViewerFragment();
- bottomSheet.show(getSupportFragmentManager(), "fileViewerBottomSheet");
- return true;
- case R.id.markdown:
-
- final Markwon markwon = Markwon.builder(Objects.requireNonNull(ctx)).usePlugin(CorePlugin.create())
- .usePlugin(ImagesPlugin.create(plugin -> {
- plugin.addSchemeHandler(new SchemeHandler() {
-
- @NonNull
- @Override
- public ImageItem handle(@NonNull String raw, @NonNull Uri uri) {
-
- final int resourceId = ctx.getResources().getIdentifier(
- raw.substring("drawable://".length()),
- "drawable",
- ctx.getPackageName());
-
- final Drawable drawable = ctx.getDrawable(resourceId);
-
- assert drawable != null;
- return ImageItem.withResult(drawable);
- }
-
- @NonNull
- @Override
- public Collection supportedSchemes() {
-
- return Collections.singleton("drawable");
- }
- });
- plugin.placeholderProvider(drawable -> null);
- plugin.addMediaDecoder(GifMediaDecoder.create(false));
- plugin.addMediaDecoder(SvgMediaDecoder.create(ctx.getResources()));
- plugin.addMediaDecoder(SvgMediaDecoder.create());
- plugin.defaultMediaDecoder(DefaultMediaDecoder.create(ctx.getResources()));
- plugin.defaultMediaDecoder(DefaultMediaDecoder.create());
- }))
- .usePlugin(new AbstractMarkwonPlugin() {
- @Override
- public void configureTheme(@NonNull MarkwonTheme.Builder builder) {
-
- builder.codeTextColor(tinyDb.getInt("codeBlockColor")).codeBackgroundColor(tinyDb.getInt("codeBlockBackground"))
- .linkColor(getResources().getColor(R.color.lightBlue));
- }
- })
- .usePlugin(TablePlugin.create(ctx))
- .usePlugin(TaskListPlugin.create(ctx))
- .usePlugin(HtmlPlugin.create())
- .usePlugin(StrikethroughPlugin.create())
- .usePlugin(LinkifyPlugin.create())
- .build();
-
- if(!tinyDb.getBoolean("enableMarkdownInFileView")) {
-
- singleCodeContents.setVisibility(View.GONE);
- singleFileContentsFrame.setVisibility(View.VISIBLE);
- singleFileContents.setVisibility(View.VISIBLE);
- Spanned bodyWithMD = markwon.toMarkdown(appUtil.decodeBase64(tinyDb.getString("downloadFileContents")));
- markwon.setParsedMarkdown(singleFileContents, bodyWithMD);
- tinyDb.putBoolean("enableMarkdownInFileView", true);
- }
- else {
-
- singleCodeContents.setVisibility(View.VISIBLE);
- singleFileContentsFrame.setVisibility(View.GONE);
- singleFileContents.setVisibility(View.GONE);
- singleCodeContents.setSource(appUtil.decodeBase64(tinyDb.getString("downloadFileContents")));
- tinyDb.putBoolean("enableMarkdownInFileView", false);
- }
-
- return true;
- default:
- return super.onOptionsItemSelected(item);
+ finish();
+ return true;
}
+ else if(id == R.id.genericMenu) {
+ BottomSheetFileViewerFragment bottomSheet = new BottomSheetFileViewerFragment();
+ bottomSheet.show(getSupportFragmentManager(), "fileViewerBottomSheet");
+ return true;
+ }
+ else if(id == R.id.markdown) {
+
+ new Markdown(ctx, appUtil.decodeBase64(tinyDB.getString("downloadFileContents")), singleFileContents);
+
+ if(!tinyDB.getBoolean("enableMarkdownInFileView")) {
+
+ singleCodeContents.setVisibility(View.GONE);
+ singleFileContentsFrame.setVisibility(View.VISIBLE);
+ singleFileContents.setVisibility(View.VISIBLE);
+ tinyDB.putBoolean("enableMarkdownInFileView", true);
+ }
+ else {
+
+ singleCodeContents.setVisibility(View.VISIBLE);
+ singleFileContentsFrame.setVisibility(View.GONE);
+ singleFileContents.setVisibility(View.GONE);
+ singleCodeContents.setSource(appUtil.decodeBase64(tinyDB.getString("downloadFileContents")));
+ tinyDB.putBoolean("enableMarkdownInFileView", false);
+ }
+ return true;
+ }
+ else {
+
+ return super.onOptionsItemSelected(item);
+ }
}
@Override
@@ -432,15 +360,18 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
if("deleteFile".equals(text)) {
String fileExtension = FileUtils.getExtension(singleFileName);
- String data = appUtil.decodeBase64(tinyDb.getString("downloadFileContents"));
+ String data = appUtil.decodeBase64(tinyDB.getString("downloadFileContents"));
Intent intent = new Intent(ctx, CreateFileActivity.class);
intent.putExtra("fileAction", 1);
intent.putExtra("filePath", singleFileName);
intent.putExtra("fileSha", fileSha);
+
if(!appUtil.imageExtension(fileExtension)) {
+
intent.putExtra("fileContents", data);
}
else {
+
intent.putExtra("fileContents", "");
}
@@ -450,15 +381,18 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
if("editFile".equals(text)) {
String fileExtension = FileUtils.getExtension(singleFileName);
- String data = appUtil.decodeBase64(tinyDb.getString("downloadFileContents"));
+ String data = appUtil.decodeBase64(tinyDB.getString("downloadFileContents"));
Intent intent = new Intent(ctx, CreateFileActivity.class);
intent.putExtra("fileAction", 2);
intent.putExtra("filePath", singleFileName);
intent.putExtra("fileSha", fileSha);
+
if(!appUtil.imageExtension(fileExtension)) {
+
intent.putExtra("fileContents", data);
}
else {
+
intent.putExtra("fileContents", "");
}
@@ -469,11 +403,9 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
private void requestFileDownload() {
- if(!tinyDb.getString("downloadFileContents").isEmpty()) {
+ if(!tinyDB.getString("downloadFileContents").isEmpty()) {
- int CREATE_REQUEST_CODE = 40;
-
- File outputFileName = new File(tinyDb.getString("downloadFileName"));
+ File outputFileName = new File(tinyDB.getString("downloadFileName"));
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
@@ -481,48 +413,48 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie
intent.setType("*/*");
intent.putExtra(Intent.EXTRA_TITLE, outputFileName.getName());
- startActivityForResult(intent, CREATE_REQUEST_CODE);
-
+ fileDownloadActivityResultLauncher.launch(intent);
}
else {
Toasty.warning(ctx, getString(R.string.waitLoadingDownloadFile));
}
-
}
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ ActivityResultLauncher fileDownloadActivityResultLauncher = registerForActivityResult(
+ new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
- super.onActivityResult(requestCode, resultCode, data);
+ @Override
+ public void onActivityResult(ActivityResult result) {
- if(requestCode == 40 && resultCode == RESULT_OK) {
+ if (result.getResultCode() == Activity.RESULT_OK) {
- try {
+ Intent data = result.getData();
- assert data != null;
- Uri uri = data.getData();
+ try {
- assert uri != null;
- OutputStream outputStream = getContentResolver().openOutputStream(uri);
+ assert data != null;
+ Uri uri = data.getData();
- byte[] dataAsBytes = Base64.decode(tinyDb.getString("downloadFileContents"), 0);
+ assert uri != null;
+ OutputStream outputStream = getContentResolver().openOutputStream(uri);
- assert outputStream != null;
- outputStream.write(dataAsBytes);
- outputStream.close();
+ byte[] dataAsBytes = Base64.decode(tinyDB.getString("downloadFileContents"), 0);
- Toasty.success(ctx, getString(R.string.downloadFileSaved));
+ assert outputStream != null;
+ outputStream.write(dataAsBytes);
+ outputStream.close();
+ Toasty.success(ctx, getString(R.string.downloadFileSaved));
+
+ }
+ catch(IOException e) {
+
+ Log.e("errorFileDownloading", Objects.requireNonNull(e.getMessage()));
+ }
}
- catch(IOException e) {
-
- Log.e("errorFileDownloading", Objects.requireNonNull(e.getMessage()));
- }
-
}
-
- }
+ });
private void initCloseListener() {
diff --git a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java
index 716cfa4d..1d7a7026 100644
--- a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java
@@ -1,18 +1,15 @@
package org.mian.gitnex.activities;
import android.app.Dialog;
-import android.content.Context;
+import android.content.Intent;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.text.Html;
-import android.text.Spanned;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
@@ -50,11 +47,11 @@ import org.mian.gitnex.helpers.Authorization;
import org.mian.gitnex.helpers.ClickListener;
import org.mian.gitnex.helpers.ColorInverter;
import org.mian.gitnex.helpers.LabelWidthCalculator;
+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.helpers.UserMentions;
import org.mian.gitnex.helpers.Version;
import org.mian.gitnex.models.Collaborators;
import org.mian.gitnex.models.Issues;
@@ -62,30 +59,15 @@ import org.mian.gitnex.models.Labels;
import org.mian.gitnex.models.UpdateIssueAssignees;
import org.mian.gitnex.models.WatchInfo;
import org.mian.gitnex.viewmodels.IssueCommentsViewModel;
+import org.mian.gitnex.views.ReactionList;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
-import io.noties.markwon.AbstractMarkwonPlugin;
-import io.noties.markwon.Markwon;
-import io.noties.markwon.core.CorePlugin;
-import io.noties.markwon.core.MarkwonTheme;
-import io.noties.markwon.ext.strikethrough.StrikethroughPlugin;
-import io.noties.markwon.ext.tables.TablePlugin;
-import io.noties.markwon.ext.tasklist.TaskListPlugin;
-import io.noties.markwon.html.HtmlPlugin;
-import io.noties.markwon.image.DefaultMediaDecoder;
-import io.noties.markwon.image.ImageItem;
-import io.noties.markwon.image.ImagesPlugin;
-import io.noties.markwon.image.SchemeHandler;
-import io.noties.markwon.image.gif.GifMediaDecoder;
-import io.noties.markwon.image.svg.SvgMediaDecoder;
-import io.noties.markwon.linkify.LinkifyPlugin;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@@ -97,13 +79,7 @@ import retrofit2.Response;
public class IssueDetailActivity extends BaseActivity implements LabelsListAdapter.LabelsListAdapterListener, AssigneesListAdapter.AssigneesListAdapterListener, BottomSheetSingleIssueFragment.BottomSheetListener {
private IssueCommentsAdapter adapter;
- final Context ctx = this;
- private Context appCtx;
- private TinyDB tinyDb;
- private String instanceUrl;
- private String loginUid;
- private String instanceToken;
private String repoOwner;
private String repoName;
private int issueIndex;
@@ -135,21 +111,16 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
- tinyDb = new TinyDB(appCtx);
viewBinding = ActivityIssueDetailBinding.inflate(getLayoutInflater());
View view = viewBinding.getRoot();
setContentView(view);
- instanceUrl = tinyDb.getString("instanceUrl");
- loginUid = tinyDb.getString("loginUid");
- instanceToken = "token " + tinyDb.getString(loginUid + "-token");
- String repoFullName = tinyDb.getString("repoFullName");
+ String repoFullName = tinyDB.getString("repoFullName");
String[] parts = repoFullName.split("/");
repoOwner = parts[0];
repoName = parts[1];
- issueIndex = Integer.parseInt(tinyDb.getString("issueNumber"));
+ issueIndex = Integer.parseInt(tinyDB.getString("issueNumber"));
setSupportActionBar(viewBinding.toolbar);
Objects.requireNonNull(getSupportActionBar()).setTitle(repoName);
@@ -162,12 +133,18 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(viewBinding.recyclerView.getContext(), DividerItemDecoration.VERTICAL);
viewBinding.recyclerView.addItemDecoration(dividerItemDecoration);
- viewBinding.addNewComment.setOnClickListener(v -> BottomSheetReplyFragment.newInstance(new Bundle()).show(getSupportFragmentManager(), "replyBottomSheet"));
+ viewBinding.addNewComment.setOnClickListener(v -> {
+
+ BottomSheetReplyFragment bottomSheetReplyFragment = BottomSheetReplyFragment.newInstance(new Bundle());
+ bottomSheetReplyFragment.setOnInteractedListener(this::onResume);
+ bottomSheetReplyFragment.show(getSupportFragmentManager(), "replyBottomSheet");
+
+ });
labelsAdapter = new LabelsListAdapter(labelsList, IssueDetailActivity.this, currentLabelsIds);
assigneesAdapter = new AssigneesListAdapter(ctx, assigneesList, IssueDetailActivity.this, currentAssignees);
- LabelsActions.getCurrentIssueLabels(ctx, instanceUrl, loginUid, instanceToken, repoOwner, repoName, issueIndex, currentLabelsIds);
- AssigneesActions.getCurrentIssueAssignees(ctx, instanceUrl, loginUid, instanceToken, repoOwner, repoName, issueIndex, currentAssignees);
+ LabelsActions.getCurrentIssueLabels(ctx, repoOwner, repoName, issueIndex, currentLabelsIds);
+ AssigneesActions.getCurrentIssueAssignees(ctx, repoOwner, repoName, issueIndex, currentAssignees);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@@ -196,14 +173,14 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
viewBinding.pullToRefresh.setRefreshing(false);
IssueCommentsViewModel
- .loadIssueComments(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex,
+ .loadIssueComments(Authorization.get(ctx), repoOwner, repoName, issueIndex,
ctx);
}, 500));
Typeface myTypeface;
- switch(tinyDb.getInt("customFontId", -1)) {
+ switch(tinyDB.getInt("customFontId", -1)) {
case 1:
myTypeface = Typeface.createFromAsset(Objects.requireNonNull(ctx).getAssets(), "fonts/manroperegular.ttf");
@@ -222,8 +199,8 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
viewBinding.toolbarTitle.setTypeface(myTypeface);
viewBinding.toolbarTitle.setText(repoName);
- getSingleIssue(instanceUrl, instanceToken, repoOwner, repoName, issueIndex, loginUid);
- fetchDataAsync(instanceUrl, instanceToken, repoOwner, repoName, issueIndex, loginUid);
+ getSingleIssue(repoOwner, repoName, issueIndex);
+ fetchDataAsync(repoOwner, repoName, issueIndex);
}
@@ -232,6 +209,10 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
switch(text) {
+ case "onResume":
+ onResume();
+ break;
+
case "showLabels":
showLabels();
break;
@@ -292,7 +273,8 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
}
});
- AssigneesActions.getRepositoryAssignees(ctx, instanceUrl, instanceToken, repoOwner, repoName, assigneesList, dialogAssignees, assigneesAdapter, assigneesBinding);
+ dialogAssignees.show();
+ AssigneesActions.getRepositoryAssignees(ctx, repoOwner, repoName, assigneesList, dialogAssignees, assigneesAdapter, assigneesBinding);
}
public void showLabels() {
@@ -328,7 +310,8 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
}
});
- LabelsActions.getRepositoryLabels(ctx, instanceUrl, instanceToken, repoOwner, repoName, labelsList, dialogLabels, labelsAdapter, labelsBinding);
+ dialogLabels.show();
+ LabelsActions.getRepositoryLabels(ctx, repoOwner, repoName, labelsList, dialogLabels, labelsAdapter, labelsBinding);
}
private void updateIssueAssignees() {
@@ -338,9 +321,8 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
Call call3;
call3 = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .patchIssueAssignees(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex, updateAssigneeJson);
+ .getApiInterface(ctx)
+ .patchIssueAssignees(Authorization.get(ctx), repoOwner, repoName, issueIndex, updateAssigneeJson);
call3.enqueue(new Callback() {
@@ -355,9 +337,9 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
viewBinding.frameAssignees.removeAllViews();
viewBinding.frameLabels.removeAllViews();
- getSingleIssue(instanceUrl, instanceToken, repoOwner, repoName, issueIndex, loginUid);
+ getSingleIssue(repoOwner, repoName, issueIndex);
currentAssignees.clear();
- new Handler(Looper.getMainLooper()).postDelayed(() -> AssigneesActions.getCurrentIssueAssignees(ctx, instanceUrl, loginUid, instanceToken, repoOwner, repoName, issueIndex, currentAssignees), 1000);
+ new Handler(Looper.getMainLooper()).postDelayed(() -> AssigneesActions.getCurrentIssueAssignees(ctx, repoOwner, repoName, issueIndex, currentAssignees), 1000);
}
else if(response2.code() == 401) {
@@ -394,9 +376,8 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
Labels patchIssueLabels = new Labels(labelsIds);
Call call = RetrofitClient
- .getInstance(instanceUrl, ctx)
- .getApiInterface()
- .updateIssueLabels(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex, patchIssueLabels);
+ .getApiInterface(ctx)
+ .updateIssueLabels(Authorization.get(ctx), repoOwner, repoName, issueIndex, patchIssueLabels);
call.enqueue(new Callback() {
@@ -410,9 +391,9 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
viewBinding.frameAssignees.removeAllViews();
viewBinding.frameLabels.removeAllViews();
- getSingleIssue(instanceUrl, instanceToken, repoOwner, repoName, issueIndex, loginUid);
+ getSingleIssue(repoOwner, repoName, issueIndex);
currentLabelsIds.clear();
- new Handler(Looper.getMainLooper()).postDelayed(() -> LabelsActions.getCurrentIssueLabels(ctx, instanceUrl, loginUid, instanceToken, repoOwner, repoName, issueIndex, currentLabelsIds), 1000);
+ new Handler(Looper.getMainLooper()).postDelayed(() -> LabelsActions.getCurrentIssueLabels(ctx, repoOwner, repoName, issueIndex, currentLabelsIds), 1000);
}
else if(response.code() == 401) {
@@ -457,18 +438,21 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
int id = item.getItemId();
- switch(id) {
- case android.R.id.home:
- finish();
- return true;
- case R.id.genericMenu:
- BottomSheetSingleIssueFragment bottomSheet = new BottomSheetSingleIssueFragment();
- bottomSheet.show(getSupportFragmentManager(), "singleIssueBottomSheet");
- return true;
- default:
- return super.onOptionsItemSelected(item);
- }
+ if(id == android.R.id.home) {
+ finish();
+ return true;
+ }
+ else if(id == R.id.genericMenu) {
+
+ BottomSheetSingleIssueFragment bottomSheet = new BottomSheetSingleIssueFragment();
+ bottomSheet.show(getSupportFragmentManager(), "singleIssueBottomSheet");
+ return true;
+ }
+ else {
+
+ return super.onOptionsItemSelected(item);
+ }
}
@Override
@@ -476,84 +460,87 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
super.onResume();
- if(tinyDb.getBoolean("commentPosted")) {
+ if(tinyDB.getBoolean("commentPosted")) {
+
viewBinding.scrollViewComments.post(() -> {
IssueCommentsViewModel
- .loadIssueComments(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex,
+ .loadIssueComments(Authorization.get(ctx), repoOwner, repoName, issueIndex,
ctx);
new Handler(Looper.getMainLooper()).postDelayed(() -> viewBinding.scrollViewComments.fullScroll(ScrollView.FOCUS_DOWN), 1000);
- tinyDb.putBoolean("commentPosted", false);
-
+ tinyDB.putBoolean("commentPosted", false);
});
}
- if(tinyDb.getBoolean("commentEdited")) {
+ if(tinyDB.getBoolean("commentEdited")) {
+
viewBinding.scrollViewComments.post(() -> {
IssueCommentsViewModel
- .loadIssueComments(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex,
+ .loadIssueComments(Authorization.get(ctx), repoOwner, repoName, issueIndex,
ctx);
- tinyDb.putBoolean("commentEdited", false);
-
+ tinyDB.putBoolean("commentEdited", false);
});
}
- if(tinyDb.getBoolean("singleIssueUpdate")) {
+ if(tinyDB.getBoolean("singleIssueUpdate")) {
new Handler(Looper.getMainLooper()).postDelayed(() -> {
viewBinding.frameAssignees.removeAllViews();
viewBinding.frameLabels.removeAllViews();
- getSingleIssue(instanceUrl, instanceToken, repoOwner, repoName, issueIndex, loginUid);
- tinyDb.putBoolean("singleIssueUpdate", false);
+ getSingleIssue(repoOwner, repoName, issueIndex);
+ tinyDB.putBoolean("singleIssueUpdate", false);
}, 500);
-
}
- if(tinyDb.getBoolean("issueEdited")) {
+ if(tinyDB.getBoolean("issueEdited")) {
new Handler(Looper.getMainLooper()).postDelayed(() -> {
viewBinding.frameAssignees.removeAllViews();
viewBinding.frameLabels.removeAllViews();
- getSingleIssue(instanceUrl, instanceToken, repoOwner, repoName, issueIndex, loginUid);
- tinyDb.putBoolean("issueEdited", false);
+ getSingleIssue(repoOwner, repoName, issueIndex);
+ tinyDB.putBoolean("issueEdited", false);
}, 500);
-
}
-
}
- private void fetchDataAsync(String instanceUrl, String instanceToken, String owner, String repo, int index, String loginUid) {
+ private void fetchDataAsync(String owner, String repo, int index) {
IssueCommentsViewModel issueCommentsModel = new ViewModelProvider(this).get(IssueCommentsViewModel.class);
- issueCommentsModel.getIssueCommentList(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), owner, repo, index, ctx)
+ issueCommentsModel.getIssueCommentList(Authorization.get(ctx), owner, repo, index, ctx)
.observe(this, issueCommentsMain -> {
assert issueCommentsMain != null;
if(issueCommentsMain.size() > 0) {
+
viewBinding.divider.setVisibility(View.VISIBLE);
}
- adapter = new IssueCommentsAdapter(ctx, getSupportFragmentManager(), issueCommentsMain);
+ Bundle bundle = new Bundle();
+ bundle.putString("repoOwner", repoOwner);
+ bundle.putString("repoName", repoName);
+ bundle.putInt("issueNumber", issueIndex);
+
+ adapter = new IssueCommentsAdapter(ctx, bundle, issueCommentsMain, getSupportFragmentManager(), this::onResume);
+
viewBinding.recyclerView.setAdapter(adapter);
});
-
}
- private void getSingleIssue(String instanceUrl, String instanceToken, String repoOwner, String repoName, int issueIndex, String loginUid) {
+ private void getSingleIssue(String repoOwner, String repoName, int issueIndex) {
- final TinyDB tinyDb = new TinyDB(appCtx);
- Call call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface()
- .getIssueByIndex(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex);
+ final TinyDB tinyDb = TinyDB.getInstance(appCtx);
+ Call call = RetrofitClient.getApiInterface(ctx)
+ .getIssueByIndex(Authorization.get(ctx), repoOwner, repoName, issueIndex);
call.enqueue(new Callback() {
@@ -566,6 +553,7 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
assert singleIssue != null;
viewBinding.issuePrState.setVisibility(View.VISIBLE);
+
if(singleIssue.getPull_request() != null) {
if(singleIssue.getPull_request().isMerged()) { // merged
@@ -586,49 +574,7 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
viewBinding.issuePrState.setImageResource(R.drawable.ic_issue_closed_red);
}
- final Markwon markwon = Markwon.builder(Objects.requireNonNull(ctx)).usePlugin(CorePlugin.create())
- .usePlugin(ImagesPlugin.create(plugin -> {
- plugin.addSchemeHandler(new SchemeHandler() {
-
- @NonNull
- @Override
- public ImageItem handle(@NonNull String raw, @NonNull Uri uri) {
-
- final int resourceId = ctx.getResources()
- .getIdentifier(raw.substring("drawable://".length()), "drawable", ctx.getPackageName());
-
- final Drawable drawable = ctx.getDrawable(resourceId);
-
- assert drawable != null;
- return ImageItem.withResult(drawable);
- }
-
- @NonNull
- @Override
- public Collection supportedSchemes() {
-
- return Collections.singleton("drawable");
- }
- });
- plugin.placeholderProvider(drawable -> null);
- plugin.addMediaDecoder(GifMediaDecoder.create(false));
- plugin.addMediaDecoder(SvgMediaDecoder.create(ctx.getResources()));
- plugin.addMediaDecoder(SvgMediaDecoder.create());
- plugin.defaultMediaDecoder(DefaultMediaDecoder.create(ctx.getResources()));
- plugin.defaultMediaDecoder(DefaultMediaDecoder.create());
-
- })).usePlugin(new AbstractMarkwonPlugin() {
-
- @Override
- public void configureTheme(@NonNull MarkwonTheme.Builder builder) {
-
- builder.codeTextColor(tinyDb.getInt("codeBlockColor")).codeBackgroundColor(tinyDb.getInt("codeBlockBackground"))
- .linkColor(getResources().getColor(R.color.lightBlue));
- }
- }).usePlugin(TablePlugin.create(ctx)).usePlugin(TaskListPlugin.create(ctx)).usePlugin(HtmlPlugin.create())
- .usePlugin(StrikethroughPlugin.create()).usePlugin(LinkifyPlugin.create()).build();
-
- TinyDB tinyDb = new TinyDB(appCtx);
+ TinyDB tinyDb = TinyDB.getInstance(appCtx);
final String locale = tinyDb.getString("locale");
final String timeFormat = tinyDb.getString("dateFormat");
tinyDb.putString("issueState", singleIssue.getState());
@@ -641,8 +587,8 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
.getString(R.string.hash) + singleIssue.getNumber() + "";
viewBinding.issueTitle.setText(Html.fromHtml(issueNumber_ + " " + singleIssue.getTitle()));
String cleanIssueDescription = singleIssue.getBody().trim();
- Spanned bodyWithMD = markwon.toMarkdown(EmojiParser.parseToUnicode(cleanIssueDescription));
- markwon.setParsedMarkdown(viewBinding.issueDescription, UserMentions.UserMentionsFunc(ctx, bodyWithMD, cleanIssueDescription));
+
+ new Markdown(ctx, EmojiParser.parseToUnicode(cleanIssueDescription), viewBinding.issueDescription);
RelativeLayout.LayoutParams paramsDesc = (RelativeLayout.LayoutParams) viewBinding.issueDescription.getLayoutParams();
@@ -650,7 +596,9 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
params1.setMargins(15, 0, 0, 0);
if(singleIssue.getAssignees() != null) {
+
viewBinding.assigneesScrollView.setVisibility(View.VISIBLE);
+
for(int i = 0; i < singleIssue.getAssignees().size(); i++) {
ImageView assigneesView = new ImageView(ctx);
@@ -662,17 +610,19 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
viewBinding.frameAssignees.addView(assigneesView);
assigneesView.setLayoutParams(params1);
if(!singleIssue.getAssignees().get(i).getFull_name().equals("")) {
+
assigneesView.setOnClickListener(
new ClickListener(getString(R.string.assignedTo, singleIssue.getAssignees().get(i).getFull_name()), ctx));
}
else {
+
assigneesView.setOnClickListener(
new ClickListener(getString(R.string.assignedTo, singleIssue.getAssignees().get(i).getLogin()), ctx));
}
-
}
}
else {
+
viewBinding.assigneesScrollView.setVisibility(View.GONE);
}
@@ -681,6 +631,7 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
params.setMargins(0, 0, 15, 0);
if(singleIssue.getLabels() != null) {
+
viewBinding.labelsScrollView.setVisibility(View.VISIBLE);
for(int i = 0; i < singleIssue.getLabels().size(); i++) {
@@ -704,16 +655,17 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
labelsView.setImageDrawable(drawable);
viewBinding.frameLabels.addView(labelsView);
-
}
}
else {
+
viewBinding.labelsScrollView.setVisibility(View.GONE);
}
if(singleIssue.getDue_date() != null) {
if(timeFormat.equals("normal") || timeFormat.equals("pretty")) {
+
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", new Locale(locale));
String dueDate = formatter.format(singleIssue.getDue_date());
viewBinding.issueDueDate.setText(dueDate);
@@ -721,11 +673,11 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(singleIssue.getDue_date()), ctx));
}
else if(timeFormat.equals("normal1")) {
+
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy", new Locale(locale));
String dueDate = formatter.format(singleIssue.getDue_date());
viewBinding.issueDueDate.setText(dueDate);
}
-
}
else {
@@ -735,6 +687,7 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
String edited;
if(!singleIssue.getUpdated_at().equals(singleIssue.getCreated_at())) {
+
edited = getString(R.string.colorfulBulletSpan) + getString(R.string.modifiedText);
viewBinding.issueModified.setVisibility(View.VISIBLE);
viewBinding.issueModified.setText(edited);
@@ -742,22 +695,27 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(singleIssue.getUpdated_at()), ctx));
}
else {
+
viewBinding.issueModified.setVisibility(View.INVISIBLE);
}
if((singleIssue.getDue_date() == null && singleIssue.getMilestone() == null) && singleIssue.getAssignees() != null) {
+
paramsDesc.setMargins(0, 35, 0, 0);
viewBinding.issueDescription.setLayoutParams(paramsDesc);
}
else if(singleIssue.getDue_date() == null && singleIssue.getMilestone() == null) {
+
paramsDesc.setMargins(0, 55, 0, 0);
viewBinding.issueDescription.setLayoutParams(paramsDesc);
}
else if(singleIssue.getAssignees() == null) {
+
paramsDesc.setMargins(0, 35, 0, 0);
viewBinding.issueDescription.setLayoutParams(paramsDesc);
}
else {
+
paramsDesc.setMargins(0, 15, 0, 0);
viewBinding.issueDescription.setLayoutParams(paramsDesc);
}
@@ -766,30 +724,51 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
viewBinding.issueCreatedTime.setVisibility(View.VISIBLE);
if(timeFormat.equals("pretty")) {
+
viewBinding.issueCreatedTime
.setOnClickListener(new ClickListener(TimeHelper.customDateFormatForToastDateFormat(singleIssue.getCreated_at()), ctx));
}
+ Bundle bundle = new Bundle();
+ bundle.putString("repoOwner", repoOwner);
+ bundle.putString("repoName", repoName);
+ bundle.putInt("issueId", singleIssue.getNumber());
+
+ ReactionList reactionList = new ReactionList(ctx, bundle);
+
+ viewBinding.commentReactionBadges.removeAllViews();
+ viewBinding.commentReactionBadges.addView(reactionList);
+
+ reactionList.setOnReactionAddedListener(() -> {
+
+ if(viewBinding.commentReactionBadges.getVisibility() != View.VISIBLE) {
+ viewBinding.commentReactionBadges.post(() -> viewBinding.commentReactionBadges.setVisibility(View.VISIBLE));
+ }
+ });
+
if(singleIssue.getMilestone() != null) {
+
+ viewBinding.issueMilestone.setVisibility(View.VISIBLE);
viewBinding.issueMilestone.setText(getString(R.string.issueMilestone, singleIssue.getMilestone().getTitle()));
}
else {
+
viewBinding.issueMilestone.setVisibility(View.GONE);
}
if(!singleIssue.getUser().getFull_name().equals("")) {
+
viewBinding.assigneeAvatar.setOnClickListener(
new ClickListener(ctx.getResources().getString(R.string.issueCreator) + singleIssue.getUser().getFull_name(), ctx));
}
else {
+
viewBinding.assigneeAvatar.setOnClickListener(
new ClickListener(ctx.getResources().getString(R.string.issueCreator) + singleIssue.getUser().getLogin(), ctx));
}
viewBinding.progressBar.setVisibility(View.GONE);
-
}
-
else if(response.code() == 401) {
AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle),
@@ -798,7 +777,21 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
}
+ else if(response.code() == 404) {
+ if(tinyDb.getString("issueType").equals("Issue")) {
+
+ Toasty.warning(ctx, getResources().getString(R.string.noDataIssueTab));
+ }
+ else if(tinyDb.getString("issueType").equals("Pull")) {
+
+ Toasty.warning(ctx, getResources().getString(R.string.noDataPullRequests));
+ }
+
+ Intent mainIntent = new Intent(ctx, MainActivity.class);
+ ctx.startActivity(mainIntent);
+ finish();
+ }
}
@Override
@@ -811,8 +804,8 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
if(new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.0")) {
- Call call2 = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface()
- .checkIssueWatchStatus(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, issueIndex);
+ Call call2 = RetrofitClient.getApiInterface(appCtx)
+ .checkIssueWatchStatus(Authorization.get(ctx), repoOwner, repoName, issueIndex);
call2.enqueue(new Callback() {
@@ -823,21 +816,17 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt
assert response.body() != null;
tinyDb.putBoolean("issueSubscribed", response.body().getSubscribed());
-
}
else {
tinyDb.putBoolean("issueSubscribed", false);
-
}
-
}
@Override
public void onFailure(@NonNull Call call, @NonNull Throwable t) {
tinyDb.putBoolean("issueSubscribed", false);
-
}
});
diff --git a/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java b/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java
index e7016da7..049b5978 100644
--- a/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java
@@ -1,16 +1,15 @@
package org.mian.gitnex.activities;
-import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.os.Handler;
import android.util.Log;
import android.view.View;
-import android.widget.AdapterView;
import android.widget.ArrayAdapter;
+import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
-import android.widget.Spinner;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
@@ -19,7 +18,7 @@ import org.mian.gitnex.clients.RetrofitClient;
import org.mian.gitnex.database.api.UserAccountsApi;
import org.mian.gitnex.database.models.UserAccount;
import org.mian.gitnex.helpers.AppUtil;
-import org.mian.gitnex.helpers.NetworkObserver;
+import org.mian.gitnex.helpers.NetworkStatusObserver;
import org.mian.gitnex.helpers.PathsHelper;
import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty;
@@ -47,16 +46,12 @@ public class LoginActivity extends BaseActivity {
private enum LoginType {BASIC, TOKEN}
- private Context appCtx;
- private Context ctx = this;
- private TinyDB tinyDB;
-
private Button loginButton;
private EditText instanceUrlET, loginUidET, loginPassword, otpCode, loginTokenCode;
- private Spinner protocolSpinner;
- private TextView otpInfo;
+ private AutoCompleteTextView protocolSpinner;
private RadioGroup loginMethod;
private String device_id = "token";
+ private String selectedProtocol;
@Override
protected int getLayoutResourceId() {
@@ -68,70 +63,77 @@ public class LoginActivity extends BaseActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
- tinyDB = new TinyDB(appCtx);
- NetworkObserver networkMonitor = new NetworkObserver(ctx);
+ NetworkStatusObserver networkStatusObserver = NetworkStatusObserver.get(ctx);
loginButton = findViewById(R.id.login_button);
instanceUrlET = findViewById(R.id.instance_url);
loginUidET = findViewById(R.id.login_uid);
loginPassword = findViewById(R.id.login_passwd);
otpCode = findViewById(R.id.otpCode);
- otpInfo = findViewById(R.id.otpInfo);
protocolSpinner = findViewById(R.id.httpsSpinner);
loginMethod = findViewById(R.id.loginMethod);
loginTokenCode = findViewById(R.id.loginTokenCode);
((TextView) findViewById(R.id.appVersion)).setText(AppUtil.getAppVersion(appCtx));
- ArrayAdapter adapterProtocols = new ArrayAdapter<>(LoginActivity.this, R.layout.spinner_item, Protocol.values());
- adapterProtocols.setDropDownViewResource(R.layout.spinner_dropdown_item);
+ ArrayAdapter adapterProtocols = new ArrayAdapter<>(LoginActivity.this, R.layout.list_spinner_items, Protocol.values());
protocolSpinner.setAdapter(adapterProtocols);
- protocolSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+ protocolSpinner.setSelection(0);
+ protocolSpinner.setOnItemClickListener((parent, view, position, id) -> {
- public void onItemSelected(AdapterView> parent, View view, int pos, long id) {
+ selectedProtocol = String.valueOf(parent.getItemAtPosition(position));
- if(protocolSpinner.getSelectedItem() == Protocol.HTTP) {
- Toasty.warning(ctx, getResources().getString(R.string.protocolError));
- }
+ if(selectedProtocol.equals(String.valueOf(Protocol.HTTP))) {
+
+ Toasty.warning(ctx, getResources().getString(R.string.protocolError));
}
-
- public void onNothingSelected(AdapterView> parent) {
-
- }
-
});
+ if(R.id.loginToken == loginMethod.getCheckedRadioButtonId()) {
+
+ AppUtil.setMultiVisibility(View.GONE, findViewById(R.id.login_uidLayout), findViewById(R.id.login_passwdLayout), findViewById(R.id.otpCodeLayout));
+ findViewById(R.id.loginTokenCodeLayout).setVisibility(View.VISIBLE);
+ }
+ else {
+
+ AppUtil.setMultiVisibility(View.VISIBLE, findViewById(R.id.login_uidLayout), findViewById(R.id.login_passwdLayout), findViewById(R.id.otpCodeLayout));
+ findViewById(R.id.loginTokenCodeLayout).setVisibility(View.GONE);
+ }
+
loginMethod.setOnCheckedChangeListener((group, checkedId) -> {
if(checkedId == R.id.loginToken) {
- AppUtil.setMultiVisibility(View.GONE, loginUidET, loginPassword, otpCode, otpInfo);
- loginTokenCode.setVisibility(View.VISIBLE);
-
+ AppUtil.setMultiVisibility(View.GONE, findViewById(R.id.login_uidLayout), findViewById(R.id.login_passwdLayout), findViewById(R.id.otpCodeLayout));
+ findViewById(R.id.loginTokenCodeLayout).setVisibility(View.VISIBLE);
}
else {
- AppUtil.setMultiVisibility(View.VISIBLE, loginUidET, loginPassword, otpCode, otpInfo);
- loginTokenCode.setVisibility(View.GONE);
-
+ AppUtil.setMultiVisibility(View.VISIBLE, findViewById(R.id.login_uidLayout), findViewById(R.id.login_passwdLayout), findViewById(R.id.otpCodeLayout));
+ findViewById(R.id.loginTokenCodeLayout).setVisibility(View.GONE);
}
});
- networkMonitor.onInternetStateListener(isAvailable -> {
+ Handler handler = new Handler(getMainLooper());
- if(isAvailable) {
+ networkStatusObserver.registerNetworkStatusListener(hasNetworkConnection -> {
- enableProcessButton();
- }
- else {
+ handler.post(() -> {
- disableProcessButton();
- loginButton.setText(getResources().getString(R.string.btnLogin));
- Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
- }
+ if(hasNetworkConnection) {
+
+ enableProcessButton();
+ }
+ else {
+
+ disableProcessButton();
+ loginButton.setText(getResources().getString(R.string.btnLogin));
+ Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
+ }
+
+ });
});
loadDefaults();
@@ -140,25 +142,29 @@ public class LoginActivity extends BaseActivity {
disableProcessButton();
login();
-
});
-
}
private void login() {
try {
+ if(selectedProtocol == null) {
+
+ Toasty.error(ctx, getResources().getString(R.string.protocolEmptyError));
+ enableProcessButton();
+ return;
+ }
+
String loginUid = loginUidET.getText().toString();
String loginPass = loginPassword.getText().toString();
String loginToken = loginTokenCode.getText().toString().trim();
- Protocol protocol = (Protocol) protocolSpinner.getSelectedItem();
LoginType loginType = (loginMethod.getCheckedRadioButtonId() == R.id.loginUsernamePassword) ? LoginType.BASIC : LoginType.TOKEN;
URI rawInstanceUrl = UrlBuilder.fromString(UrlHelper.fixScheme(instanceUrlET.getText().toString(), "http")).toUri();
- URI instanceUrl = UrlBuilder.fromUri(rawInstanceUrl).withScheme(protocol.name().toLowerCase()).withPath(PathsHelper.join(rawInstanceUrl.getPath(), "/api/v1/"))
+ URI instanceUrl = UrlBuilder.fromUri(rawInstanceUrl).withScheme(selectedProtocol.toLowerCase()).withPath(PathsHelper.join(rawInstanceUrl.getPath(), "/api/v1/"))
.toUri();
tinyDB.putString("loginType", loginType.name().toLowerCase());
@@ -170,7 +176,6 @@ public class LoginActivity extends BaseActivity {
Toasty.error(ctx, getResources().getString(R.string.emptyFieldURL));
enableProcessButton();
return;
-
}
if(loginType == LoginType.BASIC) {
@@ -180,14 +185,12 @@ public class LoginActivity extends BaseActivity {
Toasty.warning(ctx, getResources().getString(R.string.loginOTPTypeError));
enableProcessButton();
return;
-
}
if(rawInstanceUrl.getUserInfo() != null) {
tinyDB.putString("basicAuthPassword", loginPass);
tinyDB.putBoolean("basicAuthFlag", true);
-
}
if(loginUid.equals("")) {
@@ -195,7 +198,6 @@ public class LoginActivity extends BaseActivity {
Toasty.error(ctx, getResources().getString(R.string.emptyFieldUsername));
enableProcessButton();
return;
-
}
if(loginPass.equals("")) {
@@ -203,13 +205,12 @@ public class LoginActivity extends BaseActivity {
Toasty.error(ctx, getResources().getString(R.string.emptyFieldPassword));
enableProcessButton();
return;
-
}
int loginOTP = (otpCode.length() > 0) ? Integer.parseInt(otpCode.getText().toString().trim()) : 0;
tinyDB.putString("loginUid", loginUid);
- versionCheck(instanceUrl.toString(), loginUid, loginPass, loginOTP, loginToken, loginType);
+ versionCheck(loginUid, loginPass, loginOTP, loginToken, loginType);
}
else {
@@ -219,11 +220,9 @@ public class LoginActivity extends BaseActivity {
Toasty.error(ctx, getResources().getString(R.string.loginTokenError));
enableProcessButton();
return;
-
}
- versionCheck(instanceUrl.toString(), loginUid, loginPass, 123, loginToken, loginType);
-
+ versionCheck(loginUid, loginPass, 123, loginToken, loginType);
}
}
@@ -232,27 +231,25 @@ public class LoginActivity extends BaseActivity {
Log.e("onFailure-login", e.toString());
Toasty.error(ctx, getResources().getString(R.string.malformedUrl));
enableProcessButton();
-
}
}
- private void versionCheck(final String instanceUrl, final String loginUid, final String loginPass, final int loginOTP, final String loginToken,
+ private void versionCheck(final String loginUid, final String loginPass, final int loginOTP, final String loginToken,
final LoginType loginType) {
Call callVersion;
if(!loginToken.equals("")) {
- callVersion = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getGiteaVersionWithToken("token " + loginToken);
+ callVersion = RetrofitClient.getApiInterface(appCtx).getGiteaVersionWithToken("token " + loginToken);
}
else {
String credential = Credentials.basic(loginUid, loginPass, StandardCharsets.UTF_8);
callVersion =
- (loginOTP != 0) ? RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getGiteaVersionWithOTP(credential, loginOTP) :
- RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getGiteaVersionWithBasic(credential);
-
+ (loginOTP != 0) ? RetrofitClient.getApiInterface(appCtx).getGiteaVersionWithOTP(credential, loginOTP) :
+ RetrofitClient.getApiInterface(appCtx).getGiteaVersionWithBasic(credential);
}
callVersion.enqueue(new Callback() {
@@ -263,9 +260,10 @@ public class LoginActivity extends BaseActivity {
if(responseVersion.code() == 200) {
GiteaVersion version = responseVersion.body();
-
assert version != null;
+
if(!Version.valid(version.getVersion())) {
+
Toasty.error(ctx, getResources().getString(R.string.versionUnknown));
enableProcessButton();
return;
@@ -276,8 +274,10 @@ public class LoginActivity extends BaseActivity {
if(gitea_version.less(getString(R.string.versionLow))) {
- AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(ctx).setTitle(getString(R.string.versionAlertDialogHeader))
- .setMessage(getResources().getString(R.string.versionUnsupportedOld, version.getVersion())).setIcon(R.drawable.ic_warning)
+ AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(ctx)
+ .setTitle(getString(R.string.versionAlertDialogHeader))
+ .setMessage(getResources().getString(R.string.versionUnsupportedOld, version.getVersion()))
+ .setIcon(R.drawable.ic_warning)
.setCancelable(true);
alertDialogBuilder.setNegativeButton(getString(R.string.cancelButton), (dialog, which) -> {
@@ -289,7 +289,7 @@ public class LoginActivity extends BaseActivity {
alertDialogBuilder.setPositiveButton(getString(R.string.textContinue), (dialog, which) -> {
dialog.dismiss();
- login(loginType, instanceUrl, loginUid, loginPass, loginOTP, loginToken);
+ login(loginType, loginUid, loginPass, loginOTP, loginToken);
});
alertDialogBuilder.create().show();
@@ -297,32 +297,34 @@ public class LoginActivity extends BaseActivity {
}
else if(gitea_version.lessOrEqual(getString(R.string.versionHigh))) {
- login(loginType, instanceUrl, loginUid, loginPass, loginOTP, loginToken);
+ login(loginType, loginUid, loginPass, loginOTP, loginToken);
}
else {
Toasty.warning(ctx, getResources().getString(R.string.versionUnsupportedNew));
- login(loginType, instanceUrl, loginUid, loginPass, loginOTP, loginToken);
+ login(loginType, loginUid, loginPass, loginOTP, loginToken);
}
}
else if(responseVersion.code() == 403) {
- login(loginType, instanceUrl, loginUid, loginPass, loginOTP, loginToken);
+ login(loginType, loginUid, loginPass, loginOTP, loginToken);
}
}
- private void login(LoginType loginType, String instanceUrl, String loginUid, String loginPass, int loginOTP, String loginToken) {
+ private void login(LoginType loginType, String loginUid, String loginPass, int loginOTP, String loginToken) {
// ToDo: before store/create token: get UserInfo to check DB/AccountManager if there already exist a token
// the setup methods then can better handle all different cases
if(loginType == LoginType.BASIC) {
- setup(instanceUrl, loginUid, loginPass, loginOTP);
+
+ setup(loginUid, loginPass, loginOTP);
}
else if(loginType == LoginType.TOKEN) { // Token
- setupUsingExistingToken(instanceUrl, loginToken);
+
+ setupUsingExistingToken(loginToken);
}
}
@@ -336,9 +338,9 @@ public class LoginActivity extends BaseActivity {
});
}
- private void setupUsingExistingToken(String instanceUrl, final String loginToken) {
+ private void setupUsingExistingToken(final String loginToken) {
- Call call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getUserInfo("token " + loginToken);
+ Call call = RetrofitClient.getApiInterface(appCtx).getUserInfo("token " + loginToken);
call.enqueue(new Callback() {
@@ -350,6 +352,7 @@ public class LoginActivity extends BaseActivity {
switch(response.code()) {
case 200:
+
assert userDetails != null;
tinyDB.putBoolean("loggedInMode", true);
tinyDB.putString(userDetails.getLogin() + "-token", loginToken);
@@ -357,14 +360,14 @@ public class LoginActivity extends BaseActivity {
tinyDB.putString("userLogin", userDetails.getUsername());
// insert new account to db if does not exist
- String accountName = userDetails.getUsername() + "@" + instanceUrl;
+ String accountName = userDetails.getUsername() + "@" + TinyDB.getInstance(ctx).getString("instanceUrl");
UserAccountsApi userAccountsApi = new UserAccountsApi(ctx);
int checkAccount = userAccountsApi.getCount(accountName);
long accountId;
if(checkAccount == 0) {
- accountId = userAccountsApi.insertNewAccount(accountName, instanceUrl, userDetails.getUsername(), loginToken, "");
+ accountId = userAccountsApi.insertNewAccount(accountName, TinyDB.getInstance(ctx).getString("instanceUrl"), userDetails.getUsername(), loginToken, "");
tinyDB.putInt("currentActiveAccountId", (int) accountId);
}
else {
@@ -378,18 +381,16 @@ public class LoginActivity extends BaseActivity {
startActivity(new Intent(LoginActivity.this, MainActivity.class));
finish();
break;
-
case 401:
+
Toasty.error(ctx, getResources().getString(R.string.unauthorizedApiError));
enableProcessButton();
break;
-
default:
+
Toasty.error(ctx, getResources().getString(R.string.genericApiStatusError) + response.code());
enableProcessButton();
-
}
-
}
@Override
@@ -398,13 +399,12 @@ public class LoginActivity extends BaseActivity {
Log.e("onFailure", t.toString());
Toasty.error(ctx, getResources().getString(R.string.genericError));
enableProcessButton();
-
}
});
}
- private void setup(final String instanceUrl, final String loginUid, final String loginPass, final int loginOTP) {
+ private void setup(final String loginUid, final String loginPass, final int loginOTP) {
final String credential = Credentials.basic(loginUid, loginPass, StandardCharsets.UTF_8);
final String tokenName = "gitnex-app-" + device_id;
@@ -412,11 +412,11 @@ public class LoginActivity extends BaseActivity {
Call> call;
if(loginOTP != 0) {
- call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getUserTokensWithOTP(credential, loginOTP, loginUid);
+ call = RetrofitClient.getApiInterface(appCtx).getUserTokensWithOTP(credential, loginOTP, loginUid);
}
else {
- call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getUserTokens(credential, loginUid);
+ call = RetrofitClient.getApiInterface(appCtx).getUserTokens(credential, loginUid);
}
call.enqueue(new Callback>() {
@@ -429,7 +429,9 @@ public class LoginActivity extends BaseActivity {
if(response.code() == 200) {
assert userTokens != null;
+
for(UserTokens t : userTokens) {
+
if(t.getName().equals(tokenName)) {
// this app had created an token on this instance before
@@ -438,13 +440,14 @@ public class LoginActivity extends BaseActivity {
Call delcall;
if(loginOTP != 0) {
- delcall = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface()
+ delcall = RetrofitClient.getApiInterface(ctx)
.deleteTokenWithOTP(credential, loginOTP, loginUid, t.getId());
}
else {
- delcall = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().deleteToken(credential, loginUid, t.getId());
+ delcall = RetrofitClient.getApiInterface(ctx).deleteToken(credential, loginUid, t.getId());
}
+
delcall.enqueue(new Callback() {
@Override
@@ -452,13 +455,12 @@ public class LoginActivity extends BaseActivity {
if(response.code() == 204) {
- setupToken(instanceUrl, loginUid, loginPass, loginOTP, tokenName);
+ setupToken(loginUid, loginPass, loginOTP, tokenName);
}
else {
Toasty.error(ctx, getResources().getString(R.string.genericApiStatusError) + response.code());
enableProcessButton();
-
}
}
@@ -468,20 +470,18 @@ public class LoginActivity extends BaseActivity {
Log.e("onFailure-login", t.toString());
Toasty.error(ctx, getResources().getString(R.string.malformedJson));
enableProcessButton();
-
}
});
return;
}
}
- setupToken(instanceUrl, loginUid, loginPass, loginOTP, tokenName);
+ setupToken(loginUid, loginPass, loginOTP, tokenName);
}
else {
Toasty.error(ctx, getResources().getString(R.string.genericApiStatusError) + response.code());
enableProcessButton();
-
}
}
@@ -491,13 +491,12 @@ public class LoginActivity extends BaseActivity {
Log.e("onFailure-login", t.toString());
Toasty.error(ctx, getResources().getString(R.string.malformedJson));
enableProcessButton();
-
}
});
}
- private void setupToken(final String instanceUrl, final String loginUid, final String loginPass, final int loginOTP, final String tokenName) {
+ private void setupToken(final String loginUid, final String loginPass, final int loginOTP, final String tokenName) {
final String credential = Credentials.basic(loginUid, loginPass, StandardCharsets.UTF_8);
@@ -506,12 +505,13 @@ public class LoginActivity extends BaseActivity {
if(loginOTP != 0) {
- callCreateToken = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface()
+ callCreateToken = RetrofitClient.getApiInterface(ctx)
.createNewTokenWithOTP(credential, loginOTP, loginUid, createUserToken);
}
else {
- callCreateToken = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().createNewToken(credential, loginUid, createUserToken);
+ callCreateToken = RetrofitClient.getApiInterface(ctx)
+ .createNewToken(credential, loginUid, createUserToken);
}
callCreateToken.enqueue(new Callback() {
@@ -526,7 +526,7 @@ public class LoginActivity extends BaseActivity {
if(!newToken.getSha1().equals("")) {
- Call call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface()
+ Call call = RetrofitClient.getApiInterface(ctx)
.getUserInfo("token " + newToken.getSha1());
call.enqueue(new Callback() {
@@ -539,6 +539,7 @@ public class LoginActivity extends BaseActivity {
switch(response.code()) {
case 200:
+
assert userDetails != null;
tinyDB.remove("loginPass");
tinyDB.putBoolean("loggedInMode", true);
@@ -547,7 +548,7 @@ public class LoginActivity extends BaseActivity {
tinyDB.putString(loginUid + "-token-last-eight", newToken.getToken_last_eight());
// insert new account to db if does not exist
- String accountName = userDetails.getUsername() + "@" + instanceUrl;
+ String accountName = userDetails.getUsername() + "@" + TinyDB.getInstance(ctx).getString("instanceUrl");
UserAccountsApi userAccountsApi = new UserAccountsApi(ctx);
int checkAccount = userAccountsApi.getCount(accountName);
long accountId;
@@ -555,7 +556,7 @@ public class LoginActivity extends BaseActivity {
if(checkAccount == 0) {
accountId = userAccountsApi
- .insertNewAccount(accountName, instanceUrl, userDetails.getUsername(), newToken.getSha1(), "");
+ .insertNewAccount(accountName, TinyDB.getInstance(ctx).getString("instanceUrl"), userDetails.getUsername(), newToken.getSha1(), "");
tinyDB.putInt("currentActiveAccountId", (int) accountId);
}
else {
@@ -568,18 +569,16 @@ public class LoginActivity extends BaseActivity {
startActivity(new Intent(LoginActivity.this, MainActivity.class));
finish();
break;
-
case 401:
+
Toasty.error(ctx, getResources().getString(R.string.unauthorizedApiError));
enableProcessButton();
break;
-
default:
+
Toasty.error(ctx, getResources().getString(R.string.genericApiStatusError) + response.code());
enableProcessButton();
-
}
-
}
@Override
@@ -588,7 +587,6 @@ public class LoginActivity extends BaseActivity {
Log.e("onFailure", t.toString());
Toasty.error(ctx, getResources().getString(R.string.genericError));
enableProcessButton();
-
}
});
}
@@ -597,7 +595,6 @@ public class LoginActivity extends BaseActivity {
Toasty.error(ctx, getResources().getString(R.string.genericApiStatusError) + responseCreate.code());
enableProcessButton();
-
}
}
@@ -613,17 +610,21 @@ public class LoginActivity extends BaseActivity {
private void loadDefaults() {
if(tinyDB.getString("loginType").equals(LoginType.BASIC.name().toLowerCase())) {
+
loginMethod.check(R.id.loginUsernamePassword);
}
else {
+
loginMethod.check(R.id.loginToken);
}
if(!tinyDB.getString("instanceUrlRaw").equals("")) {
+
instanceUrlET.setText(tinyDB.getString("instanceUrlRaw"));
}
if(!tinyDB.getString("loginUid").equals("")) {
+
loginUidET.setText(tinyDB.getString("loginUid"));
}
@@ -634,9 +635,11 @@ public class LoginActivity extends BaseActivity {
}
if(!tinyDB.getString("uniqueAppId").isEmpty()) {
+
device_id = tinyDB.getString("uniqueAppId");
}
else {
+
device_id = UUID.randomUUID().toString();
tinyDB.putString("uniqueAppId", device_id);
}
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 61922179..f77a8294 100644
--- a/app/src/main/java/org/mian/gitnex/activities/MainActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/MainActivity.java
@@ -77,11 +77,8 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
private ImageView userAvatarBackground;
private ViewGroup navHeaderFrame;
private TextView toolbarTitle;
- final Context ctx = this;
- private Context appCtx;
private Typeface myTypeface;
- private String instanceUrl;
private String loginUid;
private String instanceToken;
@@ -99,63 +96,69 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- appCtx = getApplicationContext();
- final TinyDB tinyDb = new TinyDB(appCtx);
- tinyDb.putBoolean("noConnection", false);
+ tinyDB.putBoolean("noConnection", false);
+
+ String currentVersion = tinyDB.getString("giteaVersion");
Intent mainIntent = getIntent();
String launchFragment = mainIntent.getStringExtra("launchFragment");
- instanceUrl = tinyDb.getString("instanceUrl");
- loginUid = tinyDb.getString("loginUid");
- instanceToken = "token " + tinyDb.getString(loginUid + "-token");
+ loginUid = tinyDB.getString("loginUid");
+ instanceToken = "token " + tinyDB.getString(loginUid + "-token");
- if(tinyDb.getString("dateFormat").isEmpty()) {
- tinyDb.putString("dateFormat", "pretty");
+ if(tinyDB.getString("dateFormat").isEmpty()) {
+
+ tinyDB.putString("dateFormat", "pretty");
}
- if(tinyDb.getString("codeBlockStr").isEmpty()) {
- tinyDb.putInt("codeBlockColor", getResources().getColor(R.color.colorLightGreen));
- tinyDb.putInt("codeBlockBackground", getResources().getColor(R.color.black));
+ if(tinyDB.getString("codeBlockStr").isEmpty()) {
+
+ tinyDB.putInt("codeBlockColor", getResources().getColor(R.color.colorLightGreen));
+ tinyDB.putInt("codeBlockBackground", getResources().getColor(R.color.black));
}
- if(tinyDb.getString("enableCounterIssueBadgeInit").isEmpty()) {
- tinyDb.putBoolean("enableCounterIssueBadge", true);
+ if(tinyDB.getString("enableCounterIssueBadgeInit").isEmpty()) {
+
+ tinyDB.putBoolean("enableCounterIssueBadge", true);
}
- if(tinyDb.getString("homeScreenStr").isEmpty()) {
- tinyDb.putInt("homeScreenId", 0);
+ if(tinyDB.getString("homeScreenStr").isEmpty()) {
+
+ tinyDB.putString("homeScreenStr", "yes");
+ tinyDB.putInt("homeScreenId", 0);
}
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
- if(!tinyDb.getBoolean("loggedInMode")) {
+ if(!tinyDB.getBoolean("loggedInMode")) {
+
logout(this, ctx);
return;
}
- if(tinyDb.getInt("currentActiveAccountId") <= 0) {
+ if(tinyDB.getInt("currentActiveAccountId") <= 0) {
+
AlertDialogs.forceLogoutDialog(ctx, getResources().getString(R.string.forceLogoutDialogHeader), getResources().getString(R.string.forceLogoutDialogDescription), getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
}
Toolbar toolbar = findViewById(R.id.toolbar);
toolbarTitle = toolbar.findViewById(R.id.toolbar_title);
- switch(tinyDb.getInt("customFontId", -1)) {
+ switch(tinyDB.getInt("customFontId", -1)) {
case 0:
+
myTypeface = Typeface.createFromAsset(getAssets(), "fonts/roboto.ttf");
break;
-
case 2:
+
myTypeface = Typeface.createFromAsset(getAssets(), "fonts/sourcecodeproregular.ttf");
break;
-
default:
+
myTypeface = Typeface.createFromAsset(getAssets(), "fonts/manroperegular.ttf");
break;
-
}
toolbarTitle.setTypeface(myTypeface);
@@ -165,37 +168,47 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
Fragment fragmentById = fm.findFragmentById(R.id.fragment_container);
if(fragmentById instanceof SettingsFragment) {
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleSettings));
}
else if(fragmentById instanceof MyRepositoriesFragment) {
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleMyRepos));
}
else if(fragmentById instanceof StarredRepositoriesFragment) {
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleStarredRepos));
}
else if(fragmentById instanceof OrganizationsFragment) {
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleOrganizations));
}
else if(fragmentById instanceof ExploreFragment) {
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
}
else if(fragmentById instanceof NotificationsFragment) {
+
toolbarTitle.setText(R.string.pageTitleNotifications);
}
else if(fragmentById instanceof ProfileFragment) {
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile));
}
else if(fragmentById instanceof DraftsFragment) {
+
toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
}
else if(fragmentById instanceof AdministrationFragment) {
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleAdministration));
}
else if(fragmentById instanceof UserAccountsFragment) {
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleUserAccounts));
}
- getNotificationsCount(instanceUrl, instanceToken);
+ getNotificationsCount(instanceToken);
drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
@@ -213,20 +226,15 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
@Override
public void onDrawerOpened(@NonNull View drawerView) {
- getNotificationsCount(instanceUrl, instanceToken);
- }
+ if(tinyDB.getBoolean("noConnection")) {
- @Override
- public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
-
- if(tinyDb.getBoolean("noConnection")) {
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
- tinyDb.putBoolean("noConnection", false);
+ tinyDB.putBoolean("noConnection", false);
}
- String userEmailNav = tinyDb.getString("userEmail");
- String userFullNameNav = tinyDb.getString("userFullname");
- String userAvatarNav = tinyDb.getString("userAvatar");
+ String userEmailNav = tinyDB.getString("userEmail");
+ String userFullNameNav = tinyDB.getString("userFullname");
+ String userAvatarNav = tinyDB.getString("userAvatar");
blurView = hView.findViewById(R.id.blurView);
userEmail = hView.findViewById(R.id.userEmail);
@@ -252,17 +260,18 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
userAccountsList.addAll(userAccounts);
navRecyclerViewUserAccounts.setAdapter(adapterUserAccounts);
}
-
});
userEmail.setTypeface(myTypeface);
userFullName.setTypeface(myTypeface);
if(!userEmailNav.equals("")) {
+
userEmail.setText(userEmailNav);
}
if(!userFullNameNav.equals("")) {
+
userFullName.setText(userFullNameNav);
}
@@ -291,14 +300,11 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
.setBlurAlgorithm(new RenderScriptBlur(ctx))
.setBlurRadius(5)
.setHasFixedTransformationMatrix(false);
-
}
@Override
public void onError(Exception e) {}
-
});
-
}
userAvatar.setOnClickListener(v -> {
@@ -309,9 +315,13 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
drawer.closeDrawers();
});
- String currentVersion = tinyDb.getString("giteaVersion");
+ getNotificationsCount(instanceToken);
+ }
- navigationView.getMenu().findItem(R.id.nav_administration).setVisible(tinyDb.getBoolean("userIsAdmin"));
+ @Override
+ public void onDrawerSlide(@NonNull View drawerView, float slideOffset) {
+
+ navigationView.getMenu().findItem(R.id.nav_administration).setVisible(tinyDB.getBoolean("userIsAdmin"));
navigationView.getMenu().findItem(R.id.nav_notifications).setVisible(new Version(currentVersion).higherOrEqual("1.12.3"));
}
@@ -333,98 +343,128 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
switch(launchFragment) {
case "drafts":
+
toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new DraftsFragment()).commit();
navigationView.setCheckedItem(R.id.nav_comments_draft);
return;
-
case "notifications":
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleNotifications));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new NotificationsFragment()).commit();
navigationView.setCheckedItem(R.id.nav_notifications);
return;
+ }
+ }
+ String launchFragmentByHandler = mainIntent.getStringExtra("launchFragmentByLinkHandler");
+
+ if(launchFragmentByHandler != null) {
+
+ mainIntent.removeExtra("launchFragmentByLinkHandler");
+
+ switch(launchFragmentByHandler) {
+
+ case "repos":
+
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new RepositoriesFragment()).commit();
+ navigationView.setCheckedItem(R.id.nav_repositories);
+ return;
+ case "org":
+
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new OrganizationsFragment()).commit();
+ navigationView.setCheckedItem(R.id.nav_organizations);
+ return;
+ case "notification":
+
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new NotificationsFragment()).commit();
+ navigationView.setCheckedItem(R.id.nav_notifications);
+ return;
+ case "explore":
+
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreFragment()).commit();
+ navigationView.setCheckedItem(R.id.nav_explore);
+ return;
}
}
if(savedInstanceState == null) {
- if(!new Version(tinyDb.getString("giteaVersion")).higherOrEqual("1.12.3")) {
+ if(!new Version(tinyDB.getString("giteaVersion")).higherOrEqual("1.12.3")) {
- if(tinyDb.getInt("homeScreenId") == 7) {
+ if(tinyDB.getInt("homeScreenId") == 7) {
- tinyDb.putInt("homeScreenId", 0);
+ tinyDB.putInt("homeScreenId", 0);
}
}
- switch(tinyDb.getInt("homeScreenId")) {
+ switch(tinyDB.getInt("homeScreenId")) {
case 1:
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleStarredRepos));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new StarredRepositoriesFragment()).commit();
navigationView.setCheckedItem(R.id.nav_starred_repos);
break;
-
case 2:
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleOrganizations));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new OrganizationsFragment()).commit();
navigationView.setCheckedItem(R.id.nav_organizations);
break;
-
case 3:
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleRepositories));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new RepositoriesFragment()).commit();
navigationView.setCheckedItem(R.id.nav_repositories);
break;
-
case 4:
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
navigationView.setCheckedItem(R.id.nav_profile);
break;
-
case 5:
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreFragment()).commit();
navigationView.setCheckedItem(R.id.nav_explore);
break;
-
case 6:
+
toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new DraftsFragment()).commit();
navigationView.setCheckedItem(R.id.nav_comments_draft);
break;
-
case 7:
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleNotifications));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new NotificationsFragment()).commit();
navigationView.setCheckedItem(R.id.nav_notifications);
break;
-
default:
+
toolbarTitle.setText(getResources().getString(R.string.pageTitleMyRepos));
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new MyRepositoriesFragment()).commit();
navigationView.setCheckedItem(R.id.nav_home);
break;
-
}
}
if(!connToInternet) {
- if(!tinyDb.getBoolean("noConnection")) {
+ if(!tinyDB.getBoolean("noConnection")) {
+
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
}
- tinyDb.putBoolean("noConnection", true);
-
+ tinyDB.putBoolean("noConnection", true);
}
else {
- loadUserInfo(instanceUrl, instanceToken, loginUid);
- giteaVersion(instanceUrl);
- tinyDb.putBoolean("noConnection", false);
-
+ loadUserInfo(instanceToken, loginUid);
+ giteaVersion();
+ tinyDB.putBoolean("noConnection", false);
}
// Changelog popup
@@ -440,10 +480,10 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
Log.e("changelogDialog", Objects.requireNonNull(e.getMessage()));
}
- if(versionCode > tinyDb.getInt("versionCode")) {
+ if(versionCode > tinyDB.getInt("versionCode")) {
- tinyDb.putInt("versionCode", versionCode);
- tinyDb.putBoolean("versionFlag", true);
+ tinyDB.putInt("versionCode", versionCode);
+ tinyDB.putBoolean("versionFlag", true);
ChangeLog changelogDialog = new ChangeLog(this);
changelogDialog.showDialog();
@@ -458,7 +498,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
@Override
public void onButtonClicked(String text) {
- TinyDB tinyDb = new TinyDB(ctx);
+ TinyDB tinyDb = TinyDB.getInstance(ctx);
int currentActiveAccountId = tinyDb.getInt("currentActiveAccountId");
if("deleteDrafts".equals(text)) {
@@ -482,14 +522,15 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
})
.setNeutralButton(R.string.cancelButton, null).show();
-
}
else {
+
Toasty.error(ctx, getResources().getString(R.string.genericError));
}
}
else {
+
Toasty.error(ctx, getResources().getString(R.string.genericError));
}
@@ -501,74 +542,74 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
public void onBackPressed() {
if(drawer.isDrawerOpen(GravityCompat.START)) {
+
drawer.closeDrawer(GravityCompat.START);
}
else {
+
super.onBackPressed();
}
-
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
- switch(menuItem.getItemId()) {
+ int id = menuItem.getItemId();
- case R.id.nav_home:
- toolbarTitle.setText(getResources().getString(R.string.pageTitleMyRepos));
- getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new MyRepositoriesFragment()).commit();
- break;
+ if(id == R.id.nav_home) {
- case R.id.nav_organizations:
- toolbarTitle.setText(getResources().getString(R.string.pageTitleOrganizations));
- getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new OrganizationsFragment()).commit();
- break;
+ toolbarTitle.setText(getResources().getString(R.string.pageTitleMyRepos));
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new MyRepositoriesFragment()).commit();
+ }
+ else if(id == R.id.nav_organizations) {
- case R.id.nav_profile:
- toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile));
- getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
- break;
+ toolbarTitle.setText(getResources().getString(R.string.pageTitleOrganizations));
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new OrganizationsFragment()).commit();
+ }
+ else if(id == R.id.nav_profile) {
- case R.id.nav_repositories:
- toolbarTitle.setText(getResources().getString(R.string.pageTitleRepositories));
- getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new RepositoriesFragment()).commit();
- break;
+ toolbarTitle.setText(getResources().getString(R.string.pageTitleProfile));
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ProfileFragment()).commit();
+ }
+ else if(id == R.id.nav_repositories) {
- case R.id.nav_settings:
- toolbarTitle.setText(getResources().getString(R.string.pageTitleSettings));
- getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new SettingsFragment()).commit();
- break;
+ toolbarTitle.setText(getResources().getString(R.string.pageTitleRepositories));
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new RepositoriesFragment()).commit();
+ }
+ else if(id == R.id.nav_settings) {
- case R.id.nav_logout:
- logout(this, ctx);
- overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
- break;
+ toolbarTitle.setText(getResources().getString(R.string.pageTitleSettings));
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new SettingsFragment()).commit();
+ }
+ else if(id == R.id.nav_logout) {
- case R.id.nav_starred_repos:
- toolbarTitle.setText(getResources().getString(R.string.pageTitleStarredRepos));
- getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new StarredRepositoriesFragment()).commit();
- break;
+ logout(this, ctx);
+ overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);
+ }
+ else if(id == R.id.nav_starred_repos) {
- case R.id.nav_explore:
- toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
- getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreFragment()).commit();
- break;
+ toolbarTitle.setText(getResources().getString(R.string.pageTitleStarredRepos));
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new StarredRepositoriesFragment()).commit();
+ }
+ else if(id == R.id.nav_explore) {
- case R.id.nav_notifications:
- toolbarTitle.setText(R.string.pageTitleNotifications);
- getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new NotificationsFragment()).commit();
- break;
+ toolbarTitle.setText(getResources().getString(R.string.pageTitleExplore));
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new ExploreFragment()).commit();
+ }
+ else if(id == R.id.nav_notifications) {
- case R.id.nav_comments_draft:
- toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
- getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new DraftsFragment()).commit();
- break;
+ toolbarTitle.setText(R.string.pageTitleNotifications);
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new NotificationsFragment()).commit();
+ }
+ else if(id == R.id.nav_comments_draft) {
- case R.id.nav_administration:
- toolbarTitle.setText(getResources().getString(R.string.pageTitleAdministration));
- getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new AdministrationFragment()).commit();
- break;
+ toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new DraftsFragment()).commit();
+ }
+ else if(id == R.id.nav_administration) {
+ toolbarTitle.setText(getResources().getString(R.string.pageTitleAdministration));
+ getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new AdministrationFragment()).commit();
}
drawer.closeDrawer(GravityCompat.START);
@@ -577,14 +618,14 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
public static void logout(Activity activity, Context ctx) {
- TinyDB tinyDb = new TinyDB(ctx.getApplicationContext());
- tinyDb.putBoolean("loggedInMode", false);
- tinyDb.remove("basicAuthPassword");
- tinyDb.putBoolean("basicAuthFlag", false);
+ TinyDB tinyDB = TinyDB.getInstance(ctx);
+
+ tinyDB.putBoolean("loggedInMode", false);
+ tinyDB.remove("basicAuthPassword");
+ tinyDB.putBoolean("basicAuthFlag", false);
//tinyDb.clear();
activity.finish();
ctx.startActivity(new Intent(ctx, LoginActivity.class));
-
}
@Override
@@ -593,22 +634,22 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
int id = item.getItemId();
if(id == R.id.genericMenu) {
+
BottomSheetDraftsFragment bottomSheet = new BottomSheetDraftsFragment();
bottomSheet.show(getSupportFragmentManager(), "draftsBottomSheet");
return true;
}
return super.onOptionsItemSelected(item);
-
}
- private void giteaVersion(final String instanceUrl) {
+ private void giteaVersion() {
- final TinyDB tinyDb = new TinyDB(appCtx);
+ final TinyDB tinyDb = TinyDB.getInstance(appCtx);
final String token = "token " + tinyDb.getString(tinyDb.getString("loginUid") + "-token");
- Call callVersion = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getGiteaVersionWithToken(token);
+ Call callVersion = RetrofitClient.getApiInterface(ctx).getGiteaVersionWithToken(token);
callVersion.enqueue(new Callback() {
@@ -621,7 +662,6 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
assert version != null;
tinyDb.putString("giteaVersion", version.getVersion());
-
}
}
@@ -630,16 +670,14 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
Log.e("onFailure-version", t.toString());
}
-
});
-
}
- private void loadUserInfo(String instanceUrl, String token, String loginUid) {
+ private void loadUserInfo(String token, String loginUid) {
- final TinyDB tinyDb = new TinyDB(appCtx);
+ final TinyDB tinyDb = TinyDB.getInstance(appCtx);
- Call call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().getUserInfo(Authorization.returnAuthentication(ctx, loginUid, token));
+ Call call = RetrofitClient.getApiInterface(ctx).getUserInfo(Authorization.get(ctx));
call.enqueue(new Callback() {
@@ -655,6 +693,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
assert userDetails != null;
if(userDetails.getIs_admin() != null) {
+
tinyDb.putBoolean("userIsAdmin", userDetails.getIs_admin());
}
@@ -662,9 +701,11 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
tinyDb.putInt("userId", userDetails.getId());
if(!userDetails.getFullname().equals("")) {
+
tinyDb.putString("userFullname", userDetails.getFullname());
}
else {
+
tinyDb.putString("userFullname", userDetails.getLogin());
}
@@ -672,9 +713,11 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
tinyDb.putString("userAvatar", userDetails.getAvatar());
if(userDetails.getLang() != null) {
+
tinyDb.putString("userLang", userDetails.getLang());
}
else {
+
tinyDb.putString("userLang", "");
}
}
@@ -682,15 +725,12 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
else if(response.code() == 401) {
AlertDialogs.authorizationTokenRevokedDialog(ctx, getResources().getString(R.string.alertDialogTokenRevokedTitle), getResources().getString(R.string.alertDialogTokenRevokedMessage), getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton), getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton));
-
}
else {
String toastError = getResources().getString(R.string.genericApiStatusError) + response.code();
Toasty.error(ctx, toastError);
-
}
-
}
@Override
@@ -702,9 +742,9 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
}
- private void getNotificationsCount(String instanceUrl, String token) {
+ private void getNotificationsCount(String token) {
- Call call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().checkUnreadNotifications(token);
+ Call