package com.wangdaye.mysplash.common.ui.dialog;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.support.design.widget.CoordinatorLayout;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.github.rahatarmanahmed.cpv.CircularProgressView;
import com.wangdaye.mysplash.R;
import com.wangdaye.mysplash.common.data.entity.unsplash.Total;
import com.wangdaye.mysplash.common.data.service.StatusService;
import com.wangdaye.mysplash.common._basic.MysplashDialogFragment;
import com.wangdaye.mysplash.common.utils.AnimUtils;
import com.wangdaye.mysplash.common.utils.DisplayUtils;
import com.wangdaye.mysplash.common.utils.manager.ThemeManager;
import butterknife.BindView;
import butterknife.ButterKnife;
import retrofit2.Call;
import retrofit2.Response;
/**
* Total dialog.
*
* This dialog is used to show total stats for Unsplash.
*
* */
public class TotalDialog extends MysplashDialogFragment
implements StatusService.OnRequestTotalListener {
@BindView(R.id.dialog_total_container)
CoordinatorLayout container;
@BindView(R.id.dialog_total_progress)
CircularProgressView progress;
@BindView(R.id.dialog_total_dataContainer)
LinearLayout dataContainer;
@BindView(R.id.dialog_total_totalPhotosNum)
TextView photoNum;
@BindView(R.id.dialog_total_photoDownloadsNum)
TextView downloadNum;
private StatusService service;
private int state = 0;
private final int LOADING_STATE = 0;
private final int SUCCESS_STATE = 1;
@SuppressLint("InflateParams")
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
super.onCreateDialog(savedInstanceState);
View view = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_total, null, false);
ButterKnife.bind(this, view);
this.state = LOADING_STATE;
initWidget(view);
service.requestTotal(this);
return new AlertDialog.Builder(getActivity())
.setView(view)
.create();
}
@Override
public void onDestroy() {
super.onDestroy();
if (service != null) {
service.cancel();
}
}
@Override
public CoordinatorLayout getSnackbarContainer() {
return container;
}
private void initWidget(View v) {
this.service = StatusService.getService();
progress.setVisibility(View.VISIBLE);
dataContainer.setVisibility(View.GONE);
DisplayUtils.setTypeface(getActivity(), photoNum);
DisplayUtils.setTypeface(getActivity(), downloadNum);
ImageView download = ButterKnife.findById(v, R.id.dialog_total_photoDownloadsIcon);
ThemeManager.setImageResource(
download, R.drawable.ic_download_light, R.drawable.ic_download_dark);
ImageView photo = ButterKnife.findById(v, R.id.dialog_total_totalPhotosIcon);
ThemeManager.setImageResource(
photo, R.drawable.ic_image_light, R.drawable.ic_image_dark);
}
private void setState(int stateTo) {
switch (stateTo) {
case SUCCESS_STATE:
if (state == LOADING_STATE) {
AnimUtils.animHide(progress);
AnimUtils.animShow(dataContainer);
}
break;
}
this.state = stateTo;
}
// interface.
// on request stats listener.
@SuppressLint("SetTextI18n")
@Override
public void onRequestTotalSuccess(Call<Total> call, Response<Total> response) {
if (response.isSuccessful() && response.body() != null) {
photoNum.setText(response.body().total_photos + " PHOTOS");
downloadNum.setText(response.body().photo_downloads + " DOWNLOADS");
setState(SUCCESS_STATE);
} else {
service.requestTotal(this);
}
}
@Override
public void onRequestTotalFailed(Call<Total> call, Throwable t) {
service.requestTotal(this);
}
}