Android Open Source - SurgeTracker Surge List Adapter






From Project

Back to project page SurgeTracker.

License

The source code is released under:

MIT License

If you think the Android project SurgeTracker 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.bklimt.surgetracker.view;
/*from w  ww. j a v a2  s  . c  o  m*/
import android.app.Fragment;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import com.bklimt.surgetracker.R;
import com.bklimt.surgetracker.TimerThread;
import com.bklimt.surgetracker.model.RootViewModel;
import com.bklimt.surgetracker.model.Surge;

import java.lang.ref.WeakReference;

public class SurgeListAdapter extends ArrayAdapter<Surge> {
    private Fragment fragment;

    public SurgeListAdapter(Context context, Fragment aFragment) {
        super(context, 0);
        fragment = aFragment;
        TimerThread.atLeastEverySecond(new SurgeListAdapterListener(this));
    }

    /**
     * Every 500ms, this listener gets called, and if there's a surge in progress, the list will
     * be updated so that we can see the second timer tick up. This is a static class so that we
     * can have a weak reference to "this". Otherwise, the timer thread would keep the adapter
     * around forever.
     */
    private static class SurgeListAdapterListener implements Runnable {
        WeakReference<SurgeListAdapter> weakAdapter;

        SurgeListAdapterListener(SurgeListAdapter adapter) {
            weakAdapter = new WeakReference<SurgeListAdapter>(adapter);
        }

        @Override
        public void run() {
            SurgeListAdapter adapter = weakAdapter.get();
            if (adapter == null) {
                TimerThread.removeListener(this);
                return;
            }

            if (RootViewModel.get().getCurrentSurge() != null) {
                adapter.notifyDataSetChanged();
            }
        }
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        if (view == null) {
            view = View.inflate(getContext(), R.layout.list_item_surge, null);
        }

        final RootViewModel root = RootViewModel.get();
        final Surge surge = getItem(position);

        final TextView durationView = (TextView) view.findViewById(R.id.duration);
        final TextView frequencyView = (TextView) view.findViewById(R.id.frequency);
        final TextView startDateView = (TextView) view.findViewById(R.id.start_date);
        final TextView startTimeView = (TextView) view.findViewById(R.id.start_time);

        durationView.setText(surge.getDurationString());
        frequencyView.setText(surge.getTimeBetweenString());
        startDateView.setText(surge.getStartDay(this.getContext()));
        startTimeView.setText(surge.getStartTime(this.getContext()));

        durationView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (surge.getEnd() == null) {
                    return;
                }
                root.selectSurge(surge);
                SurgeDurationDialogFragment dialog = new SurgeDurationDialogFragment();
                dialog.show(fragment.getFragmentManager(), "surge_duration");
            }
        });

        startDateView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (surge.getEnd() == null) {
                    return;
                }
                root.selectSurge(surge);
                SurgeStartDialogFragment dialog = new SurgeStartDialogFragment();
                dialog.show(fragment.getFragmentManager(), "surge_start");
            }
        });

        startTimeView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (surge.getEnd() == null) {
                    return;
                }
                root.selectSurge(surge);
                SurgeStartDialogFragment dialog = new SurgeStartDialogFragment();
                dialog.show(fragment.getFragmentManager(), "surge_start");
            }
        });

        View.OnLongClickListener onLongClickListener = new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                if (surge.getEnd() == null) {
                    return false;
                }
                root.selectSurge(surge);
                SurgeDeletionDialogFragment dialog = new SurgeDeletionDialogFragment();
                dialog.show(fragment.getFragmentManager(), "surge_delete");
                return true;
            }
        };
        view.setOnLongClickListener(onLongClickListener);
        durationView.setOnLongClickListener(onLongClickListener);
        startDateView.setOnLongClickListener(onLongClickListener);
        startTimeView.setOnLongClickListener(onLongClickListener);

        /*
         * No need to bind these UI elements, because the Collection is already bound to the list
         * adapter, and that will fire change events whenever a surge changes. We wouldn't want to
         * bind these UI elements anyway, because the view can get reused.
         */

        return view;
    }
}




Java Source Code List

com.bklimt.surgetracker.ApplicationTest.java
com.bklimt.surgetracker.SurgeTrackerApplication.java
com.bklimt.surgetracker.TimerThread.java
com.bklimt.surgetracker.backbone.CollectionListener.java
com.bklimt.surgetracker.backbone.Collection.java
com.bklimt.surgetracker.backbone.ModelListener.java
com.bklimt.surgetracker.backbone.Model.java
com.bklimt.surgetracker.backbone.Visitor.java
com.bklimt.surgetracker.model.AggregateCollection.java
com.bklimt.surgetracker.model.Aggregate.java
com.bklimt.surgetracker.model.RootViewModel.java
com.bklimt.surgetracker.model.SurgeCollection.java
com.bklimt.surgetracker.model.SurgeParseObject.java
com.bklimt.surgetracker.model.Surge.java
com.bklimt.surgetracker.view.AggregateListAdapter.java
com.bklimt.surgetracker.view.AggregateListFragment.java
com.bklimt.surgetracker.view.MainActivity.java
com.bklimt.surgetracker.view.SurgeDeletionDialogFragment.java
com.bklimt.surgetracker.view.SurgeDurationDialogFragment.java
com.bklimt.surgetracker.view.SurgeGraphFragment.java
com.bklimt.surgetracker.view.SurgeListAdapter.java
com.bklimt.surgetracker.view.SurgeListFragment.java
com.bklimt.surgetracker.view.SurgeStartDialogFragment.java