Proyectos de Subversion Android Microlearning

Rev

Rev 27 | Rev 37 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
package com.cesams.twogetskills.adapter;
2
 
3
import android.annotation.SuppressLint;
4
import android.content.Context;
5
import android.text.TextUtils;
6
import android.util.Log;
7
import android.view.LayoutInflater;
8
import android.view.View;
9
import android.view.ViewGroup;
10
import android.widget.Button;
11
import android.widget.ImageView;
27 efrain 12
 
28 efrain 13
import androidx.fragment.app.FragmentActivity;
27 efrain 14
import androidx.lifecycle.ViewModelProvider;
1 efrain 15
import androidx.recyclerview.widget.RecyclerView;
16
 
17
import com.bumptech.glide.Glide;
18
import com.bumptech.glide.load.engine.DiskCacheStrategy;
19
import com.bumptech.glide.load.model.GlideUrl;
20
import com.bumptech.glide.load.model.LazyHeaders;
21
import com.bumptech.glide.request.RequestOptions;
22
import com.cesams.twogetskills.Constants;
23
import com.cesams.twogetskills.R;
11 gabriel 24
import com.cesams.twogetskills.dao.DatabaseHelper;
1 efrain 25
import com.cesams.twogetskills.dao.ProgressDao;
26
import com.cesams.twogetskills.dao.SyncDao;
27
import com.cesams.twogetskills.dao.UserLogDao;
28
import com.cesams.twogetskills.entity.Progress;
29
import com.cesams.twogetskills.entity.Slide;
30
import com.cesams.twogetskills.entity.Sync;
31
import com.cesams.twogetskills.entity.UserLog;
32
import com.cesams.twogetskills.library.MD5;
33
import com.cesams.twogetskills.skeleton.ITwoGetSkills;
27 efrain 34
import com.cesams.twogetskills.viewdata.SlideRefreshUIViewData;
35
import com.cesams.twogetskills.viewmodel.SlideRefreshUIViewModel;
1 efrain 36
 
37
import org.json.JSONException;
38
import org.json.JSONObject;
39
 
40
import java.text.SimpleDateFormat;
41
import java.util.Calendar;
42
import java.util.Date;
43
import java.util.List;
44
import java.util.Random;
45
import java.util.TimeZone;
46
 
47
public class GalleryViewPageAdapter extends RecyclerView.Adapter<GalleryViewPageAdapter.ViewHolder>  {
48
    private final static String TAG = "C2GS - GalleryAdapter";
49
    private List<Slide> mData;
50
    private LayoutInflater mInflater;
51
    private ITwoGetSkills iTwoGetSkills;
52
    private Context mContext;
53
    private Slide mItemCurrent;
27 efrain 54
    private SlideRefreshUIViewModel mSlideRefreshUIViewModel;
1 efrain 55
 
27 efrain 56
 
1 efrain 57
    // data is passed into the constructor
28 efrain 58
    public  GalleryViewPageAdapter(FragmentActivity context, List<Slide> data) {
1 efrain 59
        this.mContext = context;
60
        this.iTwoGetSkills = (ITwoGetSkills) context;
61
        this.mInflater = LayoutInflater.from(context);
62
        this.mData = data;
27 efrain 63
 
64
        this.mSlideRefreshUIViewModel = new ViewModelProvider(context).get(SlideRefreshUIViewModel.class);
1 efrain 65
    }
66
 
67
    // inflates the row layout from xml when needed
68
    @Override
69
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
70
        View view = mInflater.inflate(R.layout.fragment_gallery_viewpager_item, parent, false);
71
        return new ViewHolder(view);
72
    }
73
 
74
    // binds the data to the TextView in each row
75
    @SuppressLint("NewApi")
76
    @Override
