Proyectos de Subversion Android Microlearning

Rev

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