Merge branch 'master' into 13-repo-commits
# Conflicts: # app/src/main/res/values/strings.xml
This commit is contained in:
commit
0820dc3480
1
.gitignore
vendored
1
.gitignore
vendored
@ -48,6 +48,7 @@ captures/
|
|||||||
.idea/dictionaries
|
.idea/dictionaries
|
||||||
.idea/libraries
|
.idea/libraries
|
||||||
.idea/caches
|
.idea/caches
|
||||||
|
!.idea/codeStyles
|
||||||
|
|
||||||
# Keystore files
|
# Keystore files
|
||||||
# Uncomment the following lines if you do not want to check your keystore files in.
|
# Uncomment the following lines if you do not want to check your keystore files in.
|
||||||
|
159
.idea/codeStyles/Project.xml
generated
Normal file
159
.idea/codeStyles/Project.xml
generated
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<code_scheme name="Project" version="173">
|
||||||
|
<JavaCodeStyleSettings>
|
||||||
|
<option name="IMPORT_LAYOUT_TABLE">
|
||||||
|
<value>
|
||||||
|
<package name="android" withSubpackages="true" static="false" />
|
||||||
|
<package name="androidx" withSubpackages="true" static="false" />
|
||||||
|
<package name="com" withSubpackages="true" static="false" />
|
||||||
|
<package name="junit" withSubpackages="true" static="false" />
|
||||||
|
<package name="net" withSubpackages="true" static="false" />
|
||||||
|
<package name="org" withSubpackages="true" static="false" />
|
||||||
|
<package name="java" withSubpackages="true" static="false" />
|
||||||
|
<package name="javax" withSubpackages="true" static="false" />
|
||||||
|
<package name="" withSubpackages="true" static="false" />
|
||||||
|
<package name="" withSubpackages="true" static="true" />
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
</JavaCodeStyleSettings>
|
||||||
|
<codeStyleSettings language="JAVA">
|
||||||
|
<option name="RIGHT_MARGIN" value="120" />
|
||||||
|
<option name="KEEP_LINE_BREAKS" value="false" />
|
||||||
|
<option name="KEEP_FIRST_COLUMN_COMMENT" value="false" />
|
||||||
|
<option name="KEEP_CONTROL_STATEMENT_IN_ONE_LINE" value="false" />
|
||||||
|
<option name="BLANK_LINES_BEFORE_METHOD_BODY" value="1" />
|
||||||
|
<option name="BLANK_LINES_AROUND_FIELD_IN_INTERFACE" value="1" />
|
||||||
|
<option name="BLANK_LINES_AFTER_CLASS_HEADER" value="1" />
|
||||||
|
<option name="BLANK_LINES_AFTER_ANONYMOUS_CLASS_HEADER" value="1" />
|
||||||
|
<option name="BLANK_LINES_BEFORE_CLASS_END" value="1" />
|
||||||
|
<option name="ELSE_ON_NEW_LINE" value="true" />
|
||||||
|
<option name="CATCH_ON_NEW_LINE" value="true" />
|
||||||
|
<option name="FINALLY_ON_NEW_LINE" value="true" />
|
||||||
|
<option name="SPACE_BEFORE_IF_PARENTHESES" value="false" />
|
||||||
|
<option name="SPACE_BEFORE_WHILE_PARENTHESES" value="false" />
|
||||||
|
<option name="SPACE_BEFORE_FOR_PARENTHESES" value="false" />
|
||||||
|
<option name="SPACE_BEFORE_TRY_PARENTHESES" value="false" />
|
||||||
|
<option name="SPACE_BEFORE_CATCH_PARENTHESES" value="false" />
|
||||||
|
<option name="SPACE_BEFORE_SWITCH_PARENTHESES" value="false" />
|
||||||
|
<option name="SPACE_BEFORE_SYNCHRONIZED_PARENTHESES" value="false" />
|
||||||
|
<option name="IF_BRACE_FORCE" value="3" />
|
||||||
|
<option name="WRAP_ON_TYPING" value="1" />
|
||||||
|
<indentOptions>
|
||||||
|
<option name="USE_TAB_CHARACTER" value="true" />
|
||||||
|
<option name="SMART_TABS" value="true" />
|
||||||
|
</indentOptions>
|
||||||
|
</codeStyleSettings>
|
||||||
|
<codeStyleSettings language="XML">
|
||||||
|
<indentOptions>
|
||||||
|
<option name="CONTINUATION_INDENT_SIZE" value="4" />
|
||||||
|
</indentOptions>
|
||||||
|
<arrangement>
|
||||||
|
<rules>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>xmlns:android</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>xmlns:.*</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
<order>BY_NAME</order>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>.*:id</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>.*:name</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>name</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>style</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>.*</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>^$</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
<order>BY_NAME</order>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>.*</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
<order>ANDROID_ATTRIBUTE_ORDER</order>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<rule>
|
||||||
|
<match>
|
||||||
|
<AND>
|
||||||
|
<NAME>.*</NAME>
|
||||||
|
<XML_ATTRIBUTE />
|
||||||
|
<XML_NAMESPACE>.*</XML_NAMESPACE>
|
||||||
|
</AND>
|
||||||
|
</match>
|
||||||
|
<order>BY_NAME</order>
|
||||||
|
</rule>
|
||||||
|
</section>
|
||||||
|
</rules>
|
||||||
|
</arrangement>
|
||||||
|
</codeStyleSettings>
|
||||||
|
</code_scheme>
|
||||||
|
</component>
|
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<component name="ProjectCodeStyleConfiguration">
|
||||||
|
<state>
|
||||||
|
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||||
|
</state>
|
||||||
|
</component>
|
@ -13,6 +13,7 @@ import android.util.Log;
|
|||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.inputmethod.EditorInfo;
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@ -48,6 +49,8 @@ public class AddCollaboratorToRepositoryActivity extends BaseActivity {
|
|||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
TinyDB tinyDb = new TinyDB(getApplicationContext());
|
TinyDB tinyDb = new TinyDB(getApplicationContext());
|
||||||
final String instanceUrl = tinyDb.getString("instanceUrl");
|
final String instanceUrl = tinyDb.getString("instanceUrl");
|
||||||
final String loginUid = tinyDb.getString("loginUid");
|
final String loginUid = tinyDb.getString("loginUid");
|
||||||
@ -61,6 +64,10 @@ public class AddCollaboratorToRepositoryActivity extends BaseActivity {
|
|||||||
mProgressBar = findViewById(R.id.progress_bar);
|
mProgressBar = findViewById(R.id.progress_bar);
|
||||||
noData = findViewById(R.id.noData);
|
noData = findViewById(R.id.noData);
|
||||||
|
|
||||||
|
addCollaboratorSearch.requestFocus();
|
||||||
|
assert imm != null;
|
||||||
|
imm.showSoftInput(addCollaboratorSearch, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
||||||
initCloseListener();
|
initCloseListener();
|
||||||
closeActivity.setOnClickListener(onClickListener);
|
closeActivity.setOnClickListener(onClickListener);
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ import android.graphics.drawable.GradientDrawable;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
@ -59,6 +60,8 @@ public class CreateFileActivity extends BaseActivity {
|
|||||||
|
|
||||||
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
||||||
|
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
TinyDB tinyDb = new TinyDB(getApplicationContext());
|
TinyDB tinyDb = new TinyDB(getApplicationContext());
|
||||||
final String instanceUrl = tinyDb.getString("instanceUrl");
|
final String instanceUrl = tinyDb.getString("instanceUrl");
|
||||||
final String loginUid = tinyDb.getString("loginUid");
|
final String loginUid = tinyDb.getString("loginUid");
|
||||||
@ -74,6 +77,10 @@ public class CreateFileActivity extends BaseActivity {
|
|||||||
newFileBranchName = findViewById(R.id.newFileBranchName);
|
newFileBranchName = findViewById(R.id.newFileBranchName);
|
||||||
newFileCommitMessage = findViewById(R.id.newFileCommitMessage);
|
newFileCommitMessage = findViewById(R.id.newFileCommitMessage);
|
||||||
|
|
||||||
|
newFileName.requestFocus();
|
||||||
|
assert imm != null;
|
||||||
|
imm.showSoftInput(newFileName, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
||||||
initCloseListener();
|
initCloseListener();
|
||||||
closeActivity.setOnClickListener(onClickListener);
|
closeActivity.setOnClickListener(onClickListener);
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ import android.graphics.drawable.GradientDrawable;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.DatePicker;
|
import android.widget.DatePicker;
|
||||||
@ -77,6 +78,8 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
|
|||||||
|
|
||||||
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
||||||
|
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
TinyDB tinyDb = new TinyDB(getApplicationContext());
|
TinyDB tinyDb = new TinyDB(getApplicationContext());
|
||||||
final String instanceUrl = tinyDb.getString("instanceUrl");
|
final String instanceUrl = tinyDb.getString("instanceUrl");
|
||||||
final String loginUid = tinyDb.getString("loginUid");
|
final String loginUid = tinyDb.getString("loginUid");
|
||||||
@ -96,6 +99,10 @@ public class CreateIssueActivity extends BaseActivity implements View.OnClickLis
|
|||||||
newIssueDescription = findViewById(R.id.newIssueDescription);
|
newIssueDescription = findViewById(R.id.newIssueDescription);
|
||||||
labelsIdHolder = findViewById(R.id.labelsIdHolder);
|
labelsIdHolder = findViewById(R.id.labelsIdHolder);
|
||||||
|
|
||||||
|
newIssueTitle.requestFocus();
|
||||||
|
assert imm != null;
|
||||||
|
imm.showSoftInput(newIssueTitle, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
||||||
defaultMentionAdapter = new MentionArrayAdapter<>(this);
|
defaultMentionAdapter = new MentionArrayAdapter<>(this);
|
||||||
loadCollaboratorsList();
|
loadCollaboratorsList();
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ import android.graphics.drawable.GradientDrawable;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@ -50,6 +51,8 @@ public class CreateLabelActivity extends BaseActivity {
|
|||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
final TinyDB tinyDb = new TinyDB(getApplicationContext());
|
final TinyDB tinyDb = new TinyDB(getApplicationContext());
|
||||||
String repoFullName = tinyDb.getString("repoFullName");
|
String repoFullName = tinyDb.getString("repoFullName");
|
||||||
String[] parts = repoFullName.split("/");
|
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")) {
|
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();
|
finish();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -74,6 +77,10 @@ public class CreateLabelActivity extends BaseActivity {
|
|||||||
labelName = findViewById(R.id.labelName);
|
labelName = findViewById(R.id.labelName);
|
||||||
createLabelButton = findViewById(R.id.createLabelButton);
|
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);
|
final ColorPicker cp = new ColorPicker(CreateLabelActivity.this, 235, 113, 33);
|
||||||
|
|
||||||
initCloseListener();
|
initCloseListener();
|
||||||
|
@ -9,6 +9,7 @@ import android.graphics.drawable.GradientDrawable;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.DatePicker;
|
import android.widget.DatePicker;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
@ -48,12 +49,18 @@ public class CreateMilestoneActivity extends BaseActivity implements View.OnClic
|
|||||||
|
|
||||||
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
||||||
|
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
milestoneDueDate = findViewById(R.id.milestoneDueDate);
|
milestoneDueDate = findViewById(R.id.milestoneDueDate);
|
||||||
ImageView closeActivity = findViewById(R.id.close);
|
ImageView closeActivity = findViewById(R.id.close);
|
||||||
createNewMilestoneButton = findViewById(R.id.createNewMilestoneButton);
|
createNewMilestoneButton = findViewById(R.id.createNewMilestoneButton);
|
||||||
milestoneTitle = findViewById(R.id.milestoneTitle);
|
milestoneTitle = findViewById(R.id.milestoneTitle);
|
||||||
milestoneDescription = findViewById(R.id.milestoneDescription);
|
milestoneDescription = findViewById(R.id.milestoneDescription);
|
||||||
|
|
||||||
|
milestoneTitle.requestFocus();
|
||||||
|
assert imm != null;
|
||||||
|
imm.showSoftInput(milestoneTitle, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
||||||
initCloseListener();
|
initCloseListener();
|
||||||
closeActivity.setOnClickListener(onClickListener);
|
closeActivity.setOnClickListener(onClickListener);
|
||||||
milestoneDueDate.setOnClickListener(this);
|
milestoneDueDate.setOnClickListener(this);
|
||||||
|
@ -9,6 +9,7 @@ import android.os.Bundle;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Patterns;
|
import android.util.Patterns;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@ -47,6 +48,8 @@ public class CreateNewUserActivity extends BaseActivity {
|
|||||||
|
|
||||||
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
||||||
|
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
ImageView closeActivity = findViewById(R.id.close);
|
ImageView closeActivity = findViewById(R.id.close);
|
||||||
createUserButton = findViewById(R.id.createUserButton);
|
createUserButton = findViewById(R.id.createUserButton);
|
||||||
fullName = findViewById(R.id.fullName);
|
fullName = findViewById(R.id.fullName);
|
||||||
@ -54,6 +57,10 @@ public class CreateNewUserActivity extends BaseActivity {
|
|||||||
userEmail = findViewById(R.id.userEmail);
|
userEmail = findViewById(R.id.userEmail);
|
||||||
userPassword = findViewById(R.id.userPassword);
|
userPassword = findViewById(R.id.userPassword);
|
||||||
|
|
||||||
|
fullName.requestFocus();
|
||||||
|
assert imm != null;
|
||||||
|
imm.showSoftInput(fullName, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
||||||
initCloseListener();
|
initCloseListener();
|
||||||
closeActivity.setOnClickListener(onClickListener);
|
closeActivity.setOnClickListener(onClickListener);
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ import android.os.Bundle;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@ -45,10 +46,16 @@ public class CreateOrganizationActivity extends BaseActivity {
|
|||||||
|
|
||||||
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
||||||
|
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
closeActivity = findViewById(R.id.close);
|
closeActivity = findViewById(R.id.close);
|
||||||
orgName = findViewById(R.id.newOrganizationName);
|
orgName = findViewById(R.id.newOrganizationName);
|
||||||
orgDesc = findViewById(R.id.newOrganizationDescription);
|
orgDesc = findViewById(R.id.newOrganizationDescription);
|
||||||
|
|
||||||
|
orgName.requestFocus();
|
||||||
|
assert imm != null;
|
||||||
|
imm.showSoftInput(orgName, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
||||||
initCloseListener();
|
initCloseListener();
|
||||||
closeActivity.setOnClickListener(onClickListener);
|
closeActivity.setOnClickListener(onClickListener);
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import android.graphics.drawable.GradientDrawable;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
@ -59,6 +60,8 @@ public class CreateReleaseActivity extends BaseActivity {
|
|||||||
|
|
||||||
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
||||||
|
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
TinyDB tinyDb = new TinyDB(getApplicationContext());
|
TinyDB tinyDb = new TinyDB(getApplicationContext());
|
||||||
final String instanceUrl = tinyDb.getString("instanceUrl");
|
final String instanceUrl = tinyDb.getString("instanceUrl");
|
||||||
final String loginUid = tinyDb.getString("loginUid");
|
final String loginUid = tinyDb.getString("loginUid");
|
||||||
@ -75,6 +78,10 @@ public class CreateReleaseActivity extends BaseActivity {
|
|||||||
releaseType = findViewById(R.id.releaseType);
|
releaseType = findViewById(R.id.releaseType);
|
||||||
releaseDraft = findViewById(R.id.releaseDraft);
|
releaseDraft = findViewById(R.id.releaseDraft);
|
||||||
|
|
||||||
|
releaseTagName.requestFocus();
|
||||||
|
assert imm != null;
|
||||||
|
imm.showSoftInput(releaseTagName, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
||||||
initCloseListener();
|
initCloseListener();
|
||||||
closeActivity.setOnClickListener(onClickListener);
|
closeActivity.setOnClickListener(onClickListener);
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ import android.os.Bundle;
|
|||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
@ -62,11 +63,17 @@ public class CreateRepoActivity extends BaseActivity {
|
|||||||
final String userLogin = tinyDb.getString("userLogin");
|
final String userLogin = tinyDb.getString("userLogin");
|
||||||
final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
|
final String instanceToken = "token " + tinyDb.getString(loginUid + "-token");
|
||||||
|
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
closeActivity = findViewById(R.id.close);
|
closeActivity = findViewById(R.id.close);
|
||||||
repoName = findViewById(R.id.newRepoName);
|
repoName = findViewById(R.id.newRepoName);
|
||||||
repoDesc = findViewById(R.id.newRepoDescription);
|
repoDesc = findViewById(R.id.newRepoDescription);
|
||||||
repoAccess = findViewById(R.id.newRepoPrivate);
|
repoAccess = findViewById(R.id.newRepoPrivate);
|
||||||
|
|
||||||
|
repoName.requestFocus();
|
||||||
|
assert imm != null;
|
||||||
|
imm.showSoftInput(repoName, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
||||||
initCloseListener();
|
initCloseListener();
|
||||||
closeActivity.setOnClickListener(onClickListener);
|
closeActivity.setOnClickListener(onClickListener);
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import android.content.DialogInterface;
|
|||||||
import android.graphics.drawable.GradientDrawable;
|
import android.graphics.drawable.GradientDrawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
@ -76,6 +77,8 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
|
|||||||
|
|
||||||
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
||||||
|
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
ImageView closeActivity = findViewById(R.id.close);
|
ImageView closeActivity = findViewById(R.id.close);
|
||||||
teamName = findViewById(R.id.teamName);
|
teamName = findViewById(R.id.teamName);
|
||||||
teamDesc = findViewById(R.id.teamDesc);
|
teamDesc = findViewById(R.id.teamDesc);
|
||||||
@ -85,6 +88,10 @@ public class CreateTeamByOrgActivity extends BaseActivity implements View.OnClic
|
|||||||
teamAccessControlsArray = findViewById(R.id.teamAccessControlsArray);
|
teamAccessControlsArray = findViewById(R.id.teamAccessControlsArray);
|
||||||
createTeamButton = findViewById(R.id.createTeamButton);
|
createTeamButton = findViewById(R.id.createTeamButton);
|
||||||
|
|
||||||
|
teamName.requestFocus();
|
||||||
|
assert imm != null;
|
||||||
|
imm.showSoftInput(teamName, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
||||||
initCloseListener();
|
initCloseListener();
|
||||||
closeActivity.setOnClickListener(onClickListener);
|
closeActivity.setOnClickListener(onClickListener);
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ import android.graphics.drawable.GradientDrawable;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.DatePicker;
|
import android.widget.DatePicker;
|
||||||
@ -70,6 +71,8 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
|
|||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
final TinyDB tinyDb = new TinyDB(getApplicationContext());
|
final TinyDB tinyDb = new TinyDB(getApplicationContext());
|
||||||
|
|
||||||
final String instanceUrl = tinyDb.getString("instanceUrl");
|
final String instanceUrl = tinyDb.getString("instanceUrl");
|
||||||
@ -88,6 +91,10 @@ public class EditIssueActivity extends BaseActivity implements View.OnClickListe
|
|||||||
editIssueDescription = findViewById(R.id.editIssueDescription);
|
editIssueDescription = findViewById(R.id.editIssueDescription);
|
||||||
editIssueDueDate = findViewById(R.id.editIssueDueDate);
|
editIssueDueDate = findViewById(R.id.editIssueDueDate);
|
||||||
|
|
||||||
|
editIssueTitle.requestFocus();
|
||||||
|
assert imm != null;
|
||||||
|
imm.showSoftInput(editIssueTitle, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
||||||
defaultMentionAdapter = new MentionArrayAdapter<>(this);
|
defaultMentionAdapter = new MentionArrayAdapter<>(this);
|
||||||
loadCollaboratorsList();
|
loadCollaboratorsList();
|
||||||
|
|
||||||
|
@ -255,7 +255,7 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
instanceUrl = "http://" + instanceHost + "/api/v1/";
|
instanceUrl = "http://" + instanceHost + "/api/v1/";
|
||||||
instanceUrlWithProtocol = "https://" + instanceHost;
|
instanceUrlWithProtocol = "http://" + instanceHost;
|
||||||
}
|
}
|
||||||
|
|
||||||
tinyDb.putString("instanceUrlRaw", instanceHost);
|
tinyDb.putString("instanceUrlRaw", instanceHost);
|
||||||
@ -295,7 +295,7 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
|
|||||||
|
|
||||||
if(appUtil.checkIntegers(loginOTP_)) {
|
if(appUtil.checkIntegers(loginOTP_)) {
|
||||||
|
|
||||||
loginOTP = Integer.valueOf(loginOTP_);
|
loginOTP = Integer.parseInt(loginOTP_);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
||||||
@ -344,7 +344,7 @@ public class LoginActivity extends BaseActivity implements View.OnClickListener
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
instanceUrl = "http://" + instanceHost + "/api/v1/";
|
instanceUrl = "http://" + instanceHost + "/api/v1/";
|
||||||
instanceUrlWithProtocol = "https://" + instanceHost;
|
instanceUrlWithProtocol = "http://" + instanceHost;
|
||||||
}
|
}
|
||||||
|
|
||||||
tinyDb.putString("instanceUrlRaw", instanceHost);
|
tinyDb.putString("instanceUrlRaw", instanceHost);
|
||||||
|
@ -11,6 +11,8 @@ import androidx.drawerlayout.widget.DrawerLayout;
|
|||||||
import androidx.appcompat.app.ActionBarDrawerToggle;
|
import androidx.appcompat.app.ActionBarDrawerToggle;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
import androidx.fragment.app.FragmentManager;
|
import androidx.fragment.app.FragmentManager;
|
||||||
|
import android.content.pm.PackageInfo;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.graphics.Typeface;
|
import android.graphics.Typeface;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@ -32,6 +34,7 @@ import org.mian.gitnex.fragments.SettingsFragment;
|
|||||||
import org.mian.gitnex.fragments.StarredRepositoriesFragment;
|
import org.mian.gitnex.fragments.StarredRepositoriesFragment;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
import org.mian.gitnex.helpers.Authorization;
|
import org.mian.gitnex.helpers.Authorization;
|
||||||
|
import org.mian.gitnex.helpers.ChangeLog;
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.models.GiteaVersion;
|
import org.mian.gitnex.models.GiteaVersion;
|
||||||
import org.mian.gitnex.models.UserInfo;
|
import org.mian.gitnex.models.UserInfo;
|
||||||
@ -156,7 +159,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig
|
|||||||
drawer = findViewById(R.id.drawer_layout);
|
drawer = findViewById(R.id.drawer_layout);
|
||||||
NavigationView navigationView = findViewById(R.id.nav_view);
|
NavigationView navigationView = findViewById(R.id.nav_view);
|
||||||
navigationView.setNavigationItemSelectedListener(this);
|
navigationView.setNavigationItemSelectedListener(this);
|
||||||
final View hView = navigationView.getHeaderView(0);
|
final View hView = navigationView.getHeaderView(0);
|
||||||
|
|
||||||
ImageView navSubMenu = hView.findViewById(R.id.navSubMenu);
|
ImageView navSubMenu = hView.findViewById(R.id.navSubMenu);
|
||||||
navSubMenu.setOnClickListener(new View.OnClickListener() {
|
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) {
|
public void setActionBarTitle (@NonNull String title) {
|
||||||
|
@ -6,6 +6,7 @@ import android.graphics.drawable.GradientDrawable;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@ -55,9 +56,15 @@ public class MergePullRequestActivity extends BaseActivity {
|
|||||||
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
||||||
TinyDB tinyDb = new TinyDB(getApplicationContext());
|
TinyDB tinyDb = new TinyDB(getApplicationContext());
|
||||||
|
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
mergePR = findViewById(R.id.mergePR);
|
mergePR = findViewById(R.id.mergePR);
|
||||||
mergePR.setShowSoftInputOnFocus(true);
|
mergePR.setShowSoftInputOnFocus(true);
|
||||||
|
|
||||||
|
mergePR.requestFocus();
|
||||||
|
assert imm != null;
|
||||||
|
imm.showSoftInput(mergePR, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
||||||
defaultMentionAdapter = new MentionArrayAdapter<>(this);
|
defaultMentionAdapter = new MentionArrayAdapter<>(this);
|
||||||
loadCollaboratorsList();
|
loadCollaboratorsList();
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import android.os.Bundle;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Patterns;
|
import android.util.Patterns;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@ -47,10 +48,16 @@ public class ProfileEmailActivity extends BaseActivity {
|
|||||||
|
|
||||||
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
||||||
|
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
ImageView closeActivity = findViewById(R.id.close);
|
ImageView closeActivity = findViewById(R.id.close);
|
||||||
userEmail = findViewById(R.id.userEmail);
|
userEmail = findViewById(R.id.userEmail);
|
||||||
addEmailButton = findViewById(R.id.addEmailButton);
|
addEmailButton = findViewById(R.id.addEmailButton);
|
||||||
|
|
||||||
|
userEmail.requestFocus();
|
||||||
|
assert imm != null;
|
||||||
|
imm.showSoftInput(userEmail, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
||||||
initCloseListener();
|
initCloseListener();
|
||||||
closeActivity.setOnClickListener(onClickListener);
|
closeActivity.setOnClickListener(onClickListener);
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import android.graphics.drawable.GradientDrawable;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@ -53,6 +54,8 @@ public class ReplyToIssueActivity extends BaseActivity {
|
|||||||
|
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
|
||||||
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
boolean connToInternet = AppUtil.haveNetworkConnection(getApplicationContext());
|
||||||
TinyDB tinyDb = new TinyDB(getApplicationContext());
|
TinyDB tinyDb = new TinyDB(getApplicationContext());
|
||||||
|
|
||||||
@ -67,6 +70,10 @@ public class ReplyToIssueActivity extends BaseActivity {
|
|||||||
closeActivity = findViewById(R.id.close);
|
closeActivity = findViewById(R.id.close);
|
||||||
TextView toolbar_title = findViewById(R.id.toolbar_title);
|
TextView toolbar_title = findViewById(R.id.toolbar_title);
|
||||||
|
|
||||||
|
addComment.requestFocus();
|
||||||
|
assert imm != null;
|
||||||
|
imm.showSoftInput(addComment, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
|
||||||
if(!tinyDb.getString("issueTitle").isEmpty()) {
|
if(!tinyDb.getString("issueTitle").isEmpty()) {
|
||||||
toolbar_title.setText(tinyDb.getString("issueTitle"));
|
toolbar_title.setText(tinyDb.getString("issueTitle"));
|
||||||
}
|
}
|
||||||
|
@ -62,6 +62,7 @@ public class BottomSheetSingleIssueFragment extends BottomSheetDialogFragment {
|
|||||||
|
|
||||||
editIssue.setText(R.string.editPrText);
|
editIssue.setText(R.string.editPrText);
|
||||||
copyIssueUrl.setText(R.string.copyPrUrlText);
|
copyIssueUrl.setText(R.string.copyPrUrlText);
|
||||||
|
shareIssue.setText(R.string.sharePr);
|
||||||
|
|
||||||
if(tinyDB.getBoolean("prMerged")) {
|
if(tinyDB.getBoolean("prMerged")) {
|
||||||
mergePullRequest.setVisibility(View.GONE);
|
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);
|
closeIssue.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
103
app/src/main/java/org/mian/gitnex/helpers/ChangeLog.java
Normal file
103
app/src/main/java/org/mian/gitnex/helpers/ChangeLog.java
Normal file
@ -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") + "<br>");
|
||||||
|
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("<br>");
|
||||||
|
}
|
||||||
|
eventType = aXml.next();
|
||||||
|
|
||||||
|
}
|
||||||
|
strBuilder.append("<br>");
|
||||||
|
|
||||||
|
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("<small>" + changelogMessage + "</small>"));
|
||||||
|
builder.setNegativeButton(R.string.close, (dialog, which) -> dialog.cancel());
|
||||||
|
builder.setCancelable(false);
|
||||||
|
builder.create();
|
||||||
|
builder.show();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -559,10 +559,12 @@
|
|||||||
|
|
||||||
<string name="sizeCopy">Size</string>
|
<string name="sizeCopy">Size</string>
|
||||||
<string name="shareIssue">Share Issue</string>
|
<string name="shareIssue">Share Issue</string>
|
||||||
|
<string name="sharePr">Share Pull Request</string>
|
||||||
<string name="shareRepository">Share Repository</string>
|
<string name="shareRepository">Share Repository</string>
|
||||||
<string name="createRepository">Create Repository</string>
|
<string name="createRepository">Create Repository</string>
|
||||||
<string name="repositoryTabCommits">Commits</string>
|
<string name="repositoryTabCommits">Commits</string>
|
||||||
<string name="commitTitle">Branch Commits</string>
|
<string name="commitTitle">Branch Commits</string>
|
||||||
<string name="commitCommittedBy">Committed by %1$s</string>
|
<string name="commitCommittedBy">Committed by %1$s</string>
|
||||||
<string name="viewCommits">View Commits</string>
|
<string name="viewCommits">View Commits</string>
|
||||||
|
<string name="changelogTitle" translatable="false">Changelog</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
32
app/src/main/res/xml/changelog.xml
Normal file
32
app/src/main/res/xml/changelog.xml
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<changelog>
|
||||||
|
|
||||||
|
<release version="2.4.1" versioncode="91">
|
||||||
|
<change>Improvement: Show issues only in Issues Tabs</change>
|
||||||
|
<change>Bugfix: Files breadcrumb navigation links</change>
|
||||||
|
<change>Bugfix: Login with special characters</change>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="2.4.0" versioncode="90">
|
||||||
|
<change>New: Light theme (choose from settings)</change>
|
||||||
|
<change>New: Icons</change>
|
||||||
|
<change>New: Download files in Fileviewer (needs write permission)</change>
|
||||||
|
<change>New: Custom fonts (choose from settings)</change>
|
||||||
|
<change>New: PDF support in Fileviewer</change>
|
||||||
|
<change>New: Night mode for PDF in Fileviewer (choose from settings)</change>
|
||||||
|
<change>New: Default list of repositories in Explore screen</change>
|
||||||
|
<change>New: Latvian language support</change>
|
||||||
|
<change>Improvement: Support more files in file viewer syntax highlighter</change>
|
||||||
|
<change>Improvement: Exclude BIN files rendering in diff viewer</change>
|
||||||
|
<change>Improvement: Exclude specific files in Fileviewer like doc, xls etc</change>
|
||||||
|
<change>Improvement: Single issue id and support copy title and description to clipboard</change>
|
||||||
|
<change>Improvement: Translation updates</change>
|
||||||
|
<change>Bugfix: Don’t refresh repositories without action</change>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
<release version="2.3.2" versioncode="82">
|
||||||
|
<change>Bugfix: Slashes in URL(file viewer)</change>
|
||||||
|
<change>Bugfix: No milestones when creating issue if user has other language selected</change>
|
||||||
|
</release>
|
||||||
|
|
||||||
|
</changelog>
|
Loading…
x
Reference in New Issue
Block a user