mirror of
https://codeberg.org/gitnex/GitNex
synced 2025-02-01 20:07:17 +01:00
[App Only] Notes (#1207)
Closes #656 It is a simple notes feature where you can add your notes related to your repos, issues etc etc. For me I sometime came across an issue or thing to fix/add but away from PC. I have notes app, but there are so many things in it and sometime it is lost where I save it. So this will be an easy way to remind me of it when needed. It can be used as a generic Notes app too. Co-authored-by: M M Arif <mmarif@swatian.com> Co-authored-by: qwerty287 <ndev@web.de> Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/1207 Reviewed-by: qwerty287 <qwerty287@noreply.codeberg.org>
This commit is contained in:
parent
211fdab250
commit
07e048e29f
@ -56,10 +56,10 @@ dependencies {
|
|||||||
def lifecycle_version = '2.5.1'
|
def lifecycle_version = '2.5.1'
|
||||||
def markwon_version = '4.6.2'
|
def markwon_version = '4.6.2'
|
||||||
def work_version = "2.7.1"
|
def work_version = "2.7.1"
|
||||||
def acra = '5.8.4'
|
def acra = '5.9.6'
|
||||||
|
|
||||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||||
implementation 'androidx.appcompat:appcompat:1.5.0'
|
implementation 'androidx.appcompat:appcompat:1.5.1'
|
||||||
implementation 'com.google.android.material:material:1.6.1'
|
implementation 'com.google.android.material:material:1.6.1'
|
||||||
implementation 'androidx.compose.material3:material3:1.0.0-alpha15'
|
implementation 'androidx.compose.material3:material3:1.0.0-alpha15'
|
||||||
implementation 'androidx.compose.material3:material3-window-size-class:1.0.0-alpha15'
|
implementation 'androidx.compose.material3:material3-window-size-class:1.0.0-alpha15'
|
||||||
@ -71,7 +71,7 @@ dependencies {
|
|||||||
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
||||||
implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.2'
|
implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.2'
|
||||||
implementation "com.google.code.gson:gson:2.9.0"
|
implementation 'com.google.code.gson:gson:2.9.1'
|
||||||
implementation "com.squareup.picasso:picasso:2.71828"
|
implementation "com.squareup.picasso:picasso:2.71828"
|
||||||
implementation 'jp.wasabeef:picasso-transformations:2.4.0'
|
implementation 'jp.wasabeef:picasso-transformations:2.4.0'
|
||||||
implementation 'jp.co.cyberagent.android:gpuimage:2.1.0'
|
implementation 'jp.co.cyberagent.android:gpuimage:2.1.0'
|
||||||
|
@ -169,6 +169,10 @@
|
|||||||
android:name=".activities.CodeEditorActivity"
|
android:name=".activities.CodeEditorActivity"
|
||||||
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"
|
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"
|
||||||
android:windowSoftInputMode="adjustResize"/>
|
android:windowSoftInputMode="adjustResize"/>
|
||||||
|
<activity
|
||||||
|
android:name=".activities.CreateNoteActivity"
|
||||||
|
android:configChanges="orientation|screenSize|smallestScreenSize|density|screenLayout|keyboard|keyboardHidden|navigation"
|
||||||
|
android:windowSoftInputMode="adjustResize" />
|
||||||
|
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="com.samsung.android.keepalive.density"
|
android:name="com.samsung.android.keepalive.density"
|
||||||
|
@ -0,0 +1,182 @@
|
|||||||
|
package org.mian.gitnex.activities;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.text.Editable;
|
||||||
|
import android.text.TextWatcher;
|
||||||
|
import android.text.method.ScrollingMovementMethod;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import com.vdurmont.emoji.EmojiParser;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.Objects;
|
||||||
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.database.api.BaseApi;
|
||||||
|
import org.mian.gitnex.database.api.NotesApi;
|
||||||
|
import org.mian.gitnex.database.models.Notes;
|
||||||
|
import org.mian.gitnex.databinding.ActivityCreateNoteBinding;
|
||||||
|
import org.mian.gitnex.helpers.Markdown;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author M M Arif
|
||||||
|
*/
|
||||||
|
public class CreateNoteActivity extends BaseActivity {
|
||||||
|
|
||||||
|
private ActivityCreateNoteBinding binding;
|
||||||
|
private boolean renderMd = false;
|
||||||
|
private String action;
|
||||||
|
private Notes notes;
|
||||||
|
private NotesApi notesApi;
|
||||||
|
private int noteId;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
binding = ActivityCreateNoteBinding.inflate(getLayoutInflater());
|
||||||
|
notesApi = BaseApi.getInstance(ctx, NotesApi.class);
|
||||||
|
|
||||||
|
setContentView(binding.getRoot());
|
||||||
|
setSupportActionBar(binding.toolbar);
|
||||||
|
|
||||||
|
InputMethodManager imm =
|
||||||
|
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
assert imm != null;
|
||||||
|
imm.showSoftInput(binding.noteContent, InputMethodManager.SHOW_IMPLICIT);
|
||||||
|
binding.noteContent.requestFocus();
|
||||||
|
|
||||||
|
binding.close.setOnClickListener(view -> finish());
|
||||||
|
|
||||||
|
if (getIntent().getStringExtra("action") != null) {
|
||||||
|
action = getIntent().getStringExtra("action");
|
||||||
|
} else {
|
||||||
|
action = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.close.setOnClickListener(close -> finish());
|
||||||
|
binding.toolbarTitle.setMovementMethod(new ScrollingMovementMethod());
|
||||||
|
|
||||||
|
if (action.equalsIgnoreCase("edit")) {
|
||||||
|
|
||||||
|
noteId = getIntent().getIntExtra("noteId", 0);
|
||||||
|
notes = notesApi.fetchNoteById(noteId);
|
||||||
|
binding.noteContent.setText(notes.getContent());
|
||||||
|
|
||||||
|
binding.markdownPreview.setVisibility(View.GONE);
|
||||||
|
binding.toolbarTitle.setText(R.string.editNote);
|
||||||
|
|
||||||
|
binding.noteContent.addTextChangedListener(
|
||||||
|
new TextWatcher() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable s) {
|
||||||
|
|
||||||
|
String text = binding.noteContent.getText().toString();
|
||||||
|
|
||||||
|
if (!text.isEmpty()) {
|
||||||
|
|
||||||
|
updateNote(text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void beforeTextChanged(
|
||||||
|
CharSequence s, int start, int count, int after) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTextChanged(
|
||||||
|
CharSequence s, int start, int before, int count) {}
|
||||||
|
});
|
||||||
|
} else if (action.equalsIgnoreCase("add")) {
|
||||||
|
|
||||||
|
binding.markdownPreview.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
binding.noteContent.addTextChangedListener(
|
||||||
|
new TextWatcher() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterTextChanged(Editable s) {
|
||||||
|
|
||||||
|
String text = binding.noteContent.getText().toString();
|
||||||
|
|
||||||
|
if (!text.isEmpty() && text.length() > 4) {
|
||||||
|
|
||||||
|
if (noteId > 0) {
|
||||||
|
updateNote(text);
|
||||||
|
} else {
|
||||||
|
noteId =
|
||||||
|
(int)
|
||||||
|
notesApi.insertNote(
|
||||||
|
text,
|
||||||
|
(int) Instant.now().getEpochSecond());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void beforeTextChanged(
|
||||||
|
CharSequence s, int start, int count, int after) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTextChanged(
|
||||||
|
CharSequence s, int start, int before, int count) {}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
binding.markdownPreview.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateNote(String content) {
|
||||||
|
notesApi.updateNote(content, Instant.now().getEpochSecond(), noteId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(@NonNull Menu menu) {
|
||||||
|
|
||||||
|
MenuInflater inflater = getMenuInflater();
|
||||||
|
inflater.inflate(R.menu.markdown_switcher, menu);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
|
||||||
|
int id = item.getItemId();
|
||||||
|
|
||||||
|
if (id == android.R.id.home) {
|
||||||
|
|
||||||
|
finish();
|
||||||
|
return true;
|
||||||
|
} else if (id == R.id.markdown) {
|
||||||
|
|
||||||
|
if (action.equalsIgnoreCase("edit") || action.equalsIgnoreCase("add")) {
|
||||||
|
if (!renderMd) {
|
||||||
|
Markdown.render(
|
||||||
|
ctx,
|
||||||
|
EmojiParser.parseToUnicode(
|
||||||
|
Objects.requireNonNull(
|
||||||
|
binding.noteContent.getText().toString())),
|
||||||
|
binding.markdownPreview);
|
||||||
|
|
||||||
|
binding.markdownPreview.setVisibility(View.VISIBLE);
|
||||||
|
binding.noteContent.setVisibility(View.GONE);
|
||||||
|
renderMd = true;
|
||||||
|
} else {
|
||||||
|
binding.markdownPreview.setVisibility(View.GONE);
|
||||||
|
binding.noteContent.setVisibility(View.VISIBLE);
|
||||||
|
renderMd = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -67,7 +67,6 @@ import org.mian.gitnex.helpers.LabelWidthCalculator;
|
|||||||
import org.mian.gitnex.helpers.Markdown;
|
import org.mian.gitnex.helpers.Markdown;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
import org.mian.gitnex.helpers.TinyDB;
|
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.helpers.contexts.IssueContext;
|
import org.mian.gitnex.helpers.contexts.IssueContext;
|
||||||
import org.mian.gitnex.structs.BottomSheetListener;
|
import org.mian.gitnex.structs.BottomSheetListener;
|
||||||
@ -774,9 +773,7 @@ public class IssueDetailActivity extends BaseActivity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TinyDB tinyDb = TinyDB.getInstance(appCtx);
|
|
||||||
final Locale locale = getResources().getConfiguration().locale;
|
final Locale locale = getResources().getConfiguration().locale;
|
||||||
final String timeFormat = tinyDb.getString("dateFormat", "pretty");
|
|
||||||
issueCreator = issue.getIssue().getUser().getLogin();
|
issueCreator = issue.getIssue().getUser().getLogin();
|
||||||
|
|
||||||
PicassoService.getInstance(ctx)
|
PicassoService.getInstance(ctx)
|
||||||
@ -945,8 +942,6 @@ public class IssueDetailActivity extends BaseActivity
|
|||||||
if (issue.getIssue().getDueDate() != null) {
|
if (issue.getIssue().getDueDate() != null) {
|
||||||
|
|
||||||
viewBinding.dueDateFrame.setVisibility(View.VISIBLE);
|
viewBinding.dueDateFrame.setVisibility(View.VISIBLE);
|
||||||
if (timeFormat.equals("normal") || timeFormat.equals("pretty")) {
|
|
||||||
|
|
||||||
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", locale);
|
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", locale);
|
||||||
String dueDate = formatter.format(issue.getIssue().getDueDate());
|
String dueDate = formatter.format(issue.getIssue().getDueDate());
|
||||||
viewBinding.issueDueDate.setText(dueDate);
|
viewBinding.issueDueDate.setText(dueDate);
|
||||||
@ -955,12 +950,6 @@ public class IssueDetailActivity extends BaseActivity
|
|||||||
TimeHelper.customDateFormatForToastDateFormat(
|
TimeHelper.customDateFormatForToastDateFormat(
|
||||||
issue.getIssue().getDueDate()),
|
issue.getIssue().getDueDate()),
|
||||||
ctx));
|
ctx));
|
||||||
} else if (timeFormat.equals("normal1")) {
|
|
||||||
|
|
||||||
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy", locale);
|
|
||||||
String dueDate = formatter.format(issue.getIssue().getDueDate());
|
|
||||||
viewBinding.issueDueDate.setText(dueDate);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
viewBinding.dueDateFrame.setVisibility(View.GONE);
|
viewBinding.dueDateFrame.setVisibility(View.GONE);
|
||||||
@ -983,18 +972,14 @@ public class IssueDetailActivity extends BaseActivity
|
|||||||
viewBinding.issueModified.setVisibility(View.INVISIBLE);
|
viewBinding.issueModified.setVisibility(View.INVISIBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
viewBinding.issueCreatedTime.setText(
|
|
||||||
TimeHelper.formatTime(issue.getIssue().getCreatedAt(), locale, timeFormat, ctx));
|
|
||||||
viewBinding.issueCreatedTime.setVisibility(View.VISIBLE);
|
viewBinding.issueCreatedTime.setVisibility(View.VISIBLE);
|
||||||
|
viewBinding.issueCreatedTime.setText(
|
||||||
if (timeFormat.equals("pretty")) {
|
TimeHelper.formatTime(issue.getIssue().getCreatedAt(), locale));
|
||||||
|
|
||||||
viewBinding.issueCreatedTime.setOnClickListener(
|
viewBinding.issueCreatedTime.setOnClickListener(
|
||||||
new ClickListener(
|
new ClickListener(
|
||||||
TimeHelper.customDateFormatForToastDateFormat(
|
TimeHelper.customDateFormatForToastDateFormat(
|
||||||
issue.getIssue().getCreatedAt()),
|
issue.getIssue().getCreatedAt()),
|
||||||
ctx));
|
ctx));
|
||||||
}
|
|
||||||
|
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putString("repoOwner", repoOwner);
|
bundle.putString("repoOwner", repoOwner);
|
||||||
|
@ -46,6 +46,7 @@ import org.mian.gitnex.fragments.MostVisitedReposFragment;
|
|||||||
import org.mian.gitnex.fragments.MyIssuesFragment;
|
import org.mian.gitnex.fragments.MyIssuesFragment;
|
||||||
import org.mian.gitnex.fragments.MyProfileFragment;
|
import org.mian.gitnex.fragments.MyProfileFragment;
|
||||||
import org.mian.gitnex.fragments.MyRepositoriesFragment;
|
import org.mian.gitnex.fragments.MyRepositoriesFragment;
|
||||||
|
import org.mian.gitnex.fragments.NotesFragment;
|
||||||
import org.mian.gitnex.fragments.NotificationsFragment;
|
import org.mian.gitnex.fragments.NotificationsFragment;
|
||||||
import org.mian.gitnex.fragments.OrganizationsFragment;
|
import org.mian.gitnex.fragments.OrganizationsFragment;
|
||||||
import org.mian.gitnex.fragments.RepositoriesFragment;
|
import org.mian.gitnex.fragments.RepositoriesFragment;
|
||||||
@ -143,6 +144,8 @@ public class MainActivity extends BaseActivity
|
|||||||
toolbarTitle.setText(getResources().getString(R.string.navProfile));
|
toolbarTitle.setText(getResources().getString(R.string.navProfile));
|
||||||
} else if (fragmentById instanceof MostVisitedReposFragment) {
|
} else if (fragmentById instanceof MostVisitedReposFragment) {
|
||||||
toolbarTitle.setText(getResources().getString(R.string.navMostVisited));
|
toolbarTitle.setText(getResources().getString(R.string.navMostVisited));
|
||||||
|
} else if (fragmentById instanceof NotesFragment) {
|
||||||
|
toolbarTitle.setText(getResources().getString(R.string.navNotes));
|
||||||
} else if (fragmentById instanceof DraftsFragment) {
|
} else if (fragmentById instanceof DraftsFragment) {
|
||||||
toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
|
toolbarTitle.setText(getResources().getString(R.string.titleDrafts));
|
||||||
} else if (fragmentById instanceof AdministrationFragment) {
|
} else if (fragmentById instanceof AdministrationFragment) {
|
||||||
@ -490,6 +493,14 @@ public class MainActivity extends BaseActivity
|
|||||||
.commit();
|
.commit();
|
||||||
navigationView.setCheckedItem(R.id.nav_most_visited);
|
navigationView.setCheckedItem(R.id.nav_most_visited);
|
||||||
break;
|
break;
|
||||||
|
case 10:
|
||||||
|
toolbarTitle.setText(getResources().getString(R.string.navNotes));
|
||||||
|
getSupportFragmentManager()
|
||||||
|
.beginTransaction()
|
||||||
|
.replace(R.id.fragment_container, new NotesFragment())
|
||||||
|
.commit();
|
||||||
|
navigationView.setCheckedItem(R.id.nav_notes);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
toolbarTitle.setText(getResources().getString(R.string.navMyRepos));
|
toolbarTitle.setText(getResources().getString(R.string.navMyRepos));
|
||||||
@ -708,6 +719,13 @@ public class MainActivity extends BaseActivity
|
|||||||
.beginTransaction()
|
.beginTransaction()
|
||||||
.replace(R.id.fragment_container, new MostVisitedReposFragment())
|
.replace(R.id.fragment_container, new MostVisitedReposFragment())
|
||||||
.commit();
|
.commit();
|
||||||
|
} else if (id == R.id.nav_notes) {
|
||||||
|
|
||||||
|
toolbarTitle.setText(getResources().getString(R.string.navNotes));
|
||||||
|
getSupportFragmentManager()
|
||||||
|
.beginTransaction()
|
||||||
|
.replace(R.id.fragment_container, new NotesFragment())
|
||||||
|
.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
drawer.closeDrawer(GravityCompat.START);
|
drawer.closeDrawer(GravityCompat.START);
|
||||||
|
@ -24,8 +24,6 @@ import org.mian.gitnex.helpers.Toasty;
|
|||||||
*/
|
*/
|
||||||
public class SettingsAppearanceActivity extends BaseActivity {
|
public class SettingsAppearanceActivity extends BaseActivity {
|
||||||
|
|
||||||
private static String[] timeList;
|
|
||||||
private static int timeSelectedChoice = 0;
|
|
||||||
private static String[] customFontList;
|
private static String[] customFontList;
|
||||||
private static int customFontSelectedChoice = 0;
|
private static int customFontSelectedChoice = 0;
|
||||||
private static String[] themeList;
|
private static String[] themeList;
|
||||||
@ -43,7 +41,6 @@ public class SettingsAppearanceActivity extends BaseActivity {
|
|||||||
|
|
||||||
ImageView closeActivity = activitySettingsAppearanceBinding.close;
|
ImageView closeActivity = activitySettingsAppearanceBinding.close;
|
||||||
|
|
||||||
LinearLayout timeFrame = activitySettingsAppearanceBinding.timeFrame;
|
|
||||||
LinearLayout customFontFrame = activitySettingsAppearanceBinding.customFontFrame;
|
LinearLayout customFontFrame = activitySettingsAppearanceBinding.customFontFrame;
|
||||||
LinearLayout themeFrame = activitySettingsAppearanceBinding.themeSelectionFrame;
|
LinearLayout themeFrame = activitySettingsAppearanceBinding.themeSelectionFrame;
|
||||||
LinearLayout lightTimeFrame =
|
LinearLayout lightTimeFrame =
|
||||||
@ -52,7 +49,6 @@ public class SettingsAppearanceActivity extends BaseActivity {
|
|||||||
|
|
||||||
SwitchMaterial counterBadgesSwitch = activitySettingsAppearanceBinding.switchCounterBadge;
|
SwitchMaterial counterBadgesSwitch = activitySettingsAppearanceBinding.switchCounterBadge;
|
||||||
|
|
||||||
timeList = getResources().getStringArray(R.array.timeFormats);
|
|
||||||
customFontList = getResources().getStringArray(R.array.fonts);
|
customFontList = getResources().getStringArray(R.array.fonts);
|
||||||
themeList = getResources().getStringArray(R.array.themes);
|
themeList = getResources().getStringArray(R.array.themes);
|
||||||
|
|
||||||
@ -77,7 +73,6 @@ public class SettingsAppearanceActivity extends BaseActivity {
|
|||||||
darkHour = "0" + darkHour;
|
darkHour = "0" + darkHour;
|
||||||
}
|
}
|
||||||
|
|
||||||
timeSelectedChoice = tinyDB.getInt("timeId");
|
|
||||||
customFontSelectedChoice = tinyDB.getInt("customFontId", 1);
|
customFontSelectedChoice = tinyDB.getInt("customFontId", 1);
|
||||||
themeSelectedChoice = tinyDB.getInt("themeId", 6); // use system theme as default
|
themeSelectedChoice = tinyDB.getInt("themeId", 6); // use system theme as default
|
||||||
|
|
||||||
@ -87,7 +82,6 @@ public class SettingsAppearanceActivity extends BaseActivity {
|
|||||||
activitySettingsAppearanceBinding.darkThemeSelectedTime.setText(
|
activitySettingsAppearanceBinding.darkThemeSelectedTime.setText(
|
||||||
ctx.getResources()
|
ctx.getResources()
|
||||||
.getString(R.string.settingsThemeTimeSelectedHint, darkHour, darkMinute));
|
.getString(R.string.settingsThemeTimeSelectedHint, darkHour, darkMinute));
|
||||||
activitySettingsAppearanceBinding.tvDateTimeSelected.setText(timeList[timeSelectedChoice]);
|
|
||||||
activitySettingsAppearanceBinding.customFontSelected.setText(
|
activitySettingsAppearanceBinding.customFontSelected.setText(
|
||||||
customFontList[customFontSelectedChoice]);
|
customFontList[customFontSelectedChoice]);
|
||||||
activitySettingsAppearanceBinding.themeSelected.setText(themeList[themeSelectedChoice]);
|
activitySettingsAppearanceBinding.themeSelected.setText(themeList[themeSelectedChoice]);
|
||||||
@ -196,41 +190,6 @@ public class SettingsAppearanceActivity extends BaseActivity {
|
|||||||
|
|
||||||
materialAlertDialogBuilder.create().show();
|
materialAlertDialogBuilder.create().show();
|
||||||
});
|
});
|
||||||
|
|
||||||
// time and date dialog
|
|
||||||
timeFrame.setOnClickListener(
|
|
||||||
view -> {
|
|
||||||
MaterialAlertDialogBuilder materialAlertDialogBuilder =
|
|
||||||
new MaterialAlertDialogBuilder(ctx)
|
|
||||||
.setTitle(R.string.settingsTimeSelectorDialogTitle)
|
|
||||||
.setCancelable(timeSelectedChoice != -1)
|
|
||||||
.setSingleChoiceItems(
|
|
||||||
timeList,
|
|
||||||
timeSelectedChoice,
|
|
||||||
(dialogInterfaceTime, i) -> {
|
|
||||||
timeSelectedChoice = i;
|
|
||||||
activitySettingsAppearanceBinding.tvDateTimeSelected
|
|
||||||
.setText(timeList[i]);
|
|
||||||
tinyDB.putInt("timeId", i);
|
|
||||||
|
|
||||||
switch (i) {
|
|
||||||
case 0:
|
|
||||||
tinyDB.putString("dateFormat", "pretty");
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
tinyDB.putString("dateFormat", "normal");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
dialogInterfaceTime.dismiss();
|
|
||||||
Toasty.success(
|
|
||||||
appCtx,
|
|
||||||
getResources()
|
|
||||||
.getString(R.string.settingsSave));
|
|
||||||
});
|
|
||||||
|
|
||||||
materialAlertDialogBuilder.create().show();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initCloseListener() {
|
private void initCloseListener() {
|
||||||
|
@ -90,6 +90,9 @@ public class SettingsGeneralActivity extends BaseActivity {
|
|||||||
|
|
||||||
viewBinding.homeScreenSelected.setText(
|
viewBinding.homeScreenSelected.setText(
|
||||||
getResources().getString(R.string.navMostVisited));
|
getResources().getString(R.string.navMostVisited));
|
||||||
|
} else if (homeScreenSelectedChoice == 10) {
|
||||||
|
|
||||||
|
viewBinding.homeScreenSelected.setText(getResources().getString(R.string.navNotes));
|
||||||
}
|
}
|
||||||
|
|
||||||
viewBinding.homeScreenFrame.setOnClickListener(
|
viewBinding.homeScreenFrame.setOnClickListener(
|
||||||
|
@ -395,7 +395,7 @@ public class WikiActivity extends BaseActivity implements BottomSheetListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(@NonNull Menu menu) {
|
||||||
|
|
||||||
MenuInflater inflater = getMenuInflater();
|
MenuInflater inflater = getMenuInflater();
|
||||||
inflater.inflate(R.menu.markdown_switcher, menu);
|
inflater.inflate(R.menu.markdown_switcher, menu);
|
||||||
|
@ -18,7 +18,6 @@ import org.mian.gitnex.R;
|
|||||||
import org.mian.gitnex.clients.RetrofitClient;
|
import org.mian.gitnex.clients.RetrofitClient;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
import org.mian.gitnex.helpers.TinyDB;
|
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
import retrofit2.Callback;
|
import retrofit2.Callback;
|
||||||
@ -43,7 +42,6 @@ public class AdminCronTasksAdapter
|
|||||||
Context ctx = itemView.getContext();
|
Context ctx = itemView.getContext();
|
||||||
|
|
||||||
final Locale locale = ctx.getResources().getConfiguration().locale;
|
final Locale locale = ctx.getResources().getConfiguration().locale;
|
||||||
final String timeFormat = TinyDB.getInstance(ctx).getString("dateFormat", "pretty");
|
|
||||||
|
|
||||||
ImageView runTask = itemView.findViewById(R.id.runTask);
|
ImageView runTask = itemView.findViewById(R.id.runTask);
|
||||||
taskName = itemView.findViewById(R.id.taskName);
|
taskName = itemView.findViewById(R.id.taskName);
|
||||||
@ -56,14 +54,10 @@ public class AdminCronTasksAdapter
|
|||||||
String lastRun = "";
|
String lastRun = "";
|
||||||
|
|
||||||
if (cronTasks.getNext() != null) {
|
if (cronTasks.getNext() != null) {
|
||||||
nextRun =
|
nextRun = TimeHelper.formatTime(cronTasks.getNext(), locale);
|
||||||
TimeHelper.formatTime(
|
|
||||||
cronTasks.getNext(), locale, timeFormat, ctx);
|
|
||||||
}
|
}
|
||||||
if (cronTasks.getPrev() != null) {
|
if (cronTasks.getPrev() != null) {
|
||||||
lastRun =
|
lastRun = TimeHelper.formatTime(cronTasks.getPrev(), locale);
|
||||||
TimeHelper.formatTime(
|
|
||||||
cronTasks.getPrev(), locale, timeFormat, ctx);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
View view =
|
View view =
|
||||||
@ -127,7 +121,7 @@ public class AdminCronTasksAdapter
|
|||||||
Call<Void> call = RetrofitClient.getApiInterface(ctx).adminCronRun(taskName);
|
Call<Void> call = RetrofitClient.getApiInterface(ctx).adminCronRun(taskName);
|
||||||
|
|
||||||
call.enqueue(
|
call.enqueue(
|
||||||
new Callback<Void>() {
|
new Callback<>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(
|
public void onResponse(
|
||||||
|
@ -135,7 +135,6 @@ public class AdminGetUsersAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|||||||
}
|
}
|
||||||
|
|
||||||
public interface OnLoadMoreListener {
|
public interface OnLoadMoreListener {
|
||||||
|
|
||||||
void onLoadMore();
|
void onLoadMore();
|
||||||
|
|
||||||
void onLoadFinished();
|
void onLoadFinished();
|
||||||
|
@ -141,9 +141,7 @@ public class CommitsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||||||
.getCommit()
|
.getCommit()
|
||||||
.getCommitter()
|
.getCommitter()
|
||||||
.getDate()),
|
.getDate()),
|
||||||
context.getResources().getConfiguration().locale,
|
context.getResources().getConfiguration().locale)),
|
||||||
"pretty",
|
|
||||||
context)),
|
|
||||||
HtmlCompat.FROM_HTML_MODE_COMPACT));
|
HtmlCompat.FROM_HTML_MODE_COMPACT));
|
||||||
} else {
|
} else {
|
||||||
commitAuthorAndCommitter.setText(
|
commitAuthorAndCommitter.setText(
|
||||||
@ -157,9 +155,7 @@ public class CommitsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||||||
.getCommit()
|
.getCommit()
|
||||||
.getCommitter()
|
.getCommitter()
|
||||||
.getDate()),
|
.getDate()),
|
||||||
context.getResources().getConfiguration().locale,
|
context.getResources().getConfiguration().locale)),
|
||||||
"pretty",
|
|
||||||
context)),
|
|
||||||
HtmlCompat.FROM_HTML_MODE_COMPACT));
|
HtmlCompat.FROM_HTML_MODE_COMPACT));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,7 +175,6 @@ public class CommitsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||||||
.resize(120, 120)
|
.resize(120, 120)
|
||||||
.centerCrop()
|
.centerCrop()
|
||||||
.into(commitAuthorAvatar);
|
.into(commitAuthorAvatar);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
commitAuthorAvatar.setImageDrawable(null);
|
commitAuthorAvatar.setImageDrawable(null);
|
||||||
commitAuthorAvatarFrame.setVisibility(View.GONE);
|
commitAuthorAvatarFrame.setVisibility(View.GONE);
|
||||||
@ -206,7 +201,6 @@ public class CommitsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||||||
.resize(120, 120)
|
.resize(120, 120)
|
||||||
.centerCrop()
|
.centerCrop()
|
||||||
.into(commitCommitterAvatar);
|
.into(commitCommitterAvatar);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
commitCommitterAvatar.setImageDrawable(null);
|
commitCommitterAvatar.setImageDrawable(null);
|
||||||
commitCommitterAvatarFrame.setVisibility(View.GONE);
|
commitCommitterAvatarFrame.setVisibility(View.GONE);
|
||||||
|
@ -20,8 +20,6 @@ import androidx.core.content.res.ResourcesCompat;
|
|||||||
import androidx.core.text.HtmlCompat;
|
import androidx.core.text.HtmlCompat;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.amulyakhare.textdrawable.TextDrawable;
|
import com.amulyakhare.textdrawable.TextDrawable;
|
||||||
import java.text.DateFormat;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import org.gitnex.tea4j.v2.models.Issue;
|
import org.gitnex.tea4j.v2.models.Issue;
|
||||||
@ -38,7 +36,6 @@ import org.mian.gitnex.helpers.TimeHelper;
|
|||||||
import org.mian.gitnex.helpers.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.contexts.IssueContext;
|
import org.mian.gitnex.helpers.contexts.IssueContext;
|
||||||
import org.mian.gitnex.helpers.contexts.RepositoryContext;
|
import org.mian.gitnex.helpers.contexts.RepositoryContext;
|
||||||
import org.ocpsoft.prettytime.PrettyTime;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author M M Arif
|
* @author M M Arif
|
||||||
@ -201,7 +198,6 @@ public class ExploreIssuesAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|||||||
int imgRadius = AppUtil.getPixelsFromDensity(context, 60);
|
int imgRadius = AppUtil.getPixelsFromDensity(context, 60);
|
||||||
|
|
||||||
Locale locale = context.getResources().getConfiguration().locale;
|
Locale locale = context.getResources().getConfiguration().locale;
|
||||||
String timeFormat = tinyDb.getString("dateFormat", "pretty");
|
|
||||||
|
|
||||||
PicassoService.getInstance(context)
|
PicassoService.getInstance(context)
|
||||||
.get()
|
.get()
|
||||||
@ -319,46 +315,11 @@ public class ExploreIssuesAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|||||||
context.getResources().getColor(R.color.releasePre, null));
|
context.getResources().getColor(R.color.releasePre, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (timeFormat) {
|
issueCreatedTime.setText(TimeHelper.formatTime(issue.getCreatedAt(), locale));
|
||||||
case "pretty":
|
|
||||||
{
|
|
||||||
PrettyTime prettyTime = new PrettyTime(locale);
|
|
||||||
String createdTime = prettyTime.format(issue.getCreatedAt());
|
|
||||||
issueCreatedTime.setText(createdTime);
|
|
||||||
issueCreatedTime.setOnClickListener(
|
issueCreatedTime.setOnClickListener(
|
||||||
new ClickListener(
|
new ClickListener(
|
||||||
TimeHelper.customDateFormatForToastDateFormat(
|
TimeHelper.customDateFormatForToastDateFormat(issue.getCreatedAt()),
|
||||||
issue.getCreatedAt()),
|
|
||||||
context));
|
context));
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "normal":
|
|
||||||
{
|
|
||||||
DateFormat formatter =
|
|
||||||
new SimpleDateFormat(
|
|
||||||
"yyyy-MM-dd '"
|
|
||||||
+ context.getResources()
|
|
||||||
.getString(R.string.timeAtText)
|
|
||||||
+ "' HH:mm",
|
|
||||||
locale);
|
|
||||||
String createdTime = formatter.format(issue.getCreatedAt());
|
|
||||||
issueCreatedTime.setText(createdTime);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "normal1":
|
|
||||||
{
|
|
||||||
DateFormat formatter =
|
|
||||||
new SimpleDateFormat(
|
|
||||||
"dd-MM-yyyy '"
|
|
||||||
+ context.getResources()
|
|
||||||
.getString(R.string.timeAtText)
|
|
||||||
+ "' HH:mm",
|
|
||||||
locale);
|
|
||||||
String createdTime = formatter.format(issue.getCreatedAt());
|
|
||||||
issueCreatedTime.setText(createdTime);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,6 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.amulyakhare.textdrawable.TextDrawable;
|
import com.amulyakhare.textdrawable.TextDrawable;
|
||||||
import com.amulyakhare.textdrawable.util.ColorGenerator;
|
import com.amulyakhare.textdrawable.util.ColorGenerator;
|
||||||
import java.text.DateFormat;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
@ -27,7 +25,6 @@ import org.mian.gitnex.helpers.RoundedTransformation;
|
|||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
import org.mian.gitnex.helpers.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.contexts.RepositoryContext;
|
import org.mian.gitnex.helpers.contexts.RepositoryContext;
|
||||||
import org.ocpsoft.prettytime.PrettyTime;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author M M Arif
|
* @author M M Arif
|
||||||
@ -129,13 +126,11 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<RecyclerVie
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("SetTextI18n")
|
|
||||||
void bindData(org.gitnex.tea4j.v2.models.Repository userRepositories) {
|
void bindData(org.gitnex.tea4j.v2.models.Repository userRepositories) {
|
||||||
this.userRepositories = userRepositories;
|
this.userRepositories = userRepositories;
|
||||||
|
|
||||||
int imgRadius = AppUtil.getPixelsFromDensity(context, 60);
|
int imgRadius = AppUtil.getPixelsFromDensity(context, 60);
|
||||||
Locale locale = context.getResources().getConfiguration().locale;
|
Locale locale = context.getResources().getConfiguration().locale;
|
||||||
String timeFormat = tinyDb.getString("dateFormat", "pretty");
|
|
||||||
|
|
||||||
orgName.setText(userRepositories.getFullName().split("/")[0]);
|
orgName.setText(userRepositories.getFullName().split("/")[0]);
|
||||||
repoName.setText(userRepositories.getFullName().split("/")[1]);
|
repoName.setText(userRepositories.getFullName().split("/")[1]);
|
||||||
@ -174,50 +169,15 @@ public class ExploreRepositoriesAdapter extends RecyclerView.Adapter<RecyclerVie
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (userRepositories.getUpdatedAt() != null) {
|
if (userRepositories.getUpdatedAt() != null) {
|
||||||
|
|
||||||
switch (timeFormat) {
|
|
||||||
case "pretty":
|
|
||||||
{
|
|
||||||
PrettyTime prettyTime = new PrettyTime(locale);
|
|
||||||
String createdTime = prettyTime.format(userRepositories.getUpdatedAt());
|
|
||||||
repoLastUpdated.setText(
|
repoLastUpdated.setText(
|
||||||
context.getString(R.string.lastUpdatedAt, createdTime));
|
context.getString(
|
||||||
|
R.string.lastUpdatedAt,
|
||||||
|
TimeHelper.formatTime(userRepositories.getUpdatedAt(), locale)));
|
||||||
repoLastUpdated.setOnClickListener(
|
repoLastUpdated.setOnClickListener(
|
||||||
new ClickListener(
|
new ClickListener(
|
||||||
TimeHelper.customDateFormatForToastDateFormat(
|
TimeHelper.customDateFormatForToastDateFormat(
|
||||||
userRepositories.getUpdatedAt()),
|
userRepositories.getUpdatedAt()),
|
||||||
context));
|
context));
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "normal":
|
|
||||||
{
|
|
||||||
DateFormat formatter =
|
|
||||||
new SimpleDateFormat(
|
|
||||||
"yyyy-MM-dd '"
|
|
||||||
+ context.getResources()
|
|
||||||
.getString(R.string.timeAtText)
|
|
||||||
+ "' HH:mm",
|
|
||||||
locale);
|
|
||||||
String createdTime = formatter.format(userRepositories.getUpdatedAt());
|
|
||||||
repoLastUpdated.setText(
|
|
||||||
context.getString(R.string.lastUpdatedAt, createdTime));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "normal1":
|
|
||||||
{
|
|
||||||
DateFormat formatter =
|
|
||||||
new SimpleDateFormat(
|
|
||||||
"dd-MM-yyyy '"
|
|
||||||
+ context.getResources()
|
|
||||||
.getString(R.string.timeAtText)
|
|
||||||
+ "' HH:mm",
|
|
||||||
locale);
|
|
||||||
String createdTime = formatter.format(userRepositories.getUpdatedAt());
|
|
||||||
repoLastUpdated.setText(
|
|
||||||
context.getString(R.string.lastUpdatedAt, createdTime));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
repoLastUpdated.setVisibility(View.GONE);
|
repoLastUpdated.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
@ -50,6 +50,7 @@ import org.mian.gitnex.fragments.BottomSheetReplyFragment;
|
|||||||
import org.mian.gitnex.fragments.IssuesFragment;
|
import org.mian.gitnex.fragments.IssuesFragment;
|
||||||
import org.mian.gitnex.helpers.AlertDialogs;
|
import org.mian.gitnex.helpers.AlertDialogs;
|
||||||
import org.mian.gitnex.helpers.AppUtil;
|
import org.mian.gitnex.helpers.AppUtil;
|
||||||
|
import org.mian.gitnex.helpers.ClickListener;
|
||||||
import org.mian.gitnex.helpers.ColorInverter;
|
import org.mian.gitnex.helpers.ColorInverter;
|
||||||
import org.mian.gitnex.helpers.LabelWidthCalculator;
|
import org.mian.gitnex.helpers.LabelWidthCalculator;
|
||||||
import org.mian.gitnex.helpers.Markdown;
|
import org.mian.gitnex.helpers.Markdown;
|
||||||
@ -455,7 +456,6 @@ public class IssueCommentsAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|||||||
void bindData(TimelineComment timelineComment) {
|
void bindData(TimelineComment timelineComment) {
|
||||||
|
|
||||||
int fontSize = 14;
|
int fontSize = 14;
|
||||||
String timeFormat = tinyDB.getString("dateFormat", "pretty");
|
|
||||||
int imgRadius = AppUtil.getPixelsFromDensity(context, 3);
|
int imgRadius = AppUtil.getPixelsFromDensity(context, 3);
|
||||||
|
|
||||||
userLoginId = timelineComment.getUser().getLogin();
|
userLoginId = timelineComment.getUser().getLogin();
|
||||||
@ -469,36 +469,22 @@ public class IssueCommentsAdapter extends RecyclerView.Adapter<RecyclerView.View
|
|||||||
StringBuilder infoBuilder = null;
|
StringBuilder infoBuilder = null;
|
||||||
if (issueComment.getCreatedAt() != null) {
|
if (issueComment.getCreatedAt() != null) {
|
||||||
|
|
||||||
if (timeFormat.equals("pretty")) {
|
|
||||||
infoBuilder =
|
infoBuilder =
|
||||||
new StringBuilder(
|
new StringBuilder(
|
||||||
TimeHelper.formatTime(
|
TimeHelper.formatTime(issueComment.getCreatedAt(), locale));
|
||||||
issueComment.getCreatedAt(),
|
|
||||||
locale,
|
|
||||||
"pretty",
|
|
||||||
context));
|
|
||||||
information.setOnClickListener(
|
information.setOnClickListener(
|
||||||
v ->
|
new ClickListener(
|
||||||
TimeHelper.customDateFormatForToastDateFormat(
|
TimeHelper.customDateFormatForToastDateFormat(
|
||||||
issueComment.getCreatedAt()));
|
issueComment.getCreatedAt()),
|
||||||
} else if (timeFormat.equals("normal")) {
|
|
||||||
infoBuilder =
|
|
||||||
new StringBuilder(
|
|
||||||
TimeHelper.formatTime(
|
|
||||||
issueComment.getCreatedAt(),
|
|
||||||
locale,
|
|
||||||
"normal",
|
|
||||||
context));
|
context));
|
||||||
}
|
|
||||||
|
|
||||||
if (!issueComment.getCreatedAt().equals(issueComment.getUpdatedAt())) {
|
if (!issueComment.getCreatedAt().equals(issueComment.getUpdatedAt())) {
|
||||||
if (infoBuilder != null) {
|
|
||||||
infoBuilder
|
infoBuilder
|
||||||
.append(context.getString(R.string.colorfulBulletSpan))
|
.append(context.getString(R.string.colorfulBulletSpan))
|
||||||
.append(context.getString(R.string.modifiedText));
|
.append(context.getString(R.string.modifiedText));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
String info = infoBuilder.toString();
|
String info = infoBuilder.toString();
|
||||||
|
|
||||||
// label view in timeline
|
// label view in timeline
|
||||||
|
@ -21,8 +21,6 @@ import androidx.core.text.HtmlCompat;
|
|||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.amulyakhare.textdrawable.TextDrawable;
|
import com.amulyakhare.textdrawable.TextDrawable;
|
||||||
import com.vdurmont.emoji.EmojiParser;
|
import com.vdurmont.emoji.EmojiParser;
|
||||||
import java.text.DateFormat;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import org.gitnex.tea4j.v2.models.Issue;
|
import org.gitnex.tea4j.v2.models.Issue;
|
||||||
@ -39,7 +37,6 @@ import org.mian.gitnex.helpers.RoundedTransformation;
|
|||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
import org.mian.gitnex.helpers.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.contexts.IssueContext;
|
import org.mian.gitnex.helpers.contexts.IssueContext;
|
||||||
import org.ocpsoft.prettytime.PrettyTime;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author M M Arif
|
* @author M M Arif
|
||||||
@ -169,7 +166,6 @@ public class IssuesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|||||||
void bindData(Issue issue) {
|
void bindData(Issue issue) {
|
||||||
|
|
||||||
Locale locale = context.getResources().getConfiguration().locale;
|
Locale locale = context.getResources().getConfiguration().locale;
|
||||||
String timeFormat = tinyDb.getString("dateFormat", "pretty");
|
|
||||||
|
|
||||||
int imgRadius = AppUtil.getPixelsFromDensity(context, 3);
|
int imgRadius = AppUtil.getPixelsFromDensity(context, 3);
|
||||||
|
|
||||||
@ -294,46 +290,11 @@ public class IssuesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
|
|||||||
context.getResources().getColor(R.color.releasePre, null));
|
context.getResources().getColor(R.color.releasePre, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (timeFormat) {
|
this.issueCreatedTime.setText(TimeHelper.formatTime(issue.getCreatedAt(), locale));
|
||||||
case "pretty":
|
|
||||||
{
|
|
||||||
PrettyTime prettyTime = new PrettyTime(locale);
|
|
||||||
String createdTime = prettyTime.format(issue.getCreatedAt());
|
|
||||||
this.issueCreatedTime.setText(createdTime);
|
|
||||||
this.issueCreatedTime.setOnClickListener(
|
this.issueCreatedTime.setOnClickListener(
|
||||||
new ClickListener(
|
new ClickListener(
|
||||||
TimeHelper.customDateFormatForToastDateFormat(
|
TimeHelper.customDateFormatForToastDateFormat(issue.getCreatedAt()),
|
||||||
issue.getCreatedAt()),
|
|
||||||
context));
|
context));
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "normal":
|
|
||||||
{
|
|
||||||
DateFormat formatter =
|
|
||||||
new SimpleDateFormat(
|
|
||||||
"yyyy-MM-dd '"
|
|
||||||
+ context.getResources()
|
|
||||||
.getString(R.string.timeAtText)
|
|
||||||
+ "' HH:mm",
|
|
||||||
locale);
|
|
||||||
String createdTime = formatter.format(issue.getCreatedAt());
|
|
||||||
this.issueCreatedTime.setText(createdTime);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "normal1":
|
|
||||||
{
|
|
||||||
DateFormat formatter =
|
|
||||||
new SimpleDateFormat(
|
|
||||||
"dd-MM-yyyy '"
|
|
||||||
+ context.getResources()
|
|
||||||
.getString(R.string.timeAtText)
|
|
||||||
+ "' HH:mm",
|
|
||||||
locale);
|
|
||||||
String createdTime = formatter.format(issue.getCreatedAt());
|
|
||||||
this.issueCreatedTime.setText(createdTime);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,6 @@ import org.mian.gitnex.activities.RepoDetailActivity;
|
|||||||
import org.mian.gitnex.helpers.ClickListener;
|
import org.mian.gitnex.helpers.ClickListener;
|
||||||
import org.mian.gitnex.helpers.Markdown;
|
import org.mian.gitnex.helpers.Markdown;
|
||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
import org.mian.gitnex.helpers.TinyDB;
|
|
||||||
import org.mian.gitnex.helpers.contexts.RepositoryContext;
|
import org.mian.gitnex.helpers.contexts.RepositoryContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -188,9 +187,7 @@ public class MilestonesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
|||||||
void bindData(Milestone dataModel) {
|
void bindData(Milestone dataModel) {
|
||||||
|
|
||||||
this.milestones = dataModel;
|
this.milestones = dataModel;
|
||||||
final TinyDB tinyDb = TinyDB.getInstance(context);
|
|
||||||
final String locale = context.getResources().getConfiguration().locale.getLanguage();
|
final String locale = context.getResources().getConfiguration().locale.getLanguage();
|
||||||
final String timeFormat = tinyDb.getString("dateFormat", "pretty");
|
|
||||||
|
|
||||||
Markdown.render(context, dataModel.getTitle(), msTitle);
|
Markdown.render(context, dataModel.getTitle(), msTitle);
|
||||||
|
|
||||||
@ -249,9 +246,6 @@ public class MilestonesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
|||||||
|
|
||||||
if (dataModel.getDueOn() != null) {
|
if (dataModel.getDueOn() != null) {
|
||||||
|
|
||||||
String TAG = "MilestonesAdapter";
|
|
||||||
if (timeFormat.equals("normal") || timeFormat.equals("pretty")) {
|
|
||||||
|
|
||||||
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", new Locale(locale));
|
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd", new Locale(locale));
|
||||||
Date date = dataModel.getDueOn();
|
Date date = dataModel.getDueOn();
|
||||||
|
|
||||||
@ -267,21 +261,8 @@ public class MilestonesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
|
|||||||
msDueDate.setText(dueDate);
|
msDueDate.setText(dueDate);
|
||||||
msDueDate.setOnClickListener(
|
msDueDate.setOnClickListener(
|
||||||
new ClickListener(
|
new ClickListener(
|
||||||
TimeHelper.customDateFormatForToastDateFormat(
|
TimeHelper.customDateFormatForToastDateFormat(dataModel.getDueOn()),
|
||||||
dataModel.getDueOn()),
|
|
||||||
context));
|
context));
|
||||||
} else if (timeFormat.equals("normal1")) {
|
|
||||||
|
|
||||||
SimpleDateFormat formatter =
|
|
||||||
new SimpleDateFormat("dd-MM-yyyy", new Locale(locale));
|
|
||||||
|
|
||||||
Date date1 = dataModel.getDueOn();
|
|
||||||
|
|
||||||
assert date1 != null;
|
|
||||||
String dueDate = formatter.format(date1);
|
|
||||||
msDueDate.setText(dueDate);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
msDueDate.setText(context.getString(R.string.milestoneNoDueDate));
|
msDueDate.setText(context.getString(R.string.milestoneNoDueDate));
|
||||||
|
152
app/src/main/java/org/mian/gitnex/adapters/NotesAdapter.java
Normal file
152
app/src/main/java/org/mian/gitnex/adapters/NotesAdapter.java
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
package org.mian.gitnex.adapters;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ImageView;
|
||||||
|
import android.widget.TextView;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
|
import com.vdurmont.emoji.EmojiParser;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.Objects;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.activities.CreateNoteActivity;
|
||||||
|
import org.mian.gitnex.database.api.BaseApi;
|
||||||
|
import org.mian.gitnex.database.api.NotesApi;
|
||||||
|
import org.mian.gitnex.database.models.Notes;
|
||||||
|
import org.mian.gitnex.helpers.Markdown;
|
||||||
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author M M Arif
|
||||||
|
*/
|
||||||
|
public class NotesAdapter extends RecyclerView.Adapter<NotesAdapter.NotesViewHolder> {
|
||||||
|
|
||||||
|
private List<Notes> notesList;
|
||||||
|
private final Context ctx;
|
||||||
|
private final Intent noteIntent;
|
||||||
|
|
||||||
|
public NotesAdapter(Context ctx, List<Notes> notesListMain) {
|
||||||
|
this.ctx = ctx;
|
||||||
|
this.notesList = notesListMain;
|
||||||
|
noteIntent = new Intent(ctx, CreateNoteActivity.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
class NotesViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
|
||||||
|
private Notes notes;
|
||||||
|
|
||||||
|
private final TextView content;
|
||||||
|
private final TextView datetime;
|
||||||
|
|
||||||
|
private NotesViewHolder(View itemView) {
|
||||||
|
|
||||||
|
super(itemView);
|
||||||
|
|
||||||
|
content = itemView.findViewById(R.id.content);
|
||||||
|
datetime = itemView.findViewById(R.id.datetime);
|
||||||
|
ImageView deleteNote = itemView.findViewById(R.id.delete_note);
|
||||||
|
|
||||||
|
itemView.setOnClickListener(
|
||||||
|
view -> {
|
||||||
|
noteIntent.putExtra("action", "edit");
|
||||||
|
noteIntent.putExtra("noteId", notes.getNoteId());
|
||||||
|
ctx.startActivity(noteIntent);
|
||||||
|
});
|
||||||
|
|
||||||
|
deleteNote.setOnClickListener(
|
||||||
|
itemDelete -> {
|
||||||
|
MaterialAlertDialogBuilder materialAlertDialogBuilder =
|
||||||
|
new MaterialAlertDialogBuilder(
|
||||||
|
ctx, R.style.ThemeOverlay_Material3_Dialog_Alert);
|
||||||
|
|
||||||
|
materialAlertDialogBuilder
|
||||||
|
.setTitle(ctx.getString(R.string.menuDeleteText))
|
||||||
|
.setMessage(ctx.getString(R.string.noteDeleteDialoMessage))
|
||||||
|
.setPositiveButton(
|
||||||
|
R.string.menuDeleteText,
|
||||||
|
(dialog, whichButton) ->
|
||||||
|
deleteNote(
|
||||||
|
getBindingAdapterPosition(),
|
||||||
|
notes.getNoteId()))
|
||||||
|
.setNeutralButton(R.string.cancelButton, null)
|
||||||
|
.show();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deleteNote(int position, int noteId) {
|
||||||
|
|
||||||
|
NotesApi notesApi = BaseApi.getInstance(ctx, NotesApi.class);
|
||||||
|
assert notesApi != null;
|
||||||
|
notesApi.deleteNote(noteId);
|
||||||
|
notesList.remove(position);
|
||||||
|
notifyItemRemoved(position);
|
||||||
|
notifyItemRangeChanged(position, notesList.size());
|
||||||
|
Toasty.success(ctx, ctx.getResources().getQuantityString(R.plurals.noteDeleteMessage, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull @Override
|
||||||
|
public NotesAdapter.NotesViewHolder onCreateViewHolder(
|
||||||
|
@NonNull ViewGroup parent, int viewType) {
|
||||||
|
View v =
|
||||||
|
LayoutInflater.from(parent.getContext())
|
||||||
|
.inflate(R.layout.list_notes, parent, false);
|
||||||
|
return new NotesViewHolder(v);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBindViewHolder(@NonNull NotesAdapter.NotesViewHolder holder, int position) {
|
||||||
|
|
||||||
|
Locale locale = ctx.getResources().getConfiguration().locale;
|
||||||
|
Notes currentItem = notesList.get(position);
|
||||||
|
holder.notes = currentItem;
|
||||||
|
|
||||||
|
Markdown.render(
|
||||||
|
ctx,
|
||||||
|
EmojiParser.parseToUnicode(
|
||||||
|
Objects.requireNonNull(
|
||||||
|
StringUtils.substring(currentItem.getContent(), 0, 140))),
|
||||||
|
holder.content);
|
||||||
|
|
||||||
|
if (currentItem.getModified() != null) {
|
||||||
|
String modifiedTime =
|
||||||
|
TimeHelper.formatTime(
|
||||||
|
Date.from(Instant.ofEpochSecond(currentItem.getModified())), locale);
|
||||||
|
holder.datetime.setText(
|
||||||
|
ctx.getResources().getString(R.string.noteTimeModified, modifiedTime));
|
||||||
|
} else {
|
||||||
|
String createdTime =
|
||||||
|
TimeHelper.formatTime(
|
||||||
|
Date.from(Instant.ofEpochSecond(currentItem.getDatetime())), locale);
|
||||||
|
holder.datetime.setText(
|
||||||
|
ctx.getResources().getString(R.string.noteDateTime, createdTime));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getItemCount() {
|
||||||
|
return notesList.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("NotifyDataSetChanged")
|
||||||
|
public void notifyDataChanged() {
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateList(List<Notes> list) {
|
||||||
|
|
||||||
|
notesList = list;
|
||||||
|
notifyDataChanged();
|
||||||
|
}
|
||||||
|
}
|
@ -175,12 +175,10 @@ public class PullRequestsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
|||||||
500);
|
500);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("SetTextI18n")
|
|
||||||
void bindData(PullRequest pullRequest) {
|
void bindData(PullRequest pullRequest) {
|
||||||
|
|
||||||
TinyDB tinyDb = TinyDB.getInstance(context);
|
TinyDB tinyDb = TinyDB.getInstance(context);
|
||||||
Locale locale = context.getResources().getConfiguration().locale;
|
Locale locale = context.getResources().getConfiguration().locale;
|
||||||
String timeFormat = tinyDb.getString("dateFormat", "pretty");
|
|
||||||
int imgRadius = AppUtil.getPixelsFromDensity(context, 3);
|
int imgRadius = AppUtil.getPixelsFromDensity(context, 3);
|
||||||
|
|
||||||
PicassoService.getInstance(context)
|
PicassoService.getInstance(context)
|
||||||
@ -289,8 +287,7 @@ public class PullRequestsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
|||||||
prNumber_ + " " + EmojiParser.parseToUnicode(pullRequest.getTitle()),
|
prNumber_ + " " + EmojiParser.parseToUnicode(pullRequest.getTitle()),
|
||||||
HtmlCompat.FROM_HTML_MODE_LEGACY));
|
HtmlCompat.FROM_HTML_MODE_LEGACY));
|
||||||
this.prCommentsCount.setText(String.valueOf(pullRequest.getComments()));
|
this.prCommentsCount.setText(String.valueOf(pullRequest.getComments()));
|
||||||
this.prCreatedTime.setText(
|
this.prCreatedTime.setText(TimeHelper.formatTime(pullRequest.getCreatedAt(), locale));
|
||||||
TimeHelper.formatTime(pullRequest.getCreatedAt(), locale, timeFormat, context));
|
|
||||||
|
|
||||||
if (pullRequest.getComments() > 15) {
|
if (pullRequest.getComments() > 15) {
|
||||||
commentIcon.setImageDrawable(
|
commentIcon.setImageDrawable(
|
||||||
@ -299,7 +296,6 @@ public class PullRequestsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
|||||||
context.getResources().getColor(R.color.releasePre, null));
|
context.getResources().getColor(R.color.releasePre, null));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timeFormat.equals("pretty")) {
|
|
||||||
this.prCreatedTime.setOnClickListener(
|
this.prCreatedTime.setOnClickListener(
|
||||||
new ClickListener(
|
new ClickListener(
|
||||||
TimeHelper.customDateFormatForToastDateFormat(
|
TimeHelper.customDateFormatForToastDateFormat(
|
||||||
@ -307,5 +303,4 @@ public class PullRequestsAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
|
|||||||
context));
|
context));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,6 @@ import org.mian.gitnex.helpers.ClickListener;
|
|||||||
import org.mian.gitnex.helpers.Markdown;
|
import org.mian.gitnex.helpers.Markdown;
|
||||||
import org.mian.gitnex.helpers.RoundedTransformation;
|
import org.mian.gitnex.helpers.RoundedTransformation;
|
||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
import org.mian.gitnex.helpers.TinyDB;
|
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.structs.FragmentRefreshListener;
|
import org.mian.gitnex.structs.FragmentRefreshListener;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
@ -78,9 +77,7 @@ public class ReleasesAdapter extends RecyclerView.Adapter<ReleasesAdapter.Releas
|
|||||||
@Override
|
@Override
|
||||||
public void onBindViewHolder(@NonNull ReleasesAdapter.ReleasesViewHolder holder, int position) {
|
public void onBindViewHolder(@NonNull ReleasesAdapter.ReleasesViewHolder holder, int position) {
|
||||||
|
|
||||||
final TinyDB tinyDb = TinyDB.getInstance(context);
|
|
||||||
final Locale locale = context.getResources().getConfiguration().locale;
|
final Locale locale = context.getResources().getConfiguration().locale;
|
||||||
final String timeFormat = tinyDb.getString("dateFormat", "pretty");
|
|
||||||
int imgRadius = AppUtil.getPixelsFromDensity(context, 3);
|
int imgRadius = AppUtil.getPixelsFromDensity(context, 3);
|
||||||
|
|
||||||
Release currentItem = releasesList.get(position);
|
Release currentItem = releasesList.get(position);
|
||||||
@ -120,18 +117,13 @@ public class ReleasesAdapter extends RecyclerView.Adapter<ReleasesAdapter.Releas
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (currentItem.getPublishedAt() != null) {
|
if (currentItem.getPublishedAt() != null) {
|
||||||
holder.releaseDate.setText(
|
holder.releaseDate.setText(TimeHelper.formatTime(currentItem.getPublishedAt(), locale));
|
||||||
TimeHelper.formatTime(
|
|
||||||
currentItem.getPublishedAt(), locale, timeFormat, context));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (timeFormat.equals("pretty")) {
|
|
||||||
holder.releaseDate.setOnClickListener(
|
holder.releaseDate.setOnClickListener(
|
||||||
new ClickListener(
|
new ClickListener(
|
||||||
TimeHelper.customDateFormatForToastDateFormat(
|
TimeHelper.customDateFormatForToastDateFormat(currentItem.getPublishedAt()),
|
||||||
currentItem.getPublishedAt()),
|
|
||||||
context));
|
context));
|
||||||
}
|
|
||||||
|
|
||||||
if (!currentItem.getBody().equals("")) {
|
if (!currentItem.getBody().equals("")) {
|
||||||
Markdown.render(context, currentItem.getBody(), holder.releaseBodyContent);
|
Markdown.render(context, currentItem.getBody(), holder.releaseBodyContent);
|
||||||
|
@ -14,8 +14,6 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.amulyakhare.textdrawable.TextDrawable;
|
import com.amulyakhare.textdrawable.TextDrawable;
|
||||||
import com.amulyakhare.textdrawable.util.ColorGenerator;
|
import com.amulyakhare.textdrawable.util.ColorGenerator;
|
||||||
import java.text.DateFormat;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import org.mian.gitnex.R;
|
import org.mian.gitnex.R;
|
||||||
@ -27,7 +25,6 @@ import org.mian.gitnex.helpers.RoundedTransformation;
|
|||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
import org.mian.gitnex.helpers.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.contexts.RepositoryContext;
|
import org.mian.gitnex.helpers.contexts.RepositoryContext;
|
||||||
import org.ocpsoft.prettytime.PrettyTime;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author M M Arif
|
* @author M M Arif
|
||||||
@ -126,7 +123,6 @@ public class RepoForksAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
|
|||||||
int imgRadius = AppUtil.getPixelsFromDensity(context, 3);
|
int imgRadius = AppUtil.getPixelsFromDensity(context, 3);
|
||||||
|
|
||||||
Locale locale = context.getResources().getConfiguration().locale;
|
Locale locale = context.getResources().getConfiguration().locale;
|
||||||
String timeFormat = tinyDb.getString("dateFormat", "pretty");
|
|
||||||
this.userRepositories = forksModel;
|
this.userRepositories = forksModel;
|
||||||
orgName.setText(forksModel.getFullName().split("/")[0]);
|
orgName.setText(forksModel.getFullName().split("/")[0]);
|
||||||
repoName.setText(forksModel.getFullName().split("/")[1]);
|
repoName.setText(forksModel.getFullName().split("/")[1]);
|
||||||
@ -165,50 +161,15 @@ public class RepoForksAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (forksModel.getUpdatedAt() != null) {
|
if (forksModel.getUpdatedAt() != null) {
|
||||||
|
|
||||||
switch (timeFormat) {
|
|
||||||
case "pretty":
|
|
||||||
{
|
|
||||||
PrettyTime prettyTime = new PrettyTime(locale);
|
|
||||||
String createdTime = prettyTime.format(forksModel.getUpdatedAt());
|
|
||||||
repoLastUpdated.setText(
|
repoLastUpdated.setText(
|
||||||
context.getString(R.string.lastUpdatedAt, createdTime));
|
context.getString(
|
||||||
|
R.string.lastUpdatedAt,
|
||||||
|
TimeHelper.formatTime(forksModel.getUpdatedAt(), locale)));
|
||||||
repoLastUpdated.setOnClickListener(
|
repoLastUpdated.setOnClickListener(
|
||||||
new ClickListener(
|
new ClickListener(
|
||||||
TimeHelper.customDateFormatForToastDateFormat(
|
TimeHelper.customDateFormatForToastDateFormat(
|
||||||
forksModel.getUpdatedAt()),
|
forksModel.getUpdatedAt()),
|
||||||
context));
|
context));
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "normal":
|
|
||||||
{
|
|
||||||
DateFormat formatter =
|
|
||||||
new SimpleDateFormat(
|
|
||||||
"yyyy-MM-dd '"
|
|
||||||
+ context.getResources()
|
|
||||||
.getString(R.string.timeAtText)
|
|
||||||
+ "' HH:mm",
|
|
||||||
locale);
|
|
||||||
String createdTime = formatter.format(forksModel.getUpdatedAt());
|
|
||||||
repoLastUpdated.setText(
|
|
||||||
context.getString(R.string.lastUpdatedAt, createdTime));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "normal1":
|
|
||||||
{
|
|
||||||
DateFormat formatter =
|
|
||||||
new SimpleDateFormat(
|
|
||||||
"dd-MM-yyyy '"
|
|
||||||
+ context.getResources()
|
|
||||||
.getString(R.string.timeAtText)
|
|
||||||
+ "' HH:mm",
|
|
||||||
locale);
|
|
||||||
String createdTime = formatter.format(forksModel.getUpdatedAt());
|
|
||||||
repoLastUpdated.setText(
|
|
||||||
context.getString(R.string.lastUpdatedAt, createdTime));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
repoLastUpdated.setVisibility(View.GONE);
|
repoLastUpdated.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
@ -16,8 +16,6 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
import com.amulyakhare.textdrawable.TextDrawable;
|
import com.amulyakhare.textdrawable.TextDrawable;
|
||||||
import com.amulyakhare.textdrawable.util.ColorGenerator;
|
import com.amulyakhare.textdrawable.util.ColorGenerator;
|
||||||
import java.text.DateFormat;
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@ -30,7 +28,6 @@ import org.mian.gitnex.helpers.RoundedTransformation;
|
|||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
import org.mian.gitnex.helpers.TinyDB;
|
import org.mian.gitnex.helpers.TinyDB;
|
||||||
import org.mian.gitnex.helpers.contexts.RepositoryContext;
|
import org.mian.gitnex.helpers.contexts.RepositoryContext;
|
||||||
import org.ocpsoft.prettytime.PrettyTime;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author M M Arif
|
* @author M M Arif
|
||||||
@ -200,7 +197,6 @@ public class ReposListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
|
|||||||
int imgRadius = AppUtil.getPixelsFromDensity(context, 60);
|
int imgRadius = AppUtil.getPixelsFromDensity(context, 60);
|
||||||
|
|
||||||
Locale locale = context.getResources().getConfiguration().locale;
|
Locale locale = context.getResources().getConfiguration().locale;
|
||||||
String timeFormat = tinyDb.getString("dateFormat", "pretty");
|
|
||||||
orgName.setText(repositories.getFullName().split("/")[0]);
|
orgName.setText(repositories.getFullName().split("/")[0]);
|
||||||
repoName.setText(repositories.getFullName().split("/")[1]);
|
repoName.setText(repositories.getFullName().split("/")[1]);
|
||||||
repoStars.setText(AppUtil.numberFormatter(repositories.getStarsCount()));
|
repoStars.setText(AppUtil.numberFormatter(repositories.getStarsCount()));
|
||||||
@ -238,50 +234,12 @@ public class ReposListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHold
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (repositories.getUpdatedAt() != null) {
|
if (repositories.getUpdatedAt() != null) {
|
||||||
|
repoLastUpdated.setText(TimeHelper.formatTime(repositories.getUpdatedAt(), locale));
|
||||||
switch (timeFormat) {
|
|
||||||
case "pretty":
|
|
||||||
{
|
|
||||||
PrettyTime prettyTime = new PrettyTime(locale);
|
|
||||||
String createdTime = prettyTime.format(repositories.getUpdatedAt());
|
|
||||||
repoLastUpdated.setText(
|
|
||||||
context.getString(R.string.lastUpdatedAt, createdTime));
|
|
||||||
repoLastUpdated.setOnClickListener(
|
repoLastUpdated.setOnClickListener(
|
||||||
new ClickListener(
|
new ClickListener(
|
||||||
TimeHelper.customDateFormatForToastDateFormat(
|
TimeHelper.customDateFormatForToastDateFormat(
|
||||||
repositories.getUpdatedAt()),
|
repositories.getUpdatedAt()),
|
||||||
context));
|
context));
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "normal":
|
|
||||||
{
|
|
||||||
DateFormat formatter =
|
|
||||||
new SimpleDateFormat(
|
|
||||||
"yyyy-MM-dd '"
|
|
||||||
+ context.getResources()
|
|
||||||
.getString(R.string.timeAtText)
|
|
||||||
+ "' HH:mm",
|
|
||||||
locale);
|
|
||||||
String createdTime = formatter.format(repositories.getUpdatedAt());
|
|
||||||
repoLastUpdated.setText(
|
|
||||||
context.getString(R.string.lastUpdatedAt, createdTime));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "normal1":
|
|
||||||
{
|
|
||||||
DateFormat formatter =
|
|
||||||
new SimpleDateFormat(
|
|
||||||
"dd-MM-yyyy '"
|
|
||||||
+ context.getResources()
|
|
||||||
.getString(R.string.timeAtText)
|
|
||||||
+ "' HH:mm",
|
|
||||||
locale);
|
|
||||||
String createdTime = formatter.format(repositories.getUpdatedAt());
|
|
||||||
repoLastUpdated.setText(
|
|
||||||
context.getString(R.string.lastUpdatedAt, createdTime));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
repoLastUpdated.setVisibility(View.GONE);
|
repoLastUpdated.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
@ -281,9 +281,7 @@ public class WikiListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
|||||||
.getLastCommit()
|
.getLastCommit()
|
||||||
.getAuthor()
|
.getAuthor()
|
||||||
.getDate()),
|
.getDate()),
|
||||||
ctx.getResources().getConfiguration().locale,
|
ctx.getResources().getConfiguration().locale)),
|
||||||
"pretty",
|
|
||||||
ctx)),
|
|
||||||
HtmlCompat.FROM_HTML_MODE_COMPACT));
|
HtmlCompat.FROM_HTML_MODE_COMPACT));
|
||||||
this.wikiLastUpdatedBy.setOnClickListener(
|
this.wikiLastUpdatedBy.setOnClickListener(
|
||||||
new ClickListener(
|
new ClickListener(
|
||||||
@ -297,7 +295,6 @@ public class WikiListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
|||||||
|
|
||||||
ColorGenerator generator = ColorGenerator.Companion.getMATERIAL();
|
ColorGenerator generator = ColorGenerator.Companion.getMATERIAL();
|
||||||
int color = generator.getColor(wikiPageMetaData.getTitle());
|
int color = generator.getColor(wikiPageMetaData.getTitle());
|
||||||
if (wikiPageMetaData.getTitle() != null && wikiPageMetaData.getTitle().length() > 0) {
|
|
||||||
String firstCharacter = String.valueOf(wikiPageMetaData.getTitle().charAt(0));
|
String firstCharacter = String.valueOf(wikiPageMetaData.getTitle().charAt(0));
|
||||||
|
|
||||||
TextDrawable drawable =
|
TextDrawable drawable =
|
||||||
@ -311,9 +308,6 @@ public class WikiListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
|
|||||||
.endConfig()
|
.endConfig()
|
||||||
.buildRoundRect(firstCharacter, color, 14);
|
.buildRoundRect(firstCharacter, color, 14);
|
||||||
avatar.setImageDrawable(drawable);
|
avatar.setImageDrawable(drawable);
|
||||||
} else {
|
|
||||||
avatar.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!((RepoDetailActivity) ctx).repository.getPermissions().isPush()) {
|
if (!((RepoDetailActivity) ctx).repository.getPermissions().isPush()) {
|
||||||
wikiMenu.setVisibility(View.GONE);
|
wikiMenu.setVisibility(View.GONE);
|
||||||
|
@ -52,7 +52,7 @@ public class MainApplication extends Application {
|
|||||||
|
|
||||||
if (tinyDB.getBoolean("crashReportingEnabled", true)) {
|
if (tinyDB.getBoolean("crashReportingEnabled", true)) {
|
||||||
|
|
||||||
CoreConfigurationBuilder ACRABuilder = new CoreConfigurationBuilder(this);
|
CoreConfigurationBuilder ACRABuilder = new CoreConfigurationBuilder();
|
||||||
|
|
||||||
ACRABuilder.withBuildConfigClass(BuildConfig.class)
|
ACRABuilder.withBuildConfigClass(BuildConfig.class)
|
||||||
.withReportContent(
|
.withReportContent(
|
||||||
@ -62,13 +62,17 @@ public class MainApplication extends Application {
|
|||||||
ReportField.AVAILABLE_MEM_SIZE,
|
ReportField.AVAILABLE_MEM_SIZE,
|
||||||
ReportField.BRAND)
|
ReportField.BRAND)
|
||||||
.setReportFormat(StringFormat.KEY_VALUE_LIST);
|
.setReportFormat(StringFormat.KEY_VALUE_LIST);
|
||||||
ACRABuilder.getPluginConfigurationBuilder(NotificationConfigurationBuilder.class)
|
|
||||||
.withResTitle(R.string.crashTitle)
|
ACRABuilder.withPluginConfigurations(
|
||||||
|
new NotificationConfigurationBuilder()
|
||||||
|
.withTitle(getString(R.string.crashTitle))
|
||||||
.withResIcon(R.drawable.gitnex_transparent)
|
.withResIcon(R.drawable.gitnex_transparent)
|
||||||
.withResChannelName(R.string.setCrashReports)
|
.withChannelName(getString(R.string.setCrashReports))
|
||||||
.withResText(R.string.crashMessage)
|
.withText(getString(R.string.crashMessage))
|
||||||
.withEnabled(true);
|
.build());
|
||||||
ACRABuilder.getPluginConfigurationBuilder(MailSenderConfigurationBuilder.class)
|
|
||||||
|
ACRABuilder.withPluginConfigurations(
|
||||||
|
new MailSenderConfigurationBuilder()
|
||||||
.withMailTo(getResources().getString(R.string.appEmail))
|
.withMailTo(getResources().getString(R.string.appEmail))
|
||||||
.withSubject(
|
.withSubject(
|
||||||
getResources()
|
getResources()
|
||||||
@ -76,9 +80,10 @@ public class MainApplication extends Application {
|
|||||||
R.string.crashReportEmailSubject,
|
R.string.crashReportEmailSubject,
|
||||||
AppUtil.getAppBuildNo(context)))
|
AppUtil.getAppBuildNo(context)))
|
||||||
.withReportAsFile(true)
|
.withReportAsFile(true)
|
||||||
.withEnabled(true);
|
.build());
|
||||||
ACRABuilder.getPluginConfigurationBuilder(LimiterConfigurationBuilder.class)
|
|
||||||
.setEnabled(true);
|
ACRABuilder.withPluginConfigurations(
|
||||||
|
new LimiterConfigurationBuilder().withEnabled(true).build());
|
||||||
|
|
||||||
ACRA.init(this, ACRABuilder);
|
ACRA.init(this, ACRABuilder);
|
||||||
}
|
}
|
||||||
|
61
app/src/main/java/org/mian/gitnex/database/api/NotesApi.java
Normal file
61
app/src/main/java/org/mian/gitnex/database/api/NotesApi.java
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
package org.mian.gitnex.database.api;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
import java.util.List;
|
||||||
|
import org.mian.gitnex.database.dao.NotesDao;
|
||||||
|
import org.mian.gitnex.database.models.Notes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author M M Arif
|
||||||
|
*/
|
||||||
|
public class NotesApi extends BaseApi {
|
||||||
|
|
||||||
|
private final NotesDao notesDao;
|
||||||
|
|
||||||
|
NotesApi(Context context) {
|
||||||
|
super(context);
|
||||||
|
notesDao = gitnexDatabase.notesDao();
|
||||||
|
}
|
||||||
|
|
||||||
|
public long insertNote(String content, Integer datetime) {
|
||||||
|
|
||||||
|
Notes notes = new Notes();
|
||||||
|
notes.setContent(content);
|
||||||
|
notes.setDatetime(datetime);
|
||||||
|
|
||||||
|
return insertNoteAsyncTask(notes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long insertNoteAsyncTask(Notes notes) {
|
||||||
|
return notesDao.insertNote(notes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public LiveData<List<Notes>> fetchAllNotes() {
|
||||||
|
return notesDao.fetchAllNotes();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Notes fetchNoteById(int noteId) {
|
||||||
|
return notesDao.fetchNoteById(noteId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer fetchNotesCount() {
|
||||||
|
return notesDao.fetchNotesCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateNote(final String content, final long modified, int noteId) {
|
||||||
|
executorService.execute(() -> notesDao.updateNote(content, modified, noteId));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteAllNotes() {
|
||||||
|
executorService.execute(notesDao::deleteAllNotes);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteNote(final int noteId) {
|
||||||
|
final Notes note = notesDao.fetchNoteById(noteId);
|
||||||
|
|
||||||
|
if (note != null) {
|
||||||
|
executorService.execute(() -> notesDao.deleteNote(noteId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
36
app/src/main/java/org/mian/gitnex/database/dao/NotesDao.java
Normal file
36
app/src/main/java/org/mian/gitnex/database/dao/NotesDao.java
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package org.mian.gitnex.database.dao;
|
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData;
|
||||||
|
import androidx.room.Dao;
|
||||||
|
import androidx.room.Insert;
|
||||||
|
import androidx.room.Query;
|
||||||
|
import java.util.List;
|
||||||
|
import org.mian.gitnex.database.models.Notes;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author M M Arif
|
||||||
|
*/
|
||||||
|
@Dao
|
||||||
|
public interface NotesDao {
|
||||||
|
|
||||||
|
@Insert
|
||||||
|
long insertNote(Notes notes);
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Notes ORDER BY modified DESC, noteId DESC")
|
||||||
|
LiveData<List<Notes>> fetchAllNotes();
|
||||||
|
|
||||||
|
@Query("SELECT * FROM Notes WHERE noteId = :noteId")
|
||||||
|
Notes fetchNoteById(int noteId);
|
||||||
|
|
||||||
|
@Query("SELECT count(noteId) FROM Notes")
|
||||||
|
Integer fetchNotesCount();
|
||||||
|
|
||||||
|
@Query("UPDATE Notes SET content = :content, modified = :modified WHERE noteId = :noteId")
|
||||||
|
void updateNote(String content, long modified, int noteId);
|
||||||
|
|
||||||
|
@Query("DELETE FROM Notes")
|
||||||
|
void deleteAllNotes();
|
||||||
|
|
||||||
|
@Query("DELETE FROM Notes WHERE noteId = :noteId")
|
||||||
|
void deleteNote(int noteId);
|
||||||
|
}
|
@ -8,9 +8,11 @@ import androidx.room.RoomDatabase;
|
|||||||
import androidx.room.migration.Migration;
|
import androidx.room.migration.Migration;
|
||||||
import androidx.sqlite.db.SupportSQLiteDatabase;
|
import androidx.sqlite.db.SupportSQLiteDatabase;
|
||||||
import org.mian.gitnex.database.dao.DraftsDao;
|
import org.mian.gitnex.database.dao.DraftsDao;
|
||||||
|
import org.mian.gitnex.database.dao.NotesDao;
|
||||||
import org.mian.gitnex.database.dao.RepositoriesDao;
|
import org.mian.gitnex.database.dao.RepositoriesDao;
|
||||||
import org.mian.gitnex.database.dao.UserAccountsDao;
|
import org.mian.gitnex.database.dao.UserAccountsDao;
|
||||||
import org.mian.gitnex.database.models.Draft;
|
import org.mian.gitnex.database.models.Draft;
|
||||||
|
import org.mian.gitnex.database.models.Notes;
|
||||||
import org.mian.gitnex.database.models.Repository;
|
import org.mian.gitnex.database.models.Repository;
|
||||||
import org.mian.gitnex.database.models.UserAccount;
|
import org.mian.gitnex.database.models.UserAccount;
|
||||||
|
|
||||||
@ -18,8 +20,8 @@ import org.mian.gitnex.database.models.UserAccount;
|
|||||||
* @author M M Arif
|
* @author M M Arif
|
||||||
*/
|
*/
|
||||||
@Database(
|
@Database(
|
||||||
entities = {Draft.class, Repository.class, UserAccount.class},
|
entities = {Draft.class, Repository.class, UserAccount.class, Notes.class},
|
||||||
version = 6,
|
version = 7,
|
||||||
exportSchema = false)
|
exportSchema = false)
|
||||||
public abstract class GitnexDatabase extends RoomDatabase {
|
public abstract class GitnexDatabase extends RoomDatabase {
|
||||||
|
|
||||||
@ -68,6 +70,15 @@ public abstract class GitnexDatabase extends RoomDatabase {
|
|||||||
"ALTER TABLE 'Repositories' ADD COLUMN 'mostVisited' INTEGER NOT NULL DEFAULT 0");
|
"ALTER TABLE 'Repositories' ADD COLUMN 'mostVisited' INTEGER NOT NULL DEFAULT 0");
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
private static final Migration MIGRATION_6_7 =
|
||||||
|
new Migration(6, 7) {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void migrate(@NonNull SupportSQLiteDatabase database) {
|
||||||
|
database.execSQL(
|
||||||
|
"CREATE TABLE IF NOT EXISTS 'Notes' ('noteId' INTEGER NOT NULL, 'content' TEXT, 'datetime' INTEGER, 'modified' INTEGER, PRIMARY KEY('noteid'))");
|
||||||
|
}
|
||||||
|
};
|
||||||
private static volatile GitnexDatabase gitnexDatabase;
|
private static volatile GitnexDatabase gitnexDatabase;
|
||||||
|
|
||||||
public static GitnexDatabase getDatabaseInstance(Context context) {
|
public static GitnexDatabase getDatabaseInstance(Context context) {
|
||||||
@ -85,7 +96,8 @@ public abstract class GitnexDatabase extends RoomDatabase {
|
|||||||
MIGRATION_2_3,
|
MIGRATION_2_3,
|
||||||
MIGRATION_3_4,
|
MIGRATION_3_4,
|
||||||
MIGRATION_4_5,
|
MIGRATION_4_5,
|
||||||
MIGRATION_5_6)
|
MIGRATION_5_6,
|
||||||
|
MIGRATION_6_7)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -99,4 +111,6 @@ public abstract class GitnexDatabase extends RoomDatabase {
|
|||||||
public abstract RepositoriesDao repositoriesDao();
|
public abstract RepositoriesDao repositoriesDao();
|
||||||
|
|
||||||
public abstract UserAccountsDao userAccountsDao();
|
public abstract UserAccountsDao userAccountsDao();
|
||||||
|
|
||||||
|
public abstract NotesDao notesDao();
|
||||||
}
|
}
|
||||||
|
52
app/src/main/java/org/mian/gitnex/database/models/Notes.java
Normal file
52
app/src/main/java/org/mian/gitnex/database/models/Notes.java
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
package org.mian.gitnex.database.models;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.room.Entity;
|
||||||
|
import androidx.room.PrimaryKey;
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author M M Arif
|
||||||
|
*/
|
||||||
|
@Entity(tableName = "Notes")
|
||||||
|
public class Notes implements Serializable {
|
||||||
|
|
||||||
|
@PrimaryKey(autoGenerate = true)
|
||||||
|
private int noteId;
|
||||||
|
|
||||||
|
@Nullable private String content;
|
||||||
|
private Integer datetime;
|
||||||
|
private Integer modified;
|
||||||
|
|
||||||
|
public int getNoteId() {
|
||||||
|
return noteId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNoteId(int noteId) {
|
||||||
|
this.noteId = noteId;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable public String getContent() {
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setContent(@Nullable String content) {
|
||||||
|
this.content = content;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getDatetime() {
|
||||||
|
return datetime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDatetime(Integer datetime) {
|
||||||
|
this.datetime = datetime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getModified() {
|
||||||
|
return modified;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setModified(Integer modified) {
|
||||||
|
this.modified = modified;
|
||||||
|
}
|
||||||
|
}
|
@ -229,9 +229,7 @@ public class CommitDetailFragment extends Fragment {
|
|||||||
.getDate()),
|
.getDate()),
|
||||||
getResources()
|
getResources()
|
||||||
.getConfiguration()
|
.getConfiguration()
|
||||||
.locale,
|
.locale)),
|
||||||
"pretty",
|
|
||||||
requireContext())),
|
|
||||||
HtmlCompat.FROM_HTML_MODE_COMPACT));
|
HtmlCompat.FROM_HTML_MODE_COMPACT));
|
||||||
} else {
|
} else {
|
||||||
binding.commitAuthorAndCommitter.setText(
|
binding.commitAuthorAndCommitter.setText(
|
||||||
@ -250,9 +248,7 @@ public class CommitDetailFragment extends Fragment {
|
|||||||
.getDate()),
|
.getDate()),
|
||||||
getResources()
|
getResources()
|
||||||
.getConfiguration()
|
.getConfiguration()
|
||||||
.locale,
|
.locale)),
|
||||||
"pretty",
|
|
||||||
requireContext())),
|
|
||||||
HtmlCompat.FROM_HTML_MODE_COMPACT));
|
HtmlCompat.FROM_HTML_MODE_COMPACT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
206
app/src/main/java/org/mian/gitnex/fragments/NotesFragment.java
Normal file
206
app/src/main/java/org/mian/gitnex/fragments/NotesFragment.java
Normal file
@ -0,0 +1,206 @@
|
|||||||
|
package org.mian.gitnex.fragments;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.os.Looper;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.view.inputmethod.EditorInfo;
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.appcompat.widget.SearchView;
|
||||||
|
import androidx.fragment.app.Fragment;
|
||||||
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import org.mian.gitnex.R;
|
||||||
|
import org.mian.gitnex.activities.CreateNoteActivity;
|
||||||
|
import org.mian.gitnex.activities.MainActivity;
|
||||||
|
import org.mian.gitnex.adapters.NotesAdapter;
|
||||||
|
import org.mian.gitnex.database.api.BaseApi;
|
||||||
|
import org.mian.gitnex.database.api.NotesApi;
|
||||||
|
import org.mian.gitnex.database.models.Notes;
|
||||||
|
import org.mian.gitnex.databinding.FragmentNotesBinding;
|
||||||
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author M M Arif
|
||||||
|
*/
|
||||||
|
public class NotesFragment extends Fragment {
|
||||||
|
|
||||||
|
private FragmentNotesBinding binding;
|
||||||
|
private Context ctx;
|
||||||
|
private NotesAdapter adapter;
|
||||||
|
private NotesApi notesApi;
|
||||||
|
private List<Notes> notesList;
|
||||||
|
private Intent noteIntent;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View onCreateView(
|
||||||
|
@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
|
||||||
|
binding = FragmentNotesBinding.inflate(inflater, container, false);
|
||||||
|
|
||||||
|
ctx = getContext();
|
||||||
|
setHasOptionsMenu(true);
|
||||||
|
|
||||||
|
((MainActivity) requireActivity())
|
||||||
|
.setActionBarTitle(getResources().getString(R.string.navNotes));
|
||||||
|
|
||||||
|
noteIntent = new Intent(ctx, CreateNoteActivity.class);
|
||||||
|
|
||||||
|
binding.newNote.setOnClickListener(
|
||||||
|
view -> {
|
||||||
|
noteIntent.putExtra("action", "add");
|
||||||
|
ctx.startActivity(noteIntent);
|
||||||
|
});
|
||||||
|
|
||||||
|
notesList = new ArrayList<>();
|
||||||
|
notesApi = BaseApi.getInstance(ctx, NotesApi.class);
|
||||||
|
|
||||||
|
binding.recyclerView.setHasFixedSize(true);
|
||||||
|
binding.recyclerView.setLayoutManager(new LinearLayoutManager(ctx));
|
||||||
|
|
||||||
|
binding.recyclerView.setPadding(0, 0, 0, 220);
|
||||||
|
binding.recyclerView.setClipToPadding(false);
|
||||||
|
|
||||||
|
adapter = new NotesAdapter(ctx, notesList);
|
||||||
|
|
||||||
|
binding.pullToRefresh.setOnRefreshListener(
|
||||||
|
() ->
|
||||||
|
new Handler(Looper.getMainLooper())
|
||||||
|
.postDelayed(
|
||||||
|
() -> {
|
||||||
|
notesList.clear();
|
||||||
|
binding.pullToRefresh.setRefreshing(false);
|
||||||
|
binding.progressBar.setVisibility(View.VISIBLE);
|
||||||
|
fetchDataAsync();
|
||||||
|
},
|
||||||
|
250));
|
||||||
|
|
||||||
|
fetchDataAsync();
|
||||||
|
|
||||||
|
return binding.getRoot();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
fetchDataAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fetchDataAsync() {
|
||||||
|
|
||||||
|
notesApi.fetchAllNotes()
|
||||||
|
.observe(
|
||||||
|
getViewLifecycleOwner(),
|
||||||
|
allNotes -> {
|
||||||
|
binding.pullToRefresh.setRefreshing(false);
|
||||||
|
assert allNotes != null;
|
||||||
|
if (allNotes.size() > 0) {
|
||||||
|
|
||||||
|
notesList.clear();
|
||||||
|
binding.noData.setVisibility(View.GONE);
|
||||||
|
notesList.addAll(allNotes);
|
||||||
|
adapter.notifyDataChanged();
|
||||||
|
binding.recyclerView.setAdapter(adapter);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
binding.noData.setVisibility(View.VISIBLE);
|
||||||
|
}
|
||||||
|
binding.progressBar.setVisibility(View.GONE);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void filter(String text) {
|
||||||
|
|
||||||
|
List<Notes> arr = new ArrayList<>();
|
||||||
|
|
||||||
|
for (Notes d : notesList) {
|
||||||
|
|
||||||
|
if (d == null || d.getContent() == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (d.getContent().toLowerCase().contains(text)) {
|
||||||
|
arr.add(d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
adapter.updateList(arr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteAllNotes() {
|
||||||
|
|
||||||
|
if (notesList.size() > 0) {
|
||||||
|
|
||||||
|
notesApi.deleteAllNotes();
|
||||||
|
notesList.clear();
|
||||||
|
adapter.notifyDataChanged();
|
||||||
|
Toasty.success(
|
||||||
|
ctx, ctx.getResources().getQuantityString(R.plurals.noteDeleteMessage, 2));
|
||||||
|
} else {
|
||||||
|
Toasty.warning(ctx, getResources().getString(R.string.noDataFound));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
|
||||||
|
|
||||||
|
inflater.inflate(R.menu.reset_menu, menu);
|
||||||
|
inflater.inflate(R.menu.search_menu, menu);
|
||||||
|
super.onCreateOptionsMenu(menu, inflater);
|
||||||
|
|
||||||
|
MenuItem searchItem = menu.findItem(R.id.action_search);
|
||||||
|
SearchView searchView = (SearchView) searchItem.getActionView();
|
||||||
|
searchView.setImeOptions(EditorInfo.IME_ACTION_DONE);
|
||||||
|
|
||||||
|
searchView.setOnQueryTextListener(
|
||||||
|
new SearchView.OnQueryTextListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onQueryTextSubmit(String query) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onQueryTextChange(String newText) {
|
||||||
|
|
||||||
|
filter(newText);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
|
||||||
|
if (item.getItemId() == R.id.reset_menu_item) {
|
||||||
|
|
||||||
|
if (notesList.size() == 0) {
|
||||||
|
Toasty.warning(ctx, getResources().getString(R.string.noDataFound));
|
||||||
|
} else {
|
||||||
|
new MaterialAlertDialogBuilder(ctx)
|
||||||
|
.setTitle(R.string.menuDeleteText)
|
||||||
|
.setMessage(R.string.notesAllDeletionMessage)
|
||||||
|
.setPositiveButton(
|
||||||
|
R.string.menuDeleteText,
|
||||||
|
(dialog, which) -> {
|
||||||
|
deleteAllNotes();
|
||||||
|
dialog.dismiss();
|
||||||
|
})
|
||||||
|
.setNeutralButton(R.string.cancelButton, null)
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
}
|
@ -32,7 +32,6 @@ import org.mian.gitnex.helpers.AppUtil;
|
|||||||
import org.mian.gitnex.helpers.ClickListener;
|
import org.mian.gitnex.helpers.ClickListener;
|
||||||
import org.mian.gitnex.helpers.Markdown;
|
import org.mian.gitnex.helpers.Markdown;
|
||||||
import org.mian.gitnex.helpers.TimeHelper;
|
import org.mian.gitnex.helpers.TimeHelper;
|
||||||
import org.mian.gitnex.helpers.TinyDB;
|
|
||||||
import org.mian.gitnex.helpers.Toasty;
|
import org.mian.gitnex.helpers.Toasty;
|
||||||
import org.mian.gitnex.helpers.contexts.RepositoryContext;
|
import org.mian.gitnex.helpers.contexts.RepositoryContext;
|
||||||
import retrofit2.Call;
|
import retrofit2.Call;
|
||||||
@ -70,7 +69,6 @@ public class RepoInfoFragment extends Fragment {
|
|||||||
@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
|
||||||
binding = FragmentRepoInfoBinding.inflate(inflater, container, false);
|
binding = FragmentRepoInfoBinding.inflate(inflater, container, false);
|
||||||
TinyDB tinyDb = TinyDB.getInstance(getContext());
|
|
||||||
ctx = getContext();
|
ctx = getContext();
|
||||||
Locale locale = getResources().getConfiguration().locale;
|
Locale locale = getResources().getConfiguration().locale;
|
||||||
|
|
||||||
@ -79,7 +77,7 @@ public class RepoInfoFragment extends Fragment {
|
|||||||
|
|
||||||
binding.repoMetaFrame.setVisibility(View.GONE);
|
binding.repoMetaFrame.setVisibility(View.GONE);
|
||||||
|
|
||||||
setRepoInfo(locale, tinyDb.getString("dateFormat", "pretty"));
|
setRepoInfo(locale);
|
||||||
|
|
||||||
if (isExpandViewVisible()) {
|
if (isExpandViewVisible()) {
|
||||||
toggleExpandView();
|
toggleExpandView();
|
||||||
@ -147,7 +145,7 @@ public class RepoInfoFragment extends Fragment {
|
|||||||
return binding.repoMetaFrame.getVisibility() == View.VISIBLE;
|
return binding.repoMetaFrame.getVisibility() == View.VISIBLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setRepoInfo(Locale locale, final String timeFormat) {
|
private void setRepoInfo(Locale locale) {
|
||||||
Repository repoInfo = repository.getRepository();
|
Repository repoInfo = repository.getRepository();
|
||||||
|
|
||||||
if (isAdded()) {
|
if (isAdded()) {
|
||||||
@ -208,17 +206,13 @@ public class RepoInfoFragment extends Fragment {
|
|||||||
FileUtils.byteCountToDisplaySize(repoInfo.getSize() * 1024));
|
FileUtils.byteCountToDisplaySize(repoInfo.getSize() * 1024));
|
||||||
|
|
||||||
binding.repoMetaCreatedAt.setText(
|
binding.repoMetaCreatedAt.setText(
|
||||||
TimeHelper.formatTime(repoInfo.getCreatedAt(), locale, timeFormat, ctx));
|
TimeHelper.formatTime(repoInfo.getCreatedAt(), locale));
|
||||||
if (timeFormat.equals("pretty")) {
|
|
||||||
binding.repoMetaCreatedAt.setOnClickListener(
|
binding.repoMetaCreatedAt.setOnClickListener(
|
||||||
new ClickListener(
|
new ClickListener(
|
||||||
TimeHelper.customDateFormatForToastDateFormat(
|
TimeHelper.customDateFormatForToastDateFormat(repoInfo.getCreatedAt()),
|
||||||
repoInfo.getCreatedAt()),
|
|
||||||
ctx));
|
ctx));
|
||||||
}
|
|
||||||
|
|
||||||
String repoMetaUpdatedAt =
|
String repoMetaUpdatedAt = TimeHelper.formatTime(repoInfo.getUpdatedAt(), locale);
|
||||||
TimeHelper.formatTime(repoInfo.getUpdatedAt(), locale, timeFormat, ctx);
|
|
||||||
|
|
||||||
String website =
|
String website =
|
||||||
(repoInfo.getWebsite().isEmpty())
|
(repoInfo.getWebsite().isEmpty())
|
||||||
|
@ -74,7 +74,7 @@ public class DetailFragment extends Fragment {
|
|||||||
Call<User> call = RetrofitClient.getApiInterface(context).userGet(username);
|
Call<User> call = RetrofitClient.getApiInterface(context).userGet(username);
|
||||||
|
|
||||||
call.enqueue(
|
call.enqueue(
|
||||||
new Callback<User>() {
|
new Callback<>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResponse(
|
public void onResponse(
|
||||||
@ -94,7 +94,6 @@ public class DetailFragment extends Fragment {
|
|||||||
: "";
|
: "";
|
||||||
|
|
||||||
int imgRadius = AppUtil.getPixelsFromDensity(context, 3);
|
int imgRadius = AppUtil.getPixelsFromDensity(context, 3);
|
||||||
String timeFormat = tinyDb.getString("dateFormat", "pretty");
|
|
||||||
|
|
||||||
binding.userFullName.setText(username);
|
binding.userFullName.setText(username);
|
||||||
binding.userLogin.setText(
|
binding.userLogin.setText(
|
||||||
@ -151,19 +150,12 @@ public class DetailFragment extends Fragment {
|
|||||||
|
|
||||||
binding.userJoinedOn.setText(
|
binding.userJoinedOn.setText(
|
||||||
TimeHelper.formatTime(
|
TimeHelper.formatTime(
|
||||||
response.body().getCreated(),
|
response.body().getCreated(), locale));
|
||||||
locale,
|
|
||||||
timeFormat,
|
|
||||||
context));
|
|
||||||
if (timeFormat.equals("pretty")) {
|
|
||||||
binding.userJoinedOn.setOnClickListener(
|
binding.userJoinedOn.setOnClickListener(
|
||||||
new ClickListener(
|
new ClickListener(
|
||||||
TimeHelper
|
TimeHelper.customDateFormatForToastDateFormat(
|
||||||
.customDateFormatForToastDateFormat(
|
response.body().getCreated()),
|
||||||
response.body()
|
|
||||||
.getCreated()),
|
|
||||||
context));
|
context));
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 401:
|
case 401:
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package org.mian.gitnex.helpers;
|
package org.mian.gitnex.helpers;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import java.text.DateFormat;
|
import java.text.DateFormat;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
@ -9,7 +8,6 @@ import java.time.format.DateTimeFormatter;
|
|||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import org.mian.gitnex.R;
|
|
||||||
import org.ocpsoft.prettytime.PrettyTime;
|
import org.ocpsoft.prettytime.PrettyTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -35,39 +33,12 @@ public class TimeHelper {
|
|||||||
return customDateFormatForToastDateFormat(createdTime);
|
return customDateFormatForToastDateFormat(createdTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String formatTime(Date date, Locale locale, String timeFormat, Context context) {
|
public static String formatTime(Date date, Locale locale) {
|
||||||
|
|
||||||
if (date != null) {
|
if (date != null) {
|
||||||
switch (timeFormat) {
|
|
||||||
case "pretty":
|
|
||||||
{
|
|
||||||
PrettyTime prettyTime = new PrettyTime(locale);
|
PrettyTime prettyTime = new PrettyTime(locale);
|
||||||
return prettyTime.format(date);
|
return prettyTime.format(date);
|
||||||
}
|
}
|
||||||
case "normal":
|
|
||||||
{
|
|
||||||
DateFormat formatter =
|
|
||||||
new SimpleDateFormat(
|
|
||||||
"yyyy-MM-dd '"
|
|
||||||
+ context.getResources()
|
|
||||||
.getString(R.string.timeAtText)
|
|
||||||
+ "' HH:mm",
|
|
||||||
locale);
|
|
||||||
return formatter.format(date);
|
|
||||||
}
|
|
||||||
case "normal1":
|
|
||||||
{
|
|
||||||
DateFormat formatter =
|
|
||||||
new SimpleDateFormat(
|
|
||||||
"dd-MM-yyyy '"
|
|
||||||
+ context.getResources()
|
|
||||||
.getString(R.string.timeAtText)
|
|
||||||
+ "' HH:mm",
|
|
||||||
locale);
|
|
||||||
return formatter.format(date);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
34
app/src/main/res/drawable/ic_notes.xml
Normal file
34
app/src/main/res/drawable/ic_notes.xml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:pathData="M7,3L17,3A2,2 0,0 1,19 5L19,19A2,2 0,0 1,17 21L7,21A2,2 0,0 1,5 19L5,5A2,2 0,0 1,7 3z"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:strokeColor="?attr/iconsColor"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M9,7L15,7"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:strokeColor="?attr/iconsColor"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M9,11L15,11"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:strokeColor="?attr/iconsColor"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
<path
|
||||||
|
android:pathData="M9,15L13,15"
|
||||||
|
android:strokeLineJoin="round"
|
||||||
|
android:strokeWidth="2"
|
||||||
|
android:fillColor="#00000000"
|
||||||
|
android:strokeColor="?attr/iconsColor"
|
||||||
|
android:strokeLineCap="round"/>
|
||||||
|
</vector>
|
87
app/src/main/res/layout/activity_create_note.xml
Normal file
87
app/src/main/res/layout/activity_create_note.xml
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?attr/primaryBackgroundColor"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.AppBarLayout
|
||||||
|
android:id="@+id/appbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:theme="@style/Widget.AppCompat.SearchView"
|
||||||
|
app:elevation="@dimen/dimen0dp">
|
||||||
|
|
||||||
|
<com.google.android.material.appbar.MaterialToolbar
|
||||||
|
android:id="@+id/toolbar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?attr/primaryBackgroundColor">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/close"
|
||||||
|
android:layout_width="@dimen/dimen26dp"
|
||||||
|
android:layout_height="@dimen/dimen26dp"
|
||||||
|
android:layout_marginStart="@dimen/dimen16dp"
|
||||||
|
android:layout_marginEnd="@dimen/dimen16dp"
|
||||||
|
android:background="?android:attr/selectableItemBackgroundBorderless"
|
||||||
|
android:clickable="true"
|
||||||
|
android:contentDescription="@string/close"
|
||||||
|
android:focusable="true"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:src="@drawable/ic_close" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/toolbar_title"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:text="@string/newNote"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textSize="@dimen/dimen20sp" />
|
||||||
|
|
||||||
|
</com.google.android.material.appbar.MaterialToolbar>
|
||||||
|
|
||||||
|
</com.google.android.material.appbar.AppBarLayout>
|
||||||
|
|
||||||
|
<ScrollView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?attr/primaryBackgroundColor">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:padding="@dimen/dimen16dp">
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/note_content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="top|start"
|
||||||
|
android:inputType="textCapSentences|textMultiLine"
|
||||||
|
android:scrollbars="vertical"
|
||||||
|
android:background="?attr/primaryBackgroundColor"
|
||||||
|
android:textColor="?attr/inputTextColor"
|
||||||
|
android:hint="@string/newNoteContentHint"
|
||||||
|
android:textColorHighlight="?attr/hintColor"
|
||||||
|
android:textColorHint="?attr/hintColor"
|
||||||
|
android:textSize="@dimen/dimen16sp"
|
||||||
|
android:autofillHints="@string/newNoteContentHint" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/markdown_preview"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textIsSelectable="true"
|
||||||
|
android:textSize="@dimen/dimen16sp" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</ScrollView>
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -180,39 +180,6 @@
|
|||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/timeFrame"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="@dimen/dimen6dp"
|
|
||||||
android:background="?android:attr/selectableItemBackground"
|
|
||||||
android:clickable="true"
|
|
||||||
android:focusable="true"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:padding="@dimen/dimen16dp">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/tvDateTimeHeaderSelector"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="@dimen/dimen24dp"
|
|
||||||
android:layout_marginEnd="@dimen/dimen24dp"
|
|
||||||
android:text="@string/settingsDateTimeHeaderText"
|
|
||||||
android:textColor="?attr/primaryTextColor"
|
|
||||||
android:textSize="@dimen/dimen18sp"/>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/tvDateTimeSelected"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="@dimen/dimen24dp"
|
|
||||||
android:layout_marginEnd="@dimen/dimen24dp"
|
|
||||||
android:text="@string/settingsDateTimeHeaderDefault"
|
|
||||||
android:textColor="?attr/selectedTextColor"
|
|
||||||
android:textSize="@dimen/dimen16sp"/>
|
|
||||||
|
|
||||||
</LinearLayout>
|
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/counterBadgeFrame"
|
android:id="@+id/counterBadgeFrame"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -21,19 +21,20 @@
|
|||||||
android:background="?android:attr/selectableItemBackground"
|
android:background="?android:attr/selectableItemBackground"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:padding="16dp">
|
android:layout_marginBottom="@dimen/dimen6dp"
|
||||||
|
android:padding="@dimen/dimen16dp">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:contentDescription="@string/generalImgContentText"
|
android:contentDescription="@string/generalImgContentText"
|
||||||
app:srcCompat="@drawable/ic_people"/>
|
app:srcCompat="@drawable/ic_people" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="@dimen/dimen10dp"
|
||||||
android:layout_marginEnd="10dp"
|
android:layout_marginEnd="@dimen/dimen10dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
@ -41,11 +42,11 @@
|
|||||||
android:id="@+id/adminUsers"
|
android:id="@+id/adminUsers"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingStart="12dp"
|
android:paddingStart="@dimen/dimen12dp"
|
||||||
android:paddingEnd="12dp"
|
android:paddingEnd="@dimen/dimen12dp"
|
||||||
android:text="@string/adminUsers"
|
android:text="@string/adminUsers"
|
||||||
android:textColor="?attr/primaryTextColor"
|
android:textColor="?attr/primaryTextColor"
|
||||||
android:textSize="16sp"/>
|
android:textSize="@dimen/dimen16sp" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@ -53,16 +54,10 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:contentDescription="@string/generalImgContentText"
|
android:contentDescription="@string/generalImgContentText"
|
||||||
app:srcCompat="@drawable/ic_chevron_right"/>
|
app:srcCompat="@drawable/ic_chevron_right" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<View
|
|
||||||
android:id="@+id/divider"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="1dp"
|
|
||||||
android:background="?attr/dividerColor"/>
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/adminCronFrame"
|
android:id="@+id/adminCronFrame"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -70,19 +65,20 @@
|
|||||||
android:background="?android:attr/selectableItemBackground"
|
android:background="?android:attr/selectableItemBackground"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:padding="16dp">
|
android:layout_marginBottom="@dimen/dimen6dp"
|
||||||
|
android:padding="@dimen/dimen16dp">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:contentDescription="@string/generalImgContentText"
|
android:contentDescription="@string/generalImgContentText"
|
||||||
app:srcCompat="@drawable/ic_tasks"/>
|
app:srcCompat="@drawable/ic_tasks" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="@dimen/dimen10dp"
|
||||||
android:layout_marginEnd="10dp"
|
android:layout_marginEnd="@dimen/dimen10dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
@ -90,11 +86,11 @@
|
|||||||
android:id="@+id/adminCron"
|
android:id="@+id/adminCron"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingStart="12dp"
|
android:paddingStart="@dimen/dimen12dp"
|
||||||
android:paddingEnd="12dp"
|
android:paddingEnd="@dimen/dimen12dp"
|
||||||
android:text="@string/adminCron"
|
android:text="@string/adminCron"
|
||||||
android:textColor="?attr/primaryTextColor"
|
android:textColor="?attr/primaryTextColor"
|
||||||
android:textSize="16sp"/>
|
android:textSize="@dimen/dimen16sp" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@ -102,15 +98,10 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:contentDescription="@string/generalImgContentText"
|
android:contentDescription="@string/generalImgContentText"
|
||||||
app:srcCompat="@drawable/ic_chevron_right"/>
|
app:srcCompat="@drawable/ic_chevron_right" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<View
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="1dp"
|
|
||||||
android:background="?attr/dividerColor"/>
|
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/unadoptedReposFrame"
|
android:id="@+id/unadoptedReposFrame"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
@ -118,19 +109,20 @@
|
|||||||
android:background="?android:attr/selectableItemBackground"
|
android:background="?android:attr/selectableItemBackground"
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:padding="16dp">
|
android:layout_marginBottom="@dimen/dimen6dp"
|
||||||
|
android:padding="@dimen/dimen16dp">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:contentDescription="@string/generalImgContentText"
|
android:contentDescription="@string/generalImgContentText"
|
||||||
app:srcCompat="@drawable/ic_directory"/>
|
app:srcCompat="@drawable/ic_directory" />
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="@dimen/dimen10dp"
|
||||||
android:layout_marginEnd="10dp"
|
android:layout_marginEnd="@dimen/dimen10dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
@ -138,11 +130,11 @@
|
|||||||
android:id="@+id/unadoptedRepos"
|
android:id="@+id/unadoptedRepos"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingStart="12dp"
|
android:paddingStart="@dimen/dimen12dp"
|
||||||
android:paddingEnd="12dp"
|
android:paddingEnd="@dimen/dimen12dp"
|
||||||
android:text="@string/unadoptedRepos"
|
android:text="@string/unadoptedRepos"
|
||||||
android:textColor="?attr/primaryTextColor"
|
android:textColor="?attr/primaryTextColor"
|
||||||
android:textSize="16sp"/>
|
android:textSize="@dimen/dimen16sp" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
@ -150,7 +142,7 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:contentDescription="@string/generalImgContentText"
|
android:contentDescription="@string/generalImgContentText"
|
||||||
app:srcCompat="@drawable/ic_chevron_right"/>
|
app:srcCompat="@drawable/ic_chevron_right" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
62
app/src/main/res/layout/fragment_notes.xml
Normal file
62
app/src/main/res/layout/fragment_notes.xml
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
tools:context=".activities.MainActivity">
|
||||||
|
|
||||||
|
<FrameLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:background="?attr/primaryBackgroundColor"
|
||||||
|
android:padding="@dimen/dimen8dp">
|
||||||
|
|
||||||
|
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||||
|
android:id="@+id/pullToRefresh"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content">
|
||||||
|
|
||||||
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
|
android:id="@+id/recyclerView"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"/>
|
||||||
|
|
||||||
|
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||||
|
|
||||||
|
</FrameLayout>
|
||||||
|
|
||||||
|
<com.google.android.material.progressindicator.LinearProgressIndicator
|
||||||
|
android:id="@+id/progressBar"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:indeterminate="true"
|
||||||
|
style="@style/Widget.Material3.LinearProgressIndicator"
|
||||||
|
app:indicatorColor="?attr/progressIndicatorColor" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/noData"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_margin="@dimen/dimen16dp"
|
||||||
|
android:gravity="center"
|
||||||
|
android:text="@string/noDataFound"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textSize="18sp"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
|
||||||
|
android:id="@+id/newNote"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="end|bottom"
|
||||||
|
android:layout_margin="@dimen/dimen16dp"
|
||||||
|
android:text="@string/newNote"
|
||||||
|
android:contentDescription="@string/newNote"
|
||||||
|
android:textColor="@color/colorWhite"
|
||||||
|
android:backgroundTint="?attr/fabColor"
|
||||||
|
app:iconTint="@color/colorWhite"
|
||||||
|
app:icon="@drawable/ic_add" />
|
||||||
|
|
||||||
|
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
@ -97,7 +97,7 @@
|
|||||||
android:gravity="center_vertical|end"
|
android:gravity="center_vertical|end"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
android:paddingStart="@dimen/dimen6dp"
|
android:paddingStart="@dimen/dimen6dp"
|
||||||
android:paddingEnd="@dimen/dimen6dp">
|
android:paddingEnd="@dimen/dimen0dp">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/reset_counter"
|
android:id="@+id/reset_counter"
|
||||||
|
82
app/src/main/res/layout/list_notes.xml
Normal file
82
app/src/main/res/layout/list_notes.xml
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingTop="@dimen/dimen4dp"
|
||||||
|
android:paddingBottom="@dimen/dimen4dp">
|
||||||
|
|
||||||
|
<com.google.android.material.card.MaterialCardView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
style="?attr/materialCardViewFilledStyle"
|
||||||
|
app:cardElevation="@dimen/dimen0dp">
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:foreground="?android:attr/selectableItemBackground"
|
||||||
|
android:background="?attr/materialCardBackgroundColor"
|
||||||
|
android:padding="@dimen/dimen12dp"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/content"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/repoName"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textSize="@dimen/dimen14sp" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:id="@+id/spacer_view"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_marginBottom="@dimen/dimen8dp" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/note_info_frame"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/datetime"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:textColor="?attr/primaryTextColor"
|
||||||
|
android:textSize="@dimen/dimen12sp"
|
||||||
|
tools:text="@string/noteDateTime" />
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:id="@+id/note_info_end_frame"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/dimen10dp"
|
||||||
|
android:gravity="center_vertical|end"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingStart="@dimen/dimen6dp"
|
||||||
|
android:paddingEnd="@dimen/dimen0dp">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/delete_note"
|
||||||
|
android:layout_width="@dimen/dimen18dp"
|
||||||
|
android:layout_height="@dimen/dimen18dp"
|
||||||
|
android:layout_marginStart="@dimen/dimen16dp"
|
||||||
|
android:layout_marginEnd="@dimen/dimen2dp"
|
||||||
|
android:contentDescription="@string/generalImgContentText"
|
||||||
|
app:srcCompat="@drawable/ic_delete"
|
||||||
|
app:tint="?attr/iconsColor" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
</com.google.android.material.card.MaterialCardView>
|
||||||
|
|
||||||
|
</LinearLayout>
|
@ -42,6 +42,10 @@
|
|||||||
android:icon="@drawable/ic_trending"
|
android:icon="@drawable/ic_trending"
|
||||||
android:title="@string/navMostVisited"/>
|
android:title="@string/navMostVisited"/>
|
||||||
|
|
||||||
|
<item android:id="@+id/nav_notes"
|
||||||
|
android:icon="@drawable/ic_notes"
|
||||||
|
android:title="@string/navNotes" />
|
||||||
|
|
||||||
<item android:id="@+id/nav_comments_draft"
|
<item android:id="@+id/nav_comments_draft"
|
||||||
android:icon="@drawable/ic_drafts"
|
android:icon="@drawable/ic_drafts"
|
||||||
android:title="@string/titleDrafts"/>
|
android:title="@string/titleDrafts"/>
|
||||||
|
@ -20,11 +20,6 @@
|
|||||||
<item>uk</item>
|
<item>uk</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="timeFormats">
|
|
||||||
<item>@string/settingsDateTimeHeaderDefault</item>
|
|
||||||
<item>@string/settingsDateTimeNormal</item>
|
|
||||||
</string-array>
|
|
||||||
|
|
||||||
<string-array name="fonts">
|
<string-array name="fonts">
|
||||||
<item>Roboto</item>
|
<item>Roboto</item>
|
||||||
<item>Manrope</item>
|
<item>Manrope</item>
|
||||||
@ -63,6 +58,7 @@
|
|||||||
<item>@string/pageTitleNotifications</item>
|
<item>@string/pageTitleNotifications</item>
|
||||||
<item>@string/navMyIssues</item>
|
<item>@string/navMyIssues</item>
|
||||||
<item>@string/navMostVisited</item>
|
<item>@string/navMostVisited</item>
|
||||||
|
<item>@string/navNotes</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string-array name="linkHandlerDefaultScreen">
|
<string-array name="linkHandlerDefaultScreen">
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
<string name="navAdministration">Administration</string>
|
<string name="navAdministration">Administration</string>
|
||||||
<string name="navMyIssues">My Issues</string>
|
<string name="navMyIssues">My Issues</string>
|
||||||
<string name="navMostVisited">Most Visited Repos</string>
|
<string name="navMostVisited">Most Visited Repos</string>
|
||||||
|
<string name="navNotes">Notes</string>
|
||||||
<!-- menu items -->
|
<!-- menu items -->
|
||||||
|
|
||||||
<!-- page titles -->
|
<!-- page titles -->
|
||||||
@ -199,13 +200,10 @@
|
|||||||
<string name="settingsCertsSelectorHeader">Delete Trusted Certificates</string>
|
<string name="settingsCertsSelectorHeader">Delete Trusted Certificates</string>
|
||||||
<string name="settingsCertsPopupTitle">Delete Trusted Certificates?</string>
|
<string name="settingsCertsPopupTitle">Delete Trusted Certificates?</string>
|
||||||
<string name="settingsCertsPopupMessage">Are you sure to delete any manually trusted certificate or hostname? \n\nYou will also be logged out.</string>
|
<string name="settingsCertsPopupMessage">Are you sure to delete any manually trusted certificate or hostname? \n\nYou will also be logged out.</string>
|
||||||
<string name="settingsDateTimeHeaderText">Date & Time</string>
|
|
||||||
<string name="settingsSave">Settings saved</string>
|
<string name="settingsSave">Settings saved</string>
|
||||||
<string name="settingsLanguageSelectorHeader">Language</string>
|
<string name="settingsLanguageSelectorHeader">Language</string>
|
||||||
<string name="settingsLanguageSelectedHeaderDefault">English</string>
|
<string name="settingsLanguageSelectedHeaderDefault">English</string>
|
||||||
<string name="settingsAppearanceHeader">Appearance</string>
|
<string name="settingsAppearanceHeader">Appearance</string>
|
||||||
<string name="settingsDateTimeHeaderDefault">Pretty</string>
|
|
||||||
<string name="settingsDateTimeNormal">Normal</string>
|
|
||||||
<string name="settingsLanguageSelectorDialogTitle">Choose Language</string>
|
<string name="settingsLanguageSelectorDialogTitle">Choose Language</string>
|
||||||
<string name="settingsLightThemeTimeSelectorHeader">Light Theme Switch Time</string>
|
<string name="settingsLightThemeTimeSelectorHeader">Light Theme Switch Time</string>
|
||||||
<string name="settingsDarkThemeTimeSelectorHeader">Dark Theme Switch Time</string>
|
<string name="settingsDarkThemeTimeSelectorHeader">Dark Theme Switch Time</string>
|
||||||
@ -791,6 +789,19 @@
|
|||||||
<string name="codeEditor" translatable="false">Code Editor</string>
|
<string name="codeEditor" translatable="false">Code Editor</string>
|
||||||
<string name="openInCodeEditor">Open in Code Editor</string>
|
<string name="openInCodeEditor">Open in Code Editor</string>
|
||||||
|
|
||||||
|
<!-- notes -->
|
||||||
|
<string name="newNote">New Note</string>
|
||||||
|
<string name="editNote">Edit Note</string>
|
||||||
|
<string name="newNoteContentHint">Start taking your notes here</string>
|
||||||
|
<string name="noteDateTime">Created %s</string>
|
||||||
|
<string name="noteTimeModified">Updated %s</string>
|
||||||
|
<string name="noteDeleteDialoMessage">Do you really want to delete this note?</string>
|
||||||
|
<plurals name="noteDeleteMessage">
|
||||||
|
<item quantity="one">Note deleted successfully</item>
|
||||||
|
<item quantity="other">Notes deleted successfully</item>
|
||||||
|
</plurals>
|
||||||
|
<string name="notesAllDeletionMessage">This will delete all of your notes. This action cannot be undone.</string>
|
||||||
|
|
||||||
<!-- timeline -->
|
<!-- timeline -->
|
||||||
<string name="commitText">commit</string>
|
<string name="commitText">commit</string>
|
||||||
<string name="timelineAddedCommit">%1$s added %2$s %3$s</string>
|
<string name="timelineAddedCommit">%1$s added %2$s %3$s</string>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user