diff --git a/.gitignore b/.gitignore index c80a04e8..6f24d028 100644 --- a/.gitignore +++ b/.gitignore @@ -48,6 +48,7 @@ captures/ .idea/dictionaries .idea/libraries .idea/caches +!.idea/codeStyles # Keystore files # Uncomment the following lines if you do not want to check your keystore files in. diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 00000000..7aa8d991 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,159 @@ + + + + + + + + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
+
+
\ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 00000000..79ee123c --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file 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 43815ae2..76fa64a3 100644 --- a/app/src/main/java/org/mian/gitnex/activities/AddCollaboratorToRepositoryActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/AddCollaboratorToRepositoryActivity.java @@ -13,6 +13,7 @@ import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.TextView; @@ -48,6 +49,8 @@ public class AddCollaboratorToRepositoryActivity extends BaseActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + TinyDB tinyDb = new TinyDB(getApplicationContext()); final String instanceUrl = tinyDb.getString("instanceUrl"); final String loginUid = tinyDb.getString("loginUid"); @@ -61,6 +64,10 @@ public class AddCollaboratorToRepositoryActivity extends BaseActivity { mProgressBar = findViewById(R.id.progress_bar); noData = findViewById(R.id.noData); + addCollaboratorSearch.requestFocus(); + assert imm != null; + imm.showSoftInput(addCollaboratorSearch, InputMethodManager.SHOW_IMPLICIT); + initCloseListener(); closeActivity.setOnClickListener(onClickListener); 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 c810500c..ce0ac546 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateFileActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateFileActivity.java @@ -6,6 +6,7 @@ import android.graphics.drawable.GradientDrawable; 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.Button; @@ -59,6 +60,8 @@ public class CreateFileActivity extends BaseActivity { boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext()); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + TinyDB tinyDb = new TinyDB(getApplicationContext()); final String instanceUrl = tinyDb.getString("instanceUrl"); final String loginUid = tinyDb.getString("loginUid"); @@ -74,6 +77,10 @@ public class CreateFileActivity extends BaseActivity { newFileBranchName = findViewById(R.id.newFileBranchName); newFileCommitMessage = findViewById(R.id.newFileCommitMessage); + newFileName.requestFocus(); + assert imm != null; + imm.showSoftInput(newFileName, InputMethodManager.SHOW_IMPLICIT); + initCloseListener(); closeActivity.setOnClickListener(onClickListener); 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 0d36d282..371c9a34 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateIssueActivity.java @@ -11,6 +11,7 @@ import android.graphics.drawable.GradientDrawable; import android.os.Bundle; import android.util.Log; import android.view.View; +import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.DatePicker; @@ -77,6 +78,8 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext()); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + TinyDB tinyDb = new TinyDB(getApplicationContext()); final String instanceUrl = tinyDb.getString("instanceUrl"); final String loginUid = tinyDb.getString("loginUid"); @@ -96,6 +99,10 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis newIssueDescription = findViewById(R.id.newIssueDescription); labelsIdHolder = findViewById(R.id.labelsIdHolder); + newIssueTitle.requestFocus(); + assert imm != null; + imm.showSoftInput(newIssueTitle, InputMethodManager.SHOW_IMPLICIT); + defaultMentionAdapter = new MentionArrayAdapter<>(this); loadCollaboratorsList(); 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 5380f76a..f2d8e02d 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateLabelActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateLabelActivity.java @@ -11,6 +11,7 @@ import android.graphics.drawable.GradientDrawable; import android.os.Bundle; import android.util.Log; import android.view.View; +import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; @@ -50,6 +51,8 @@ public class CreateLabelActivity extends BaseActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + final TinyDB tinyDb = new TinyDB(getApplicationContext()); String repoFullName = tinyDb.getString("repoFullName"); String[] parts = repoFullName.split("/"); @@ -61,7 +64,7 @@ public class CreateLabelActivity extends BaseActivity { if(getIntent().getStringExtra("labelAction") != null && Objects.requireNonNull(getIntent().getStringExtra("labelAction")).equals("delete")) { - deleteLabel(instanceUrl, instanceToken, repoOwner, repoName, Integer.valueOf(Objects.requireNonNull(getIntent().getStringExtra("labelId"))), loginUid); + deleteLabel(instanceUrl, instanceToken, repoOwner, repoName, Integer.parseInt(Objects.requireNonNull(getIntent().getStringExtra("labelId"))), loginUid); finish(); return; @@ -74,6 +77,10 @@ public class CreateLabelActivity extends BaseActivity { labelName = findViewById(R.id.labelName); createLabelButton = findViewById(R.id.createLabelButton); + labelName.requestFocus(); + assert imm != null; + imm.showSoftInput(labelName, InputMethodManager.SHOW_IMPLICIT); + final ColorPicker cp = new ColorPicker(CreateLabelActivity.this, 235, 113, 33); initCloseListener(); 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 c141668d..a60fd739 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateMilestoneActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateMilestoneActivity.java @@ -9,6 +9,7 @@ import android.graphics.drawable.GradientDrawable; import android.os.Bundle; import android.util.Log; import android.view.View; +import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.DatePicker; import android.widget.EditText; @@ -48,12 +49,18 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext()); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + milestoneDueDate = findViewById(R.id.milestoneDueDate); ImageView closeActivity = findViewById(R.id.close); createNewMilestoneButton = findViewById(R.id.createNewMilestoneButton); milestoneTitle = findViewById(R.id.milestoneTitle); milestoneDescription = findViewById(R.id.milestoneDescription); + milestoneTitle.requestFocus(); + assert imm != null; + imm.showSoftInput(milestoneTitle, InputMethodManager.SHOW_IMPLICIT); + initCloseListener(); closeActivity.setOnClickListener(onClickListener); milestoneDueDate.setOnClickListener(this); 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 a1bf3ef6..987d19b1 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateNewUserActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateNewUserActivity.java @@ -9,6 +9,7 @@ import android.os.Bundle; import android.util.Log; import android.util.Patterns; import android.view.View; +import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; @@ -47,6 +48,8 @@ public class CreateNewUserActivity extends BaseActivity { boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext()); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + ImageView closeActivity = findViewById(R.id.close); createUserButton = findViewById(R.id.createUserButton); fullName = findViewById(R.id.fullName); @@ -54,6 +57,10 @@ public class CreateNewUserActivity extends BaseActivity { userEmail = findViewById(R.id.userEmail); userPassword = findViewById(R.id.userPassword); + fullName.requestFocus(); + assert imm != null; + imm.showSoftInput(fullName, InputMethodManager.SHOW_IMPLICIT); + initCloseListener(); closeActivity.setOnClickListener(onClickListener); 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 fe43585f..80fa16de 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateOrganizationActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateOrganizationActivity.java @@ -6,6 +6,7 @@ import android.os.Bundle; import androidx.annotation.NonNull; import android.util.Log; import android.view.View; +import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; @@ -45,10 +46,16 @@ public class CreateOrganizationActivity extends BaseActivity { boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext()); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + closeActivity = findViewById(R.id.close); orgName = findViewById(R.id.newOrganizationName); orgDesc = findViewById(R.id.newOrganizationDescription); + orgName.requestFocus(); + assert imm != null; + imm.showSoftInput(orgName, InputMethodManager.SHOW_IMPLICIT); + initCloseListener(); closeActivity.setOnClickListener(onClickListener); 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 e64b0e07..0f408bf7 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateReleaseActivity.java @@ -9,6 +9,7 @@ import android.graphics.drawable.GradientDrawable; 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.Button; @@ -59,6 +60,8 @@ public class CreateReleaseActivity extends BaseActivity { boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext()); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + TinyDB tinyDb = new TinyDB(getApplicationContext()); final String instanceUrl = tinyDb.getString("instanceUrl"); final String loginUid = tinyDb.getString("loginUid"); @@ -75,6 +78,10 @@ public class CreateReleaseActivity extends BaseActivity { releaseType = findViewById(R.id.releaseType); releaseDraft = findViewById(R.id.releaseDraft); + releaseTagName.requestFocus(); + assert imm != null; + imm.showSoftInput(releaseTagName, InputMethodManager.SHOW_IMPLICIT); + initCloseListener(); closeActivity.setOnClickListener(onClickListener); 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 a7352cf8..2170cfcd 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateRepoActivity.java @@ -7,6 +7,7 @@ import android.os.Bundle; import androidx.annotation.NonNull; import android.util.Log; import android.view.View; +import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Button; @@ -62,11 +63,17 @@ public class CreateRepoActivity extends BaseActivity { final String userLogin = tinyDb.getString("userLogin"); final String instanceToken = "token " + tinyDb.getString(loginUid + "-token"); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + closeActivity = findViewById(R.id.close); repoName = findViewById(R.id.newRepoName); repoDesc = findViewById(R.id.newRepoDescription); repoAccess = findViewById(R.id.newRepoPrivate); + repoName.requestFocus(); + assert imm != null; + imm.showSoftInput(repoName, InputMethodManager.SHOW_IMPLICIT); + initCloseListener(); closeActivity.setOnClickListener(onClickListener); 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 8d86e082..66862be0 100644 --- a/app/src/main/java/org/mian/gitnex/activities/CreateTeamByOrgActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/CreateTeamByOrgActivity.java @@ -9,6 +9,7 @@ import android.content.DialogInterface; import android.graphics.drawable.GradientDrawable; import android.os.Bundle; import android.view.View; +import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; @@ -76,6 +77,8 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext()); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + ImageView closeActivity = findViewById(R.id.close); teamName = findViewById(R.id.teamName); teamDesc = findViewById(R.id.teamDesc); @@ -85,6 +88,10 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic teamAccessControlsArray = findViewById(R.id.teamAccessControlsArray); createTeamButton = findViewById(R.id.createTeamButton); + teamName.requestFocus(); + assert imm != null; + imm.showSoftInput(teamName, InputMethodManager.SHOW_IMPLICIT); + initCloseListener(); closeActivity.setOnClickListener(onClickListener); 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 ac24b781..4e413d28 100644 --- a/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/EditIssueActivity.java @@ -12,6 +12,7 @@ import android.graphics.drawable.GradientDrawable; import android.os.Bundle; import android.util.Log; import android.view.View; +import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.DatePicker; @@ -70,6 +71,8 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe super.onCreate(savedInstanceState); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + final TinyDB tinyDb = new TinyDB(getApplicationContext()); final String instanceUrl = tinyDb.getString("instanceUrl"); @@ -88,6 +91,10 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe editIssueDescription = findViewById(R.id.editIssueDescription); editIssueDueDate = findViewById(R.id.editIssueDueDate); + editIssueTitle.requestFocus(); + assert imm != null; + imm.showSoftInput(editIssueTitle, InputMethodManager.SHOW_IMPLICIT); + defaultMentionAdapter = new MentionArrayAdapter<>(this); loadCollaboratorsList(); 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 bd033d42..dd0d177a 100644 --- a/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/LoginActivity.java @@ -255,7 +255,7 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener } else { instanceUrl = "http://" + instanceHost + "/api/v1/"; - instanceUrlWithProtocol = "https://" + instanceHost; + instanceUrlWithProtocol = "http://" + instanceHost; } tinyDb.putString("instanceUrlRaw", instanceHost); @@ -295,7 +295,7 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener if(appUtil.checkIntegers(loginOTP_)) { - loginOTP = Integer.valueOf(loginOTP_); + loginOTP = Integer.parseInt(loginOTP_); } else { @@ -344,7 +344,7 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener } else { instanceUrl = "http://" + instanceHost + "/api/v1/"; - instanceUrlWithProtocol = "https://" + instanceHost; + instanceUrlWithProtocol = "http://" + instanceHost; } tinyDb.putString("instanceUrlRaw", instanceHost); 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 cc32f911..b7ce42d5 100644 --- a/app/src/main/java/org/mian/gitnex/activities/MainActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/MainActivity.java @@ -11,6 +11,8 @@ import androidx.drawerlayout.widget.DrawerLayout; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.graphics.Typeface; import android.net.Uri; import android.os.Bundle; @@ -32,6 +34,7 @@ import org.mian.gitnex.fragments.SettingsFragment; import org.mian.gitnex.fragments.StarredRepositoriesFragment; import org.mian.gitnex.helpers.AlertDialogs; import org.mian.gitnex.helpers.Authorization; +import org.mian.gitnex.helpers.ChangeLog; import org.mian.gitnex.helpers.Toasty; import org.mian.gitnex.models.GiteaVersion; import org.mian.gitnex.models.UserInfo; @@ -156,7 +159,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig drawer = findViewById(R.id.drawer_layout); NavigationView navigationView = findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); - final View hView = navigationView.getHeaderView(0); + final View hView = navigationView.getHeaderView(0); ImageView navSubMenu = hView.findViewById(R.id.navSubMenu); navSubMenu.setOnClickListener(new View.OnClickListener() { @@ -285,6 +288,23 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig } + // Changelog popup + int versionCode = 0; + try { + PackageInfo packageInfo = getApplicationContext().getPackageManager() + .getPackageInfo(getApplicationContext().getPackageName(), 0); + versionCode = packageInfo.versionCode; + } + catch (PackageManager.NameNotFoundException e) { + Log.e("changelogDialog", Objects.requireNonNull(e.getMessage())); + } + + if (versionCode > tinyDb.getInt("versionCode")) { + tinyDb.putInt("versionCode", versionCode); + tinyDb.putBoolean("versionFlag", true); + ChangeLog changelogDialog = new ChangeLog(this); + changelogDialog.showDialog(); + } } public void setActionBarTitle (@NonNull String title) { 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 3eacf3e5..37dbbf60 100644 --- a/app/src/main/java/org/mian/gitnex/activities/MergePullRequestActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/MergePullRequestActivity.java @@ -6,6 +6,7 @@ import android.graphics.drawable.GradientDrawable; import android.os.Bundle; import android.util.Log; import android.view.View; +import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ImageView; @@ -55,9 +56,15 @@ public class MergePullRequestActivity extends BaseActivity { boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext()); TinyDB tinyDb = new TinyDB(getApplicationContext()); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + mergePR = findViewById(R.id.mergePR); mergePR.setShowSoftInputOnFocus(true); + mergePR.requestFocus(); + assert imm != null; + imm.showSoftInput(mergePR, InputMethodManager.SHOW_IMPLICIT); + defaultMentionAdapter = new MentionArrayAdapter<>(this); loadCollaboratorsList(); diff --git a/app/src/main/java/org/mian/gitnex/activities/ProfileEmailActivity.java b/app/src/main/java/org/mian/gitnex/activities/ProfileEmailActivity.java index 6f1a0b49..9ccac63f 100644 --- a/app/src/main/java/org/mian/gitnex/activities/ProfileEmailActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/ProfileEmailActivity.java @@ -9,6 +9,7 @@ import android.os.Bundle; import android.util.Log; import android.util.Patterns; import android.view.View; +import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; @@ -47,10 +48,16 @@ public class ProfileEmailActivity extends BaseActivity { boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext()); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + ImageView closeActivity = findViewById(R.id.close); userEmail = findViewById(R.id.userEmail); addEmailButton = findViewById(R.id.addEmailButton); + userEmail.requestFocus(); + assert imm != null; + imm.showSoftInput(userEmail, InputMethodManager.SHOW_IMPLICIT); + initCloseListener(); closeActivity.setOnClickListener(onClickListener); 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 01fa41ed..22069e3c 100644 --- a/app/src/main/java/org/mian/gitnex/activities/ReplyToIssueActivity.java +++ b/app/src/main/java/org/mian/gitnex/activities/ReplyToIssueActivity.java @@ -9,6 +9,7 @@ import android.graphics.drawable.GradientDrawable; import android.os.Bundle; import android.util.Log; import android.view.View; +import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ImageView; @@ -53,6 +54,8 @@ public class ReplyToIssueActivity extends BaseActivity { super.onCreate(savedInstanceState); + InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); + boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext()); TinyDB tinyDb = new TinyDB(getApplicationContext()); @@ -67,6 +70,10 @@ public class ReplyToIssueActivity extends BaseActivity { closeActivity = findViewById(R.id.close); TextView toolbar_title = findViewById(R.id.toolbar_title); + addComment.requestFocus(); + assert imm != null; + imm.showSoftInput(addComment, InputMethodManager.SHOW_IMPLICIT); + if(!tinyDb.getString("issueTitle").isEmpty()) { toolbar_title.setText(tinyDb.getString("issueTitle")); } diff --git a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java index eb499377..c6f22921 100644 --- a/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java +++ b/app/src/main/java/org/mian/gitnex/fragments/BottomSheetSingleIssueFragment.java @@ -62,6 +62,7 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { editIssue.setText(R.string.editPrText); copyIssueUrl.setText(R.string.copyPrUrlText); + shareIssue.setText(R.string.sharePr); if(tinyDB.getBoolean("prMerged")) { mergePullRequest.setVisibility(View.GONE); @@ -200,7 +201,8 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment { } }); - } else if (tinyDB.getString("issueState").equals("closed")) { + } + else if (tinyDB.getString("issueState").equals("closed")) { closeIssue.setVisibility(View.GONE); diff --git a/app/src/main/java/org/mian/gitnex/helpers/ChangeLog.java b/app/src/main/java/org/mian/gitnex/helpers/ChangeLog.java new file mode 100644 index 00000000..c85e5a77 --- /dev/null +++ b/app/src/main/java/org/mian/gitnex/helpers/ChangeLog.java @@ -0,0 +1,103 @@ +package org.mian.gitnex.helpers; + +import java.io.IOException; +import java.util.Objects; +import org.mian.gitnex.R; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; +import android.app.Activity; +import android.content.pm.PackageManager; +import android.content.res.Resources; +import android.content.res.XmlResourceParser; +import android.text.Html; +import android.util.Log; +import androidx.appcompat.app.AlertDialog; + +/** + * Author M M Arif + */ + +public class ChangeLog { + + static final private String TAG = "ChangeLog"; + static final private String CHANGELOG_XML_NODE = "changelog"; + + private Activity changelogActivity; + + public ChangeLog(Activity context) { + changelogActivity = context; + } + + private String ParseReleaseTag(XmlResourceParser aXml) throws XmlPullParserException, IOException { + + StringBuilder strBuilder = new StringBuilder(aXml.getAttributeValue(null, "version") + "
"); + int eventType = aXml.getEventType(); + + while ((eventType != XmlPullParser.END_TAG) || (aXml.getName().equals("change"))) { + + if ((eventType == XmlPullParser.START_TAG) && (aXml.getName().equals("change"))) { + eventType = aXml.next(); + strBuilder.append(aXml.getText()).append("
"); + } + eventType = aXml.next(); + + } + strBuilder.append("
"); + + return strBuilder.toString(); + + } + + private String getChangelog(int resId, Resources res) { + + StringBuilder strBuilder = new StringBuilder(); + try (XmlResourceParser xml = res.getXml(resId)) { + + int eventType = xml.getEventType(); + while (eventType != XmlPullParser.END_DOCUMENT) { + + if ((eventType == XmlPullParser.START_TAG) && (xml.getName().equals("release"))) { + strBuilder.append(ParseReleaseTag(xml)); + + } + eventType = xml.next(); + + } + + } + catch (XmlPullParserException | IOException e) { + Log.e(TAG, Objects.requireNonNull(e.getMessage())); + } + + return strBuilder.toString(); + + } + + public void showDialog() { + + String packageName = changelogActivity.getPackageName(); + Resources res = null; + + try { + res = changelogActivity.getPackageManager().getResourcesForApplication(packageName); + } + catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, Objects.requireNonNull(e.getMessage())); + } + + assert res != null; + int resId = res.getIdentifier(CHANGELOG_XML_NODE, "xml", packageName); + + String changelogMessage = getChangelog(resId, res); + + androidx.appcompat.app.AlertDialog.Builder builder = new AlertDialog.Builder(changelogActivity); + builder.setTitle(R.string.changelogTitle); + builder.setMessage(Html.fromHtml("" + changelogMessage + "")); + builder.setNegativeButton(R.string.close, (dialog, which) -> dialog.cancel()); + builder.setCancelable(false); + builder.create(); + builder.show(); + + } + +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2e1d38b7..10d766eb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -559,10 +559,12 @@ Size Share Issue + Share Pull Request Share Repository Create Repository Commits Branch Commits Committed by %1$s View Commits + Changelog diff --git a/app/src/main/res/xml/changelog.xml b/app/src/main/res/xml/changelog.xml new file mode 100644 index 00000000..09181e95 --- /dev/null +++ b/app/src/main/res/xml/changelog.xml @@ -0,0 +1,32 @@ + + + + + Improvement: Show issues only in Issues Tabs + Bugfix: Files breadcrumb navigation links + Bugfix: Login with special characters + + + + New: Light theme (choose from settings) + New: Icons + New: Download files in Fileviewer (needs write permission) + New: Custom fonts (choose from settings) + New: PDF support in Fileviewer + New: Night mode for PDF in Fileviewer (choose from settings) + New: Default list of repositories in Explore screen + New: Latvian language support + Improvement: Support more files in file viewer syntax highlighter + Improvement: Exclude BIN files rendering in diff viewer + Improvement: Exclude specific files in Fileviewer like doc, xls etc + Improvement: Single issue id and support copy title and description to clipboard + Improvement: Translation updates + Bugfix: Don’t refresh repositories without action + + + + Bugfix: Slashes in URL(file viewer) + Bugfix: No milestones when creating issue if user has other language selected + + + \ No newline at end of file