Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-notes.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Niedermann <info@niedermann.it>2020-06-10 14:00:23 +0300
committerStefan Niedermann <info@niedermann.it>2020-06-10 14:00:23 +0300
commit6b0e47da8593afbf45eb9e240094647a5106bc84 (patch)
treefe57da1e8b76c7a6016da0bb7e6c5b53204f5ab4 /app/src/main
parent2b771d947baafed8c521fe4f44cea5ada63d2583 (diff)
Performance and rendering enhancements
Diffstat (limited to 'app/src/main')
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java5
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/android/fragment/PreferencesFragment.java2
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/model/ItemAdapter.java1
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewGridHolder.java8
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolder.java60
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolderWithExcerpt.java7
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolderWithoutExcerpt.java4
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/model/SectionViewHolder.java8
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesDatabase.java15
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/util/MarkDownUtil.java4
-rw-r--r--app/src/main/java/it/niedermann/owncloud/notes/util/NoteUtil.java22
-rw-r--r--app/src/main/res/layout/item_notes_list_note_item_grid.xml67
12 files changed, 118 insertions, 85 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java
index a309dc5d..c6b14fef 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/NotesListViewActivity.java
@@ -325,7 +325,7 @@ public class NotesListViewActivity extends LockedActivity implements NoteClickLi
}
private void setupNotesList() {
- initList();
+ initRecyclerView();
((RecyclerView) findViewById(R.id.recycler_view)).addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
@@ -596,7 +596,7 @@ public class NotesListViewActivity extends LockedActivity implements NoteClickLi
binding.navigationMenu.setAdapter(adapterMenu);
}
- private void initList() {
+ private void initRecyclerView() {
adapter = new ItemAdapter(this, gridView);
listView.setAdapter(adapter);
@@ -802,7 +802,6 @@ public class NotesListViewActivity extends LockedActivity implements NoteClickLi
Intent intent = new Intent(getApplicationContext(), EditNoteActivity.class);
intent.putExtra(EditNoteActivity.PARAM_NOTE_ID, note.getId());
startActivityForResult(intent, show_single_note_cmd);
-
}
}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/PreferencesFragment.java b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/PreferencesFragment.java
index db2d8ee5..d8034ae6 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/PreferencesFragment.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/android/fragment/PreferencesFragment.java
@@ -16,6 +16,7 @@ import it.niedermann.owncloud.notes.android.DarkModeSetting;
import it.niedermann.owncloud.notes.branding.Branded;
import it.niedermann.owncloud.notes.branding.BrandedSwitchPreference;
import it.niedermann.owncloud.notes.branding.BrandingUtil;
+import it.niedermann.owncloud.notes.persistence.NotesDatabase;
import it.niedermann.owncloud.notes.persistence.SyncWorker;
import it.niedermann.owncloud.notes.util.DeviceCredentialUtil;
import it.niedermann.owncloud.notes.util.Notes;
@@ -61,6 +62,7 @@ public class PreferencesFragment extends PreferenceFragmentCompat implements Bra
if (gridViewPref != null) {
gridViewPref.setOnPreferenceChangeListener((Preference preference, Object newValue) -> {
final Boolean gridView = (Boolean) newValue;
+ NotesDatabase.getInstance(requireContext()).regenerateExcerpts(!gridView);
Log.v(TAG, "gridView: " + gridView);
requireActivity().setResult(Activity.RESULT_OK);
return true;
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/model/ItemAdapter.java b/app/src/main/java/it/niedermann/owncloud/notes/model/ItemAdapter.java
index 0b2bb528..05a5bcfb 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/model/ItemAdapter.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/model/ItemAdapter.java
@@ -11,7 +11,6 @@ import androidx.annotation.ColorInt;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
-import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import java.util.ArrayList;
import java.util.List;
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewGridHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewGridHolder.java
index d9cd30f1..7091d87e 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewGridHolder.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewGridHolder.java
@@ -1,6 +1,7 @@
package it.niedermann.owncloud.notes.model;
import android.content.Context;
+import android.util.Log;
import android.view.View;
import androidx.annotation.NonNull;
@@ -13,13 +14,12 @@ public class NoteViewGridHolder extends NoteViewHolder {
private final ItemNotesListNoteItemGridBinding binding;
public NoteViewGridHolder(@NonNull ItemNotesListNoteItemGridBinding binding, @NonNull NoteClickListener noteClickListener) {
- super(binding.getRoot(), noteClickListener);
+ super(binding.getRoot(), noteClickListener, true);
this.binding = binding;
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
}
-
public void showSwipe(boolean left) {
}
@@ -29,8 +29,8 @@ public class NoteViewGridHolder extends NoteViewHolder {
bindCategory(context, binding.noteCategory, showCategory, note.getCategory(), mainColor);
binding.noteStatus.setVisibility(DBStatus.VOID.equals(note.getStatus()) ? View.INVISIBLE : View.VISIBLE);
bindFavorite(binding.noteFavorite, note.isFavorite());
- bindTitle(context, binding.noteTitle, searchQuery, note, mainColor);
- bindExcerpt(context, binding.noteContent, searchQuery, note, mainColor);
+ bindSearchableContent(context, binding.noteTitle, searchQuery, note.getTitle(), mainColor);
+ bindSearchableContent(context, binding.noteContent, searchQuery, note.getExcerpt(), mainColor);
}
public View getNoteSwipeable() {
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolder.java
index 6272dcf4..db8f39f8 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolder.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolder.java
@@ -4,6 +4,8 @@ import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.os.Build;
+import android.os.Handler;
+import android.os.Looper;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.BackgroundColorSpan;
@@ -18,23 +20,36 @@ import androidx.annotation.Nullable;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.recyclerview.widget.RecyclerView;
+import com.yydcdut.markdown.MarkdownProcessor;
+import com.yydcdut.markdown.syntax.text.TextFactory;
+
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.branding.BrandingUtil;
+import it.niedermann.owncloud.notes.util.MarkDownUtil;
import it.niedermann.owncloud.notes.util.Notes;
import static androidx.recyclerview.widget.RecyclerView.NO_POSITION;
import static it.niedermann.owncloud.notes.util.ColorUtil.contrastRatioIsSufficient;
import static it.niedermann.owncloud.notes.util.ColorUtil.isColorDark;
+import static it.niedermann.owncloud.notes.util.MarkDownUtil.parseCompat;
public abstract class NoteViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener, View.OnClickListener {
private final NoteClickListener noteClickListener;
+ private final boolean renderMarkdown;
+ private MarkdownProcessor markdownProcessor;
- public NoteViewHolder(@NonNull View v, @NonNull NoteClickListener noteClickListener) {
+ public NoteViewHolder(@NonNull View v, @NonNull NoteClickListener noteClickListener, boolean renderMarkdown) {
super(v);
this.noteClickListener = noteClickListener;
+ this.renderMarkdown = renderMarkdown;
+ if (renderMarkdown) {
+ markdownProcessor = new MarkdownProcessor(itemView.getContext());
+ markdownProcessor.factory(TextFactory.create());
+ markdownProcessor.config(MarkDownUtil.getMarkDownConfiguration(itemView.getContext()).build());
+ }
v.setOnClickListener(this);
v.setOnLongClickListener(this);
}
@@ -99,10 +114,9 @@ public abstract class NoteViewHolder extends RecyclerView.ViewHolder implements
noteFavorite.setOnClickListener(view -> noteClickListener.onNoteFavoriteClick(getAdapterPosition(), view));
}
- protected void bindTitle(@NonNull Context context, @NonNull TextView noteTitle, @Nullable CharSequence searchQuery, @NonNull DBNote note, int mainColor) {
- if (TextUtils.isEmpty(searchQuery)) {
- noteTitle.setText(note.getTitle());
- } else {
+ protected void bindSearchableContent(@NonNull Context context, @NonNull TextView textView, @Nullable CharSequence searchQuery, @NonNull String content, int mainColor) {
+ CharSequence processedContent = content;
+ if (!TextUtils.isEmpty(searchQuery)) {
@ColorInt final int searchBackground = context.getResources().getColor(R.color.bg_highlighted);
@ColorInt final int searchForeground = BrandingUtil.getSecondaryForegroundColorDependingOnTheme(context, mainColor);
@@ -110,36 +124,30 @@ public abstract class NoteViewHolder extends RecyclerView.ViewHolder implements
// It implies that the string between \Q and \E is a literal string and thus the reserved keyword in such string will be ignored.
// See https://stackoverflow.com/questions/15409296/what-is-the-use-of-pattern-quote-method
final Pattern pattern = Pattern.compile("(" + Pattern.quote(searchQuery.toString()) + ")", Pattern.CASE_INSENSITIVE);
- SpannableString spannableString = new SpannableString(note.getTitle());
+ SpannableString spannableString = new SpannableString(content);
Matcher matcher = pattern.matcher(spannableString);
while (matcher.find()) {
spannableString.setSpan(new ForegroundColorSpan(searchForeground), matcher.start(), matcher.end(), 0);
spannableString.setSpan(new BackgroundColorSpan(searchBackground), matcher.start(), matcher.end(), 0);
}
- noteTitle.setText(spannableString);
+
+ processedContent = spannableString;
}
+ bindContent(textView, processedContent);
}
- protected void bindExcerpt(@NonNull Context context, @NonNull TextView noteExcerpt, @Nullable CharSequence searchQuery, @NonNull DBNote note, int mainColor) {
- if (TextUtils.isEmpty(searchQuery)) {
- noteExcerpt.setText(note.getExcerpt());
- } else {
- @ColorInt final int searchBackground = context.getResources().getColor(R.color.bg_highlighted);
- @ColorInt final int searchForeground = BrandingUtil.getSecondaryForegroundColorDependingOnTheme(context, mainColor);
-
- // The Pattern.quote method will add \Q to the very beginning of the string and \E to the end of the string
- // It implies that the string between \Q and \E is a literal string and thus the reserved keyword in such string will be ignored.
- // See https://stackoverflow.com/questions/15409296/what-is-the-use-of-pattern-quote-method
- final Pattern pattern = Pattern.compile("(" + Pattern.quote(searchQuery.toString()) + ")", Pattern.CASE_INSENSITIVE);
- SpannableString spannableString = new SpannableString(note.getExcerpt());
- Matcher matcher = pattern.matcher(spannableString);
-
- while (matcher.find()) {
- spannableString.setSpan(new ForegroundColorSpan(searchForeground), matcher.start(), matcher.end(), 0);
- spannableString.setSpan(new BackgroundColorSpan(searchBackground), matcher.start(), matcher.end(), 0);
- }
- noteExcerpt.setText(spannableString);
+ private void bindContent(@NonNull TextView textView, @NonNull CharSequence charSequence) {
+ textView.setText(charSequence);
+ if (renderMarkdown) {
+ new Thread(() -> {
+ try {
+ final CharSequence parsedCharSequence = parseCompat(markdownProcessor, charSequence);
+ new Handler(Looper.getMainLooper()).post(() -> textView.setText(parsedCharSequence));
+ } catch (StringIndexOutOfBoundsException e) {
+ // Workaround for RxMarkdown: https://github.com/stefan-niedermann/nextcloud-notes/issues/668
+ }
+ }).start();
}
}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolderWithExcerpt.java b/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolderWithExcerpt.java
index 4433b982..05a743ab 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolderWithExcerpt.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolderWithExcerpt.java
@@ -14,7 +14,7 @@ public class NoteViewHolderWithExcerpt extends NoteViewHolder {
private final ItemNotesListNoteItemWithExcerptBinding binding;
public NoteViewHolderWithExcerpt(@NonNull ItemNotesListNoteItemWithExcerptBinding binding, @NonNull NoteClickListener noteClickListener) {
- super(binding.getRoot(), noteClickListener);
+ super(binding.getRoot(), noteClickListener, false);
this.binding = binding;
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
@@ -32,8 +32,9 @@ public class NoteViewHolderWithExcerpt extends NoteViewHolder {
bindCategory(context, binding.noteCategory, showCategory, note.getCategory(), mainColor);
binding.noteStatus.setVisibility(DBStatus.VOID.equals(note.getStatus()) ? View.INVISIBLE : View.VISIBLE);
bindFavorite(binding.noteFavorite, note.isFavorite());
- bindTitle(context, binding.noteTitle, searchQuery, note, mainColor);
- bindExcerpt(context, binding.noteExcerpt, searchQuery, note, mainColor);
+
+ bindSearchableContent(context, binding.noteTitle, searchQuery, note.getTitle(), mainColor);
+ bindSearchableContent(context, binding.noteExcerpt, searchQuery, note.getExcerpt(), mainColor);
}
public View getNoteSwipeable() {
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolderWithoutExcerpt.java b/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolderWithoutExcerpt.java
index acacda32..59a42f5c 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolderWithoutExcerpt.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/model/NoteViewHolderWithoutExcerpt.java
@@ -14,7 +14,7 @@ public class NoteViewHolderWithoutExcerpt extends NoteViewHolder {
private final ItemNotesListNoteItemWithoutExcerptBinding binding;
public NoteViewHolderWithoutExcerpt(@NonNull ItemNotesListNoteItemWithoutExcerptBinding binding, @NonNull NoteClickListener noteClickListener) {
- super(binding.getRoot(), noteClickListener);
+ super(binding.getRoot(), noteClickListener, false);
this.binding = binding;
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
@@ -33,7 +33,7 @@ public class NoteViewHolderWithoutExcerpt extends NoteViewHolder {
bindCategory(context, binding.noteCategory, showCategory, note.getCategory(), mainColor);
binding.noteStatus.setVisibility(DBStatus.VOID.equals(note.getStatus()) ? View.INVISIBLE : View.VISIBLE);
bindFavorite(binding.noteFavorite, note.isFavorite());
- bindTitle(context, binding.noteTitle, searchQuery, note, mainColor);
+ bindSearchableContent(context, binding.noteTitle, searchQuery, note.getTitle(), mainColor);
}
public View getNoteSwipeable() {
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/model/SectionViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/model/SectionViewHolder.java
index b39f77ad..45eeb140 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/model/SectionViewHolder.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/model/SectionViewHolder.java
@@ -11,13 +11,13 @@ public class SectionViewHolder extends RecyclerView.ViewHolder {
public SectionViewHolder(ItemNotesListSectionItemBinding binding) {
super(binding.getRoot());
this.binding = binding;
- }
-
- public void bind(SectionItem item) {
- binding.sectionTitle.setText(item.getTitle());
if (itemView.getLayoutParams() != null && itemView.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) {
((StaggeredGridLayoutManager.LayoutParams) itemView.getLayoutParams()).setFullSpan(true);
}
}
+
+ public void bind(SectionItem item) {
+ binding.sectionTitle.setText(item.getTitle());
+ }
} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesDatabase.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesDatabase.java
index 1a31ae0a..286bfbd2 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesDatabase.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesDatabase.java
@@ -41,8 +41,6 @@ import java.util.Set;
import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.android.activity.EditNoteActivity;
-import it.niedermann.owncloud.notes.android.appwidget.NoteListWidget;
-import it.niedermann.owncloud.notes.android.appwidget.SingleNoteWidget;
import it.niedermann.owncloud.notes.model.ApiVersion;
import it.niedermann.owncloud.notes.model.Capabilities;
import it.niedermann.owncloud.notes.model.CloudNote;
@@ -137,6 +135,17 @@ public class NotesDatabase extends AbstractNotesDatabase {
return db.insert(table_notes, null, values);
}
+ public void regenerateExcerpts(boolean stripMarkdown) {
+ SQLiteDatabase db = this.getWritableDatabase();
+ Cursor cursor = db.query(table_notes, new String[]{key_id, key_content}, key_status + " != ?", new String[]{DBStatus.LOCAL_DELETED.getTitle()}, null, null, null);
+ ContentValues values = new ContentValues(1);
+ while (cursor.moveToNext()) {
+ values.put(key_excerpt, NoteUtil.generateNoteExcerpt(cursor.getString(1), stripMarkdown));
+ db.update(table_notes, values, key_id + " = ?", new String[]{String.valueOf(cursor.getInt(0))});
+ }
+ cursor.close();
+ }
+
public void moveNoteToAnotherAccount(SingleSignOnAccount ssoAccount, long oldAccountId, DBNote note, long newAccountId) {
// Add new note
addNoteAndSync(ssoAccount, newAccountId, new CloudNote(0, note.getModified(), note.getTitle(), note.getContent(), note.isFavorite(), note.getCategory(), null));
@@ -616,7 +625,7 @@ public class NotesDatabase extends AbstractNotesDatabase {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
ShortcutManager shortcutManager = getContext().getSystemService(ShortcutManager.class);
- if(shortcutManager != null) {
+ if (shortcutManager != null) {
shortcutManager.getPinnedShortcuts().forEach((shortcut) -> {
String shortcutId = id + "";
if (shortcut.getId().equals(shortcutId)) {
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/util/MarkDownUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/util/MarkDownUtil.java
index 66f89280..1a8c4b15 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/util/MarkDownUtil.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/util/MarkDownUtil.java
@@ -85,14 +85,10 @@ public class MarkDownUtil {
return "";
}
- Log.v(TAG, "parseCompat - Original: \"" + text + "\"");
-
while (TextUtils.indexOf(text, MD_IMAGE_WITH_EMPTY_DESCRIPTION) >= 0) {
text = TextUtils.replace(text, MD_IMAGE_WITH_EMPTY_DESCRIPTION_ARRAY, MD_IMAGE_WITH_SPACE_DESCRIPTION_ARRAY);
}
- Log.v(TAG, "parseCompat - Replaced empty image descriptions: \"" + text + "\"");
-
return markdownProcessor.parse(text);
}
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/util/NoteUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/util/NoteUtil.java
index bd83ce5c..11802b2b 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/util/NoteUtil.java
+++ b/app/src/main/java/it/niedermann/owncloud/notes/util/NoteUtil.java
@@ -81,15 +81,29 @@ public class NoteUtil {
/**
* Generates an excerpt of a content String (reads second line which is not empty)
*
- * @param content String
+ * @param content {@link String}
* @return excerpt String
*/
@NonNull
public static String generateNoteExcerpt(@NonNull String content) {
- if (content.contains("\n"))
- return truncateString(removeMarkDown(content.replaceFirst("^.*\n", "")), 200).replace("\n", " ");
- else
+ return generateNoteExcerpt(content, true); // TODO check gridview
+ }
+
+ /**
+ * Generates an excerpt of a content String (reads second line which is not empty)
+ *
+ * @param content {@link String}
+ * @param stripMarkdown whether or not the markdown should be stripped from the excerpt
+ * @return excerpt String
+ */
+ @NonNull
+ public static String generateNoteExcerpt(@NonNull String content, boolean stripMarkdown) {
+ if (!content.contains("\n")) {
return "";
+ }
+ return stripMarkdown
+ ? truncateString(removeMarkDown(content.replaceFirst("^.*\n", "")), 200).replace("\n", " ")
+ : truncateString(content.replaceFirst("^.*\n", ""), 200);
}
@NonNull
diff --git a/app/src/main/res/layout/item_notes_list_note_item_grid.xml b/app/src/main/res/layout/item_notes_list_note_item_grid.xml
index 694b5dd4..c3fe3676 100644
--- a/app/src/main/res/layout/item_notes_list_note_item_grid.xml
+++ b/app/src/main/res/layout/item_notes_list_note_item_grid.xml
@@ -2,40 +2,57 @@
<com.google.android.material.card.MaterialCardView 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:id="@+id/card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/spacer_1x"
- android:background="@drawable/list_item_background_selector"
- android:elevation="6dp"
- android:orientation="vertical">
+ android:focusable="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
+ <TextView
+ android:id="@+id/noteCategory"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/spacer_2x"
+ android:layout_marginLeft="@dimen/spacer_2x"
+ android:layout_marginTop="@dimen/spacer_2x"
+ android:background="@drawable/border"
+ android:maxLines="1"
+ android:paddingLeft="@dimen/spacer_1x"
+ android:paddingTop="1dp"
+ android:paddingRight="@dimen/spacer_1x"
+ android:paddingBottom="1dp"
+ android:singleLine="true"
+ android:textColor="?android:textColorPrimary"
+ android:textSize="@dimen/secondary_font_size"
+ tools:maxLength="15"
+ tools:text="@tools:sample/lorem/random" />
+
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:gravity="center_vertical"
+ android:gravity="center_vertical|end"
android:orientation="horizontal">
- <TextView
- android:id="@+id/noteCategory"
- android:layout_width="wrap_content"
+ <com.yydcdut.markdown.MarkdownTextView
+ android:id="@+id/noteTitle"
+ android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_marginStart="@dimen/spacer_1x"
- android:layout_marginLeft="@dimen/spacer_1x"
- android:background="@drawable/border"
- android:maxLines="1"
- android:paddingLeft="@dimen/spacer_1x"
- android:paddingTop="1dp"
- android:paddingRight="@dimen/spacer_1x"
- android:paddingBottom="1dp"
- android:singleLine="true"
- android:textColor="?android:textColorPrimary"
- android:textSize="@dimen/secondary_font_size"
- tools:maxLength="15"
+ android:layout_weight="1"
+ android:paddingStart="@dimen/spacer_2x"
+ android:paddingLeft="@dimen/spacer_2x"
+ android:paddingTop="@dimen/spacer_2x"
+ android:paddingEnd="@dimen/spacer_2x"
+ android:paddingRight="@dimen/spacer_2x"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:textColor="@color/fg_default"
+ android:textIsSelectable="true"
+ android:theme="@style/textViewStyle"
+ tools:maxLength="50"
tools:text="@tools:sample/lorem/random" />
@@ -66,18 +83,6 @@
</LinearLayout>
<com.yydcdut.markdown.MarkdownTextView
- android:id="@+id/noteTitle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:padding="@dimen/spacer_2x"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="@color/fg_default"
- android:textIsSelectable="true"
- android:theme="@style/textViewStyle"
- tools:maxLength="50"
- tools:text="@tools:sample/lorem/random" />
-
- <com.yydcdut.markdown.MarkdownTextView
android:id="@+id/noteContent"
android:layout_width="match_parent"
android:layout_height="wrap_content"