77
    public void onBindViewHolder(ViewHolder holder, int position) {
78
        holder.mCheckReady.setVisibility(View.INVISIBLE);
79
        holder.mButtonFinish.setVisibility(View.INVISIBLE);
80
        holder.mButtonViewer.setVisibility(View.INVISIBLE);
81
 
82
        mItemCurrent = mData.get(position);
83
 
84
        if(mItemCurrent.isShowFinish()) {
85
            holder.mButtonFinish.setVisibility(View.VISIBLE);
86
        }
87
        if(mItemCurrent.getCompleted()== 1) {
88
            holder.mCheckReady.setVisibility(View.VISIBLE);
89
        }
90
 
27 efrain 91
        boolean setImageViewerControl = false;
1 efrain 92
        switch(mItemCurrent.getType()) {
93
 
94
            case Constants.SLIDE_TYPE_TEXT :
95
 
96
                holder.mButtonViewer.setVisibility(View.VISIBLE);
97
                holder.mButtonViewer.setText(this.mContext.getString(R.string.button_launch_text));
98
                break;
99
 
100
 
101
            case Constants.SLIDE_TYPE_AUDIO :
102
 
103
                holder.mButtonViewer.setVisibility(View.VISIBLE);
104
                holder.mButtonViewer.setText(this.mContext.getString(R.string.button_launch_audio));
105
                break;
106
 
107
            case Constants.SLIDE_TYPE_DOCUMENT :
108
 
109
                holder.mButtonViewer.setVisibility(View.VISIBLE);
110
                holder.mButtonViewer.setText(this.mContext.getString(R.string.button_launch_document));
111
                break;
112
 
113
            case Constants.SLIDE_TYPE_VIDEO :
114
 
115
                holder.mButtonViewer.setVisibility(View.VISIBLE);
116
                holder.mButtonViewer.setText(this.mContext.getString(R.string.button_launch_video));
27 efrain 117
                //DatabaseHelper.imagenviewerontrol="NO";
118
                setImageViewerControl = false;
11 gabriel 119
 
1 efrain 120
                break;
121
 
122
 
123
            case Constants.SLIDE_TYPE_QUIZ :
124
                if(mItemCurrent.getCompleted()  == 0) {
125
 
126
                    holder.mButtonViewer.setVisibility(View.VISIBLE);
127
                    holder.mButtonViewer.setText(this.mContext.getString(R.string.button_launch_quiz));
128
                } else {
129
                    holder.mButtonViewer.setVisibility(View.INVISIBLE);
130
                }
131
                break;
132
 
133
            default :
134
                holder.mButtonViewer.setVisibility(View.INVISIBLE);
27 efrain 135
                //DatabaseHelper.imagenviewerontrol="SI";
136
                setImageViewerControl = true;
1 efrain 137
                break;
138
 
139
        }
140
 
27 efrain 141
        SlideRefreshUIViewData slideRefreshUIViewData = mSlideRefreshUIViewModel.getSlideRefreshUIViewData();
142
        slideRefreshUIViewData.setImagenViewerControl(setImageViewerControl);
143
        mSlideRefreshUIViewModel.getSlideRefreshUIMutableLiveData().setValue(slideRefreshUIViewData);
1 efrain 144
 
145
 
27 efrain 146
 
1 efrain 147
        TimeZone timeZone = TimeZone.getTimeZone("UTC");
148
        Calendar calendar = Calendar.getInstance(timeZone);
149
        TimeZone tz = calendar.getTimeZone();
150
        int created =  (int) (calendar.getTimeInMillis() / 1000);
151
 
152
        Random random = new Random(created);
153
        int rand = 1000 + random.nextInt(8999);
154
 
155
 
156
        String deviceUuid = iTwoGetSkills.getPreference().getDeviceUuid();
157
        String password =  iTwoGetSkills.getPreference().getPassword();
158
 
159
        Log.d(TAG, "token = " + deviceUuid);
160
        Log.d(TAG, "created = " + created);
161
        Log.d(TAG, "rand = " + rand);
162
        Log.d(TAG, "calc = " + password + ':' +  created + ':' + rand);
163
 
164
        String image = TextUtils.isEmpty(mItemCurrent.getBackground()) ?mItemCurrent.getFile() : mItemCurrent.getBackground();
165
        Log.d(TAG, "gallery slide image = " + image);
166
 
167
        String secret = MD5.generar(password + ':' +  created + ':' + rand);
168
 
169
        GlideUrl url = new GlideUrl(image, new LazyHeaders.Builder()
170
                .addHeader(Constants.HTTP_HEADER_ACCEPT, Constants.HTTP_HEADER_ACCEPT_VALUE)
171
                .addHeader(Constants.HTTP_HEADER_SECURITY_TOKEN, deviceUuid)
172
                .addHeader(Constants.HTTP_HEADER_SECURITY_SECRET, secret)
173
                .addHeader(Constants.HTTP_HEADER_SECURITY_CREATED, String.valueOf(created))
174
                .addHeader(Constants.HTTP_HEADER_SECURITY_RAND, String.valueOf(rand))
175
                .build());
176
 
177
        RequestOptions options = new RequestOptions()
178
                .diskCacheStrategy(DiskCacheStrategy.ALL);
179
 
180
        Glide.with(mContext).load(url)
181
                .thumbnail()
182
                .apply(options)
183
                .into(holder.mImage);
184
 
185
 
186
 
187
    }
