2019-06-03 23:25:05 +02:00
|
|
|
package org.mian.gitnex.activities;
|
|
|
|
|
|
|
|
import android.content.Context;
|
|
|
|
import android.graphics.drawable.GradientDrawable;
|
|
|
|
import android.os.Bundle;
|
2020-07-07 19:15:01 +02:00
|
|
|
import android.util.Log;
|
2019-06-03 23:25:05 +02:00
|
|
|
import android.view.View;
|
2020-03-29 16:24:38 +02:00
|
|
|
import android.view.inputmethod.InputMethodManager;
|
2019-06-03 23:25:05 +02:00
|
|
|
import android.widget.Button;
|
|
|
|
import android.widget.ImageView;
|
|
|
|
import android.widget.TextView;
|
2020-07-07 19:15:01 +02:00
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import androidx.appcompat.app.AlertDialog;
|
2021-01-26 16:10:31 +01:00
|
|
|
import androidx.core.content.res.ResourcesCompat;
|
2021-02-11 11:23:35 +01:00
|
|
|
import org.gitnex.tea4j.models.Teams;
|
2019-06-03 23:25:05 +02:00
|
|
|
import org.mian.gitnex.R;
|
|
|
|
import org.mian.gitnex.clients.RetrofitClient;
|
2021-01-26 16:10:31 +01:00
|
|
|
import org.mian.gitnex.databinding.ActivityCreateTeamByOrgBinding;
|
2019-06-03 23:25:05 +02:00
|
|
|
import org.mian.gitnex.helpers.AlertDialogs;
|
2020-07-07 19:15:01 +02:00
|
|
|
import org.mian.gitnex.helpers.AppUtil;
|
2019-06-03 23:25:05 +02:00
|
|
|
import org.mian.gitnex.helpers.Authorization;
|
2020-07-07 19:15:01 +02:00
|
|
|
import org.mian.gitnex.helpers.TinyDB;
|
2019-06-03 23:25:05 +02:00
|
|
|
import org.mian.gitnex.helpers.Toasty;
|
|
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.List;
|
2020-07-07 19:15:01 +02:00
|
|
|
import retrofit2.Call;
|
|
|
|
import retrofit2.Callback;
|
2019-06-03 23:25:05 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Author M M Arif
|
|
|
|
*/
|
|
|
|
|
2020-02-20 06:19:52 +01:00
|
|
|
public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClickListener {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
|
|
|
private View.OnClickListener onClickListener;
|
|
|
|
private TextView teamName;
|
|
|
|
private TextView teamDesc;
|
|
|
|
private TextView teamPermission;
|
|
|
|
private TextView teamPermissionDetail;
|
|
|
|
private TextView teamAccessControls;
|
|
|
|
private TextView teamAccessControlsArray;
|
|
|
|
private Button createTeamButton;
|
2020-10-29 14:13:19 +01:00
|
|
|
private final String[] permissionList = {"Read", "Write", "Admin"};
|
2019-06-03 23:25:05 +02:00
|
|
|
public int permissionSelectedChoice = -1;
|
|
|
|
|
2020-10-29 14:13:19 +01:00
|
|
|
private final String[] accessControlsList = new String[] {
|
2019-06-03 23:25:05 +02:00
|
|
|
"Code",
|
|
|
|
"Issues",
|
|
|
|
"Pull Request",
|
|
|
|
"Releases",
|
|
|
|
"Wiki",
|
|
|
|
"External Wiki",
|
|
|
|
"External Issues"
|
|
|
|
};
|
|
|
|
|
|
|
|
private List<String> pushAccessList;
|
|
|
|
|
2020-10-29 14:13:19 +01:00
|
|
|
private final boolean[] selectedAccessControlsTrueFalse = new boolean[]{
|
2019-06-03 23:25:05 +02:00
|
|
|
false,
|
|
|
|
false,
|
|
|
|
false,
|
|
|
|
false,
|
|
|
|
false,
|
|
|
|
false,
|
|
|
|
false
|
|
|
|
};
|
|
|
|
|
|
|
|
@Override
|
2020-02-20 06:19:52 +01:00
|
|
|
public void onCreate(Bundle savedInstanceState) {
|
2020-04-28 15:47:25 +02:00
|
|
|
|
2019-06-03 23:25:05 +02:00
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
|
2021-01-26 16:10:31 +01:00
|
|
|
ActivityCreateTeamByOrgBinding activityCreateTeamByOrgBinding = ActivityCreateTeamByOrgBinding.inflate(getLayoutInflater());
|
2021-01-26 18:43:25 +01:00
|
|
|
setContentView(activityCreateTeamByOrgBinding.getRoot());
|
2021-01-26 16:10:31 +01:00
|
|
|
|
2020-06-28 17:11:59 +02:00
|
|
|
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-03-29 16:24:38 +02:00
|
|
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
|
|
|
|
2021-01-26 16:10:31 +01:00
|
|
|
ImageView closeActivity = activityCreateTeamByOrgBinding.close;
|
|
|
|
teamName = activityCreateTeamByOrgBinding.teamName;
|
|
|
|
teamDesc = activityCreateTeamByOrgBinding.teamDesc;
|
|
|
|
teamPermission = activityCreateTeamByOrgBinding.teamPermission;
|
|
|
|
teamPermissionDetail = activityCreateTeamByOrgBinding.teamPermissionDetail;
|
|
|
|
teamAccessControls = activityCreateTeamByOrgBinding.teamAccessControls;
|
|
|
|
teamAccessControlsArray = activityCreateTeamByOrgBinding.teamAccessControlsArray;
|
|
|
|
createTeamButton = activityCreateTeamByOrgBinding.createTeamButton;
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-03-29 16:24:38 +02:00
|
|
|
teamName.requestFocus();
|
|
|
|
assert imm != null;
|
|
|
|
imm.showSoftInput(teamName, InputMethodManager.SHOW_IMPLICIT);
|
|
|
|
|
2019-06-03 23:25:05 +02:00
|
|
|
initCloseListener();
|
|
|
|
closeActivity.setOnClickListener(onClickListener);
|
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
teamPermission.setOnClickListener(view -> {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
AlertDialog.Builder pBuilder = new AlertDialog.Builder(ctx);
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
pBuilder.setTitle(R.string.newTeamPermission);
|
2020-10-29 14:13:19 +01:00
|
|
|
pBuilder.setCancelable(permissionSelectedChoice != -1);
|
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
pBuilder.setSingleChoiceItems(permissionList, permissionSelectedChoice, (dialogInterface, i) -> {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
permissionSelectedChoice = i;
|
|
|
|
teamPermission.setText(permissionList[i]);
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
switch(permissionList[i]) {
|
|
|
|
case "Read":
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
teamPermissionDetail.setVisibility(View.VISIBLE);
|
|
|
|
teamPermissionDetail.setText(R.string.newTeamPermissionRead);
|
|
|
|
break;
|
|
|
|
case "Write":
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
teamPermissionDetail.setVisibility(View.VISIBLE);
|
|
|
|
teamPermissionDetail.setText(R.string.newTeamPermissionWrite);
|
|
|
|
break;
|
|
|
|
case "Admin":
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
teamPermissionDetail.setVisibility(View.VISIBLE);
|
|
|
|
teamPermissionDetail.setText(R.string.newTeamPermissionAdmin);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
|
|
|
|
teamPermissionDetail.setVisibility(View.GONE);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
dialogInterface.dismiss();
|
|
|
|
});
|
|
|
|
|
|
|
|
AlertDialog pDialog = pBuilder.create();
|
|
|
|
pDialog.show();
|
2019-06-03 23:25:05 +02:00
|
|
|
});
|
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
teamAccessControls.setOnClickListener(v -> {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
teamAccessControls.setText("");
|
|
|
|
teamAccessControlsArray.setText("");
|
|
|
|
pushAccessList = Arrays.asList(accessControlsList);
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
AlertDialog.Builder aDialogBuilder = new AlertDialog.Builder(ctx);
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
aDialogBuilder.setMultiChoiceItems(accessControlsList, selectedAccessControlsTrueFalse, (dialog, which, isChecked) -> {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
})
|
|
|
|
.setCancelable(false)
|
|
|
|
.setTitle(R.string.newTeamAccessControls)
|
|
|
|
.setPositiveButton(R.string.okButton, (dialog, which) -> {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
int selectedVal = 0;
|
|
|
|
while(selectedVal < selectedAccessControlsTrueFalse.length)
|
|
|
|
{
|
|
|
|
boolean value = selectedAccessControlsTrueFalse[selectedVal];
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
String repoCode = "";
|
|
|
|
if(selectedVal == 0) {
|
|
|
|
repoCode = "repo.code";
|
|
|
|
}
|
|
|
|
if(selectedVal == 1) {
|
|
|
|
repoCode = "repo.issues";
|
|
|
|
}
|
|
|
|
if(selectedVal == 2) {
|
|
|
|
repoCode = "repo.pulls";
|
|
|
|
}
|
|
|
|
if(selectedVal == 3) {
|
|
|
|
repoCode = "repo.releases";
|
|
|
|
}
|
|
|
|
if(selectedVal == 4) {
|
|
|
|
repoCode = "repo.wiki";
|
|
|
|
}
|
|
|
|
if(selectedVal == 5) {
|
|
|
|
repoCode = "repo.ext_wiki";
|
|
|
|
}
|
|
|
|
if(selectedVal == 6) {
|
|
|
|
repoCode = "repo.ext_issues";
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
if(value){
|
2020-10-29 14:13:19 +01:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
teamAccessControls.setText(getString(R.string.newTeamPermissionValues, teamAccessControls.getText(), pushAccessList.get(selectedVal)));
|
|
|
|
teamAccessControlsArray.setText(getString(R.string.newTeamPermissionValuesFinal, teamAccessControlsArray.getText(), repoCode));
|
2019-06-03 23:25:05 +02:00
|
|
|
}
|
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
selectedVal++;
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
String data = String.valueOf(teamAccessControls.getText());
|
|
|
|
if(!data.equals("")) {
|
2020-10-29 14:13:19 +01:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
teamAccessControls.setText(data.substring(0, data.length() - 2));
|
|
|
|
}
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
String dataArray = String.valueOf(teamAccessControlsArray.getText());
|
2020-10-29 14:13:19 +01:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
if(!dataArray.equals("")) {
|
2020-10-29 14:13:19 +01:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
teamAccessControlsArray.setText(dataArray.substring(0, dataArray.length() - 2));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
AlertDialog aDialog = aDialogBuilder.create();
|
|
|
|
aDialog.show();
|
2019-06-03 23:25:05 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
createTeamButton.setEnabled(false);
|
|
|
|
|
|
|
|
if(!connToInternet) {
|
|
|
|
|
|
|
|
createTeamButton.setEnabled(false);
|
2021-01-26 16:10:31 +01:00
|
|
|
GradientDrawable shape = new GradientDrawable();
|
|
|
|
shape.setCornerRadius(8);
|
|
|
|
shape.setColor(ResourcesCompat.getColor(getResources(), R.color.hintColor, null));
|
2019-06-03 23:25:05 +02:00
|
|
|
createTeamButton.setBackground(shape);
|
2020-10-29 14:13:19 +01:00
|
|
|
}
|
|
|
|
else {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
|
|
|
createTeamButton.setEnabled(true);
|
|
|
|
createTeamButton.setOnClickListener(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void processCreateTeam() {
|
|
|
|
|
2020-11-02 16:17:00 +01:00
|
|
|
final TinyDB tinyDb = TinyDB.getInstance(appCtx);
|
2019-06-03 23:25:05 +02:00
|
|
|
final String loginUid = tinyDb.getString("loginUid");
|
|
|
|
final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
|
|
|
|
final String orgName = tinyDb.getString("orgName");;
|
|
|
|
|
2020-06-28 17:11:59 +02:00
|
|
|
boolean connToInternet = AppUtil.hasNetworkConnection(appCtx);
|
2019-06-03 23:25:05 +02:00
|
|
|
String newTeamName = teamName.getText().toString();
|
|
|
|
String newTeamDesc = teamDesc.getText().toString();
|
|
|
|
String newTeamPermission = teamPermission.getText().toString().toLowerCase();
|
|
|
|
String newTeamAccessControls = teamAccessControlsArray.getText().toString();
|
|
|
|
|
|
|
|
if(!connToInternet) {
|
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
Toasty.error(ctx, getResources().getString(R.string.checkNetConnection));
|
2019-06-03 23:25:05 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (newTeamName.equals("")) {
|
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
Toasty.error(ctx, getString(R.string.teamNameEmpty));
|
2019-06-03 23:25:05 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2021-02-13 20:31:38 +01:00
|
|
|
if(!AppUtil.checkStringsWithAlphaNumericDashDotUnderscore(newTeamName)) {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
Toasty.warning(ctx, getString(R.string.teamNameError));
|
2019-06-03 23:25:05 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!newTeamDesc.equals("")) {
|
|
|
|
|
2021-02-13 20:31:38 +01:00
|
|
|
if(!AppUtil.checkStrings(newTeamDesc)) {
|
2020-10-29 14:13:19 +01:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
Toasty.warning(ctx, getString(R.string.teamDescError));
|
2019-06-03 23:25:05 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(newTeamDesc.length() > 100) {
|
2020-10-29 14:13:19 +01:00
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
Toasty.warning(ctx, getString(R.string.teamDescLimit));
|
2019-06-03 23:25:05 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (newTeamPermission.equals("")) {
|
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
Toasty.error(ctx, getString(R.string.teamPermissionEmpty));
|
2019-06-03 23:25:05 +02:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
List<String> newTeamAccessControls_ = new ArrayList<>(Arrays.asList(newTeamAccessControls.split(",")));
|
|
|
|
|
|
|
|
for (int i = 0; i < newTeamAccessControls_.size(); i++) {
|
2020-10-29 14:13:19 +01:00
|
|
|
|
2019-06-03 23:25:05 +02:00
|
|
|
newTeamAccessControls_.set(i, newTeamAccessControls_.get(i).trim());
|
|
|
|
}
|
|
|
|
|
2020-11-02 16:17:00 +01:00
|
|
|
createNewTeamCall(instanceToken, orgName, newTeamName, newTeamDesc, newTeamPermission, newTeamAccessControls_, loginUid);
|
2019-06-03 23:25:05 +02:00
|
|
|
}
|
|
|
|
|
2020-11-02 16:17:00 +01:00
|
|
|
private void createNewTeamCall(final String instanceToken, String orgName, String newTeamName, String newTeamDesc, String newTeamPermission, List<String> newTeamAccessControls, String loginUid) {
|
2019-06-03 23:25:05 +02:00
|
|
|
|
|
|
|
Teams createNewTeamJson = new Teams(newTeamName, newTeamDesc, newTeamPermission, newTeamAccessControls);
|
|
|
|
|
|
|
|
Call<Teams> call3;
|
|
|
|
|
|
|
|
call3 = RetrofitClient
|
2020-11-02 16:17:00 +01:00
|
|
|
.getApiInterface(ctx)
|
|
|
|
.createTeamsByOrg(Authorization.get(ctx), orgName, createNewTeamJson);
|
2019-06-03 23:25:05 +02:00
|
|
|
|
|
|
|
call3.enqueue(new Callback<Teams>() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onResponse(@NonNull Call<Teams> call, @NonNull retrofit2.Response<Teams> response2) {
|
|
|
|
|
|
|
|
if(response2.isSuccessful()) {
|
2020-10-29 14:13:19 +01:00
|
|
|
|
2019-06-03 23:25:05 +02:00
|
|
|
if(response2.code() == 201) {
|
|
|
|
|
2020-11-02 16:17:00 +01:00
|
|
|
TinyDB tinyDb = TinyDB.getInstance(appCtx);
|
2019-06-03 23:25:05 +02:00
|
|
|
tinyDb.putBoolean("resumeTeams", true);
|
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
Toasty.success(ctx, getString(R.string.teamCreated));
|
2019-06-03 23:25:05 +02:00
|
|
|
finish();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if(response2.code() == 404) {
|
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
Toasty.warning(ctx, getString(R.string.apiNotFound));
|
2019-06-03 23:25:05 +02:00
|
|
|
}
|
|
|
|
else if(response2.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 {
|
|
|
|
|
2020-08-06 17:16:51 +02:00
|
|
|
Toasty.error(ctx, getString(R.string.teamCreatedError));
|
2019-06-03 23:25:05 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onFailure(@NonNull Call<Teams> call, @NonNull Throwable t) {
|
|
|
|
Log.e("onFailure", t.toString());
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onClick(View v) {
|
2020-08-06 17:16:51 +02:00
|
|
|
|
2019-06-03 23:25:05 +02:00
|
|
|
if(v == createTeamButton) {
|
2020-10-29 14:13:19 +01:00
|
|
|
|
2019-06-03 23:25:05 +02:00
|
|
|
processCreateTeam();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private void initCloseListener() {
|
2020-08-06 17:16:51 +02:00
|
|
|
|
|
|
|
onClickListener = view -> finish();
|
2019-06-03 23:25:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
}
|