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.annotation.IntDef;
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.Photo;
import com.wangdaye.mysplash.common.data.entity.unsplash.PhotoStats;
import com.wangdaye.mysplash.common.data.service.PhotoService;
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;
/**
* Stats dialog.
*
* This dialog is used to show the stats for a photo.
*
* */
public class StatsDialog extends MysplashDialogFragment
implements PhotoService.OnRequestStatsListener {
@BindView(R.id.dialog_stats_container)
CoordinatorLayout container;
@BindView(R.id.dialog_stats_progress)
CircularProgressView progress;
@BindView(R.id.dialog_stats_dataContainer)
LinearLayout dataContainer;
@BindView(R.id.dialog_stats_likeNum)
TextView likeNum;
@BindView(R.id.dialog_stats_viewNum)
TextView viewNum;
@BindView(R.id.dialog_stats_downloadNum)
TextView downloadNum;
private PhotoService service;
private Photo photo;
@StateRule
private int state = 0;
private static final int LOADING_STATE = 0;
private static final int SUCCESS_STATE = 1;
@IntDef({LOADING_STATE, SUCCESS_STATE})
private @interface StateRule {}
@SuppressLint("InflateParams")
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
super.onCreateDialog(savedInstanceState);
View view = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_stats, null, false);
ButterKnife.bind(this, view);
state = LOADING_STATE;
initWidget(view);
service.requestStats(photo.id, 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 = PhotoService.getService();
progress.setVisibility(View.VISIBLE);
dataContainer.setVisibility(View.GONE);
DisplayUtils.setTypeface(getActivity(), likeNum);
DisplayUtils.setTypeface(getActivity(), viewNum);
DisplayUtils.setTypeface(getActivity(), downloadNum);
ImageView download = ButterKnife.findById(v, R.id.dialog_stats_downloadIcon);
ThemeManager.setImageResource(
download, R.drawable.ic_download_light, R.drawable.ic_download_dark);
ImageView like = ButterKnife.findById(v, R.id.dialog_stats_likeIcon);
ThemeManager.setImageResource(
like, R.drawable.ic_heart_light, R.drawable.ic_heart_dark);
ImageView view = ButterKnife.findById(v, R.id.dialog_stats_viewIcon);
ThemeManager.setImageResource(
view, R.drawable.ic_eye_light, R.drawable.ic_eye_dark);
}
public void setPhoto(Photo photo) {
this.photo = photo;
}
private void setState(@StateRule int stateTo) {
if (stateTo == SUCCESS_STATE && state == LOADING_STATE) {
AnimUtils.animHide(progress);
AnimUtils.animShow(dataContainer);
}
this.state = stateTo;
}
// interface.
// on request stats listener.
@SuppressLint("SetTextI18n")
@Override
public void onRequestStatsSuccess(Call<PhotoStats> call, Response<PhotoStats> response) {
if (response.isSuccessful() && response.body() != null) {
likeNum.setText(response.body().likes + " LIKES");
viewNum.setText(response.body().views + " VIEWS");
downloadNum.setText(response.body().downloads + " DOWNLOADS");
setState(SUCCESS_STATE);
} else {
service.requestStats(photo.id, this);
}
}
@Override
public void onRequestStatsFailed(Call<PhotoStats> call, Throwable t) {
service.requestStats(photo.id, this);
}
}