AbstractListBuilder.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package epson.print.widgets;
  2. import android.content.ContentResolver;
  3. import android.content.Context;
  4. import android.database.ContentObserver;
  5. import android.database.Cursor;
  6. import android.net.Uri;
  7. import android.os.AsyncTask;
  8. import android.os.Handler;
  9. import android.os.Message;
  10. import android.view.View;
  11. import android.view.ViewGroup;
  12. import android.widget.AlphabetIndexer;
  13. import android.widget.BaseAdapter;
  14. import android.widget.LinearLayout;
  15. import android.widget.ListView;
  16. import android.widget.TextView;
  17. import java.util.Vector;
  18. import epson.print.R;
  19. public abstract class AbstractListBuilder extends AbstractBuilder {
  20. protected BaseAdapter mAdapter;
  21. protected ContentResolver mContentResolver;
  22. protected Context mContext;
  23. protected Cursor mCursor;
  24. protected Vector<Object> mData;
  25. private Handler mHandlerObserver = new Handler(new Handler.Callback() {
  26. public boolean handleMessage(Message message) {
  27. new BuildData().execute(new Void[0]);
  28. return false;
  29. }
  30. });
  31. protected FactoryContentObserver mObserver;
  32. protected String[] mProjection;
  33. protected String mSelection;
  34. protected String[] mSelectionArgs;
  35. protected String mSortOrder;
  36. protected Uri mUri;
  37. public abstract void addPrinter(String[] strArr);
  38. protected abstract void buildData();
  39. public abstract View buildViewHolder();
  40. public abstract Vector<View> buildViewHolderContent(View view);
  41. public abstract void buildViewHolderContentData(int i, Vector<View> vector, Vector<Object> vector2);
  42. public abstract AlphabetIndexer getIndexer();
  43. protected abstract void notifyDataChange();
  44. protected Cursor query() {
  45. return mContentResolver.query(mUri, mProjection, mSelection, mSelectionArgs, mSortOrder);
  46. }
  47. protected void delete() {
  48. mContentResolver.delete(mUri, mSelection, mSelectionArgs);
  49. }
  50. protected class FactoryContentObserver extends ContentObserver {
  51. Handler mHandler;
  52. public FactoryContentObserver(Handler handler) {
  53. super(handler);
  54. mHandler = handler;
  55. }
  56. public void onChange(boolean z) {
  57. super.onChange(z);
  58. mHandler.sendEmptyMessage(0);
  59. }
  60. }
  61. protected void registerObserver() {
  62. mContext.getContentResolver().registerContentObserver(mUri, true, mObserver);
  63. }
  64. protected void triggerEmptyView() {
  65. TextView textView = (TextView) mLayout.findViewById(16908292);
  66. if (mData.size() > 0) {
  67. textView.setVisibility(8);
  68. return;
  69. }
  70. textView.setVisibility(0);
  71. mLayout.findViewById(16908298).setVisibility(8);
  72. }
  73. public AbstractListBuilder(Context context, ViewGroup viewGroup) {
  74. super(context, viewGroup);
  75. mContext = context;
  76. mData = new Vector<>();
  77. mContentResolver = mContext.getContentResolver();
  78. mObserver = new FactoryContentObserver(mHandlerObserver);
  79. }
  80. public BaseAdapter getAdapter() {
  81. return mAdapter;
  82. }
  83. private class BuildData extends AsyncTask<Void, Void, Void> {
  84. private BuildData() {
  85. }
  86. protected void onPreExecute() {
  87. super.onPreExecute();
  88. AbstractListBuilder.this.mLayout.findViewById(16908298).setVisibility(8);
  89. }
  90. protected void onPostExecute(Void voidR) {
  91. super.onPostExecute(voidR);
  92. AbstractListBuilder.this.mLayout.findViewById(16908298).setVisibility(0);
  93. AbstractListBuilder.this.mLayout.postInvalidate();
  94. AbstractListBuilder.this.mAdapter.notifyDataSetChanged();
  95. AbstractListBuilder.this.notifyDataChange();
  96. }
  97. protected Void doInBackground(Void... voidArr) {
  98. synchronized (mData) {
  99. AbstractListBuilder.this.buildData();
  100. }
  101. return null;
  102. }
  103. }
  104. public void build() {
  105. buildLayout(mParentView);
  106. }
  107. public void refresh() {
  108. buildData();
  109. mAdapter.notifyDataSetChanged();
  110. }
  111. public Vector<Object> getData() {
  112. return mData;
  113. }
  114. protected void buildLayout(ViewGroup viewGroup) {
  115. mLayout = (ViewGroup) mLayoutInflater.inflate(R.layout.mylistview, viewGroup);
  116. ListView listView = (ListView) mLayout.findViewById(16908298);
  117. mAdapter = new MyAdapter(this);
  118. listView.setAdapter(mAdapter);
  119. LinearLayout linearLayout = new LinearLayout(mLayout.getContext());
  120. linearLayout.setVisibility(8);
  121. listView.setEmptyView(linearLayout);
  122. }
  123. public void destructor() {
  124. mData.clear();
  125. }
  126. public ListView getListView() {
  127. return (ListView) mLayout.findViewById(16908298);
  128. }
  129. }