Proyectos de Subversion Android Microlearning - Inconcert

Rev

Rev 16 | Ir a la última revisión | | Ultima modificación | Ver Log |

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