Skip to content
Snippets Groups Projects
BasePostFragment.java 2.27 KiB
Newer Older
package org.briarproject.android.blogs;

import android.os.Bundle;
import android.support.annotation.CallSuper;
import android.support.annotation.Nullable;
Torsten Grote's avatar
Torsten Grote committed
import android.support.annotation.UiThread;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
Torsten Grote's avatar
Torsten Grote committed
import android.widget.ProgressBar;

import org.briarproject.R;
import org.briarproject.android.fragment.BaseFragment;
import org.briarproject.api.db.DbException;

import java.util.logging.Logger;

Torsten Grote's avatar
Torsten Grote committed
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
import static org.briarproject.android.util.AndroidUtils.MIN_RESOLUTION;

abstract class BasePostFragment extends BaseFragment {
	private static final Logger LOG =
			Logger.getLogger(BasePostFragment.class.getName());

	private View view;
Torsten Grote's avatar
Torsten Grote committed
	private ProgressBar progressBar;
	private BlogPostViewHolder ui;
	private BlogPostItem post;
	private Runnable refresher;

	@CallSuper
	@Nullable
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		view = inflater.inflate(R.layout.fragment_blog_post, container,
				false);
Torsten Grote's avatar
Torsten Grote committed
		progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
		progressBar.setVisibility(VISIBLE);
		ui = new BlogPostViewHolder(view);
		return view;
	}

	@CallSuper
	@Override
	public void onStart() {
		super.onStart();
		startPeriodicUpdate();
	}

Torsten Grote's avatar
Torsten Grote committed
	@CallSuper
	@Override
	public void onStop() {
		super.onStop();
		stopPeriodicUpdate();
	}

Torsten Grote's avatar
Torsten Grote committed
	@UiThread
	protected void onBlogPostLoaded(BlogPostItem post) {
Torsten Grote's avatar
Torsten Grote committed
		progressBar.setVisibility(INVISIBLE);
Torsten Grote's avatar
Torsten Grote committed
	@UiThread
	protected void onBlogPostLoadException(DbException exception) {
		// TODO: Decide how to handle errors in the UI
		finish();
	}

	private void startPeriodicUpdate() {
		refresher = new Runnable() {
			@Override
			public void run() {
				if (ui == null) return;
				LOG.info("Updating Content...");

				ui.updateDate(post.getTimestamp());
				view.postDelayed(refresher, MIN_RESOLUTION);
			}
		};
		LOG.info("Adding Handler Callback");
		view.postDelayed(refresher, MIN_RESOLUTION);
	}

	private void stopPeriodicUpdate() {
		if (refresher != null && ui != null) {
			LOG.info("Removing Handler Callback");
			view.removeCallbacks(refresher);
		}
	}

}