From e7cc74e23071d763c31ec21a94b2a15692fae0f7 Mon Sep 17 00:00:00 2001 From: xingxing Date: Thu, 24 May 2018 00:30:42 +0800 Subject: [PATCH] sort note by UpdateTime,CreateTime, Title --- .../java/org/houxg/leamonax/model/Note.java | 66 +++++++++- .../org/houxg/leamonax/ui/BaseActivity.java | 6 + .../org/houxg/leamonax/ui/NoteFragment.java | 49 +++++++- .../leamonax/widget/SelectPopupWindow.java | 115 ++++++++++++++++++ .../main/res/drawable-xxhdpi/ic_menu_more.png | Bin 0 -> 599 bytes .../res/drawable-xxhdpi/ic_pop_checked.png | Bin 0 -> 533 bytes .../main/res/layout/simple_list_item_1.xml | 27 ++++ app/src/main/res/menu/note.xml | 6 + app/src/main/res/values-zh/arrays.xml | 20 +++ app/src/main/res/values/arrays.xml | 20 +++ 10 files changed, 307 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/org/houxg/leamonax/widget/SelectPopupWindow.java create mode 100644 app/src/main/res/drawable-xxhdpi/ic_menu_more.png create mode 100644 app/src/main/res/drawable-xxhdpi/ic_pop_checked.png create mode 100644 app/src/main/res/layout/simple_list_item_1.xml create mode 100644 app/src/main/res/values-zh/arrays.xml create mode 100644 app/src/main/res/values/arrays.xml diff --git a/app/src/main/java/org/houxg/leamonax/model/Note.java b/app/src/main/java/org/houxg/leamonax/model/Note.java index 2f03bd0..47db184 100644 --- a/app/src/main/java/org/houxg/leamonax/model/Note.java +++ b/app/src/main/java/org/houxg/leamonax/model/Note.java @@ -342,7 +342,7 @@ public class Note extends BaseModel implements Serializable { return msg; } - public static class UpdateTimeComparetor implements Comparator { + public static class UpdateTimeDescComparetor implements Comparator { @Override public int compare(Note lhs, Note rhs) { long lTime = lhs.getUpdatedTimeVal(); @@ -356,4 +356,68 @@ public class Note extends BaseModel implements Serializable { } } } + + public static class UpdateTimeAscComparetor implements Comparator { + @Override + public int compare(Note lhs, Note rhs) { + long lTime = lhs.getUpdatedTimeVal(); + long rTime = rhs.getUpdatedTimeVal(); + if (lTime > rTime) { + return 1; + } else if (lTime < rTime) { + return -1; + } else { + return 0; + } + } + } + + public static class CreateTimeDescComparetor implements Comparator { + @Override + public int compare(Note lhs, Note rhs) { + long lTime = lhs.getCreatedTimeVal(); + long rTime = rhs.getCreatedTimeVal(); + if (lTime > rTime) { + return -1; + } else if (lTime < rTime) { + return 1; + } else { + return 0; + } + } + } + + public static class CreateTimeAscComparetor implements Comparator { + @Override + public int compare(Note lhs, Note rhs) { + long lTime = lhs.getCreatedTimeVal(); + long rTime = rhs.getCreatedTimeVal(); + if (lTime > rTime) { + return 1; + } else if (lTime < rTime) { + return -1; + } else { + return 0; + } + } + } + + public static class TitleDescComparetor implements Comparator { + @Override + public int compare(Note lhs, Note rhs) { + String lTitle = lhs.getTitle(); + String rTitle = rhs.getTitle(); + return lTitle.compareTo(rTitle); + } + } + + public static class TitleAscComparetor implements Comparator { + @Override + public int compare(Note lhs, Note rhs) { + String lTitle = lhs.getTitle(); + String rTitle = rhs.getTitle(); + return rTitle.compareTo(lTitle); + } + } + } diff --git a/app/src/main/java/org/houxg/leamonax/ui/BaseActivity.java b/app/src/main/java/org/houxg/leamonax/ui/BaseActivity.java index 4bf4e9e..b706c30 100644 --- a/app/src/main/java/org/houxg/leamonax/ui/BaseActivity.java +++ b/app/src/main/java/org/houxg/leamonax/ui/BaseActivity.java @@ -13,6 +13,7 @@ import org.houxg.leamonax.R; public class BaseActivity extends AppCompatActivity { + private Toolbar mToolbar; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -26,8 +27,13 @@ public class BaseActivity extends AppCompatActivity { initToolBar(toolbar, false); } + public Toolbar getToolbar() { + return mToolbar; + } + protected void initToolBar(Toolbar toolbar, boolean hasBackArrow) { if (toolbar != null) { + mToolbar = toolbar; setSupportActionBar(toolbar); toolbar.setTitleTextColor(0xffFAFAFA); toolbar.setTitle(getTitle()); diff --git a/app/src/main/java/org/houxg/leamonax/ui/NoteFragment.java b/app/src/main/java/org/houxg/leamonax/ui/NoteFragment.java index e4efda3..23f9064 100644 --- a/app/src/main/java/org/houxg/leamonax/ui/NoteFragment.java +++ b/app/src/main/java/org/houxg/leamonax/ui/NoteFragment.java @@ -7,12 +7,14 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.Toolbar; 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.widget.AdapterView; import org.greenrobot.eventbus.EventBus; import org.houxg.leamonax.Leamonax; @@ -28,9 +30,11 @@ import org.houxg.leamonax.utils.NetworkUtils; import org.houxg.leamonax.utils.SharedPreferenceUtils; import org.houxg.leamonax.utils.ToastUtils; import org.houxg.leamonax.widget.NoteList; +import org.houxg.leamonax.widget.SelectPopupWindow; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.List; import butterknife.BindView; @@ -57,6 +61,7 @@ public class NoteFragment extends Fragment implements NoteAdapter.NoteAdapterLis NoteList mNoteList; Mode mCurrentMode; OnSearchFinishListener mOnSearchFinishListener; + private int mSortType = -1; public void setOnSearchFinishListener(OnSearchFinishListener onSearchFinishListener) { this.mOnSearchFinishListener = onSearchFinishListener; @@ -72,6 +77,7 @@ public class NoteFragment extends Fragment implements NoteAdapter.NoteAdapterLis @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + mSortType = SharedPreferenceUtils.read(SharedPreferenceUtils.CONFIG, SelectPopupWindow.SP_SORT_TYPE, -1); setHasOptionsMenu(true); } @@ -86,10 +92,26 @@ public class NoteFragment extends Fragment implements NoteAdapter.NoteAdapterLis if (item.getItemId() == R.id.action_view_type) { mNoteList.toggleType(); SharedPreferenceUtils.write(SharedPreferenceUtils.CONFIG, SP_VIEW_TYPE, mNoteList.getType()); + } else if (item.getItemId() == R.id.action_view_more) { + final SelectPopupWindow popupWindow = new SelectPopupWindow(getContext()); + if (getActivity() instanceof BaseActivity) { + Toolbar toolbar = ((BaseActivity) getActivity()).getToolbar(); + popupWindow.setOnItemClickListener(new SelectPopupWindow.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int value) { + mSortType = value; + renderNotes(); + popupWindow.dismiss(); + } + }); + popupWindow.showPopWindow(toolbar); + } } return super.onOptionsItemSelected(item); } + + @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -148,13 +170,38 @@ public class NoteFragment extends Fragment implements NoteAdapter.NoteAdapterLis notes = new ArrayList<>(); } mNotes = notes; - Collections.sort(mNotes, new Note.UpdateTimeComparetor()); + renderNotes(); + } + + private void renderNotes() { + Collections.sort(mNotes, getComparatorBySortType(mSortType)); mNoteList.render(mNotes); if (mNotes.size() == 0 && mOnSearchFinishListener != null) { mOnSearchFinishListener.doSearchFinish(); } } + private Comparator getComparatorBySortType(int sortType) { + switch (sortType) { + case 1: + return new Note.CreateTimeAscComparetor(); + case 2: + return new Note.CreateTimeDescComparetor(); + case 3: + return new Note.UpdateTimeAscComparetor(); + case 4: + return new Note.UpdateTimeDescComparetor(); + case 5: + return new Note.TitleAscComparetor(); + case 6: + return new Note.TitleDescComparetor(); + default: + return new Note.UpdateTimeDescComparetor(); + } + + } + + @Override public void onClickNote(Note note) { if (mActionModeHandler.isActionMode()) { diff --git a/app/src/main/java/org/houxg/leamonax/widget/SelectPopupWindow.java b/app/src/main/java/org/houxg/leamonax/widget/SelectPopupWindow.java new file mode 100644 index 0000000..74a9768 --- /dev/null +++ b/app/src/main/java/org/houxg/leamonax/widget/SelectPopupWindow.java @@ -0,0 +1,115 @@ +package org.houxg.leamonax.widget; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.support.v7.widget.ListPopupWindow; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import org.houxg.leamonax.R; +import org.houxg.leamonax.utils.DisplayUtils; +import org.houxg.leamonax.utils.SharedPreferenceUtils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class SelectPopupWindow extends ListPopupWindow { + public static final String SP_SORT_TYPE = "sp_sort_type"; + private Context mContext; + private OnItemClickListener mOnItemClickListener; + private Adapter mAdapter; + private int mChecked = -1; + + public void setOnItemClickListener(OnItemClickListener onItemClickListener) { + this.mOnItemClickListener = onItemClickListener; + } + + public SelectPopupWindow(Context context) { + super(context); + this.mContext = context; + } + + @SuppressLint("RestrictedApi") + public void showPopWindow(View anchorView) { + String[] selectKey = mContext.getResources().getStringArray(R.array.select_key); + final String[] selectValue = mContext.getResources().getStringArray(R.array.select_value); + mAdapter = new Adapter(); + mAdapter.setDatas(new ArrayList<>(Arrays.asList(selectKey))); + mChecked = SharedPreferenceUtils.read(SharedPreferenceUtils.CONFIG, SP_SORT_TYPE, mChecked); + mAdapter.setChecked(mChecked); + setAdapter(mAdapter); + setWidth(DisplayUtils.dp2px(180)); + setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); + setDropDownGravity(Gravity.END); + setAnchorView(anchorView); + setOverlapAnchor(true); + setModal(true); + setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + int value = Integer.valueOf(selectValue[position]); + SharedPreferenceUtils.write(SharedPreferenceUtils.CONFIG, SP_SORT_TYPE, value); + if (mOnItemClickListener != null) { + mOnItemClickListener.onItemClick(parent, view, value); + } + } + }); + show(); + } + + class Adapter extends BaseAdapter { + List datas = new ArrayList<>(); + private int checked = -1; + + void setDatas(List datas) { + this.datas = datas; + } + + @Override + public int getCount() { + return datas.size(); + } + + @Override + public String getItem(int position) { + return datas.get(position); + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.simple_list_item_1, parent, false); + } + ImageView checkView = convertView.findViewById(R.id.check); + TextView textView = convertView.findViewById(android.R.id.text1); + if (checked == (position + 1)) { + checkView.setVisibility(View.VISIBLE); + } else { + checkView.setVisibility(View.INVISIBLE); + } + textView.setText(getItem(position)); + return convertView; + } + + public void setChecked(int checked) { + this.checked = checked; + } + } + + public interface OnItemClickListener { + void onItemClick(AdapterView parent, View view, int value); + } + +} diff --git a/app/src/main/res/drawable-xxhdpi/ic_menu_more.png b/app/src/main/res/drawable-xxhdpi/ic_menu_more.png new file mode 100644 index 0000000000000000000000000000000000000000..9f6fcec5a6824ce26416eecd4e6af0b0098ee8c6 GIT binary patch literal 599 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL1|)l2v+e>ZmUKs7M+SzC{oH>NS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZKG z?d}4kf#9d}?s_1_S>O>_45U54*zIJt9ng3QPZ!6KjC*fy82TM{5NLfEsh4nBxld5F zMcQF{LC~ZFtV$Dhur6W~u?qSlqN6!UA}sRS>5lK7dOGV(K6CZ2H53*UocNzzf_eLa z=skH2n{U-VZQI3k?M)Q(tDU){1l3`Sb7USn~%}Wm?Z+NOd z_hNS%G}U;vjb? zhIQv;UIIA^$sR$z3=CCj3=9n|3=F@3LJcn%7)pVryh>nTu$sZZAYL$MSD+10f-TA0 z-33Sk!B6Mi^+1ZVz$3C4NPB>>+sSM@Amf^+i(^Q}y|>d0`I-zQ+~!v?=P#1@n$~mZ z+1xoYHhpbp1=(|wJT7jN`j@nCdWoWD?fZ5C2M)y+fk*l`8J2E!(b9gvwdKIYD79%{ zyZ1yl3l?Wb_y6IH__pr;+M`ZSe^1VDY~DKKNwM3fNz?Z{Ijr%rZe7q#re61bQqKFT zRCv?1dDtpzz zrTJpH9qawcC+a>K3f?@uzk5c{9{r?}pGW!M6*8tBkX&(`PrwQ2I8}c6BOC9o4%Gh( z^r32rYeY#(Vo9o1a#1RfVlXl=w9qv$)ip8>F*LO@HnTD{*ETS)GBB8Ve@Q2bhTQy= z%(P0}8eTNXm;yCufNUr(OSei&EKb!eEy`p_%gjl&(%087$t}>&O-#>B&ejbmHB9y| W$cr+$$g={dhr!d;&t;ucLK6U+V!NgQ literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/simple_list_item_1.xml b/app/src/main/res/layout/simple_list_item_1.xml new file mode 100644 index 0000000..22606a2 --- /dev/null +++ b/app/src/main/res/layout/simple_list_item_1.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/menu/note.xml b/app/src/main/res/menu/note.xml index 46f0eff..3d0a1c9 100644 --- a/app/src/main/res/menu/note.xml +++ b/app/src/main/res/menu/note.xml @@ -7,4 +7,10 @@ android:icon="@drawable/ic_view_type" android:title="@string/view_type" app:showAsAction="always"/> + + \ No newline at end of file diff --git a/app/src/main/res/values-zh/arrays.xml b/app/src/main/res/values-zh/arrays.xml new file mode 100644 index 0000000..0a57899 --- /dev/null +++ b/app/src/main/res/values-zh/arrays.xml @@ -0,0 +1,20 @@ + + + + 按创建时间-升序 + 按创建时间-降序 + 按更新时间-升序 + 按更新时间-降序 + 按标题-升序 + 按标题-降序 + + + + 1 + 2 + 3 + 4 + 5 + 6 + + \ No newline at end of file diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml new file mode 100644 index 0000000..12f694c --- /dev/null +++ b/app/src/main/res/values/arrays.xml @@ -0,0 +1,20 @@ + + + + Date Created-ASC + Date Created-DESC + Date Updated-ASC + Date Updated-DESC + Title-ASC + Title-DESC + + + + 1 + 2 + 3 + 4 + 5 + 6 + + \ No newline at end of file