Android Open Source - droidkit-engines Test List Engine Activity






From Project

Back to project page droidkit-engines.

License

The source code is released under:

MIT License

If you think the Android project droidkit-engines listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.droidkit.sample.listenginetest;
/*w  ww  . j av  a  2  s  . c  o  m*/
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.SystemClock;
import android.text.InputType;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.droidkit.engine._internal.util.Utils;
import com.droidkit.engine.event.Events;
import com.droidkit.engine.event.NotificationCenter;
import com.droidkit.engine.event.NotificationListener;
import com.droidkit.engine.list.DataAdapter;
import com.droidkit.engine.list.ListEngine;
import com.droidkit.engine.list.sqlite.SQLiteStorageAdapter;
import com.droidkit.engine._internal.sqlite.DbProvider;
import com.droidkit.sample.BaseActivity;
import com.droidkit.sample.view.BlockingListView;

import java.text.SimpleDateFormat;
import java.util.ArrayList;

import static com.droidkit.sample.listenginetest.TestProto.DialogTest;

public class TestListEngineActivity extends BaseActivity {

    private final static int PAGE_SIZE = 20;

    private final Handler handler = new Handler(Looper.getMainLooper());

    private int padding;
    private BlockingListView lv;
    private ExampleAdapter adapter;

    private ListEngine<DialogTest> listEngine;

    private long count = 0;
    private long time = System.currentTimeMillis();

    private NotificationListener diskLoadListener;

    private volatile boolean isFirstLoad = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        initUi();

        final long start = SystemClock.uptimeMillis();

        diskLoadListener = new NotificationListener() {
            @Override
            public void onNotification(int eventType, int eventId, Object[] eventArgs) {
                if (isFirstLoad) {
                    isFirstLoad = false;
                }

                if (adapter != null && lv != null) {
                    adapter.notifyDataSetChanged();
                    lv.setBlockLayoutChildren(false);
                }
            }
        };


        final DataAdapter<DialogTest> classConnector = new DataAdapter<DialogTest>() {

            @Override
            public byte[] serialize(DialogTest entity) {
                return entity.toByteArray();
            }

            @Override
            public DialogTest deserialize(byte[] item) {
                try {
                    return DialogTest.parseFrom(item);
                } catch (Exception e) {
                    e.printStackTrace();
                    return null;
                }
            }

            @Override
            public long getId(DialogTest value) {
                return value.getId();
            }

            @Override
            public long getSortKey(DialogTest value) {
                return value.getTime();
            }
        };

