/**
* Copyright (c) 2015 unfoldingWord
* http://creativecommons.org/licenses/MIT/
* See LICENSE file for details.
* Contributors:
* PJ Fechner <pj@actsmedia.com>
*/
package fragments;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
import org.unfoldingword.mobile.R;
/**
* A Fragment for showing a loading view.
*/
public class LoadingFragment extends android.support.v4.app.DialogFragment {
public static final String TAG = "LoadingFragment";
private static final String LOADING_TEXT_PARAM = "LOADING_TEXT_PARAM";
private LoadingFragmentInteractionListener listener;
private TextView loadingTextView;
private Button loadingCancelButton;
private String loadingText;
private boolean showCancel = true;
//region setup
/**
* @param loadingText text to display to user
* @return a newly constructed LoadingFragment
*/
public static LoadingFragment newInstance(String loadingText) {
LoadingFragment fragment = new LoadingFragment();
Bundle args = new Bundle();
args.putString(LOADING_TEXT_PARAM, loadingText);
fragment.setArguments(args);
return fragment;
}
public LoadingFragment() {
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
// request a window without the title
dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
return dialog;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
loadingText = getArguments().getString(LOADING_TEXT_PARAM);
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if(listener == null) {
try {
listener = (LoadingFragmentInteractionListener) activity;
} catch (ClassCastException e) {
e.printStackTrace();
}
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_loading, container, false);
setupViews(view);
return view;
}
private void setupViews(View view){
loadingTextView = (TextView) view.findViewById(R.id.progress_bar_fragment_text_view);
loadingTextView.setText(loadingText);
loadingCancelButton = (Button) view.findViewById(R.id.progress_bar_fragment_cancel_button);
loadingCancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cancelLoading();
}
});
loadingCancelButton.setVisibility((showCancel) ? View.VISIBLE : View.GONE);
}
//endregion
//region accessors
public void setListener(LoadingFragmentInteractionListener listener) {
this.listener = listener;
}
public void setLoadingText(String text){
loadingText = text;
if(loadingTextView != null) {
loadingTextView.setText(text);
}
}
public void setCanCancel(boolean canCancel){
showCancel = canCancel;
if(loadingCancelButton != null) {
loadingCancelButton.setVisibility((canCancel) ? View.VISIBLE : View.GONE);
}
}
//endregion
//region ending
private void cancelLoading() {
if (listener != null) {
listener.loadingCanceled();
}
}
@Override
public void onDetach() {
super.onDetach();
listener = null;
}
//endregion
public interface LoadingFragmentInteractionListener {
/**
* User pressed cancel
*/
void loadingCanceled();
}
}