From 37724e9720d7b4f55415fd37ff2545362da1943d Mon Sep 17 00:00:00 2001 From: korelstar Date: Wed, 29 Jun 2016 22:09:46 +0200 Subject: [PATCH 1/4] Show icon if a note is not synchronized (hint to a possible error) --- .../android/activity/EditNoteActivity.java | 5 ++-- .../activity/NotesListViewActivity.java | 7 +++-- .../activity/SelectSingleNoteActivity.java | 3 +- .../notes/android/widget/AllNotesWidget.java | 8 +++-- .../owncloud/notes/model/DBNote.java | 28 ++++++++++++++++++ .../owncloud/notes/model/DBStatus.java | 8 +++++ .../owncloud/notes/model/ItemAdapter.java | 14 +++++---- .../persistence/NoteSQLiteOpenHelper.java | 22 +++++++------- .../res/drawable-hdpi/ic_sync_error_holo.png | Bin 0 -> 1154 bytes .../res/drawable-mdpi/ic_sync_error_holo.png | Bin 0 -> 790 bytes .../res/drawable-xhdpi/ic_sync_error_holo.png | Bin 0 -> 1411 bytes .../drawable-xxhdpi/ic_sync_error_holo.png | Bin 0 -> 1889 bytes .../drawable-xxxhdpi/ic_sync_error_holo.png | Bin 0 -> 2231 bytes .../layout/fragment_notes_list_note_item.xml | 9 ++++++ 14 files changed, 80 insertions(+), 24 deletions(-) create mode 100644 app/src/main/java/it/niedermann/owncloud/notes/model/DBNote.java create mode 100644 app/src/main/res/drawable-hdpi/ic_sync_error_holo.png create mode 100644 app/src/main/res/drawable-mdpi/ic_sync_error_holo.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_sync_error_holo.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_sync_error_holo.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_sync_error_holo.png diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/EditNoteActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/EditNoteActivity.java index c1d24d966..e04959e88 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/EditNoteActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/EditNoteActivity.java @@ -16,6 +16,7 @@ import java.util.concurrent.TimeUnit; import it.niedermann.owncloud.notes.R; +import it.niedermann.owncloud.notes.model.DBNote; import it.niedermann.owncloud.notes.model.Note; import it.niedermann.owncloud.notes.persistence.NoteSQLiteOpenHelper; import it.niedermann.owncloud.notes.util.ICallback; @@ -24,7 +25,7 @@ public class EditNoteActivity extends AppCompatActivity { private final long DELAY = 1000; // in ms private EditText content = null; - private Note note = null; + private DBNote note = null; private Timer timer = new Timer(); private ActionBar actionBar; @@ -32,7 +33,7 @@ public class EditNoteActivity extends AppCompatActivity { protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit); - note = (Note) getIntent().getSerializableExtra( + note = (DBNote) getIntent().getSerializableExtra( NoteActivity.EDIT_NOTE); content = (EditText) findViewById(R.id.editContent); content.setEnabled(false); 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 022b180c5..44c9a2228 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 @@ -21,6 +21,7 @@ import java.util.List; import it.niedermann.owncloud.notes.R; +import it.niedermann.owncloud.notes.model.DBNote; import it.niedermann.owncloud.notes.model.Item; import it.niedermann.owncloud.notes.model.ItemAdapter; import it.niedermann.owncloud.notes.model.Note; @@ -128,7 +129,7 @@ public void onClick(View v) { * @param noteList List<Note> */ @SuppressWarnings("WeakerAccess") - public void setListView(List noteList) { + public void setListView(List noteList) { List itemList = new ArrayList<>(); // #12 Create Sections depending on Time // TODO Move to ItemAdapter? @@ -288,7 +289,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { //not need because of db.synchronisation in createActivity - Note createdNote = (Note) data.getExtras().getSerializable( + DBNote createdNote = (DBNote) data.getExtras().getSerializable( CREATED_NOTE); adapter.add(createdNote); //setListView(db.getNotes()); @@ -299,7 +300,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { SELECTED_NOTE_POSITION); adapter.remove(adapter.getItem(notePosition)); if (resultCode == RESULT_OK) { - Note editedNote = (Note) data.getExtras().getSerializable( + DBNote editedNote = (DBNote) data.getExtras().getSerializable( NoteActivity.EDIT_NOTE); adapter.add(editedNote); } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/SelectSingleNoteActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/SelectSingleNoteActivity.java index 7bcf60cac..b9bb6d7b0 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/activity/SelectSingleNoteActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/activity/SelectSingleNoteActivity.java @@ -15,6 +15,7 @@ import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.android.widget.SingleNoteWidget; +import it.niedermann.owncloud.notes.model.DBNote; import it.niedermann.owncloud.notes.model.Item; import it.niedermann.owncloud.notes.model.ItemAdapter; import it.niedermann.owncloud.notes.model.Note; @@ -61,7 +62,7 @@ public void onCreate(Bundle savedInstanceState) { * * @param noteList List<Note> */ - private void setListView(List noteList) { + private void setListView(List noteList) { List itemList = new ArrayList<>(); itemList.addAll(noteList); adapter = new ItemAdapter(itemList); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/android/widget/AllNotesWidget.java b/app/src/main/java/it/niedermann/owncloud/notes/android/widget/AllNotesWidget.java index e85c7e645..83a84f785 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/android/widget/AllNotesWidget.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/android/widget/AllNotesWidget.java @@ -13,6 +13,8 @@ import java.util.List; import it.niedermann.owncloud.notes.R; +import it.niedermann.owncloud.notes.model.DBNote; +import it.niedermann.owncloud.notes.model.DBStatus; import it.niedermann.owncloud.notes.model.Note; import it.niedermann.owncloud.notes.persistence.NoteSQLiteOpenHelper; @@ -51,7 +53,7 @@ public RemoteViewsFactory onGetViewFactory(Intent intent) { class StackRemoteViewsFactory implements RemoteViewsService.RemoteViewsFactory { private static final int mCount = 10; - private List mWidgetItems = new ArrayList<>(); + private List mWidgetItems = new ArrayList<>(); private Context mContext; private int mAppWidgetId; @@ -62,11 +64,11 @@ public StackRemoteViewsFactory(Context context, Intent intent) { NoteSQLiteOpenHelper db = new NoteSQLiteOpenHelper(mContext); db.synchronizeWithServer(); mWidgetItems = db.getNotes(); - mWidgetItems.add(new Note(0, Calendar.getInstance(), "Test-Titel", "Test-Beschreibung")); + mWidgetItems.add(new DBNote(0, Calendar.getInstance(), "Test-Titel", "Test-Beschreibung", DBStatus.VOID)); } public void onCreate() { - mWidgetItems.add(new Note(0, Calendar.getInstance(), "Test-Titel", "Test-Beschreibung")); + mWidgetItems.add(new DBNote(0, Calendar.getInstance(), "Test-Titel", "Test-Beschreibung", DBStatus.VOID)); } @Override diff --git a/app/src/main/java/it/niedermann/owncloud/notes/model/DBNote.java b/app/src/main/java/it/niedermann/owncloud/notes/model/DBNote.java new file mode 100644 index 000000000..646d869c2 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/model/DBNote.java @@ -0,0 +1,28 @@ +package it.niedermann.owncloud.notes.model; + +import java.util.Calendar; + +import it.niedermann.owncloud.notes.persistence.NoteSQLiteOpenHelper; + +public class DBNote extends Note { + + private DBStatus status; + + public DBNote(long id, Calendar modified, String title, String content, DBStatus status) { + super(id, modified, title, content); + this.status = status; + } + + public DBStatus getStatus() { + return status; + } + + public void setStatus(DBStatus status) { + this.status = status; + } + + @Override + public String toString() { + return "#" + getId() + " " + getTitle() + " (" + getModified(NoteSQLiteOpenHelper.DATE_FORMAT) + ") " + getStatus(); + } +} diff --git a/app/src/main/java/it/niedermann/owncloud/notes/model/DBStatus.java b/app/src/main/java/it/niedermann/owncloud/notes/model/DBStatus.java index fc27f8265..ea3393b31 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/model/DBStatus.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/model/DBStatus.java @@ -17,4 +17,12 @@ public String getTitle() { DBStatus(String title) { this.title = title; } + + public static DBStatus parse(String str) { + if(str.isEmpty()) { + return DBStatus.VOID; + } else { + return DBStatus.valueOf(str); + } + } } 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 b0bc49e9f..f7a291049 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 @@ -4,6 +4,7 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; @@ -37,7 +38,7 @@ public static void setNoteClickListener(NoteClickListener noteClickListener) { * Adds the given note to the top of the list. * @param note Note that should be added. */ - public void add(Note note) { + public void add(DBNote note) { itemList.add(0, note); notifyItemInserted(0); notifyItemChanged(0); @@ -55,12 +56,12 @@ public void removeAll() { * Compares the given List of notes to the current internal holded notes and updates the list if necessairy * @param newNotes List of more up to date notes */ - public void checkForUpdates(List newNotes) { - for(Note newNote : newNotes) { + public void checkForUpdates(List newNotes) { + for(DBNote newNote : newNotes) { boolean foundNewNoteInOldList = false; for(Item oldItem : itemList) { if(!oldItem.isSection()) { - Note oldNote = (Note) oldItem; + DBNote oldNote = (DBNote) oldItem; if(newNote.getId() == oldNote.getId()) { // Notes have the same id, check which is newer if(newNote.getModified().after(oldNote.getModified())) { @@ -109,9 +110,10 @@ public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { ((SectionViewHolder) holder).sectionTitle.setText(section.geTitle()); ((SectionViewHolder) holder).setPosition(position); } else { - Note note = (Note) item; + DBNote note = (DBNote) item; ((NoteViewHolder) holder).noteTitle.setText(note.getTitle()); ((NoteViewHolder) holder).noteExcerpt.setText(note.getExcerpt()); + ((NoteViewHolder) holder).noteStatus.setVisibility(DBStatus.VOID.equals(note.getStatus()) ? View.GONE : View.VISIBLE); ((NoteViewHolder) holder).setPosition(position); } } @@ -168,12 +170,14 @@ public static class NoteViewHolder extends RecyclerView.ViewHolder implements Vi // each data item is just a string in this case public TextView noteTitle; public TextView noteExcerpt; + public ImageView noteStatus; public int position = -1; private NoteViewHolder(View v) { super(v); this.noteTitle = (TextView) v.findViewById(R.id.noteTitle); this.noteExcerpt = (TextView) v.findViewById(R.id.noteExcerpt); + this.noteStatus = (ImageView) v.findViewById(R.id.noteStatus); v.setOnClickListener(this); v.setOnLongClickListener(this); } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java index d554bd49d..cb27390f2 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java @@ -13,6 +13,7 @@ import java.util.List; import java.util.Locale; +import it.niedermann.owncloud.notes.model.DBNote; import it.niedermann.owncloud.notes.model.DBStatus; import it.niedermann.owncloud.notes.model.Note; import it.niedermann.owncloud.notes.util.NoteUtil; @@ -112,7 +113,7 @@ public void addNote(Note note) { * @return requested Note */ @SuppressWarnings("unused") - public Note getNote(long id) { + public DBNote getNote(long id) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.query(table_notes, @@ -134,7 +135,7 @@ public Note getNote(long id) { } catch (ParseException e) { e.printStackTrace(); } - Note note = new Note(Long.valueOf(cursor != null ? cursor.getString(0) : null), modified, cursor != null ? cursor.getString(2) : null, cursor.getString(4)); + DBNote note = new DBNote(Long.valueOf(cursor != null ? cursor.getString(0) : null), modified, cursor != null ? cursor.getString(2) : null, cursor.getString(4), DBStatus.parse(cursor.getString(1))); cursor.close(); return note; } @@ -144,8 +145,8 @@ public Note getNote(long id) { * * @return List<Note> */ - public List getNotes() { - List notes = new ArrayList<>(); + public List getNotes() { + List notes = new ArrayList<>(); SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT * FROM " + table_notes + " WHERE " + key_status + " != ? ORDER BY " + key_modified + " DESC", new String[]{DBStatus.LOCAL_DELETED.getTitle()}); if (cursor.moveToFirst()) { @@ -158,7 +159,7 @@ public List getNotes() { } catch (ParseException e) { e.printStackTrace(); } - notes.add(new Note(Long.valueOf(cursor.getString(0)), modified, cursor.getString(2), cursor.getString(4))); + notes.add(new DBNote(Long.valueOf(cursor.getString(0)), modified, cursor.getString(2), cursor.getString(4), DBStatus.parse(cursor.getString(1)))); } while (cursor.moveToNext()); } cursor.close(); @@ -170,8 +171,8 @@ public List getNotes() { * * @return List<Note> */ - public List searchNotes(String query) { - List notes = new ArrayList<>(); + public List searchNotes(String query) { + List notes = new ArrayList<>(); SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery("SELECT * FROM " + table_notes + " WHERE " + key_status + " != ? AND " + key_content + " LIKE ? ORDER BY " + key_modified + " DESC", new String[]{DBStatus.LOCAL_DELETED.getTitle(), "%" + query + "%"}); if (cursor.moveToFirst()) { @@ -184,7 +185,7 @@ public List searchNotes(String query) { } catch (ParseException e) { e.printStackTrace(); } - notes.add(new Note(Long.valueOf(cursor.getString(0)), modified, cursor.getString(2), cursor.getString(4))); + notes.add(new DBNote(Long.valueOf(cursor.getString(0)), modified, cursor.getString(2), cursor.getString(4), DBStatus.parse(cursor.getString(1)))); } while (cursor.moveToNext()); } cursor.close(); @@ -224,7 +225,7 @@ public List getNotesByStatus(DBStatus status) { * @return The number of the Rows affected. */ @SuppressWarnings("UnusedReturnValue") - public int updateNoteAndSync(Note note) { + public int updateNoteAndSync(DBNote note) { SQLiteDatabase db = this.getWritableDatabase(); DBStatus newStatus = DBStatus.LOCAL_EDITED; Cursor cursor = @@ -239,11 +240,12 @@ public int updateNoteAndSync(Note note) { if (cursor != null) { cursor.moveToFirst(); String status = cursor.getString(1); - if (!"".equals(status) && DBStatus.valueOf(status) == DBStatus.LOCAL_CREATED) { + if (DBStatus.parse(status) == DBStatus.LOCAL_CREATED) { newStatus = DBStatus.LOCAL_CREATED; } cursor.close(); } + note.setStatus(newStatus); ContentValues values = new ContentValues(); values.put(key_id, note.getId()); values.put(key_status, newStatus.getTitle()); diff --git a/app/src/main/res/drawable-hdpi/ic_sync_error_holo.png b/app/src/main/res/drawable-hdpi/ic_sync_error_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa2d2b92daf5f2eeef58e5d86fe491eae242986 GIT binary patch literal 1154 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+eS5K)hhiu0R{01Y44~ zy9>jA5L~c#`DCC7XMsm#F_88EW4Dvpb_@*6L7py-ArXh)&all0aTGXS|6MQLV8xF{ zF}Dqz9AR}LVQO9Rt@2wPlTsI-t1mg__Q-|yS*BzR$3xJJtn zsRhhGI7Nh0>KKbHb6gH2tv;8_daQvpL28ESc^R$y8mqa$`T40$-%Ky4Gm1wX()^$7t5nG?!*)-4hjVMp^!KWjiw^A4 zdm#6L;f97;k@C_&IT2>l!d0^v71!>bd_;5Js!_|CG8+k!l&u3RLwZh?BsdgkkAs@96W&X}#RU{@7uZ0V~oA+Nv( zwSqTTW5n3G4u~e`uUjT?WJ;E14e#`8zYnM;OntGRTWdBoRqU6uNPL!m>IPp8OCMwY3BR)IypsPcHaO<6 zWqW?U>l-7yKEr0Mvhthx=H74ZrplYY{$9OpwgA(O%x7^PELsapLlyqBMvMG>p5~YP z*HNS7OTO73_4tNkhrZsQ%5S;aN=-P&RMDkt(w6*%i_UrZ_O%PlGO9_Rr10_WUls|2 zJxWVgehs{xR#M~n*(~JBV_lcGi!+{f@916hYq#xf-$M_!JxW);GFfekP=x#j{~u+N z{1SVGcPJmb)%8RuroFTn$j@`B8R;qD)=AB~Q z&am#(9qR<{g1#O5XC06Azn1oy`{UhDLOXQtg*PTX*z!T};lAVQcMW29e9r0EQ7?6@ zbZM2@(n(4e8nZ=nUK?<%`MSW*EAr-vYdp97Pu{GHcw*JrUsamLcD*KYxz5j(YrJM{ zDYbmEmRstZXRvwaZAs-Fx9jC@v}DVg99kN6!>adrpzEawRcCvVqF34lTo&GU_%&B9 zTxCm^p3Lw_e^tlYnCZak+&bGG9orb|ih)croLsa#h0)uiqB$)$YeMv@-N zXR1zbe=N0gNw#}^&%YDh0UV9{clrfs@;m)^`oHPV<)l`r7v}B{UoKlZrD8QOo2iz# zMwFx^mZVxG7o`Fz1|tJQ6I}yyT_ej7LsKh5Ln{+AAlJ&kApPe3Boqy~`6-!cmAEyC zwWQwzYLEok5S*V@Ql40p%HWuipOmWLnVXoN8kCxtQdxL16;u{5c)I$ztaD0e0svFC B;>!R4 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-mdpi/ic_sync_error_holo.png b/app/src/main/res/drawable-mdpi/ic_sync_error_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..77a6077fd6804fe145fc57df5aa0fb3df9d53bf7 GIT binary patch literal 790 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvKUBvfU(=jY&)Rw&pcfmLp+Y3opw@>B~YYo|D|VQSLa6D z_{bn8mRrGpk2$(bNO29v`y}0O+f>?EIg`57STa)!|4+7yUA0R^sc`Z+&%4Hd()aP! z*DPwvw>}wfJ*nL5*I$h$4hgon;5{rAIvtBxYPL;&DKK~X1?B?oD~-kqWkqV%9BY_N zkDvA~>^^>)DYN4qbEtZ9k*MV)hG>U;w=g5dQwJ7`2tV*UCJ=CyaV^97Nw-<6ZZ$@{ zxE-`3P=x;g!v+2rhUZ@Wa|<81SXpaE-|zAF_`oZ{JguSJHFVl`|8;727nweA-8DH< z;ab*gp<4xeSQ9v2O#ZlwxkKi}uGQ_^Z%$gz%<21j_vuQZ(-l$&egt2#{ZRTfk%wt< zi>1Z2*yi_}C+RKt`fp{4drhxZX1!3l!o=?{Z&l7T$;j(kX2d0WQD@urmqK&Tc?Uk? z+N5taS$JW8n#2rdyApHlUFuPvCeBzsc~{NColI-IlOAyGP&?x?^TN6AmT7g9-?_Mb z(G@q#P;XH@#291Mz<5Z&jKle6*@YV2Dvsp&0&LkwKPJu6jZ$1AsQqc8!{ySmEH71g zdUCIIJ)Z3|bpyxWq!>LWgJrD|%-1r$ZH>Qfm^k%1=jyv=ujlv&hcH~yC{S7UHL+r8Vb{*JddJqh7VdHKHUXu_Vl#^x7@Arc8d{l{0l8KN2I)8NC!uJ_%}>cptHiBAtR?*(P=h4MhT#0PlJdl&R0hYC h{G?O`&)mfH)S%SFl*+=Bsi5@9;OXk;vd$@?2>|L1FDL*2 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xhdpi/ic_sync_error_holo.png b/app/src/main/res/drawable-xhdpi/ic_sync_error_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..1394a19cdce2bd27a50632b51dcc44ca28fb0138 GIT binary patch literal 1411 zcmZ`(do&Yz9RKa%F>hHSyBJs6?qpkD^L|X5*AA0sSD4MX5!M!!$0j!v<#oCw?mEIr z(X7W3nS1jJJ>)of)Dn?GO+tyf>;8BDxaWJm-_QAczUTA({P!&kq){~0cB%mYG<~RK zx&rY(T2)yw!=PXC6#!>@1b6_@dQN>aR!PAjN9Yt!(DDfNRzXbTsPq5;j_(41p9jE( zLgLQ@z*Ag#7XyG}B>+28FWwDuRxFemeiSnJ{-cEV8p{<5B9$6(M1jPLibmlo;1-mR2D+AcCT7`uIMWP`PJ>zu=oY@d zz;^d6Ay1dUn*+NssgP~fy;{9%L{!u1D~anvYl}37_e5Ewi<3)KNKQx?k7w z5#y7VoFuQU9tpTuP41m9yFoKfT>C~6m4L3^Il+#uovE7PoZf{eP}bSuu%_27*u}|` zzx@Irn@bwY+HzZb<4ki;KH)C)xgO8BKX)wrX~}j*w%s(0j>Dj_hRDl`YjkU-%gBd-`7f} zyXfp4(-oTZZ?<57o=DXhf#V$Pi$~q}qhg(HAYixnMVtHF-l?&IwxE4)FxEA$Wu&6g zmy4m$$3?I%nF)BWBK`yRLPj653N6WM*lJmGGdsK#BvTFnt;Qp=U2pTPqPgMn$(KY1v4AZy>TzEi#>bVeZZ%X28;3; zs#1G?6Zll3*_&XLF%dZ4F->AUipGx2`SH?#yll62o+S#6%Lib6yqAYrEV)&UW_~U!(OCem44?y!ESDUDFDG*)+Qv1r+L_DlTl}!=#VoLPYEYg&9Xw{@+Y6CLHfKFswg*=Qdy4xjs$kiiq9y0da)v|; zQWWWl208w=-z1nYX=+9(Ci3ZCd)MPwQUWo*wzI{5Vn>Y#kqm4J8G->axG zdJORcsVJgEtFN*eJxd-iu{5Ngbg6cKRywda86DExd^IOxt#ec0P>%_C>n60X>l207 zCf@5&{22?bcQ}_B%VjynaaalfL_ER93U6;kB<&~IIuZzuHg*c?h{vDk7o#cylLbX&zRhQ E0P1&EMF0Q* literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxhdpi/ic_sync_error_holo.png b/app/src/main/res/drawable-xxhdpi/ic_sync_error_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..8fb1ee383ed732b028a3ffeb9c3e8b135bea2d8f GIT binary patch literal 1889 zcmZ`)dpy(o8~<)tu954pxn>JR3^_Af+L&$0Vxg2vW^yQ(Tw)ekC|VcSm9SFM9GbG! zIjGj@v^6GHwsZn9x4w2fD)PH zM3o@vN611Xx95U@C;{nUoGT6hp4?E_2#}F*P&Ac@2ly>Ivl3zuNTRv|K*BBnNKOTS zHHnlw0|2p>05EqF0MNGpKr6Da#vLPhfY4lsPQccWbN9u=9ElxBCU0c+cIF=%`&;tKZwgxN!q}(%NdvNVxqm%>VWo zH{@O^m=M|q>0U>P!H;AMp~4A@4k2fA8~^cvxt1Okii`!123d}w$;Dem)H8}9G#D%LDy4McuFyu4EF(l&@iMPf}o~+ z=jIYidch&J_Tsir{-B40)ly2&%eB)o%-c+=PR7jW75b{)I1VWt`YO>^bj!^A)Lrhb zCwtalMavy$KZK3e)qarGVCGzJEEi&{T>GC$gX3j>Ba9=Hwg#rpw+tQejw;hFLgXu4 zNoY%7FTgre`PE!YnezvG3v!QKh7TUpBHN=tW~G@+zMBTD<0RF5<0m?{K9`cUvmXmm z9{6xr#!Z@J;~Do+mzoLeBw=&K4;&^VjWv1lQ~@H47E({PFCE!gbcZ-y zuku%|=sx)iQPsD4|1NCHNK{V=A}2_J&fpqj9K@iXG2FCb$8V*anDXx-ExbnTYRBf5i`s`)# za0ghkj`HPvQ*5W=U^(3(ism(jL+w?{mU;7GBQ2!1&8GxHX)g+%dBTEURnb$bRe!}c z6L`v&`1su$V0Y$pC+9df{{eRGz=ENz4n_kCFTB!HoOz0@+`|g14HFf%^hUn&?S|OO zxZP80`dK?dYbcJr_t%PEV*d(}S~Yw-ZOy%wD3@w|#%k(igdhe#uHlKdOT0syhigO3 z*#}%lkwzTEV)>5I$2hy8QYO%Ki72w%qHD|)3qR?OKF5`3f?VK;J?zUFa5t$k_Uk0& zwbsP_&3aD{_NLUQtJ6Z#IT@U*HZW@qm_YU^yTYSw!BlA!wDS9md{^`82|W|zp>a2! z(rNnQh8cJP*pg1thg{dP!M}Ir(3wvas&9>=#^B5T!6(#NnnS@ODKXzH#&Ix_ZDYzX zQoPx1k=p?eP(FSY(WbY^UMZ;mWNp_!o94RAbgR_Tt%7qKXT5I-#%*`t4{h=Lcq0w! z*)5;w20CiDtKvIcZ)bW$4t47NrLY?cvIQ7-r=* zdH)Ife!0swOV6wNvt|`Rr5}AOy2zt?@_Au#&)`ZX$pjl^*UV4W7pdg$3eDCzD zy2!3CVQ<8r)%h0;S~*F5Je8-#u#$-W)4G@l-qa)Z>}HlZwIu-)j0xv_HcnjnC>J{> zN2fa?@@%P5tP<%Q&$}4dspYjyl7)dOK7B$y+duC(s?I54EOLkGFm8Eu@6OCm@1jY6 zTRnW18Q1u(<{L%5a%a-Ows^H zv))(jak)+WYE8b3X{nq%9_}Jk<0?IP9X>gLaQGtMh#AU1(=VFxo@UCaFWoaAo%;39 zzX=ILva}EISI6Si7_+93D%q0nBT|0RE1orR`vv3qIFM+00&8W1us zMNe78&hZZAG?O>&+30MT2=1MCV0kg8;b5^Y7w`AFdN>ekvM`lqB~!&{znr2@#)c>| z@|kZl2c7W|D&TKBeb0s|+6*43>Y68clQP1$lMF7rzZJWnXf}A}p_<5{&L;t$#X>c$ezTR0H+E^7LRH1 z|A8IaiTb#zUtoXEpL?V^RI*7BF@$3=^njQkbYN7F1OO{bq>Z`d&*oNk9>{%YBob|7 zE1_sh%iz8d+P@585%iE#jQ=)hrUnm74B9^`9Ems;6BiH_1mNfqv>*d=SU_+PH7J12 TINK2PW7Pp<0>z1sKY8&VH{eea literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-xxxhdpi/ic_sync_error_holo.png b/app/src/main/res/drawable-xxxhdpi/ic_sync_error_holo.png new file mode 100644 index 0000000000000000000000000000000000000000..bb093d946b36ca0d76527193c85e3a1c0206c4c1 GIT binary patch literal 2231 zcmbVMc~nzZ8oyasLZJ=d0%*%KWGo=r10l~)2uWCk0EMuXfyqnqfM_<8Kv+h}K{~>4 zpcWAo%QP;uqOv)nR1^bL+&Tgyjz~uZHh+lvj3P?7VQz zpg^xw%p1ZeuSsP{lOU1ah(f{iV49N2W*VzJOI9J=0^$6)dKdNMz#K-wn7$4{YmiFc8rGTKBnnFzqX;oDSac>st6hle zmA1*8jQ)qlJGD)+Vgt%ZMoszxqY|q}uHPaU%iXU#T2RE;z==jRRun`d)+-CNsLmWK z4x?aS=qj}eW^#~RmV(QqaYB{3G%knBqamtXgr-83A$*jpj0)z8Bl)2m{vtM3XEGx?CA#Qajro3!4UPI$EG#mjh*@ux>Ghh$ zE=bDPoAsuAy#W%5Ab%;MRO=SxfQ1^p4q1#E)rF`k%Ba^uuaXR_-$6hbqC!<1o{Gj~ z^FnCc5S9`P9%a%LD3_Vb<1@KT6-s%7SN*@qV_>8h3!U;`owIm_wd2C^?Hpjj+et!o z*!UQ+IT@)ASONfXJXS1}6^%b?ii=4VdYv1J-Ee0O4-v|f#WGpG`qK@Nf(?I6R|itFGy_d1== z@OKDLd2ny(kQb1Nl3H^n(COo?lOp~~j>lKNh$%W92kI*11TcGGcGXTmd^qws1K9uEKZTy8UIBGhxu^B~jsD^` zVEwlFmI5^Ohb!v;(O~F(4~&1fi?p1?`*!QsY_zAUAo?2|ckS^douADeojoRgKCW>{ zS|iwxv$|NX_WS%{_D_Nbq!dF6ovj zuJ=0vo5$p{iWip~@gVNRotVjQuK2m`?()k5)r+JdOm3#A=$PJGcInv8JFn_rk}W7 zIFbFa^;!%9E7Q1W02ofC-a2s-)Vr5=T$?EA4NP@^Lf>AK_f^xz`EBO>Lk#>cqdPy! zP^Hv7@~t7ro$7w3&dRs`=s|nTLT=ht+LuvZ7EiS2P#&%*0AtnzWwT!P71Yy_PS&nV zUiPV#%I(fp3U$+{65NR?>3rntinbpn4Up%B2Sc4#KOIVBT&6X9yASO+lm(i%^}1AF zJ5o!3z^ludV1Xm^FPjN=3w2Y?Ij~L(n3V^1mb%J4>ps~_uzyV5boe$@QJK2lR68J} zfx^8No-4CE(^(C*=oNzw;v7=-XqO)+)|&R)cjW0m1^A&h^@7KNjGD8|2`#`iGTL zye-l{!9u$}J?`5ReE}EYIoXn*zS2%D{2M}UBR>)3;(_Me9+%nHsvQl4^NvWO)fe9V ztoO=k{5&}ORVP7m->m^^J$!Xaa3m3%<9`Ko+OK)$lMdmMZfrk)DsV4Haj#;z z@op)<*HZ%k<7Pn!4qT0uf!d0+wJsn^;^dK)88c@q+#{CAD@y_<-IHxNdy9Byp@$=R z-6=a|An56V!Aujq?@Ytocw>1FMV>V{OUpF^QDXV@ ok-4&A`TzQbcmaZ3J?x8f1nHYC?3~AC{{+~Il_ZGUBIV`(23x>AdH?_b literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/fragment_notes_list_note_item.xml b/app/src/main/res/layout/fragment_notes_list_note_item.xml index 5a2c834bb..715f5bed8 100644 --- a/app/src/main/res/layout/fragment_notes_list_note_item.xml +++ b/app/src/main/res/layout/fragment_notes_list_note_item.xml @@ -18,6 +18,7 @@ android:layout_alignParentEnd="false" android:layout_alignParentRight="true" android:layout_alignParentStart="true" + android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_alignWithParentIfMissing="true" android:ellipsize="end" @@ -38,6 +39,14 @@ android:textColor="@drawable/list_item_color_selector_low" android:textSize="14sp"/> + + Date: Fri, 1 Jul 2016 21:45:19 +0200 Subject: [PATCH 2/4] Refactoring: move common code to new private method getNotesRawQuery(String sql, String[] selectionArgs) New method getLocalModifiedNotes() is a preparation for bugfixing #117 --- .../persistence/NoteSQLiteOpenHelper.java | 70 +++++++------------ 1 file changed, 27 insertions(+), 43 deletions(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java index cb27390f2..409e152ef 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteSQLiteOpenHelper.java @@ -141,14 +141,15 @@ public DBNote getNote(long id) { } /** - * Returns a list of all Notes in the Database - * - * @return List<Note> + * Query the database with a custom raw query. + * @param sql SQL query + * @param selectionArgs Arguments for the SQL query + * @return List of Notes */ - public List getNotes() { + private List getNotesRawQuery(String sql, String[] selectionArgs) { + SQLiteDatabase db = getReadableDatabase(); + Cursor cursor = db.rawQuery(sql, selectionArgs); List notes = new ArrayList<>(); - SQLiteDatabase db = this.getReadableDatabase(); - Cursor cursor = db.rawQuery("SELECT * FROM " + table_notes + " WHERE " + key_status + " != ? ORDER BY " + key_modified + " DESC", new String[]{DBStatus.LOCAL_DELETED.getTitle()}); if (cursor.moveToFirst()) { do { Calendar modified = Calendar.getInstance(); @@ -166,30 +167,22 @@ public List getNotes() { return notes; } + /** + * Returns a list of all Notes in the Database + * + * @return List<Note> + */ + public List getNotes() { + return getNotesRawQuery("SELECT * FROM " + table_notes + " WHERE " + key_status + " != ? ORDER BY " + key_modified + " DESC", new String[]{DBStatus.LOCAL_DELETED.getTitle()}); + } + /** * Returns a list of all Notes in the Database * * @return List<Note> */ public List searchNotes(String query) { - List notes = new ArrayList<>(); - SQLiteDatabase db = this.getReadableDatabase(); - Cursor cursor = db.rawQuery("SELECT * FROM " + table_notes + " WHERE " + key_status + " != ? AND " + key_content + " LIKE ? ORDER BY " + key_modified + " DESC", new String[]{DBStatus.LOCAL_DELETED.getTitle(), "%" + query + "%"}); - if (cursor.moveToFirst()) { - do { - Calendar modified = Calendar.getInstance(); - try { - String modifiedStr = cursor.getString(3); - if (modifiedStr != null) - modified.setTime(new SimpleDateFormat(DATE_FORMAT, Locale.GERMANY).parse(modifiedStr)); - } catch (ParseException e) { - e.printStackTrace(); - } - notes.add(new DBNote(Long.valueOf(cursor.getString(0)), modified, cursor.getString(2), cursor.getString(4), DBStatus.parse(cursor.getString(1)))); - } while (cursor.moveToNext()); - } - cursor.close(); - return notes; + return getNotesRawQuery("SELECT * FROM " + table_notes + " WHERE " + key_status + " != ? AND " + key_content + " LIKE ? ORDER BY " + key_modified + " DESC", new String[]{DBStatus.LOCAL_DELETED.getTitle(), "%" + query + "%"}); } /** @@ -197,25 +190,16 @@ public List searchNotes(String query) { * * @return List<Note> */ - public List getNotesByStatus(DBStatus status) { - List notes = new ArrayList<>(); - SQLiteDatabase db = this.getWritableDatabase(); - Cursor cursor = db.rawQuery("SELECT * FROM " + table_notes + " WHERE " + key_status + " = ?", new String[]{status.getTitle()}); - if (cursor.moveToFirst()) { - do { - Calendar modified = Calendar.getInstance(); - try { - String modifiedStr = cursor.getString(3); - if (modifiedStr != null) - modified.setTime(new SimpleDateFormat(DATE_FORMAT, Locale.GERMANY).parse(modifiedStr)); - } catch (ParseException e) { - e.printStackTrace(); - } - notes.add(new Note(Long.valueOf(cursor.getString(0)), modified, cursor.getString(2), cursor.getString(4))); - } while (cursor.moveToNext()); - } - cursor.close(); - return notes; + public List getNotesByStatus(DBStatus status) { + return getNotesRawQuery("SELECT * FROM " + table_notes + " WHERE " + key_status + " = ?", new String[]{status.getTitle()}); + } + /** + * Returns a list of all Notes in the Database with were modified locally + * + * @return List<Note> + */ + public List getLocalModifiedNotes() { + return getNotesRawQuery("SELECT * FROM " + table_notes + " WHERE " + key_status + " != ?", new String[]{DBStatus.VOID.getTitle()}); } /** From 5f455f618e0c9662c491e1eba8f5ea1dc33cd838 Mon Sep 17 00:00:00 2001 From: korelstar Date: Sat, 2 Jul 2016 22:07:32 +0200 Subject: [PATCH 3/4] last part from the previous refactoring --- .../owncloud/notes/persistence/NoteServerSyncHelper.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java index 019ed6e4f..c6335a673 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NoteServerSyncHelper.java @@ -16,6 +16,7 @@ import java.util.List; import it.niedermann.owncloud.notes.android.activity.SettingsActivity; +import it.niedermann.owncloud.notes.model.DBNote; import it.niedermann.owncloud.notes.model.DBStatus; import it.niedermann.owncloud.notes.model.Note; import it.niedermann.owncloud.notes.util.ICallback; @@ -99,7 +100,7 @@ private void asyncTaskFinished() { } public void uploadEditedNotes() { - List notes = db.getNotesByStatus(DBStatus.LOCAL_EDITED); + List notes = db.getNotesByStatus(DBStatus.LOCAL_EDITED); for (Note note : notes) { UploadEditedNotesTask editedNotesTask = new UploadEditedNotesTask(); editedNotesTask.execute(note); @@ -107,7 +108,7 @@ public void uploadEditedNotes() { } public void uploadNewNotes() { - List notes = db.getNotesByStatus(DBStatus.LOCAL_CREATED); + List notes = db.getNotesByStatus(DBStatus.LOCAL_CREATED); for (Note note : notes) { UploadNewNoteTask newNotesTask = new UploadNewNoteTask(); newNotesTask.execute(note); @@ -115,7 +116,7 @@ public void uploadNewNotes() { } public void uploadDeletedNotes() { - List notes = db.getNotesByStatus(DBStatus.LOCAL_DELETED); + List notes = db.getNotesByStatus(DBStatus.LOCAL_DELETED); for (Note note : notes) { UploadDeletedNoteTask deletedNotesTask = new UploadDeletedNoteTask(); deletedNotesTask.execute(note); From b031f47d33f22a9fa2152e0cfb3e6b0320fb9e98 Mon Sep 17 00:00:00 2001 From: korelstar Date: Tue, 5 Jul 2016 14:49:00 +0200 Subject: [PATCH 4/4] use material design icon and remove old holo icon --- .../drawable-hdpi/ic_sync_alert_black_18dp.png | Bin 0 -> 518 bytes .../res/drawable-hdpi/ic_sync_error_holo.png | Bin 1154 -> 0 bytes .../drawable-mdpi/ic_sync_alert_black_18dp.png | Bin 0 -> 344 bytes .../res/drawable-mdpi/ic_sync_error_holo.png | Bin 790 -> 0 bytes .../drawable-xhdpi/ic_sync_alert_black_18dp.png | Bin 0 -> 658 bytes .../res/drawable-xhdpi/ic_sync_error_holo.png | Bin 1411 -> 0 bytes .../drawable-xxhdpi/ic_sync_alert_black_18dp.png | Bin 0 -> 855 bytes .../res/drawable-xxhdpi/ic_sync_error_holo.png | Bin 1889 -> 0 bytes .../ic_sync_alert_black_18dp.png | Bin 0 -> 1003 bytes .../res/drawable-xxxhdpi/ic_sync_error_holo.png | Bin 2231 -> 0 bytes .../res/layout/fragment_notes_list_note_item.xml | 6 +++--- 11 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 app/src/main/res/drawable-hdpi/ic_sync_alert_black_18dp.png delete mode 100644 app/src/main/res/drawable-hdpi/ic_sync_error_holo.png create mode 100644 app/src/main/res/drawable-mdpi/ic_sync_alert_black_18dp.png delete mode 100644 app/src/main/res/drawable-mdpi/ic_sync_error_holo.png create mode 100644 app/src/main/res/drawable-xhdpi/ic_sync_alert_black_18dp.png delete mode 100644 app/src/main/res/drawable-xhdpi/ic_sync_error_holo.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_sync_alert_black_18dp.png delete mode 100644 app/src/main/res/drawable-xxhdpi/ic_sync_error_holo.png create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_sync_alert_black_18dp.png delete mode 100644 app/src/main/res/drawable-xxxhdpi/ic_sync_error_holo.png diff --git a/app/src/main/res/drawable-hdpi/ic_sync_alert_black_18dp.png b/app/src/main/res/drawable-hdpi/ic_sync_alert_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d4f7994ef087505aa470ab188a6a8178e290a133 GIT binary patch literal 518 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i1|)m0d(}6TtKf~3pEvFe67$-)rm$RcltG)BOghZX5i4k`W zxp7BbnlRt`~km%N(uSznOAJ(U!WoM-${wX^Gnnloyh5TXLE)%%5cm! zFs?2;_lG5IhS?d-zhVvf3*p1j>SfKCo6UJ zFDEekvDp9nKyS_c6Uy2re=bw$I(Y48f6u;<^+jPtdb^nHRDVlMd-~?t-VtD3k zB=@X-{jBnx_UX3|a2JSt=skO8v&XNcXEWMf9@J0U(Qr|JdDwekOfh)6`njxgN@xNA DzE{|k1|%Oc%$NbBSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+eS5K)hhiu0R{01Y44~ zy9>jA5L~c#`DCC7XMsm#F_88EW4Dvpb_@*6L7py-ArXh)&all0aTGXS|6MQLV8xF{ zF}Dqz9AR}LVQO9Rt@2wPlTsI-t1mg__Q-|yS*BzR$3xJJtn zsRhhGI7Nh0>KKbHb6gH2tv;8_daQvpL28ESc^R$y8mqa$`T40$-%Ky4Gm1wX()^$7t5nG?!*)-4hjVMp^!KWjiw^A4 zdm#6L;f97;k@C_&IT2>l!d0^v71!>bd_;5Js!_|CG8+k!l&u3RLwZh?BsdgkkAs@96W&X}#RU{@7uZ0V~oA+Nv( zwSqTTW5n3G4u~e`uUjT?WJ;E14e#`8zYnM;OntGRTWdBoRqU6uNPL!m>IPp8OCMwY3BR)IypsPcHaO<6 zWqW?U>l-7yKEr0Mvhthx=H74ZrplYY{$9OpwgA(O%x7^PELsapLlyqBMvMG>p5~YP z*HNS7OTO73_4tNkhrZsQ%5S;aN=-P&RMDkt(w6*%i_UrZ_O%PlGO9_Rr10_WUls|2 zJxWVgehs{xR#M~n*(~JBV_lcGi!+{f@916hYq#xf-$M_!JxW);GFfekP=x#j{~u+N z{1SVGcPJmb)%8RuroFTn$j@`B8R;qD)=AB~Q z&am#(9qR<{g1#O5XC06Azn1oy`{UhDLOXQtg*PTX*z!T};lAVQcMW29e9r0EQ7?6@ zbZM2@(n(4e8nZ=nUK?<%`MSW*EAr-vYdp97Pu{GHcw*JrUsamLcD*KYxz5j(YrJM{ zDYbmEmRstZXRvwaZAs-Fx9jC@v}DVg99kN6!>adrpzEawRcCvVqF34lTo&GU_%&B9 zTxCm^p3Lw_e^tlYnCZak+&bGG9orb|ih)croLsa#h0)uiqB$)$YeMv@-N zXR1zbe=N0gNw#}^&%YDh0UV9{clrfs@;m)^`oHPV<)l`r7v}B{UoKlZrD8QOo2iz# zMwFx^mZVxG7o`Fz1|tJQ6I}yyT_ej7LsKh5Ln{+AAlJ&kApPe3Boqy~`6-!cmAEyC zwWQwzYLEok5S*V@Ql40p%HWuipOmWLnVXoN8kCxtQdxL16;u{5c)I$ztaD0e0svFC B;>!R4 diff --git a/app/src/main/res/drawable-mdpi/ic_sync_alert_black_18dp.png b/app/src/main/res/drawable-mdpi/ic_sync_alert_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..b4947b7531f4ba404127680aaa435498fd9b7edd GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|wj^(N7a$D;Kb?2i11Zh|kH}&m z?E%JaC$sH9f@KAc=|CE+pF!Co&kM+T?CIhdVsZNEWJA6t1BurCD-zWnvh}&KOC38TKvFd|AC`-~PYc_3f$~%GQKCtp3O# zX4lMM;ZgA?aSEU6P46v}G!KL=HeS^z9`M6Qh_kFuWa>Wesgs#`1$OrsJ>Ya!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YPV z+ueoXKL{?^yL>WGgtNdSvKUBvfU(=jY&)Rw&pcfmLp+Y3opw@>B~YYo|D|VQSLa6D z_{bn8mRrGpk2$(bNO29v`y}0O+f>?EIg`57STa)!|4+7yUA0R^sc`Z+&%4Hd()aP! z*DPwvw>}wfJ*nL5*I$h$4hgon;5{rAIvtBxYPL;&DKK~X1?B?oD~-kqWkqV%9BY_N zkDvA~>^^>)DYN4qbEtZ9k*MV)hG>U;w=g5dQwJ7`2tV*UCJ=CyaV^97Nw-<6ZZ$@{ zxE-`3P=x;g!v+2rhUZ@Wa|<81SXpaE-|zAF_`oZ{JguSJHFVl`|8;727nweA-8DH< z;ab*gp<4xeSQ9v2O#ZlwxkKi}uGQ_^Z%$gz%<21j_vuQZ(-l$&egt2#{ZRTfk%wt< zi>1Z2*yi_}C+RKt`fp{4drhxZX1!3l!o=?{Z&l7T$;j(kX2d0WQD@urmqK&Tc?Uk? z+N5taS$JW8n#2rdyApHlUFuPvCeBzsc~{NColI-IlOAyGP&?x?^TN6AmT7g9-?_Mb z(G@q#P;XH@#291Mz<5Z&jKle6*@YV2Dvsp&0&LkwKPJu6jZ$1AsQqc8!{ySmEH71g zdUCIIJ)Z3|bpyxWq!>LWgJrD|%-1r$ZH>Qfm^k%1=jyv=ujlv&hcH~yC{S7UHL+r8Vb{*JddJqh7VdHKHUXu_Vl#^x7@Arc8d{l{0l8KN2I)8NC!uJ_%}>cptHiBAtR?*(P=h4MhT#0PlJdl&R0hYC h{G?O`&)mfH)S%SFl*+=Bsi5@9;OXk;vd$@?2>|L1FDL*2 diff --git a/app/src/main/res/drawable-xhdpi/ic_sync_alert_black_18dp.png b/app/src/main/res/drawable-xhdpi/ic_sync_alert_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..031a5c40ccb183a427f898234d736d927e18c3b5 GIT binary patch literal 658 zcmV;D0&V??P) zCUFiI5^V3F-RIdxGw(E!NTh*fe8f6V51H5}oXy@n*q7kEA5U;;ND`G~QV1QyD;$mb zcJO`(LRZSjRACyMx;1ZM6*D=z6S$o{aVg8z&^o5-5PA>=`HiI#yZFcVO8UQGFZ#Y) z_S3ROeFQ7f_f0&lla)}OQ@MC6m>q=BEn$npORNn+rn7(_;dRzOEtEJ3li1ar-h~SL zvXU+PS7#O@+piL3XI`&(RiTVf5gNjJ>e$ca4T=~Zi`s8er!^66-LetZY9*lqQTyA7 z2@y)w!Qm7_?TYbX(TduQ{9ut%_syUH?*z>vsCpF+MeUuG4CeF-S|i120BlF`=TjUe zvRUdlE#}6XxK@+QLKJsbSL-UV7CFXcXl5D4+q>*6E5eH??&Co+nZ>Wj`9?&h-Dri!3kgOss;bAV`)}TSAgsVc)6(XLAGq|5U`K#?r_VZTc zyD6MywQxLvP#G@bN6znqaOo>WKjCZQS=~&8BPdq==QxS)bqF=Fq5hhQv4yL+jGtA; sMM^y?GH-ESkc~ehNNkKT#uy3y0hHSyBJs6?qpkD^L|X5*AA0sSD4MX5!M!!$0j!v<#oCw?mEIr z(X7W3nS1jJJ>)of)Dn?GO+tyf>;8BDxaWJm-_QAczUTA({P!&kq){~0cB%mYG<~RK zx&rY(T2)yw!=PXC6#!>@1b6_@dQN>aR!PAjN9Yt!(DDfNRzXbTsPq5;j_(41p9jE( zLgLQ@z*Ag#7XyG}B>+28FWwDuRxFemeiSnJ{-cEV8p{<5B9$6(M1jPLibmlo;1-mR2D+AcCT7`uIMWP`PJ>zu=oY@d zz;^d6Ay1dUn*+NssgP~fy;{9%L{!u1D~anvYl}37_e5Ewi<3)KNKQx?k7w z5#y7VoFuQU9tpTuP41m9yFoKfT>C~6m4L3^Il+#uovE7PoZf{eP}bSuu%_27*u}|` zzx@Irn@bwY+HzZb<4ki;KH)C)xgO8BKX)wrX~}j*w%s(0j>Dj_hRDl`YjkU-%gBd-`7f} zyXfp4(-oTZZ?<57o=DXhf#V$Pi$~q}qhg(HAYixnMVtHF-l?&IwxE4)FxEA$Wu&6g zmy4m$$3?I%nF)BWBK`yRLPj653N6WM*lJmGGdsK#BvTFnt;Qp=U2pTPqPgMn$(KY1v4AZy>TzEi#>bVeZZ%X28;3; zs#1G?6Zll3*_&XLF%dZ4F->AUipGx2`SH?#yll62o+S#6%Lib6yqAYrEV)&UW_~U!(OCem44?y!ESDUDFDG*)+Qv1r+L_DlTl}!=#VoLPYEYg&9Xw{@+Y6CLHfKFswg*=Qdy4xjs$kiiq9y0da)v|; zQWWWl208w=-z1nYX=+9(Ci3ZCd)MPwQUWo*wzI{5Vn>Y#kqm4J8G->axG zdJORcsVJgEtFN*eJxd-iu{5Ngbg6cKRywda86DExd^IOxt#ec0P>%_C>n60X>l207 zCf@5&{22?bcQ}_B%VjynaaalfL_ER93U6;kB<&~IIuZzuHg*c?h{vDk7o#cylLbX&zRhQ E0P1&EMF0Q* diff --git a/app/src/main/res/drawable-xxhdpi/ic_sync_alert_black_18dp.png b/app/src/main/res/drawable-xxhdpi/ic_sync_alert_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..83cf8b06c40dc57250529a7aed921eb17cfc9170 GIT binary patch literal 855 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 TINK2PW7Pp<0>z1sKY8&VH{eea diff --git a/app/src/main/res/drawable-xxxhdpi/ic_sync_alert_black_18dp.png b/app/src/main/res/drawable-xxxhdpi/ic_sync_alert_black_18dp.png new file mode 100644 index 0000000000000000000000000000000000000000..768785eac639c0234b45e1511d5681b697175e57 GIT binary patch literal 1003 zcmVX5XGK^Jd9|A4Y0By{oU9_rLZsK3I4 z#|~Z06cp*yL8wDQH#IC>5Vuyh!xV_TZ}xNdo1NX5AH2)=eBaFc-Z*dGyje&j5{X12 zkw_#GiNycRHN#w0gQFN*2tYSb09JuY3kixYrw@1q9GqR5_El0a#Pf7=oh9IjvE_Q{XKy9zoCvFcC}61hsq4Ixrld z?2GiEV<6vbIRik+Q>ilW4CrXE!4`t5zz)#gEID1kM^9z;x%eFmEvO2tpub@aG3Tko z9xzl#PAfrgfL+h|LTEWRkpH#Hz-XO$Ed&++p1X@1cck9k8&c4Mr!mtFP#`zquEad!&dx6Qf3ig!s+atyj>{_^B22MTie7udhW;I4qFf6Spk|eHP*mj2aP=5h1>%xmYV` zU5G!z?oNjw2RszcZCDo6i@bE8?M3qu1dR!GJ|(~+{+dwOqEb$bceW*=&ZfQRA5+Ln z2fl^+d2AZn-k6z-6+>qIq;PW9yl84!Or4Vf>nLmY1H!%+!$6 zOhMD0oC~4kfE%p$g@TW9pIjt4%@Q<KEils$P$C>O{q$s>Q_4Y|H^mSNm1 z-&baZ$a{pO8FolP4 zpcWAo%QP;uqOv)nR1^bL+&Tgyjz~uZHh+lvj3P?7VQz zpg^xw%p1ZeuSsP{lOU1ah(f{iV49N2W*VzJOI9J=0^$6)dKdNMz#K-wn7$4{YmiFc8rGTKBnnFzqX;oDSac>st6hle zmA1*8jQ)qlJGD)+Vgt%ZMoszxqY|q}uHPaU%iXU#T2RE;z==jRRun`d)+-CNsLmWK z4x?aS=qj}eW^#~RmV(QqaYB{3G%knBqamtXgr-83A$*jpj0)z8Bl)2m{vtM3XEGx?CA#Qajro3!4UPI$EG#mjh*@ux>Ghh$ zE=bDPoAsuAy#W%5Ab%;MRO=SxfQ1^p4q1#E)rF`k%Ba^uuaXR_-$6hbqC!<1o{Gj~ z^FnCc5S9`P9%a%LD3_Vb<1@KT6-s%7SN*@qV_>8h3!U;`owIm_wd2C^?Hpjj+et!o z*!UQ+IT@)ASONfXJXS1}6^%b?ii=4VdYv1J-Ee0O4-v|f#WGpG`qK@Nf(?I6R|itFGy_d1== z@OKDLd2ny(kQb1Nl3H^n(COo?lOp~~j>lKNh$%W92kI*11TcGGcGXTmd^qws1K9uEKZTy8UIBGhxu^B~jsD^` zVEwlFmI5^Ohb!v;(O~F(4~&1fi?p1?`*!QsY_zAUAo?2|ckS^douADeojoRgKCW>{ zS|iwxv$|NX_WS%{_D_Nbq!dF6ovj zuJ=0vo5$p{iWip~@gVNRotVjQuK2m`?()k5)r+JdOm3#A=$PJGcInv8JFn_rk}W7 zIFbFa^;!%9E7Q1W02ofC-a2s-)Vr5=T$?EA4NP@^Lf>AK_f^xz`EBO>Lk#>cqdPy! zP^Hv7@~t7ro$7w3&dRs`=s|nTLT=ht+LuvZ7EiS2P#&%*0AtnzWwT!P71Yy_PS&nV zUiPV#%I(fp3U$+{65NR?>3rntinbpn4Up%B2Sc4#KOIVBT&6X9yASO+lm(i%^}1AF zJ5o!3z^ludV1Xm^FPjN=3w2Y?Ij~L(n3V^1mb%J4>ps~_uzyV5boe$@QJK2lR68J} zfx^8No-4CE(^(C*=oNzw;v7=-XqO)+)|&R)cjW0m1^A&h^@7KNjGD8|2`#`iGTL zye-l{!9u$}J?`5ReE}EYIoXn*zS2%D{2M}UBR>)3;(_Me9+%nHsvQl4^NvWO)fe9V ztoO=k{5&}ORVP7m->m^^J$!Xaa3m3%<9`Ko+OK)$lMdmMZfrk)DsV4Haj#;z z@op)<*HZ%k<7Pn!4qT0uf!d0+wJsn^;^dK)88c@q+#{CAD@y_<-IHxNdy9Byp@$=R z-6=a|An56V!Aujq?@Ytocw>1FMV>V{OUpF^QDXV@ ok-4&A`TzQbcmaZ3J?x8f1nHYC?3~AC{{+~Il_ZGUBIV`(23x>AdH?_b diff --git a/app/src/main/res/layout/fragment_notes_list_note_item.xml b/app/src/main/res/layout/fragment_notes_list_note_item.xml index 715f5bed8..2c38a8a59 100644 --- a/app/src/main/res/layout/fragment_notes_list_note_item.xml +++ b/app/src/main/res/layout/fragment_notes_list_note_item.xml @@ -41,11 +41,11 @@ + android:src="@drawable/ic_sync_alert_black_18dp"/>