        listEngine = new ListEngine<DialogTest>(new SQLiteStorageAdapter(DbProvider.getDatabase(this), "DIALOG", classConnector),
                classConnector
        );
        count = 0;
        adapter = new ExampleAdapter();
        lv.setAdapter(adapter);
        NotificationCenter.getInstance().addListener(Events.LIST_ENGINE_UI_LIST_UPDATE, listEngine.getListEngineId(), diskLoadListener);
        listEngine.loadNextListSlice(PAGE_SIZE);


    }

    private void initUi() {
        final LinearLayout ll = new LinearLayout(this);
        ll.setBackgroundColor(Color.WHITE);
        ll.setOrientation(LinearLayout.VERTICAL);

        final LinearLayout controlLayout = new LinearLayout(this);
        controlLayout.setOrientation(LinearLayout.HORIZONTAL);

        final Button clearAll = new Button(this);
        clearAll.setText("Clear all");
        clearAll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listEngine != null) {
                    listEngine.clear();
                    count = 0;
                }
            }
        });
        controlLayout.addView(clearAll, new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 0.5f));

        final CheckBox checkBox = new CheckBox(this);
        checkBox.setText("Bulk update");
        checkBox.setTextSize(12);
        checkBox.setChecked(true);
        controlLayout.addView(checkBox, new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 0.5f));

        final EditText numberToAdd = new EditText(this);
        numberToAdd.setHint("Number to add...");
        numberToAdd.setInputType(InputType.TYPE_CLASS_NUMBER);
        numberToAdd.setText("1");
        numberToAdd.setTextSize(12);
        controlLayout.addView(numberToAdd, new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 0.5f));

        final Button add = new Button(this);
        add.setText("Add");
        add.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (listEngine != null) {
                    try {
                        final int intNumberToAdd = Integer.parseInt(numberToAdd.getText().toString());

                        if (checkBox.isChecked()) {
                            new AsyncTask<Void, Void, Void>() {
                                @Override
                                protected Void doInBackground(Void... params) {
                                    ArrayList<DialogTest> tmp = new ArrayList<DialogTest>();
                                    updateTime();
                                    for (int i = 0; i < intNumberToAdd; ++i) {
                                        count++;
                                        final DialogTest example = DialogTest.newBuilder().
                                                setId(count).setTime(++time).setTitle("Example Title").setText("Example Text").setStatus(1).setImageUrl("Image Url").setLastMessageSenderName("Example Name").build();
                                        tmp.add(example);
                                    }
                                    listEngine.addOrUpdateItems(tmp);
                                    return null;
                                }
                            }.execute();
                        } else {
                            new AsyncTask<Void, Void, Void>() {
                                @Override
                                protected Void doInBackground(Void... params) {
                                    updateTime();
                                    for (int i = 0; i < intNumberToAdd; ++i) {
                                        count++;
                                        final DialogTest example = DialogTest.newBuilder().
                                                setId(count).setTime(++time).setTitle("Example Title").setText("Example Text").setStatus(1).setImageUrl("Image Url").setLastMessageSenderName("Example Name").build();
                                        try {
                                            listEngine.addOrUpdateItem(example);
                                        } catch (Exception e) {
                                            e.printStackTrace();
                                        }
                                    }
                                    return null;
                                }
                            }.execute();
                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        controlLayout.addView(add, new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 0.5f));

        ll.addView(controlLayout, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, Utils.dpToPx(TestListEngineActivity.this, 50)));

        padding = Utils.dpToPx(this, 10);
        lv = new BlockingListView(this);
        lv.setBackgroundColor(Color.WHITE);
        lv.setCacheColorHint(Color.WHITE);
        lv.setScrollingCacheEnabled(false);
        ll.addView(lv);

        lv.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {

            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                if (firstVisibleItem + visibleItemCount >= totalItemCount - 5 && listEngine != null) {
                    lv.setBlockLayoutChildren(true);
                    listEngine.loadNextListSlice(PAGE_SIZE);
                }
            }
        });

        setContentView(ll);
    }

    public class ExampleAdapter extends BaseAdapter {

        private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yy'-'HH:mm:ss");

        private final Drawable placeholder = new ColorDrawable(0xff999999);

        @Override
        public int getCount() {
            return listEngine.getCountInMemoryList();
        }

        @Override
        public DialogTest getItem(int position) {
            return listEngine.getValueFromMemoryList(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @SuppressWarnings("deprecation")
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            ViewHolder vh;

            if (v == null) {
                final Context self = TestListEngineActivity.this;

                FrameLayout fl = new FrameLayout(self);
                fl.setPadding(padding, padding, padding, padding);

                View avatar = new View(self);
                avatar.setBackgroundDrawable(placeholder);
                fl.addView(avatar, new FrameLayout.LayoutParams(Utils.dpToPx(TestListEngineActivity.this, 50), Utils.dpToPx(TestListEngineActivity.this, 50)));

                final TextView tv = new TextView(self);
                tv.setTextColor(Color.BLACK);
                tv.setPadding(Utils.dpToPx(TestListEngineActivity.this, 60), 0, 0, 0);
                tv.setTextSize(14);
                fl.addView(tv);
                vh = new ViewHolder();
                vh.title = tv;
                v = fl;
                v.setTag(vh);
            } else {
                vh = (ViewHolder) v.getTag();
            }

            DialogTest item = getItem(position);

            if (item != null) {
                vh.title.setText(
                        "ID: " + item.getId() + ", Title: " + item.getTitle() +
                                "\nCreate time: " + simpleDateFormat.format(item.getTime()) +
                                "\nText: " + item.getText()
                );
            }

            return v;
        }

        class ViewHolder {
            TextView title;
        }
    }

    private void updateTime() {
        time = Math.max(time, System.currentTimeMillis());
    }

}




Java Source Code List

com.droidkit.engine.Engines.java
com.droidkit.engine.common.KeyCallback.java
com.droidkit.engine.common.ValueCallback.java
com.droidkit.engine.common.ValuesCallback.java
com.droidkit.engine.event.Events.java
com.droidkit.engine.event.NotificationCenter.java
com.droidkit.engine.event.NotificationListener.java
com.droidkit.engine.event.StateInitValue.java
com.droidkit.engine.event.State.java
com.droidkit.engine._internal.RunnableActor.java
com.droidkit.engine._internal.sqlite.AbstractDao.java
com.droidkit.engine._internal.sqlite.BinarySerializator.java
com.droidkit.engine._internal.sqlite.DbHelper.java
com.droidkit.engine._internal.sqlite.DbProvider.java
com.droidkit.engine._internal.sqlite.FastCursor.java
com.droidkit.engine._internal.sqlite.SqlStatements.java
com.droidkit.engine._internal.util.SortedArrayList.java
com.droidkit.engine._internal.util.Utils.java
com.droidkit.engine._internal.util.WeakEqualReference.java
com.droidkit.engine.keyvalue.DataAdapter.java
com.droidkit.engine.keyvalue.KeyValueEngine.java
com.droidkit.engine.keyvalue.StorageAdapter.java
com.droidkit.engine.keyvalue.sqlite.SQLiteStorageAdapter.java
com.droidkit.engine.keyvalue.sqlite.internal.KeyValueEngineDao.java
com.droidkit.engine.keyvalue.sqlite.internal.KeyValueEngineTableStatements.java
com.droidkit.engine.list.DataAdapter.java
com.droidkit.engine.list.ListEngine.java
com.droidkit.engine.list.StorageAdapter.java
com.droidkit.engine.list.sqlite.SQLiteMultipleStorageAdapter.java
com.droidkit.engine.list.sqlite.SQLiteStorageAdapter.java
com.droidkit.engine.list.sqlite.internal.ListEngineDao.java
com.droidkit.engine.list.sqlite.internal.ListEngineTableStatements.java
com.droidkit.sample.ActivityHelper.java
com.droidkit.sample.BaseActivity.java
com.droidkit.sample.TestMainActivity.java
com.droidkit.sample.listenginetest.TestListEngineActivity.java
com.droidkit.sample.listenginetest.TestProto.java
com.droidkit.sample.view.BlockingListView.java