Created
July 2, 2016 08:11
-
-
Save derohimat/8ac668a5618810a50252eb66cb2b0af1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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