Rev 27 | Rev 37 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
package com.cesams.twogetskills.adapter;import android.annotation.SuppressLint;import android.content.Context;import android.text.TextUtils;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.ImageView;import androidx.fragment.app.FragmentActivity;import androidx.lifecycle.ViewModelProvider;import androidx.recyclerview.widget.RecyclerView;import com.bumptech.glide.Glide;import com.bumptech.glide.load.engine.DiskCacheStrategy;import com.bumptech.glide.load.model.GlideUrl;import com.bumptech.glide.load.model.LazyHeaders;import com.bumptech.glide.request.RequestOptions;import com.cesams.twogetskills.Constants;import com.cesams.twogetskills.R;import com.cesams.twogetskills.dao.DatabaseHelper;import com.cesams.twogetskills.dao.ProgressDao;import com.cesams.twogetskills.dao.SyncDao;import com.cesams.twogetskills.dao.UserLogDao;import com.cesams.twogetskills.entity.Progress;import com.cesams.twogetskills.entity.Slide;import com.cesams.twogetskills.entity.Sync;import com.cesams.twogetskills.entity.UserLog;import com.cesams.twogetskills.library.MD5;import com.cesams.twogetskills.skeleton.ITwoGetSkills;import com.cesams.twogetskills.viewdata.SlideRefreshUIViewData;import com.cesams.twogetskills.viewmodel.SlideRefreshUIViewModel;import org.json.JSONException;import org.json.JSONObject;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.List;import java.util.Random;import java.util.TimeZone;public class GalleryViewPageAdapter extends RecyclerView.Adapter<GalleryViewPageAdapter.ViewHolder> {private final static String TAG = "C2GS - GalleryAdapter";private List<Slide> mData;private LayoutInflater mInflater;private ITwoGetSkills iTwoGetSkills;private Context mContext;private Slide mItemCurrent;private SlideRefreshUIViewModel mSlideRefreshUIViewModel;// data is passed into the constructorpublic GalleryViewPageAdapter(FragmentActivity context, List<Slide> data) {this.mContext = context;this.iTwoGetSkills = (ITwoGetSkills) context;this.mInflater = LayoutInflater.from(context);this.mData = data;this.mSlideRefreshUIViewModel = new ViewModelProvider(context).get(SlideRefreshUIViewModel.class);}// inflates the row layout from xml when needed@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = mInflater.inflate(R.layout.fragment_gallery_viewpager_item, parent, false);return new ViewHolder(view);}// binds the data to the TextView in each row@SuppressLint("NewApi")@Overridepublic void onBindViewHolder(ViewHolder holder, int position) {holder.mCheckReady.setVisibility(View.INVISIBLE);holder.mButtonFinish.setVisibility(View.INVISIBLE);holder.mButtonViewer.setVisibility(View.INVISIBLE);mItemCurrent = mData.get(position);if(mItemCurrent.isShowFinish()) {holder.mButtonFinish.setVisibility(View.VISIBLE);}if(mItemCurrent.getCompleted()== 1) {holder.mCheckReady.setVisibility(View.VISIBLE);}boolean setImageViewerControl = false;switch(mItemCurrent.getType()) {case Constants.SLIDE_TYPE_TEXT :holder.mButtonViewer.setVisibility(View.VISIBLE);holder.mButtonViewer.setText(this.mContext.getString(R.string.button_launch_text));break;case Constants.SLIDE_TYPE_AUDIO :holder.mButtonViewer.setVisibility(View.VISIBLE);holder.mButtonViewer.setText(this.mContext.getString(R.string.button_launch_audio));break;case Constants.SLIDE_TYPE_DOCUMENT :holder.mButtonViewer.setVisibility(View.VISIBLE);holder.mButtonViewer.setText(this.mContext.getString(R.string.button_launch_document));break;case Constants.SLIDE_TYPE_VIDEO :holder.mButtonViewer.setVisibility(View.VISIBLE);holder.mButtonViewer.setText(this.mContext.getString(R.string.button_launch_video));//DatabaseHelper.imagenviewerontrol="NO";setImageViewerControl = false;break;case Constants.SLIDE_TYPE_QUIZ :if(mItemCurrent.getCompleted() == 0) {holder.mButtonViewer.setVisibility(View.VISIBLE);holder.mButtonViewer.setText(this.mContext.getString(R.string.button_launch_quiz));} else {holder.mButtonViewer.setVisibility(View.INVISIBLE);}break;default :holder.mButtonViewer.setVisibility(View.INVISIBLE);//DatabaseHelper.imagenviewerontrol="SI";setImageViewerControl = true;break;}SlideRefreshUIViewData slideRefreshUIViewData = mSlideRefreshUIViewModel.getSlideRefreshUIViewData();slideRefreshUIViewData.setImagenViewerControl(setImageViewerControl);mSlideRefreshUIViewModel.getSlideRefreshUIMutableLiveData().setValue(slideRefreshUIViewData);TimeZone timeZone = TimeZone.getTimeZone("UTC");Calendar calendar = Calendar.getInstance(timeZone);TimeZone tz = calendar.getTimeZone();int created = (int) (calendar.getTimeInMillis() / 1000);Random random = new Random(created);int rand = 1000 + random.nextInt(8999);String deviceUuid = iTwoGetSkills.getPreference().getDeviceUuid();String password = iTwoGetSkills.getPreference().getPassword();Log.d(TAG, "token = " + deviceUuid);Log.d(TAG, "created = " + created);Log.d(TAG, "rand = " + rand);Log.d(TAG, "calc = " + password + ':' + created + ':' + rand);String image = TextUtils.isEmpty(mItemCurrent.getBackground()) ?mItemCurrent.getFile() : mItemCurrent.getBackground();Log.d(TAG, "gallery slide image = " + image);String secret = MD5.generar(password + ':' + created + ':' + rand);GlideUrl url = new GlideUrl(image, new LazyHeaders.Builder().addHeader(Constants.HTTP_HEADER_ACCEPT, Constants.HTTP_HEADER_ACCEPT_VALUE).addHeader(Constants.HTTP_HEADER_SECURITY_TOKEN, deviceUuid).addHeader(Constants.HTTP_HEADER_SECURITY_SECRET, secret).addHeader(Constants.HTTP_HEADER_SECURITY_CREATED, String.valueOf(created)).addHeader(Constants.HTTP_HEADER_SECURITY_RAND, String.valueOf(rand)).build());RequestOptions options = new RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL);Glide.with(mContext).load(url).thumbnail().apply(options).into(holder.mImage);}// total number of rows@Overridepublic int getItemCount() {return mData.size();}// stores and recycles views as they are scrolled off screenpublic class ViewHolder extends RecyclerView.ViewHolder {ImageView mImage;ImageView mCheckReady;Button mButtonViewer;Button mButtonFinish;ViewHolder(View itemView) {super(itemView);mImage = itemView.findViewById(R.id.fragment_gallery_viewpage_item_image);mCheckReady = itemView.findViewById(R.id.fragment_gallery_viewpage_item_check_ready);mButtonViewer = itemView.findViewById(R.id.fragment_gallery_viewpage_item_button_viewer);mButtonViewer.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {launchViewer();}});mButtonFinish = itemView.findViewById(R.id.fragment_gallery_viewpage_item_button_finish);mButtonFinish.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {finishCapsuleAndOrTopic();}});}}public void launchViewer(){switch (mItemCurrent.getType()) {case Constants.SLIDE_TYPE_TEXT:iTwoGetSkills.launchTextViewer(mItemCurrent.getDescription());break;case Constants.SLIDE_TYPE_AUDIO:iTwoGetSkills.launchAudioViewer(mItemCurrent.getFile());break;case Constants.SLIDE_TYPE_DOCUMENT:iTwoGetSkills.launchDocumentViewer(mItemCurrent.getFile());break;case Constants.SLIDE_TYPE_VIDEO:iTwoGetSkills.launchVideoViewer(mItemCurrent.getFile());break;case Constants.SLIDE_TYPE_QUIZ:iTwoGetSkills.launchQuizViewer(mItemCurrent.getQuizUuid());break;}}public void finishCapsuleAndOrTopic(){UserLogDao userLogDao = iTwoGetSkills.getDatabase().getUserLogDao();SyncDao syncDao = iTwoGetSkills.getDatabase().getSyncDao();ProgressDao progressDao = iTwoGetSkills.getDatabase().getProgressDao();Progress progressCapsule = progressDao.selectByCapsuleUuid(mItemCurrent.getCapsuleUuid());Progress progressTopic = progressDao.selectByTopicUuid(mItemCurrent.getTopicUuid());Calendar calendar = Calendar.getInstance();Date date = calendar.getTime();SimpleDateFormat simpleDateFormat = new SimpleDateFormat(Constants.FORMAT_DATETIME_SERVICE);String dateOn = simpleDateFormat.format(date);UserLog userLog;Sync sync;int toInvokeFragment = Constants.IDX_FRAGMENT_FINISH_TOPIC;if(progressCapsule.getProgress() >= 100 && progressCapsule.getCompleted() == 0) {toInvokeFragment = Constants.IDX_FRAGMENT_FINISH_CAPSULE;userLog = new UserLog();userLog.setUserUuid(iTwoGetSkills.getPreference().getUserUuid());userLog.setActivity(Constants.USER_LOG_ACTIVITY_COMPLETED_CAPSULE);userLog.setCompanyUuid(progressCapsule.getCompanyUuid());userLog.setTopicUuid(progressCapsule.getTopicUuid());userLog.setCapsuleUuid(progressCapsule.getCapsuleUuid());userLog.setAddedOn(dateOn);userLogDao.insert(userLog);try {JSONObject json = userLog.toJson();json.put(Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME, Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_USER_LOG);sync = new Sync(Constants.SYNC_ADAPTER_TYPE_SYNC,json.toString());syncDao.insert(sync);} catch (JSONException e) {Log.d(TAG, e.getMessage());}progressCapsule.setCompleted(1);progressDao.update(progressCapsule);try {JSONObject json = progressCapsule.toJson();json.put(Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME, Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_PROGRESS);sync = new Sync(Constants.SYNC_ADAPTER_TYPE_SYNC, json.toString());syncDao.insert(sync);} catch (JSONException e) {Log.d(TAG, e.getMessage());}}if (progressTopic.getProgress() >= 100 && progressTopic.getCompleted() == 0) {toInvokeFragment = Constants.IDX_FRAGMENT_FINISH_TOPIC;userLog = new UserLog();userLog.setUserUuid(iTwoGetSkills.getPreference().getUserUuid());userLog.setActivity(Constants.USER_LOG_ACTIVITY_COMPLETED_TOPIC);userLog.setCompanyUuid(progressTopic.getCompanyUuid());userLog.setTopicUuid(progressTopic.getTopicUuid());userLog.setAddedOn(dateOn);userLogDao.insert(userLog);try {JSONObject json = userLog.toJson();json.put(Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME, Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_USER_LOG);sync = new Sync(Constants.SYNC_ADAPTER_TYPE_SYNC, json.toString());syncDao.insert(sync);} catch (JSONException e) {Log.d(TAG, e.getMessage());}progressTopic.setCompleted(1);progressDao.update(progressTopic);try {JSONObject json = progressTopic.toJson();json.put(Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME, Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_PROGRESS);sync = new Sync(Constants.SYNC_ADAPTER_TYPE_SYNC,json.toString());syncDao.insert(sync);} catch (JSONException e) {Log.d(TAG, e.getMessage());}}iTwoGetSkills.requestExecuteSyncAdapter();iTwoGetSkills.invokeFragment(toInvokeFragment);}}