188
 
189
 
190
 
191
 
192
    // total number of rows
193
    @Override
194
    public int getItemCount() {
195
        return mData.size();
196
    }
197
 
198
 
199
    // stores and recycles views as they are scrolled off screen
200
    public class ViewHolder extends RecyclerView.ViewHolder {
201
        ImageView mImage;
202
        ImageView mCheckReady;
203
        Button mButtonViewer;
204
        Button mButtonFinish;
205
 
206
 
207
        ViewHolder(View itemView) {
208
            super(itemView);
8 gabriel 209
            mImage = itemView.findViewById(R.id.fragment_gallery_viewpage_item_image);
210
            mCheckReady = itemView.findViewById(R.id.fragment_gallery_viewpage_item_check_ready);
211
            mButtonViewer = itemView.findViewById(R.id.fragment_gallery_viewpage_item_button_viewer);
1 efrain 212
            mButtonViewer.setOnClickListener(new View.OnClickListener() {
213
                @Override
214
                public void onClick(View view) {
215
                    launchViewer();
216
                }
217
            });
218
 
8 gabriel 219
            mButtonFinish = itemView.findViewById(R.id.fragment_gallery_viewpage_item_button_finish);
1 efrain 220
            mButtonFinish.setOnClickListener(new View.OnClickListener() {
221
                @Override
222
                public void onClick(View view) {
223
                    finishCapsuleAndOrTopic();
224
                }
225
            });
226
        }
227
    }
228
 
229
    public void launchViewer()
230
    {
231
 
232
 
233
        switch (mItemCurrent.getType()) {
234
            case Constants.SLIDE_TYPE_TEXT:
235
 
236
                iTwoGetSkills.launchTextViewer(mItemCurrent.getDescription());
237
                break;
238
 
239
            case Constants.SLIDE_TYPE_AUDIO:
240
 
241
                iTwoGetSkills.launchAudioViewer(mItemCurrent.getFile());
242
                break;
243
 
244
            case Constants.SLIDE_TYPE_DOCUMENT:
245
                iTwoGetSkills.launchDocumentViewer(mItemCurrent.getFile());
246
 
247
                break;
248
 
249
            case Constants.SLIDE_TYPE_VIDEO:
250
 
251
                iTwoGetSkills.launchVideoViewer(mItemCurrent.getFile());
252
                break;
253
 
254
 
255
            case Constants.SLIDE_TYPE_QUIZ:
256
                iTwoGetSkills.launchQuizViewer(mItemCurrent.getQuizUuid());
257
 
258
                break;
259
        }
260
    }
261
 
262
    public void finishCapsuleAndOrTopic()
