Proyectos de Subversion Android Microlearning

Rev

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