From 044f6191bffbe950e87cef59cc61eb4c9b2a7e36 Mon Sep 17 00:00:00 2001 From: M M Arif Date: Tue, 20 Oct 2020 20:09:07 +0200 Subject: [PATCH] New input design (#725) Update missing buttons update libs login screen Merge pr screen create new file screen This will be replaced later by custom built mentions, so removing the dependency. create repo screen comment screen edit issue/pr screen and minor ui fixes collaborator screen release screen label and milestone screens move org, new team, new team member to new design Add new user input transition Co-authored-by: M M Arif Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/725 Reviewed-by: opyale --- README.md | 1 - app/build.gradle | 6 +- .../AddCollaboratorToRepositoryActivity.java | 16 +- .../gitnex/activities/CreateFileActivity.java | 105 +++---- .../activities/CreateReleaseActivity.java | 102 +++---- .../gitnex/activities/CreateRepoActivity.java | 137 ++++----- .../gitnex/activities/EditIssueActivity.java | 194 ++++-------- .../activities/IssueDetailActivity.java | 1 + .../mian/gitnex/activities/LoginActivity.java | 62 ++-- .../activities/MergePullRequestActivity.java | 144 +++------ .../activities/ReplyToIssueActivity.java | 80 +---- ...ctivity_add_collaborator_to_repository.xml | 72 +++-- .../res/layout/activity_add_new_account.xml | 1 - .../layout/activity_add_new_team_member.xml | 51 +++- .../main/res/layout/activity_create_issue.xml | 9 +- .../main/res/layout/activity_create_label.xml | 50 ++-- .../res/layout/activity_create_new_user.xml | 170 ++++++----- .../main/res/layout/activity_create_pr.xml | 7 +- .../res/layout/activity_create_release.xml | 181 ++++++------ .../layout/activity_create_team_by_org.xml | 171 ++++++----- .../main/res/layout/activity_edit_issue.xml | 202 +++++++------ app/src/main/res/layout/activity_login.xml | 258 +++++++++------- .../layout/activity_merge_pull_request.xml | 131 ++++---- app/src/main/res/layout/activity_new_file.xml | 279 ++++++++---------- .../res/layout/activity_new_milestone.xml | 152 +++++----- .../res/layout/activity_new_organization.xml | 107 ++++--- app/src/main/res/layout/activity_new_repo.xml | 142 +++++---- .../res/layout/activity_profile_email.xml | 6 +- .../res/layout/activity_reply_to_issue.xml | 53 ++-- app/src/main/res/values-v23/themes.xml | 2 + app/src/main/res/values/strings.xml | 4 + app/src/main/res/values/themes.xml | 8 + 32 files changed, 1349 insertions(+), 1555 deletions(-) diff --git a/README.md b/README.md index e6ac43f6..1de15309 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,6 @@ Thanks to all the open source libraries, contributors and donators. - 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..38e55434 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -60,10 +60,10 @@ dependencies { 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.2' 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' @@ -92,8 +92,6 @@ dependencies { implementation "io.noties.markwon:syntax-highlight:$markwon_version" 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 "com.github.HamidrezaAmz:BreadcrumbsView:0.2.9" implementation "commons-io:commons-io:20030203.000550" implementation 'org.apache.commons:commons-lang3:3.11' 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..927b040e 100644 --- a/app/src/main/java/org/mian/gitnex/activities/AddCollaboratorToRepositoryActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/AddCollaboratorToRepositoryActivity.java @@ -63,7 +63,7 @@ public class AddCollaboratorToRepositoryActivity extends BaseActivity { 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,7 +76,10 @@ public class AddCollaboratorToRepositoryActivity extends BaseActivity { addCollaboratorSearch.setOnEditorActionListener((v, actionId, event) -> { if (actionId == EditorInfo.IME_ACTION_SEND) { + if(!addCollaboratorSearch.getText().toString().equals("")) { + + mProgressBar.setVisibility(View.VISIBLE); loadUserSearchList(instanceUrl, instanceToken, addCollaboratorSearch.getText().toString(), loginUid); } } @@ -99,10 +102,15 @@ public class AddCollaboratorToRepositoryActivity extends BaseActivity { @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,11 +137,13 @@ 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); } 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..edfd8c31 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateFileActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateFileActivity.java @@ -5,12 +5,11 @@ import android.os.Bundle; 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.EditText; import android.widget.ImageView; -import android.widget.Spinner; import android.widget.TextView; import androidx.annotation.NonNull; import com.google.gson.JsonElement; @@ -44,7 +43,7 @@ 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 @@ -54,6 +53,14 @@ public class CreateFileActivity extends BaseActivity { List branchesList = new ArrayList<>(); + private String instanceUrl; + 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; @@ -70,23 +77,20 @@ public class CreateFileActivity extends BaseActivity { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); - final String instanceUrl = tinyDb.getString("instanceUrl"); - final String loginUid = tinyDb.getString("loginUid"); + instanceUrl = tinyDb.getString("instanceUrl"); + 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; @@ -99,7 +103,6 @@ public class CreateFileActivity extends BaseActivity { 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 +123,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"); @@ -143,32 +145,6 @@ public class CreateFileActivity extends BaseActivity { 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) {} - }); - disableProcessButton(); if(!connToInternet) { @@ -188,37 +164,27 @@ public class CreateFileActivity extends BaseActivity { 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(); + //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)); @@ -229,7 +195,6 @@ public class CreateFileActivity extends BaseActivity { Toasty.error(ctx, getString(R.string.newFileInvalidBranchName)); return; - } } @@ -238,7 +203,6 @@ public class CreateFileActivity extends BaseActivity { if(appUtil.charactersLength(newFileCommitMessage_) > 255) { Toasty.warning(ctx, getString(R.string.newFileCommitMessageError)); - } else { @@ -247,17 +211,17 @@ public class CreateFileActivity extends BaseActivity { if(fileAction == 1) { deleteFile(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, filePath, - newFileBranchName_, newFileCommitMessage_, currentBranch.toString(), fileSha); + 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); + 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()); + appUtil.encodeBase64(newFileContent_), newFileBranchName_, newFileCommitMessage_, selectedBranch); } } @@ -268,9 +232,11 @@ public class CreateFileActivity extends BaseActivity { NewFile createNewFileJsonStr; if(currentBranch.equals("No branch")) { + createNewFileJsonStr = new NewFile("", fileContent, fileCommitMessage, fileBranchName); } else { + createNewFileJsonStr = new NewFile(currentBranch, fileContent, fileCommitMessage, ""); } @@ -358,7 +324,6 @@ public class CreateFileActivity extends BaseActivity { getIntent().removeExtra("fileSha"); getIntent().removeExtra("fileContents"); finish(); - } else if(response.code() == 401) { @@ -367,7 +332,6 @@ public class CreateFileActivity extends BaseActivity { getResources().getString(R.string.alertDialogTokenRevokedMessage), getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton), getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton)); - } else { @@ -430,7 +394,6 @@ public class CreateFileActivity extends BaseActivity { getIntent().removeExtra("fileContents"); tinyDb.putBoolean("fileModified", true); finish(); - } else if(response.code() == 401) { @@ -439,7 +402,6 @@ public class CreateFileActivity extends BaseActivity { getResources().getString(R.string.alertDialogTokenRevokedMessage), getResources().getString(R.string.alertDialogTokenRevokedCopyNegativeButton), getResources().getString(R.string.alertDialogTokenRevokedCopyPositiveButton)); - } else { @@ -499,12 +461,29 @@ public class CreateFileActivity extends BaseActivity { } 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(""); + } + + }); + } } @@ -512,6 +491,7 @@ public class CreateFileActivity extends BaseActivity { @Override public void onFailure(@NonNull Call> call, @NonNull Throwable t) { + Log.e("onFailure", t.toString()); } }); @@ -519,6 +499,7 @@ public class CreateFileActivity extends BaseActivity { } private void initCloseListener() { + onClickListener = view -> finish(); } 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..e1bf58e3 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java @@ -5,13 +5,12 @@ import android.os.Bundle; 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; @@ -36,7 +35,7 @@ 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; @@ -44,6 +43,14 @@ public class CreateReleaseActivity extends BaseActivity { private Button createNewRelease; final Context ctx = this; private Context appCtx; + private TinyDB tinyDb; + private String selectedBranch; + + private String instanceUrl; + private String loginUid; + private String instanceToken; + private String repoOwner; + private String repoName; List branchesList = new ArrayList<>(); @@ -57,19 +64,19 @@ public class CreateReleaseActivity extends BaseActivity { super.onCreate(savedInstanceState); appCtx = getApplicationContext(); + tinyDb = new TinyDB(appCtx); 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"); + instanceUrl = tinyDb.getString("instanceUrl"); + 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]; + repoOwner = parts[0]; + repoName = parts[1]; closeActivity = findViewById(R.id.close); releaseTagName = findViewById(R.id.releaseTagName); @@ -78,26 +85,15 @@ 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); 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) { - - } - }); createNewRelease = findViewById(R.id.createNewRelease); disableProcessButton(); @@ -119,19 +115,10 @@ public class CreateReleaseActivity extends BaseActivity { 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(); @@ -142,28 +129,32 @@ public class CreateReleaseActivity extends BaseActivity { } + 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(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), 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 instanceUrl, 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; @@ -179,12 +170,10 @@ public class CreateReleaseActivity extends BaseActivity { if (response.code() == 201) { - TinyDB tinyDb = new TinyDB(appCtx); tinyDb.putBoolean("updateReleases", true); Toasty.success(ctx, getString(R.string.releaseCreatedText)); enableProcessButton(); finish(); - } else if(response.code() == 401) { @@ -218,6 +207,7 @@ public class CreateReleaseActivity extends BaseActivity { @Override public void onFailure(@NonNull Call call, @NonNull Throwable t) { + Log.e("onFailure", t.toString()); enableProcessButton(); } @@ -244,23 +234,20 @@ public class CreateReleaseActivity extends BaseActivity { 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) { @@ -276,6 +263,7 @@ public class CreateReleaseActivity extends BaseActivity { @Override public void onFailure(@NonNull Call> call, @NonNull Throwable t) { + Log.e("onFailure", t.toString()); } }); @@ -283,12 +271,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..6234c219 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,23 @@ 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; + private TinyDB tinyDb; - List organizationsList = new ArrayList<>(); + private String instanceUrl; + private String loginUid; + private String userLogin; + private String instanceToken; + + 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(".", ".."); @@ -61,14 +70,14 @@ public class CreateRepoActivity extends BaseActivity { super.onCreate(savedInstanceState); appCtx = getApplicationContext(); + tinyDb = new TinyDB(appCtx); 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"); + instanceUrl = tinyDb.getString("instanceUrl"); + loginUid = tinyDb.getString("loginUid"); + userLogin = tinyDb.getString("userLogin"); + instanceToken = "token " + tinyDb.getString(loginUid + "-token"); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); @@ -87,18 +96,6 @@ public class CreateRepoActivity extends BaseActivity { 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) { - - } - }); - createRepo = findViewById(R.id.createNewRepoButton); disableProcessButton(); @@ -112,24 +109,15 @@ public class CreateRepoActivity extends BaseActivity { } } - private View.OnClickListener createRepoListener = new View.OnClickListener() { - public void onClick(View v) { - processNewRepo(); - } - }; + private 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) { @@ -161,20 +149,24 @@ 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(instanceUrl, Authorization.returnAuthentication(ctx, loginUid, instanceToken), 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 instanceUrl, 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) @@ -186,7 +178,7 @@ public class CreateRepoActivity extends BaseActivity { call = RetrofitClient .getInstance(instanceUrl, ctx) .getApiInterface() - .createNewUserOrgRepository(token, repoOwner, createRepository); + .createNewUserOrgRepository(token, selectedOwner, createRepository); } call.enqueue(new Callback() { @@ -234,8 +226,6 @@ public class CreateRepoActivity extends BaseActivity { private void getOrganizations(String instanceUrl, String instanceToken, final String userLogin) { - TinyDB tinyDb = new TinyDB(appCtx); - Call> call = RetrofitClient .getInstance(instanceUrl, ctx) .getApiInterface() @@ -246,59 +236,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; + if(organizationsList_.size() > 0) { - for (int i = 0; i < organizationsList_.size(); i++) { + for(int i = 0; i < organizationsList_.size(); i++) { - if(!tinyDb.getString("organizationId").isEmpty()) { + if(!tinyDb.getString("organizationId").isEmpty()) { - if (Integer.parseInt(tinyDb.getString("organizationId")) == organizationsList_.get(i).getId()) { - organizationId = i + 1; - } - } + if(Integer.parseInt(tinyDb.getString("organizationId")) == organizationsList_.get(i).getId()) { + organizationId = i + 1; + } + } - OrgOwner data = new OrgOwner( - organizationsList_.get(i).getUsername() - ); - organizationsList.add(data); + 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/EditIssueActivity.java b/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java index 9c0b84c6..d9f2c01b 100644 --- a/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java @@ -4,21 +4,19 @@ 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.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; @@ -28,7 +26,6 @@ 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 @@ -49,19 +45,27 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe final Context ctx = this; private Context appCtx; + private TinyDB tinyDb; 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 instanceUrl; + private String loginUid; + private String instanceToken; + private String repoOwner; + private String repoName; + private int issueIndex; @Override protected int getLayoutResourceId(){ @@ -73,19 +77,18 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe super.onCreate(savedInstanceState); appCtx = getApplicationContext(); + tinyDb = new TinyDB(appCtx); 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"); + instanceUrl = tinyDb.getString("instanceUrl"); + 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); @@ -103,13 +106,8 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe assert imm != null; imm.showSoftInput(editIssueTitle, InputMethodManager.SHOW_IMPLICIT); - defaultMentionAdapter = new MentionArrayAdapter<>(this); - loadCollaboratorsList(); - editIssueMilestoneSpinner = findViewById(R.id.editIssueMilestoneSpinner); - editIssueDescription.setMentionAdapter(defaultMentionAdapter); - initCloseListener(); closeActivity.setOnClickListener(onClickListener); @@ -128,85 +126,16 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe 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()); - } - - }); } 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(); @@ -226,30 +155,20 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe } - /*if (editIssueDescriptionForm.equals("")) { - - Toasty.info(ctx, getString(R.string.issueDescriptionEmpty)); - return; - - }*/ - if (editIssueDueDateForm.equals("")) { editIssueDueDateForm = null; } 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(instanceUrl, 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 instanceUrl, 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) @@ -264,9 +183,11 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe if(response.code() == 201) { if(tinyDb.getString("issueType").equalsIgnoreCase("Pull")) { + Toasty.success(ctx, getString(R.string.editPrSuccessMessage)); } else { + Toasty.success(ctx, getString(R.string.editIssueSuccessMessage)); } @@ -302,7 +223,6 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe } - @Override public void onClick(View v) { @@ -314,16 +234,7 @@ 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(); } @@ -351,9 +262,10 @@ 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 @@ -364,14 +276,14 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe .getApiInterface() .getMilestones(Authorization.returnAuthentication(ctx, loginUid, instanceToken), 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,31 +291,33 @@ 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(); } @@ -412,6 +326,7 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe @Override public void onFailure(@NonNull Call> call, @NonNull Throwable t) { + Log.e("onFailure", t.toString()); } }); @@ -444,6 +359,7 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe @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/IssueDetailActivity.java b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java index 716cfa4d..f6c9e732 100644 --- a/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/IssueDetailActivity.java @@ -771,6 +771,7 @@ public class IssueDetailActivity extends BaseActivity implements LabelsListAdapt } if(singleIssue.getMilestone() != null) { + viewBinding.issueMilestone.setVisibility(View.VISIBLE); viewBinding.issueMilestone.setText(getString(R.string.issueMilestone, singleIssue.getMilestone().getTitle())); } else { 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..927f634e 100644 --- a/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java @@ -5,12 +5,11 @@ import android.content.Intent; import android.os.Bundle; 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; @@ -53,10 +52,10 @@ public class LoginActivity extends BaseActivity { 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() { @@ -78,45 +77,47 @@ public class LoginActivity extends BaseActivity { 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() { - public void onItemSelected(AdapterView parent, View view, int pos, long id) { + protocolSpinner.setOnItemClickListener((parent, view, position, id) -> { - if(protocolSpinner.getSelectedItem() == Protocol.HTTP) { - Toasty.warning(ctx, getResources().getString(R.string.protocolError)); - } + selectedProtocol = String.valueOf(parent.getItemAtPosition(position)); + + 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); } }); @@ -149,16 +150,22 @@ public class LoginActivity extends BaseActivity { 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 +177,6 @@ public class LoginActivity extends BaseActivity { Toasty.error(ctx, getResources().getString(R.string.emptyFieldURL)); enableProcessButton(); return; - } if(loginType == LoginType.BASIC) { @@ -180,14 +186,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 +199,6 @@ public class LoginActivity extends BaseActivity { Toasty.error(ctx, getResources().getString(R.string.emptyFieldUsername)); enableProcessButton(); return; - } if(loginPass.equals("")) { @@ -203,7 +206,6 @@ 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; diff --git a/app/src/main/java/org/mian/gitnex/activities/MergePullRequestActivity.java b/app/src/main/java/org/mian/gitnex/activities/MergePullRequestActivity.java index 5b6d2f6f..54387d03 100644 --- a/app/src/main/java/org/mian/gitnex/activities/MergePullRequestActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/MergePullRequestActivity.java @@ -6,12 +6,9 @@ import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.inputmethod.InputMethodManager; -import android.widget.AdapterView; import android.widget.ArrayAdapter; import androidx.annotation.NonNull; import com.google.gson.JsonElement; -import com.hendraanggrian.appcompat.socialview.Mention; -import com.hendraanggrian.appcompat.widget.MentionArrayAdapter; import org.mian.gitnex.R; import org.mian.gitnex.clients.RetrofitClient; import org.mian.gitnex.databinding.ActivityMergePullRequestBinding; @@ -21,15 +18,13 @@ import org.mian.gitnex.helpers.Authorization; 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.MergePullRequest; import org.mian.gitnex.models.MergePullRequestSpinner; import java.util.ArrayList; -import java.util.List; +import java.util.Objects; import okhttp3.ResponseBody; import retrofit2.Call; import retrofit2.Callback; -import retrofit2.Response; /** * Author M M Arif @@ -40,9 +35,17 @@ public class MergePullRequestActivity extends BaseActivity { private View.OnClickListener onClickListener; 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 prIndex; + private ActivityMergePullRequestBinding viewBinding; - private ArrayAdapter defaultMentionAdapter; private String Do; @Override @@ -57,13 +60,22 @@ public class MergePullRequestActivity extends BaseActivity { super.onCreate(savedInstanceState); appCtx = getApplicationContext(); + tinyDb = new TinyDB(appCtx); viewBinding = ActivityMergePullRequestBinding.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[] parts = repoFullName.split("/"); + repoOwner = parts[0]; + repoName = parts[1]; + prIndex = Integer.parseInt(tinyDb.getString("issueNumber")); + boolean connToInternet = AppUtil.hasNetworkConnection(appCtx); - TinyDB tinyDb = new TinyDB(appCtx); InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); @@ -73,29 +85,8 @@ public class MergePullRequestActivity extends BaseActivity { setMergeAdapter(); - viewBinding.mergeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - - @Override - public void onItemSelected(AdapterView parent, View view, int position, long id) { - - MergePullRequestSpinner mergeId = (MergePullRequestSpinner) parent.getSelectedItem(); - Do = mergeId.getId(); - - } - - @Override - public void onNothingSelected(AdapterView parent) { - - } - - }); - - defaultMentionAdapter = new MentionArrayAdapter<>(this); - loadCollaboratorsList(); - - viewBinding.mergeDescription.setMentionAdapter(defaultMentionAdapter); - if(!tinyDb.getString("issueTitle").isEmpty()) { + viewBinding.toolbarTitle.setText(tinyDb.getString("issueTitle")); viewBinding.mergeTitle.setText(tinyDb.getString("issueTitle") + " (#" + tinyDb.getString("issueNumber") + ")"); } @@ -136,8 +127,6 @@ public class MergePullRequestActivity extends BaseActivity { private void setMergeAdapter() { - TinyDB tinyDb = new TinyDB(appCtx); - ArrayList mergeList = new ArrayList<>(); mergeList.add(new MergePullRequestSpinner("merge", getResources().getString(R.string.mergeOptionMerge))); @@ -148,58 +137,14 @@ public class MergePullRequestActivity extends BaseActivity { mergeList.add(new MergePullRequestSpinner("squash", getResources().getString(R.string.mergeOptionSquash))); } - ArrayAdapter adapter = new ArrayAdapter<>(MergePullRequestActivity.this, R.layout.spinner_item, mergeList); - adapter.setDropDownViewResource(R.layout.spinner_dropdown_item); + ArrayAdapter adapter = new ArrayAdapter<>(MergePullRequestActivity.this, R.layout.list_spinner_items, mergeList); viewBinding.mergeSpinner.setAdapter(adapter); - } - - 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()); - } + viewBinding.mergeSpinner.setOnItemClickListener ((parent, view, position, id) -> { + Do = mergeList.get(position).getId(); }); + } private void initCloseListener() { @@ -211,8 +156,8 @@ public class MergePullRequestActivity extends BaseActivity { private void processMergePullRequest() { - String mergePRDesc = viewBinding.mergeDescription.getText().toString(); - String mergePRTitle = viewBinding.mergeTitle.getText().toString(); + String mergePRDesc = Objects.requireNonNull(viewBinding.mergeDescription.getText()).toString(); + String mergePRTitle = Objects.requireNonNull(viewBinding.mergeTitle.getText()).toString(); boolean deleteBranch = viewBinding.deleteBranch.isChecked(); boolean connToInternet = AppUtil.hasNetworkConnection(appCtx); @@ -221,27 +166,21 @@ public class MergePullRequestActivity extends BaseActivity { Toasty.error(ctx, getResources().getString(R.string.checkNetConnection)); return; - } - disableProcessButton(); - mergeFunction(Do, mergePRDesc, mergePRTitle, deleteBranch); + if(Do == null) { + Toasty.error(ctx, getResources().getString(R.string.selectMergeStrategy)); + } + else { + + disableProcessButton(); + mergeFunction(Do, mergePRDesc, mergePRTitle, deleteBranch); + } } private void mergeFunction(String Do, String mergePRDT, String mergeTitle, boolean deleteBranch) { - 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]; - final int prIndex = Integer.parseInt(tinyDb.getString("issueNumber")); - MergePullRequest mergePR = new MergePullRequest(Do, mergePRDT, mergeTitle); Call call = RetrofitClient.getInstance(instanceUrl, ctx).getApiInterface().mergePullRequest(Authorization.returnAuthentication(ctx, loginUid, instanceToken), repoOwner, repoName, prIndex, mergePR); @@ -268,7 +207,6 @@ public class MergePullRequestActivity extends BaseActivity { tinyDb.putBoolean("prMerged", true); tinyDb.putBoolean("resumePullRequests", true); finish(); - } else { @@ -283,7 +221,6 @@ public class MergePullRequestActivity extends BaseActivity { tinyDb.putBoolean("prMerged", true); tinyDb.putBoolean("resumePullRequests", true); finish(); - } } @@ -293,7 +230,6 @@ public class MergePullRequestActivity extends BaseActivity { tinyDb.putBoolean("prMerged", true); tinyDb.putBoolean("resumePullRequests", true); finish(); - } } @@ -301,19 +237,16 @@ public class MergePullRequestActivity extends BaseActivity { enableProcessButton(); 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() == 404) { enableProcessButton(); Toasty.warning(ctx, getString(R.string.mergePR404ErrorMsg)); - } else { enableProcessButton(); Toasty.error(ctx, getString(R.string.genericError)); - } } @@ -331,11 +264,6 @@ public class MergePullRequestActivity extends BaseActivity { private void deleteBranchFunction(String repoOwner, String repoName) { - TinyDB tinyDb = new TinyDB(appCtx); - - String instanceUrl = tinyDb.getString("instanceUrl"); - String loginUid = tinyDb.getString("loginUid"); - String instanceToken = "token " + tinyDb.getString(loginUid + "-token"); String branchName = tinyDb.getString("prHeadBranch"); Call call = RetrofitClient @@ -351,7 +279,6 @@ public class MergePullRequestActivity extends BaseActivity { if(response.code() == 204) { Log.i("deleteBranch", "Branch deleted successfully"); - } } @@ -361,7 +288,6 @@ public class MergePullRequestActivity extends BaseActivity { Log.e("onFailure", t.toString()); enableProcessButton(); - } }); diff --git a/app/src/main/java/org/mian/gitnex/activities/ReplyToIssueActivity.java b/app/src/main/java/org/mian/gitnex/activities/ReplyToIssueActivity.java index a7b6fd79..7835752f 100644 --- a/app/src/main/java/org/mian/gitnex/activities/ReplyToIssueActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/ReplyToIssueActivity.java @@ -11,15 +11,12 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.inputmethod.InputMethodManager; -import android.widget.ArrayAdapter; import android.widget.Button; +import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.widget.Toolbar; -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.actions.IssueActions; import org.mian.gitnex.clients.RetrofitClient; @@ -30,13 +27,10 @@ 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.models.Collaborators; import org.mian.gitnex.models.Issues; -import java.util.List; import java.util.Objects; import retrofit2.Call; import retrofit2.Callback; -import retrofit2.Response; /** * Author M M Arif @@ -51,8 +45,7 @@ public class ReplyToIssueActivity extends BaseActivity { private Context appCtx; private TextView draftSaved; - private SocialAutoCompleteTextView addComment; - private ArrayAdapter defaultMentionAdapter; + private EditText addComment; private Button replyButton; private String TAG = StaticGlobalVariables.replyToIssueActivity; private long draftIdOnCreate; @@ -79,11 +72,6 @@ public class ReplyToIssueActivity extends BaseActivity { addComment = findViewById(R.id.addComment); addComment.setShowSoftInputOnFocus(true); - defaultMentionAdapter = new MentionArrayAdapter<>(ctx); - loadCollaboratorsList(); - - addComment.setMentionAdapter(defaultMentionAdapter); - closeActivity = findViewById(R.id.close); TextView toolbar_title = findViewById(R.id.toolbar_title); @@ -121,13 +109,11 @@ public class ReplyToIssueActivity extends BaseActivity { if(getIntent().getBooleanExtra("cursorToEnd", false)) { addComment.setSelection(addComment.length()); } - } if(getIntent().getStringExtra("draftTitle") != null) { toolbar_title.setText(getIntent().getStringExtra("draftTitle")); - } if(getIntent().getStringExtra("commentAction") != null && Objects.equals(getIntent().getStringExtra("commentAction"), "edit") && !Objects.equals(getIntent().getStringExtra("commentId"), "new")) { @@ -144,14 +130,12 @@ public class ReplyToIssueActivity extends BaseActivity { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } public void onTextChanged(CharSequence s, int start, int before, int count) { saveDraft(addComment.getText().toString(), commentId, draftIdOnCreate); draftSaved.setVisibility(View.VISIBLE); - } }); @@ -161,7 +145,6 @@ public class ReplyToIssueActivity extends BaseActivity { disableProcessButton(); assert commentId != null; IssueActions.editIssueComment(ctx, Integer.parseInt(commentId), addComment.getText().toString(), draftIdOnCreate); - }); return; @@ -171,18 +154,15 @@ public class ReplyToIssueActivity extends BaseActivity { addComment.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { - } public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } public void onTextChanged(CharSequence s, int start, int before, int count) { saveDraft(addComment.getText().toString(), "new", draftIdOnCreate); draftSaved.setVisibility(View.VISIBLE); - } }); @@ -190,12 +170,10 @@ public class ReplyToIssueActivity extends BaseActivity { if(!connToInternet) { disableProcessButton(); - } else { replyButton.setOnClickListener(replyToIssue); - } } @@ -234,57 +212,6 @@ public class ReplyToIssueActivity extends BaseActivity { } - 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(TAG, String.valueOf(response.code())); - - } - - } - - @Override - public void onFailure(@NonNull Call> call, @NonNull Throwable t) { - - Log.e(TAG, t.toString()); - } - - }); - } - private void initCloseListener() { onClickListener = view -> finish(); @@ -301,19 +228,16 @@ public class ReplyToIssueActivity extends BaseActivity { Toasty.error(ctx, getResources().getString(R.string.checkNetConnection)); return; - } if(newReplyDT.equals("")) { Toasty.error(ctx, getString(R.string.commentEmptyError)); - } else { disableProcessButton(); replyComment(newReplyDT); - } } diff --git a/app/src/main/res/layout/activity_add_collaborator_to_repository.xml b/app/src/main/res/layout/activity_add_collaborator_to_repository.xml index d03c9837..030ae915 100644 --- a/app/src/main/res/layout/activity_add_collaborator_to_repository.xml +++ b/app/src/main/res/layout/activity_add_collaborator_to_repository.xml @@ -1,7 +1,7 @@ - @@ -42,24 +42,52 @@ - + style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate" + android:visibility="gone" + app:indicatorColor="?attr/progressIndicatorColor" /> + + + + + + + + + + - - diff --git a/app/src/main/res/layout/activity_add_new_team_member.xml b/app/src/main/res/layout/activity_add_new_team_member.xml index e1c438f8..298a878d 100644 --- a/app/src/main/res/layout/activity_add_new_team_member.xml +++ b/app/src/main/res/layout/activity_add_new_team_member.xml @@ -50,24 +50,43 @@ style="@style/Widget.MaterialComponents.ProgressIndicator.Linear.Indeterminate" app:indicatorColor="?attr/progressIndicatorColor" /> - + android:layout_marginStart="10dp" + android:layout_marginEnd="10dp" + android:layout_marginTop="10dp" + android:layout_marginBottom="10dp"> + + + + + + + + @@ -104,6 +102,7 @@ android:textColor="?attr/inputTextColor" android:textColorHighlight="?attr/hintColor" android:textColorHint="?attr/hintColor" + android:gravity="top|start" android:textSize="16sp" /> @@ -207,11 +206,9 @@