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