blob: fc54d8dae03e899bdfdd907dcfc31a4a61d09f7a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.taverna.mobile.ui.anouncements;
import org.apache.taverna.mobile.R;
import org.apache.taverna.mobile.data.DataManager;
import org.apache.taverna.mobile.data.model.Announcements;
import org.apache.taverna.mobile.data.model.DetailAnnouncement;
import org.apache.taverna.mobile.ui.adapter.AnnouncementAdapter;
import org.apache.taverna.mobile.ui.adapter.EndlessRecyclerOnScrollListener;
import org.apache.taverna.mobile.ui.adapter.RecyclerItemClickListner;
import org.apache.taverna.mobile.ui.base.BaseActivity;
import org.apache.taverna.mobile.utils.ConnectionInfo;
import org.apache.taverna.mobile.utils.ScrollChildSwipeRefreshLayout;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import javax.inject.Inject;
import butterknife.BindView;
import butterknife.ButterKnife;
import static android.support.design.widget.Snackbar.make;
public class AnnouncementFragment extends Fragment implements RecyclerItemClickListner
.OnItemClickListener, AnnouncementMvpView {
public final String LOG_TAG = getClass().getSimpleName();
@Inject
DataManager dataManager;
@Inject
AnnouncementPresenter mAnnouncementPresenter;
AnnouncementAdapter mAnnouncementAdapter;
@BindView(R.id.rv_movies)
RecyclerView mRecyclerView;
@BindView(R.id.swipe_refresh)
ScrollChildSwipeRefreshLayout mSwipeRefresh;
@BindView(R.id.progress_circular)
ProgressBar mProgressBar;
private AlertDialog alertDialog;
private ProgressDialog dialog;
private Announcements mAnnouncements;
private int mPageNumber = 1;
private DetailAnnouncement mAnnouncementDetail;
@Override
public void onItemClick(View childView, int position) {
if (mAnnouncements.getAnnouncement().get(position) != null && position != -1) {
showWaitProgress(true);
mAnnouncementPresenter.loadAnnouncementDetails(mAnnouncements.getAnnouncement()
.get(position).getId());
}
}
@Override
public void onItemLongPress(View childView, int position) {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((BaseActivity) getActivity()).getActivityComponent().inject(this);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_announcement, container, false);
ButterKnife.bind(this, rootView);
mAnnouncementPresenter.attachView(this);
final LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity());
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListner(getActivity(), this));
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mSwipeRefresh.setColorSchemeResources(R.color.colorAccent, R.color.colorAccent, R.color
.colorPrimary);
mSwipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if (ConnectionInfo.isConnectingToInternet(getContext())) {
if (mSwipeRefresh.isRefreshing()) {
mPageNumber = 1;
mAnnouncementPresenter.loadAllAnnouncement(mPageNumber);
Log.i(LOG_TAG, "Swipe Refresh");
}
} else {
Log.i(LOG_TAG, "NO Internet Connection");
showSnackBar(R.string.no_internet_connection);
if (mSwipeRefresh.isRefreshing()) {
mSwipeRefresh.setRefreshing(false);
}
}
}
});
showProgressbar(true);
mAnnouncementPresenter.loadAllAnnouncement(mPageNumber);
mRecyclerView.addOnScrollListener(new EndlessRecyclerOnScrollListener(layoutManager) {
@Override
public void onLoadMore(int current_page) {
if (ConnectionInfo.isConnectingToInternet(getContext())) {
mAnnouncements.getAnnouncement().add(null);
mAnnouncementAdapter.notifyItemInserted(mAnnouncements.getAnnouncement().size
());
mPageNumber = ++mPageNumber;
mAnnouncementPresenter.loadAllAnnouncement(mPageNumber);
Log.i(LOG_TAG, "Loading more");
} else {
Log.i(LOG_TAG, "Internet not available. Not loading more posts.");
showSnackBar(R.string.no_internet_connection);
}
}
});
return rootView;
}
@Override
public void onDestroyView() {
super.onDestroyView();
mAnnouncementPresenter.detachView();
}
@Override
public void showAllAnnouncement(Announcements announcements) {
if (mPageNumber == 1) {
mAnnouncements = announcements;
mAnnouncementAdapter = new AnnouncementAdapter(mAnnouncements.getAnnouncement());
mRecyclerView.setAdapter(mAnnouncementAdapter);
} else {
removeLoadMoreProgressBar();
mAnnouncements.getAnnouncement().addAll(announcements.getAnnouncement());
}
mRecyclerView.setVisibility(View.VISIBLE);
mAnnouncementAdapter.notifyDataSetChanged();
if (mSwipeRefresh.isRefreshing()) {
mSwipeRefresh.setRefreshing(false);
}
}
@Override
public void removeLoadMoreProgressBar() {
mAnnouncements.getAnnouncement().remove(mAnnouncements.getAnnouncement().size() - 1);
mAnnouncementAdapter.notifyDataSetChanged();
}
@Override
public void showProgressbar(boolean status) {
if (status) {
mProgressBar.setVisibility(View.VISIBLE);
} else {
mProgressBar.setVisibility(View.GONE);
}
}
@Override
public void showAnnouncementDetail(DetailAnnouncement detailAnnouncement) {
if (alertDialog != null && alertDialog.isShowing()) {
alertDialog.dismiss();
}
mAnnouncementDetail = detailAnnouncement;
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getContext());
LayoutInflater inflater = getActivity().getLayoutInflater();
View dialogView = inflater.inflate(R.layout.detail_annoucement_dialog_layout, null);
dialogBuilder.setView(dialogView);
TextView title = dialogView.findViewById(R.id.tvDialogTitle);
TextView date = dialogView.findViewById(R.id.tvDialogDate);
TextView author = dialogView.findViewById(R.id.tvDialogAuthor);
WebView text = dialogView.findViewById(R.id.wvDialogText);
Button buttonOk = dialogView.findViewById(R.id.bDialogOK);
buttonOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
}
});
text.loadDataWithBaseURL("", mAnnouncementDetail.getText(), "text/html", "utf-8", "");
date.setText(mAnnouncementDetail.getDate());
title.setText(mAnnouncementDetail.getTitle());
author.setText(mAnnouncementDetail.getAuthor().getContent());
alertDialog = dialogBuilder.create();
alertDialog.show();
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void showSnackBar(int message) {
final Snackbar snackbar = make(getActivity().findViewById(android.R.id.content),
message, Snackbar.LENGTH_LONG);
snackbar.setAction(getResources().getString(R.string.ok), new View.OnClickListener() {
@Override
public void onClick(View view) {
snackbar.dismiss();
}
});
snackbar.show();
}
@Override
public void showWaitProgress(boolean b) {
if (b) {
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
dialog = ProgressDialog.show(getContext(), "Loading", "Please wait...", true);
} else {
dialog.dismiss();
}
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
MenuItem item = menu.findItem(R.id.action_search);
item.setVisible(false);
}
}