Skip to content

Instantly share code, notes, and snippets.

@derohimat
Created July 2, 2016 08:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save derohimat/8ac668a5618810a50252eb66cb2b0af1 to your computer and use it in GitHub Desktop.
Save derohimat/8ac668a5618810a50252eb66cb2b0af1 to your computer and use it in GitHub Desktop.
package com.gaharitechnology.vokon.ui.fragment.main;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.widget.GridLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import com.bumptech.glide.Glide;
import com.gaharitechnology.vokon.R;
import com.gaharitechnology.vokon.data.api.VokonService;
import com.gaharitechnology.vokon.data.model.UserDao;
import com.gaharitechnology.vokon.data.model.VoucherDao;
import com.gaharitechnology.vokon.data.model.imagechooser.DeviceImage;
import com.gaharitechnology.vokon.data.model.post.AvatarPost;
import com.gaharitechnology.vokon.data.model.voucher.SpecificCategoryDao;
import com.gaharitechnology.vokon.presenter.VoucherPresenter;
import com.gaharitechnology.vokon.ui.activity.DashboardAct;
import com.gaharitechnology.vokon.ui.activity.DetailVoucherAct;
import com.gaharitechnology.vokon.ui.activity.ImageChooserAct;
import com.gaharitechnology.vokon.ui.adapter.recycler.VoucherRecyclerAdapter;
import com.gaharitechnology.vokon.ui.view.GridHeaderSpacingItemDecoration;
import com.gaharitechnology.vokon.ui.view.VokonButton;
import com.gaharitechnology.vokon.ui.view.VokonTextView;
import com.gaharitechnology.vokon.ui.view.VokonTextViewBold;
import com.gaharitechnology.vokon.util.BitmapUtils;
import com.gaharitechnology.vokon.util.Preferences;
import com.jcodecraeer.xrecyclerview.XRecyclerView;
import com.trello.rxlifecycle.FragmentEvent;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import de.hdodenhof.circleimageview.CircleImageView;
import id.derohimat.baseapp.ui.fragment.BaseFragment;
import id.derohimat.baseapp.ui.view.BaseRecyclerView;
import id.derohimat.baseapp.util.BaseBus;
import id.derohimat.baseapp.util.BaseDialogFactory;
import timber.log.Timber;
/**
* Created by derohimat on 05/03/16.
*/
public class ProfileFragment extends BaseFragment implements VoucherPresenter.View {
@Bind(R.id.recycler)
BaseRecyclerView mRecyclerView;
@Bind(R.id.pbLoad)
ProgressBar mPbLoad;
@Bind(R.id.txtLoadData)
VokonTextView mTxtLoadData;
@Bind(R.id.lyLoad)
RelativeLayout mLyLoad;
private VoucherPresenter mPresenter;
private VoucherRecyclerAdapter mAdapter;
private VokonTextViewBold txtName, txtTotalCredit, txtTotalVoucher;
private CircleImageView imgProfile;
private VokonButton btnDashboard;
private View mHeader;
private DeviceImage mDeviceImage;
private Bitmap mBitmap;
public static ProfileFragment newInstance() {
return new ProfileFragment();
}
@Override
protected int getResourceLayout() {
return R.layout.fragment_voucher;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = mInflater.inflate(getResourceLayout(), container, false);
ButterKnife.bind(this, view);
mHeader = inflater.inflate(R.layout.header_profile, container, false);
txtName = ButterKnife.findById(mHeader, R.id.txtName);
txtTotalCredit = ButterKnife.findById(mHeader, R.id.txtTotalCredit);
txtTotalVoucher = ButterKnife.findById(mHeader, R.id.txtTotalVoucher);
btnDashboard = ButterKnife.findById(mHeader, R.id.btnDashboard);
imgProfile = ButterKnife.findById(mHeader, R.id.imgProfile);
return view;
}
@Override
protected void onViewReady(@Nullable Bundle savedInstanceState) {
BaseBus.pluck()
.receive()
.compose(bindUntilEvent(FragmentEvent.DESTROY))
.subscribe(o -> Timber.d("from ProfileFragment : " + o.toString()));
setUpAdapter();
setupRecyclerView();
setUpPresenter();
setUpHeader();
}
private void setUpPresenter() {
mPresenter = new VoucherPresenter(this);
showLoading(true);
mPresenter.loadMyVoucher(mContext, 999, 0, false);
setUpHeader();
}
private int times = 0;
private void setupRecyclerView() {
int spanCount = 3;
GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), spanCount);
mRecyclerView.setLayoutManager(layoutManager);
int spacing = getResources().getDimensionPixelSize(R.dimen.view_padding);
mRecyclerView.addItemDecoration(new GridHeaderSpacingItemDecoration(spanCount, spacing, true, true));
mRecyclerView.addHeaderView(mHeader);
mRecyclerView.setUpAsGrid(spanCount);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setLoadingMoreEnabled(false);
mRecyclerView.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
times = 0;
mPresenter.loadMyVoucher(mContext, 999, 0, false);
}
@Override
public void onLoadMore() {
if (times == 0) {
mRecyclerView.loadMoreComplete();
mRecyclerView.refreshComplete();
} else {
mPresenter.loadMyVoucher(mContext, 12, times, true);
}
times++;
}
});
}
private void setUpAdapter() {
mAdapter = new VoucherRecyclerAdapter(mContext, true, false);
mAdapter.setOnItemClickListener((view, position) -> {
VoucherDao voucherDao = mAdapter.getDatas().get(position - 2);
DetailVoucherAct.start(mContext, voucherDao);
});
}
private void setUpHeader() {
UserDao userDao = Preferences.getUser(mContext);
if (userDao != null) {
txtName.setText(userDao.getFullname());
txtTotalCredit.setText(String.valueOf(userDao.getVokonCredit()));
txtTotalVoucher.setText(String.valueOf(userDao.getVouchersCount()));
Glide.with(mContext)
.load(userDao.getFullImage())
.error(R.drawable.img_default_profile)
.into(imgProfile);
}
if (!Preferences.isMerchant(mContext)) {
btnDashboard.setVisibility(View.GONE);
}
btnDashboard.setOnClickListener(v ->
DashboardAct.start(mContext)
);
imgProfile.setOnClickListener(v ->
ImageChooserAct.startActivityForResult(this)
);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == ImageChooserAct.REQ_CODE) {
Bundle bundle = data.getExtras();
mDeviceImage = bundle.getParcelable(ImageChooserAct.ARG_IMAGE_RESULT);
mBitmap = BitmapUtils.getScaledDeviceImage(mDeviceImage, 200);
imgProfile.setImageBitmap(mBitmap);
doUpdateAvatar();
}
}
}
// @Override
// public void onResume() {
// super.onResume();
// times = 0;
// mPresenter.loadMyVoucher(mContext, 10, 0, false);
// }
@Override
public void showListVouchers(List<VoucherDao> voucherDaos, boolean isLoadMore) {
BaseBus.pluck().send("Show " + voucherDaos.size());
if (!isLoadMore) {
mAdapter.clear();
mRecyclerView.refreshComplete();
} else {
mRecyclerView.loadMoreComplete();
}
mAdapter.addAll(voucherDaos);
txtTotalVoucher.setText(String.valueOf(mAdapter.getDatas().size()));
dismissLoading();
}
@Override
public void showListSpecificCategory(List<SpecificCategoryDao> specificCategoryDaos) {
}
@Override
public void showVoucher(VoucherDao voucherDao) {
}
@Override
public void showError(Throwable t) {
Timber.e(t.getMessage());
try {
mPbLoad.setVisibility(View.GONE);
mTxtLoadData.setText(t.getMessage());
} catch (Exception e) {
Timber.e(e.getMessage());
}
}
@Override
public void showLoading(boolean isRefresh) {
if (!isRefresh) {
mTxtLoadData.setText("Loading...");
mPbLoad.setVisibility(View.VISIBLE);
mLyLoad.setVisibility(View.VISIBLE);
}
}
private void doUpdateAvatar() {
ProgressDialog pDialog = BaseDialogFactory.createProgressDialog(mContext, "Loading...");
pDialog.setCancelable(true);
pDialog.show();
AvatarPost avatarPost = new AvatarPost();
if (mBitmap != null) {
avatarPost.setImage(BitmapUtils.bitmapToBase64String(mBitmap, 60));
} else {
return;
}
VokonService.pluck()
.getApi()
.updateAvatar(Preferences.getAccessToken(mContext), avatarPost)
.doOnError(throwable -> {
pDialog.dismiss();
Timber.e(throwable.getMessage());
getActivity().runOnUiThread(() ->
BaseDialogFactory.createSimpleOkErrorDialog(mContext, throwable.getMessage()).show()
);
})
.subscribe(apiResponse -> {
pDialog.dismiss();
if (apiResponse.getMeta().getCode() == 200 || apiResponse.getMeta().getCode() == 201) {
UserDao userDao = apiResponse.getData();
Preferences.saveUser(mContext, userDao);
imgProfile.setImageBitmap(mBitmap);
} else {
getActivity().runOnUiThread(() ->
BaseDialogFactory.createSimpleOkErrorDialog(mContext, apiResponse.getMeta().getMessage()).show()
);
}
});
}
@Override
public void dismissLoading() {
mLyLoad.setVisibility(View.GONE);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment