com.amsterdam.marktbureau.makkelijkemarkt.DrawerFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.amsterdam.marktbureau.makkelijkemarkt.DrawerFragment.java

Source

/**
 * Copyright (C) 2016 X Gemeente
 *                    X Amsterdam
 *                    X Onderzoek, Informatie en Statistiek
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/
 */
package com.amsterdam.marktbureau.makkelijkemarkt;

import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.amsterdam.marktbureau.makkelijkemarkt.data.MakkelijkeMarktProvider;

import java.text.SimpleDateFormat;
import java.util.Date;

import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnItemClick;

/**
 * @author marcolangebeeke
 */
public class DrawerFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {

    // use classname when logging
    private static final String LOG_TAG = DrawerFragment.class.getSimpleName();

    // constants linking the position of the drawer menu to an activity
    public final int DRAWER_POSITION_MARKTEN = 0;
    public final int DRAWER_POSITION_DAGVERGUNNINGEN = 1;
    public final int DRAWER_POSITION_NOTITIES = 2;

    // unique id for the uitgegeven dagvergunningen loader
    private static final int DAGVERGUNNINGEN_LOADER = 7;

    // bind layout elements
    @Bind(R.id.drawer_account_naam)
    TextView mAccountNaam;
    @Bind(R.id.drawer_menu)
    ListView mDrawerMenu;
    @Bind(R.id.dagvergunningen_uitgegeven)
    TextView mDagvergunningenUitgegeven;
    @Bind(R.id.date_today)
    TextView mDateToday;

    /**
     * Constructor
     */
    public DrawerFragment() {
    }

    /**
     *
     * @param inflater
     * @param container
     * @param savedInstanceState
     * @return
     */
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        // get the drawer fragment
        View view = inflater.inflate(R.layout.drawer_fragment, container, false);

        // bind the elements to the view
        ButterKnife.bind(this, view);

        // get the account naam from the shared prefs
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getContext());
        mAccountNaam.setText(
                settings.getString(getContext().getString(R.string.sharedpreferences_key_account_naam), ""));

        // get the date of today
        SimpleDateFormat sdf = new SimpleDateFormat(getString(R.string.date_format_datum_dag));
        mDateToday.setText(Utility.capitalize(sdf.format(new Date())));

        // populate the drawer menu options
        mDrawerMenu.setAdapter(new ArrayAdapter<>(getContext(), R.layout.drawer_fragment_list_item,
                android.R.id.text1, new String[] { getString(R.string.markten), getString(R.string.dagvergunningen),
                        getString(R.string.notities) }));

        // initiate loading the dagvergunningen from the database
        getLoaderManager().initLoader(DAGVERGUNNINGEN_LOADER, null, this);

        return view;
    }

    /**
     * Set the active state of the drawer menu
     * @param position which position to activate
     */
    public void checkItem(int position) {
        mDrawerMenu.setItemChecked(position, true);
    }

    /**
     * Handle clicks on the drawer menuitems for selecting the corresponding activity
     * @param position the clicked menuitem position
     */
    @OnItemClick(R.id.drawer_menu)
    public void selectItem(int position) {
        Intent intent;

        switch (position) {
        case DRAWER_POSITION_MARKTEN:
            intent = new Intent(getActivity(), MarktenActivity.class);
            startActivity(intent);
            break;
        case DRAWER_POSITION_DAGVERGUNNINGEN:
            intent = new Intent(getActivity(), DagvergunningenActivity.class);
            startActivity(intent);
            break;
        case DRAWER_POSITION_NOTITIES:
            intent = new Intent(getActivity(), NotitiesActivity.class);
            startActivity(intent);
            break;
        default:
            break;
        }
    }

    /**
     * Create a loader to get the total amount of dagvergunnigen for today
     * @param id
     * @param args
     * @return
     */
    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {

        // get the id of selected markt from the shared preferences
        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getContext());
        int marktId = settings.getInt(getContext().getString(R.string.sharedpreferences_key_markt_id), 0);

        // get the date of today for the dag param
        SimpleDateFormat dagSdf = new SimpleDateFormat(getString(R.string.date_format_dag));
        String dag = dagSdf.format(new Date());

        // create the loader
        CursorLoader loader = new CursorLoader(getActivity());
        loader.setUri(MakkelijkeMarktProvider.mUriDagvergunning);
        loader.setSelection(MakkelijkeMarktProvider.Dagvergunning.COL_MARKT_ID + " = ? AND "
                + MakkelijkeMarktProvider.Dagvergunning.COL_DAG + " = ? ");
        loader.setSelectionArgs(new String[] { String.valueOf(marktId), dag });

        return loader;
    }

    /**
     * Populate the drawer textview with the dagvergunning count, if greater than 0
     * @param loader
     * @param data
     */
    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        if (data != null && data.getCount() > 0) {
            mDagvergunningenUitgegeven
                    .setText(getString(R.string.drawer_permit_count_label) + ": " + data.getCount() + " totaal");
        }
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
    }
}