id.satusatudua.sigap.ui.fragment.ImportantContactFragment.java Source code

Java tutorial

Introduction

Here is the source code for id.satusatudua.sigap.ui.fragment.ImportantContactFragment.java

Source

/*
 * Copyright (c) 2015 SatuSatuDua.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package id.satusatudua.sigap.ui.fragment;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
import android.view.View;
import android.widget.EditText;

import java.util.List;

import butterknife.Bind;
import butterknife.OnClick;
import butterknife.OnTextChanged;
import id.satusatudua.sigap.R;
import id.satusatudua.sigap.data.model.ImportantContact;
import id.satusatudua.sigap.presenter.ImportantContactPresenter;
import id.satusatudua.sigap.ui.AddContactActivity;
import id.satusatudua.sigap.ui.DetailContactActivity;
import id.satusatudua.sigap.ui.adapter.ContactAdapter;
import id.zelory.benih.ui.fragment.BenihFragment;
import id.zelory.benih.ui.view.BenihRecyclerView;
import id.zelory.benih.util.KeyboardUtil;
import xyz.danoz.recyclerviewfastscroller.sectionindicator.title.SectionTitleIndicator;
import xyz.danoz.recyclerviewfastscroller.vertical.VerticalRecyclerViewFastScroller;

/**
 * Created on : January 13, 2016
 * Author     : zetbaitsu
 * Name       : Zetra
 * Email      : zetra@mail.ugm.ac.id
 * GitHub     : https://github.com/zetbaitsu
 * LinkedIn   : https://id.linkedin.com/in/zetbaitsu
 */
public class ImportantContactFragment extends BenihFragment
        implements ImportantContactPresenter.View, SwipeRefreshLayout.OnRefreshListener {
    private static final String KEY_SHOW_FAB = "extra_show_fab";

    @Bind(R.id.et_search)
    EditText searchField;
    @Bind(R.id.recycler_view)
    BenihRecyclerView recyclerViewContact;
    @Bind(R.id.swipe_layout)
    SwipeRefreshLayout swipeRefreshLayout;
    @Bind(R.id.fast_scroller)
    VerticalRecyclerViewFastScroller fastScroller;
    @Bind(R.id.fast_scroller_section_title_indicator)
    SectionTitleIndicator indicator;
    @Bind(R.id.fab)
    FloatingActionButton fab;

    private boolean showFab;
    private ContactAdapter adapter;
    private ImportantContactPresenter importantContactPresenter;

    public static ImportantContactFragment newInstance(boolean showFab) {
        ImportantContactFragment fragment = new ImportantContactFragment();
        Bundle bundle = new Bundle();
        bundle.putBoolean(KEY_SHOW_FAB, showFab);
        fragment.setArguments(bundle);
        return fragment;
    }

    @Override
    protected int getResourceLayout() {
        return R.layout.fragment_important_contact;
    }

    @Override
    protected void onViewReady(@Nullable Bundle savedInstanceState) {
        if (getArguments() != null) {
            showFab = getArguments().getBoolean(KEY_SHOW_FAB);
        }
        fab.setVisibility(showFab ? View.VISIBLE : View.GONE);

        swipeRefreshLayout.setColorSchemeResources(R.color.colorPrimary, R.color.colorAccent);
        swipeRefreshLayout.setOnRefreshListener(this);

        adapter = new ContactAdapter(getActivity());
        recyclerViewContact.setUpAsList();
        recyclerViewContact.setAdapter(adapter);
        adapter.setOnItemClickListener((view, position) -> onItemContactClicked(adapter.getData().get(position)));
        fastScroller.setRecyclerView(recyclerViewContact);
        recyclerViewContact.addOnScrollListener(fastScroller.getOnScrollListener());
        fastScroller.setSectionIndicator(indicator);

        searchField.setOnEditorActionListener((v, actionId, event) -> {
            search();
            return true;
        });

        importantContactPresenter = new ImportantContactPresenter(this);
        if (savedInstanceState == null) {
            new Handler().postDelayed(() -> importantContactPresenter.loadContacts(), 800);
        } else {
            importantContactPresenter.loadState(savedInstanceState);
        }
    }

    @OnTextChanged(R.id.et_search)
    public void instantFilter(CharSequence keyword) {
        importantContactPresenter.filter(keyword.toString());
    }

    @OnClick(R.id.fab)
    public void addNewContact() {
        startActivity(new Intent(getActivity(), AddContactActivity.class));
    }

    private void onItemContactClicked(ImportantContact importantContact) {
        if (showFab) {
            startActivity(DetailContactActivity.generateIntent(getActivity(), importantContact));
        } else {
            Intent intent = new Intent(Intent.ACTION_CALL,
                    Uri.parse("tel:" + importantContact.getPhoneNumber().trim()));
            startActivity(intent);
        }
    }

    @OnClick(R.id.icon_search)
    public void search() {
        importantContactPresenter.filter(searchField.getText().toString());
        KeyboardUtil.hideKeyboard(getActivity(), searchField);
    }

    @Override
    public void showContacts(List<ImportantContact> contacts) {
        adapter.clear();
        adapter.add(contacts);
    }

    @Override
    public void showFilteredContacts(List<ImportantContact> contacts) {
        adapter.clear();
        adapter.add(contacts);
    }

    @Override
    public void showError(String errorMessage) {
        try {
            Snackbar snackbar = Snackbar.make(recyclerViewContact, errorMessage, Snackbar.LENGTH_LONG);
            snackbar.getView().setBackgroundResource(R.color.colorAccent);
            snackbar.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void showLoading() {
        if (swipeRefreshLayout != null) {
            swipeRefreshLayout.setRefreshing(true);
        }
    }

    @Override
    public void dismissLoading() {
        if (swipeRefreshLayout != null) {
            swipeRefreshLayout.setRefreshing(false);
        }
    }

    @Override
    public void onRefresh() {
        importantContactPresenter.loadContacts();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        importantContactPresenter.saveState(outState);
        super.onSaveInstanceState(outState);
    }
}