263
    {
264
        UserLogDao userLogDao = iTwoGetSkills.getDatabase().getUserLogDao();
265
        SyncDao syncDao = iTwoGetSkills.getDatabase().getSyncDao();
266
        ProgressDao progressDao = iTwoGetSkills.getDatabase().getProgressDao();
267
 
268
        Progress progressCapsule = progressDao.selectByCapsuleUuid(mItemCurrent.getCapsuleUuid());
269
        Progress progressTopic = progressDao.selectByTopicUuid(mItemCurrent.getTopicUuid());
270
 
271
        Calendar calendar = Calendar.getInstance();
272
        Date date = calendar.getTime();
273
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(Constants.FORMAT_DATETIME_SERVICE);
274
        String  dateOn = simpleDateFormat.format(date);
275
 
276
        UserLog userLog;
277
        Sync sync;
278
 
279
        int toInvokeFragment = Constants.IDX_FRAGMENT_FINISH_TOPIC;
280
 
281
        if(progressCapsule.getProgress() >= 100 && progressCapsule.getCompleted() == 0) {
282
            toInvokeFragment = Constants.IDX_FRAGMENT_FINISH_CAPSULE;
283
 
284
            userLog = new UserLog();
285
            userLog.setUserUuid(iTwoGetSkills.getPreference().getUserUuid());
286
            userLog.setActivity(Constants.USER_LOG_ACTIVITY_COMPLETED_CAPSULE);
287
            userLog.setCompanyUuid(progressCapsule.getCompanyUuid());
288
            userLog.setTopicUuid(progressCapsule.getTopicUuid());
289
            userLog.setCapsuleUuid(progressCapsule.getCapsuleUuid());
290
            userLog.setAddedOn(dateOn);
291
            userLogDao.insert(userLog);
292
 
293
            try {
294
                JSONObject json = userLog.toJson();
295
                json.put(Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME, Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_USER_LOG);
296
 
297
                sync = new Sync(Constants.SYNC_ADAPTER_TYPE_SYNC,json.toString());
298
                syncDao.insert(sync);
299
 
300
            } catch (JSONException e) {
301
                Log.d(TAG, e.getMessage());
302
            }
303
 
304
            progressCapsule.setCompleted(1);
305
            progressDao.update(progressCapsule);
306
 
307
            try {
308
                JSONObject json = progressCapsule.toJson();
309
                json.put(Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME, Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_PROGRESS);
310
 
311
                sync = new Sync(Constants.SYNC_ADAPTER_TYPE_SYNC, json.toString());
312
                syncDao.insert(sync);
313
 
314
            } catch (JSONException e) {
315
                Log.d(TAG, e.getMessage());
316
            }
317
        }
318
 
4 gabriel 319
 
1 efrain 320
        if (progressTopic.getProgress() >= 100 && progressTopic.getCompleted() == 0) {
321
            toInvokeFragment = Constants.IDX_FRAGMENT_FINISH_TOPIC;
322
 
323
            userLog = new UserLog();
324
            userLog.setUserUuid(iTwoGetSkills.getPreference().getUserUuid());
325
            userLog.setActivity(Constants.USER_LOG_ACTIVITY_COMPLETED_TOPIC);
326
            userLog.setCompanyUuid(progressTopic.getCompanyUuid());
327
            userLog.setTopicUuid(progressTopic.getTopicUuid());
328
            userLog.setAddedOn(dateOn);
329
            userLogDao.insert(userLog);
330
 
331
            try {
332
                JSONObject json = userLog.toJson();
333
                json.put(Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME, Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_USER_LOG);
334
 
335
                sync = new Sync(Constants.SYNC_ADAPTER_TYPE_SYNC, json.toString());
336
                syncDao.insert(sync);
337
 
338
            } catch (JSONException e) {
339
                Log.d(TAG, e.getMessage());
340
            }
341
 
342
            progressTopic.setCompleted(1);
343
            progressDao.update(progressTopic);
344
 
345
            try {
346
                JSONObject json = progressTopic.toJson();
347
                json.put(Constants.SYNC_ADAPTER_DATA_TYPE_FIELD_NAME, Constants.SYNC_ADAPTER_DATA_TYPE_MICROLEARNING_PROGRESS);
348
 
349
                sync = new Sync(Constants.SYNC_ADAPTER_TYPE_SYNC,json.toString());
350
                syncDao.insert(sync);
351
            } catch (JSONException e) {
352
                Log.d(TAG, e.getMessage());
353
            }
354
        }
355
 
356
        iTwoGetSkills.requestExecuteSyncAdapter();
357
        iTwoGetSkills.invokeFragment(toInvokeFragment);
358
    }
359
}