com.artemchep.horario.ui.fragments.details.SubjectTaskDetailsFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.artemchep.horario.ui.fragments.details.SubjectTaskDetailsFragment.java

Source

/*
 * Copyright (C) 2017 XJSHQ@github.com
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 3
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA  02110-1301, USA.
 */
package com.artemchep.horario.ui.fragments.details;

import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.AppBarLayout;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.artemchep.horario.Palette;
import com.artemchep.horario.R;
import com.artemchep.horario.database.Persy;
import com.artemchep.horario.database.models.SubjectTask;
import com.artemchep.horario.ui.activities.ActivityHorario;
import com.artemchep.horario._new.fragments.FragmentBase;
import com.artemchep.horario.ui.fragments.master.SubjectAboutFragment;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.ValueEventListener;
import com.ogaclejapan.smarttablayout.SmartTabLayout;
import com.ogaclejapan.smarttablayout.utils.v4.FragmentPagerItemAdapter;
import com.ogaclejapan.smarttablayout.utils.v4.FragmentPagerItems;
import com.thebluealliance.spectrum.internal.ColorUtil;

/**
 * @author Artem Chepurnoy
 */
public class SubjectTaskDetailsFragment extends FragmentBase implements ViewPager.OnPageChangeListener {

    public static final String EXTRA_COLOR = "extra::decor::color";

    public static final String EXTRA_SUBJECT_ID = "extra::subject_id";
    public static final String EXTRA_GROUP_ID = "extra::group_id";
    public static final String EXTRA_USER_ID = "extra::user_id";
    public static final String EXTRA_TASK_ID = "extra::task_id";
    public static final String EXTRA_TASK = "extra::task_model";

    private static final String STATE_TASK_INFO = "state::task_info";

    private Toolbar mToolbar;
    private AppBarLayout mAppBar;
    private SmartTabLayout mSmartTabLayout;
    private ViewPager mViewPager;

    @ColorInt
    private int mDecorColor;

    private Persy.Watcher<SubjectTask> mWatcher;
    private ValueEventListener mValueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {
                SubjectTask task = dataSnapshot.getValue(SubjectTask.class);
                bind(task);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    };

    private String mSubjectId;
    private String mGroupId;
    private String mTaskId;
    private String mUserId;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        Bundle args = getArguments();
        mDecorColor = args.getInt(EXTRA_COLOR, Palette.GREY);
        mSubjectId = args.getString(EXTRA_SUBJECT_ID);
        mGroupId = args.getString(EXTRA_GROUP_ID);
        mTaskId = args.getString(EXTRA_TASK_ID);

        ActivityHorario activity = (ActivityHorario) getActivity();
        mWatcher = activity.getPersy().watchFor(SubjectTask.class,
                "_subjects_/" + mSubjectId + "/groups/" + mGroupId + "/tasks/" + mTaskId);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
            @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_subject_task_details, container, false);
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedState) {
        super.onViewCreated(view, savedState);

        mAppBar = (AppBarLayout) view.findViewById(R.id.appbar);
        mToolbar = (Toolbar) mAppBar.findViewById(R.id.toolbar);
        mSmartTabLayout = (SmartTabLayout) mAppBar.findViewById(R.id.tabs);
        mViewPager = (ViewPager) view.findViewById(R.id.viewpager);

        FragmentPagerItemAdapter adapter = new FragmentPagerItemAdapter(getChildFragmentManager(),
                FragmentPagerItems.with(getContext()).add("Instructions", F.class).add("Student work", F.class)
                        .create()) {

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                Object item = super.instantiateItem(container, position);
                if (item instanceof SubjectAboutFragment) {
                    SubjectAboutFragment f = (SubjectAboutFragment) item;
                    //f.setSubject(mSubject);
                }
                return item;
            }

        };

        mViewPager.setAdapter(adapter);
        mViewPager.addOnPageChangeListener(this);

        setupDecorColor(mDecorColor);
    }

    private void setupDecorColor(int color) {
        color |= 0xFF000000; // ignore alpha bits
        final boolean isColorDark = ColorUtil.isColorDark(color);

        Drawable overflowIcon;
        if (isColorDark) {
            mToolbar.setTitleTextColor(Color.WHITE);
            mToolbar.setNavigationIcon(R.drawable.ic_arrow_left_white_24dp);
            overflowIcon = ContextCompat.getDrawable(getContext(), R.drawable.ic_dots_vertical_white_24dp);
            mSmartTabLayout.setDefaultTabTextColor(Color.WHITE);
            mSmartTabLayout.setSelectedIndicatorColors(Color.WHITE);
        } else {
            mToolbar.setTitleTextColor(Color.BLACK);
            mToolbar.setNavigationIcon(R.drawable.ic_arrow_left_black_24dp);
            overflowIcon = ContextCompat.getDrawable(getContext(), R.drawable.ic_dots_vertical_black_24dp);
            mSmartTabLayout.setDefaultTabTextColor(Color.BLACK);
            mSmartTabLayout.setSelectedIndicatorColors(Color.BLACK);
        }

        mAppBar.setBackgroundColor(color);
        mToolbar.setOverflowIcon(overflowIcon);

        mSmartTabLayout.setViewPager(mViewPager);
    }

    @Override
    public void onStart() {
        super.onStart();
        if (mWatcher.getMap().size() > 0) {
            SubjectTask task = mWatcher.getMap().values().iterator().next();
            bind(task);
        }

        mWatcher.addListener(mValueEventListener);
    }

    @Override
    public void onStop() {
        mWatcher.removeListener(mValueEventListener);
        super.onStop();
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    }

    @Override
    public void onPageSelected(int position) {
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }

    private void bind(@NonNull SubjectTask task) {
        // Set the type of the task as a title
        // of this fragment.
        String title;
        switch (task.type) {
        case SubjectTask.TYPE_QUESTION:
            title = "Question";
            break;
        case SubjectTask.TYPE_ASSIGNMENT:
            title = "Assignment";
            break;
        case SubjectTask.TYPE_ANNOUNCEMENT:
        default:
            title = "Announcement";
            break;
        }
        mToolbar.setTitle(title);
    }

    public static class F extends FragmentBase {

        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                @Nullable Bundle savedInstanceState) {
            return inflater.inflate(R.layout.fragment_subject_task_details2, container, false);
        }

    }

}