Proyectos de Subversion Android Microlearning

Rev

Rev 35 | 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.fragment;
2
 
3
import android.os.Bundle;
4
import android.util.Log;
5
import android.view.LayoutInflater;
6
import android.view.Menu;
7
import android.view.MenuInflater;
8
import android.view.View;
9
import android.view.ViewGroup;
10
import android.widget.ImageButton;
11
 
12
import androidx.annotation.NonNull;
13
import androidx.annotation.Nullable;
14
import androidx.fragment.app.Fragment;
15
import androidx.lifecycle.LifecycleOwner;
16
import androidx.lifecycle.Observer;
17
import androidx.lifecycle.ViewModelProvider;
18
import androidx.viewpager2.widget.ViewPager2;
19
 
20
 
21
import com.cesams.twogetskills.R;
22
import com.cesams.twogetskills.adapter.GalleryViewPageAdapter;
8 gabriel 23
import com.cesams.twogetskills.dao.DatabaseHelper;
1 efrain 24
import com.cesams.twogetskills.dao.ProgressDao;
25
import com.cesams.twogetskills.dao.SlideDao;
26
import com.cesams.twogetskills.entity.Progress;
27
import com.cesams.twogetskills.entity.Slide;
27 efrain 28
 
29
 
30
 
1 efrain 31
import com.cesams.twogetskills.skeleton.ITwoGetSkills;
35 gabriel 32
import com.cesams.twogetskills.viewdata.GalleryRefreshUIViewData;
27 efrain 33
import com.cesams.twogetskills.viewdata.SlideRefreshUIViewData;
35 gabriel 34
import com.cesams.twogetskills.viewmodel.GalleryRefreshUIViewModel;
1 efrain 35
import com.cesams.twogetskills.viewmodel.GalleryViewModel;
27 efrain 36
import com.cesams.twogetskills.viewmodel.SlideRefreshUIViewModel;
3 gabriel 37
import com.wajahatkarim3.easyflipviewpager.BookFlipPageTransformer2;
1 efrain 38
 
39
import java.util.List;
40
import java.util.ArrayList;
41
 
42
//IResultActivity
43
public class GalleryFragment extends Fragment implements LifecycleOwner {
44
    private final String TAG = "C2GS - GalleryFragment";
45
    private ViewPager2 viewPager2;
46
    private ImageButton mButtonNext;
47
    private ImageButton mButtonPrevious;
48
    private GalleryViewPageAdapter adapter;
49
    private ITwoGetSkills iTwoGetSkills;
50
    private GalleryViewModel mGalleryViewModel;
27 efrain 51
    private SlideRefreshUIViewModel mSlideRefreshUIViewModel;
1 efrain 52
 
35 gabriel 53
    private GalleryRefreshUIViewModel mGalleryRefreshUIView;
26 gabriel 54
 
34 gabriel 55
 
1 efrain 56
    @Override
57
    public void onCreate(@Nullable Bundle savedInstanceState) {
58
        super.onCreate(savedInstanceState);
59
        setHasOptionsMenu(true);
60
 
61
    }
62
 
63
    @Override
64
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
65
        super.onCreateOptionsMenu(menu, inflater);
66
        menu.clear();
67
    }
68
 
69
    @Override
70
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
71
 
72
        return inflater.inflate(R.layout.fragment_gallery, container, false);
73
    }
74
 
75
 
76
    @Override
77
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
78
        super.onViewCreated(view, savedInstanceState);
79
        iTwoGetSkills = (ITwoGetSkills) getActivity();
80
 
35 gabriel 81
        mGalleryRefreshUIView = new ViewModelProvider(requireActivity()).get(GalleryRefreshUIViewModel.class);
27 efrain 82
        mSlideRefreshUIViewModel = new ViewModelProvider(requireActivity()).get(SlideRefreshUIViewModel.class);
1 efrain 83
        mGalleryViewModel = new ViewModelProvider(requireActivity()).get(GalleryViewModel.class);
28 efrain 84
        adapter = new GalleryViewPageAdapter(requireActivity(), mGalleryViewModel.getSlideArrayList());
1 efrain 85
 
8 gabriel 86
        viewPager2 = getView().findViewById(R.id.fragment_gallery_viewpager2);
1 efrain 87
        viewPager2.setAdapter(adapter);
88
 
8 gabriel 89
 
3 gabriel 90
        // Create an object of page transformer
91
        BookFlipPageTransformer2 bookFlipPageTransformer = new BookFlipPageTransformer2();
92
 
93
        // Enable / Disable scaling while flipping. If true, then next page will scale in (zoom in). By default, its true.
94
        bookFlipPageTransformer.setEnableScale(false);
95
 
96
        // The amount of scale the page will zoom. By default, its 5 percent.
8 gabriel 97
        bookFlipPageTransformer.setScaleAmountPercent(10f);
3 gabriel 98
 
99
        // Assign the page transformer to the ViewPager2.
100
        viewPager2.setPageTransformer(bookFlipPageTransformer);
101
 
11 gabriel 102
 
1 efrain 103
        Observer<ArrayList<Slide>> slideArrayListUpdateObserver = new Observer<ArrayList<Slide>>() {
104
            @Override
105
            public void onChanged(ArrayList<Slide> slideArrayList) {
27 efrain 106
                SlideRefreshUIViewData slideRefreshUIViewData = mSlideRefreshUIViewModel.getSlideRefreshUIViewData();
11 gabriel 107
 
27 efrain 108
                if (slideRefreshUIViewData.isImagenViewerControl()) {
109
                    adapter.notifyItemChanged(viewPager2.getCurrentItem());
110
                }
11 gabriel 111
 
34 gabriel 112
 
1 efrain 113
            }
114
        };
115
 
8 gabriel 116
        mGalleryViewModel.getSlideMutableLiveData().observe(requireActivity(),slideArrayListUpdateObserver);
1 efrain 117
 
118
 
11 gabriel 119
 
8 gabriel 120
        mButtonNext = getView().findViewById(R.id.fragment_gallery_button_next);
1 efrain 121
 
122
 
8 gabriel 123
 
1 efrain 124
        mButtonNext.setOnClickListener(new View.OnClickListener() {
125
            @Override
126
            public void onClick(View view) {
27 efrain 127
                SlideRefreshUIViewData slideRefreshUIViewData = mSlideRefreshUIViewModel.getSlideRefreshUIViewData();
128
                slideRefreshUIViewData.setNextFromButton(true);
129
                mSlideRefreshUIViewModel.getSlideRefreshUIMutableLiveData().setValue(slideRefreshUIViewData);
8 gabriel 130
 
131
                viewPager2.setCurrentItem(getItem(+1), true); //getItem(-1) for previous
1 efrain 132
            }
133
        });
134
 
8 gabriel 135
        mButtonPrevious = getView().findViewById(R.id.fragment_gallery_button_previous);
26 gabriel 136
 
1 efrain 137
        mButtonPrevious.setOnClickListener(new View.OnClickListener() {
138
            @Override
139
            public void onClick(View view) {
8 gabriel 140
              //  Log.d("Gallery ViewPager2", "CurrentItem = " + viewPager2.getCurrentItem()  );
27 efrain 141
                SlideRefreshUIViewData slideRefreshUIViewData = mSlideRefreshUIViewModel.getSlideRefreshUIViewData();
142
                slideRefreshUIViewData.setNextFromButton(true);
143
                mSlideRefreshUIViewModel.getSlideRefreshUIMutableLiveData().setValue(slideRefreshUIViewData);
144
 
8 gabriel 145
                viewPager2.setCurrentItem(getItem(-1), true);
146
 
1 efrain 147
            }
148
        });
149
 
3 gabriel 150
       // viewPager2.setPageTransformer(new ZoomOutPageTransformer());
34 gabriel 151
 
152
 
153
 
154
 
155
 
1 efrain 156
        viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
34 gabriel 157
 
158
            int posicionfinal;
1 efrain 159
            @Override
160
            public void onPageSelected(int position) {
161
                super.onPageSelected(position);
162
 
163
 
8 gabriel 164
                Log.e("Seleccion","de pagina");
165
              //  Log.d(TAG, "registerOnPageChangeCallback");
1 efrain 166
                Slide mItem = mGalleryViewModel.getSlideArrayList().get(position);
167
 
168
 
169
                iTwoGetSkills.setTitleActionBar(mItem.getName());
170
                iTwoGetSkills.changeSlideActive(mItem.getUuid(), mItem.getType(), false);
34 gabriel 171
                posicionfinal=position;
172
                //adapter.notifyItemChanged(position);
173
            }
1 efrain 174
 
34 gabriel 175
            @Override
176
            public void onPageScrollStateChanged(int state) {
177
                super.onPageScrollStateChanged(state);
1 efrain 178
 
34 gabriel 179
                if (state == ViewPager2.SCROLL_STATE_IDLE)
180
                {
181
                    adapter.notifyItemChanged(posicionfinal);
182
                }
1 efrain 183
            }
184
        });
185
 
36 gabriel 186
        loadData(false);
8 gabriel 187
 
1 efrain 188
    }
189
 
8 gabriel 190
    private int getItem(int i) {
191
        return viewPager2.getCurrentItem() + i;
192
    }
20 gabriel 193
 
1 efrain 194
    @Override
20 gabriel 195
    public void onPause() {
196
        super.onPause();
197
    }
198
 
199
    @Override
1 efrain 200
    public void onResume() {
201
        super.onResume();
202
 
29 efrain 203
        iTwoGetSkills.getPreference().save();
26 gabriel 204
 
27 efrain 205
        SlideRefreshUIViewData slideRefreshUIViewData = mSlideRefreshUIViewModel.getSlideRefreshUIViewData();
206
        slideRefreshUIViewData.setResumenVisores(true);
207
        mSlideRefreshUIViewModel.getSlideRefreshUIMutableLiveData().setValue(slideRefreshUIViewData);
208
 
209
        //DatabaseHelper.ResumenVisores="SI";
210
 
10 gabriel 211
        Log.e("OnResumen"," Aqui llegue");
1 efrain 212
 
36 gabriel 213
        loadData(true);
1 efrain 214
    }
215
 
216
 
217
    @Override
218
    public void onHiddenChanged(boolean hidden) {
219
        super.onHiddenChanged(hidden);
220
 
8 gabriel 221
        //Refrescar cuando se cambia de capsula
222
        adapter.notifyDataSetChanged();
1 efrain 223
 
29 efrain 224
        iTwoGetSkills.getPreference().save();
1 efrain 225
 
226
        if(!hidden) {
36 gabriel 227
            loadData( false);
1 efrain 228
        }
229
    }
230
 
36 gabriel 231
    private void loadData( boolean background) {
1 efrain 232
 
35 gabriel 233
        GalleryRefreshUIViewData galleryRefreshUIViewData = mGalleryRefreshUIView.getGalleryRefreshUIViewData();
1 efrain 234
 
235
        SlideDao slideDao = iTwoGetSkills.getDatabase().getSlideDao();
236
        Progress progress;
35 gabriel 237
        boolean showFinish = false;
238
        List<Slide> dbSlides;
1 efrain 239
        ProgressDao progressDao = iTwoGetSkills.getDatabase().getProgressDao();
240
 
35 gabriel 241
        if(!background)
242
        {
243
            dbSlides = slideDao.selectAllByCapsuleUuid(iTwoGetSkills.getCapsuleUuidActive());
4 gabriel 244
 
245
 
35 gabriel 246
            progress = progressDao.selectByTopicUuid(iTwoGetSkills.getTopicUuidActive());
247
 
248
 
249
            galleryRefreshUIViewData.setCapsuleUuid(iTwoGetSkills.getCapsuleUuidActive());
250
            galleryRefreshUIViewData.setTopicUuidViewData(iTwoGetSkills.getTopicUuidActive());
251
 
252
        }
253
        else
254
 
255
        {
256
            dbSlides=slideDao.selectAllByCapsuleUuid(galleryRefreshUIViewData.getCapsuleUuid());
257
            progress= progressDao.selectByTopicUuid(galleryRefreshUIViewData.getTopicUuidViewData());
258
        }
259
 
260
 
17 gabriel 261
        if (progress != null) {
1 efrain 262
            showFinish = progress.getProgress() >= 100 && progress.getCompleted() == 0;
263
        }
17 gabriel 264
        if (!showFinish) {
1 efrain 265
            progress = progressDao.selectByCapsuleUuid(iTwoGetSkills.getCapsuleUuidActive());
17 gabriel 266
            if (progress != null) {
1 efrain 267
                showFinish = progress.getProgress() >= 100 && progress.getCompleted() == 0;
268
            }
269
        }
270
 
271
        mGalleryViewModel.getSlideArrayList().clear();
272
 
273
        int i = 0;
274
        int position = 0;
275
        Slide slide;
17 gabriel 276
        for (Slide dbSlide : dbSlides) {
1 efrain 277
            slide = new Slide();
278
            slide.setTopicUuid(dbSlide.getTopicUuid());
279
            slide.setCapsuleUuid(dbSlide.getCapsuleUuid());
280
            slide.setQuizUuid(dbSlide.getQuizUuid());
281
            slide.setUuid(dbSlide.getUuid());
282
            slide.setName(dbSlide.getName());
283
            slide.setDescription(dbSlide.getDescription());
284
            slide.setType(dbSlide.getType());
285
            slide.setFile(dbSlide.getFile());
286
            slide.setBackground(dbSlide.getBackground());
287
            slide.setPosition(dbSlide.getPosition());
288
 
289
 
17 gabriel 290
            if (slide.getUuid().equals(iTwoGetSkills.getSlideUuidActive())) {
1 efrain 291
                position = i;
292
            }
293
 
294
            progress = progressDao.selectBySlideUuid(slide.getUuid());
17 gabriel 295
            if (progress != null) {
1 efrain 296
                slide.setCompleted(progress.getCompleted());
297
            } else {
298
                slide.setCompleted(0);
299
            }
300
            slide.setShowFinish(showFinish);
301
            i++;
302
 
303
            mGalleryViewModel.getSlideArrayList().add(slide);
304
        }
305
 
306
 
307
        Log.d(TAG, "slide position : " + position);
308
 
309
 
32 gabriel 310
           iTwoGetSkills.setTitleActionBar(mGalleryViewModel.getSlideArrayList().get(position).getName());
20 gabriel 311
 
8 gabriel 312
 
313
 
27 efrain 314
            SlideRefreshUIViewData slideRefreshUIViewData = mSlideRefreshUIViewModel.getSlideRefreshUIViewData();
17 gabriel 315
 
27 efrain 316
            if (!slideRefreshUIViewData.isNextFromButton()) {
317
                if (slideRefreshUIViewData.isCambioSlide()) {
17 gabriel 318
                    viewPager2.setCurrentItem(position, false);
319
                }
320
 
8 gabriel 321
            }
17 gabriel 322
            //Cuando ejecuto los visores de capsula como el reproductor de video y regreso, me aseguro de marcar vista el slide
27 efrain 323
            if (slideRefreshUIViewData.isResumenVisores()) {
17 gabriel 324
                //viewPager2.setCurrentItem(position, false);
325
                adapter.notifyItemChanged(position);
326
            }
27 efrain 327
            slideRefreshUIViewData.setCambioSlide(false);
328
            slideRefreshUIViewData.setResumenVisores(false);
329
            slideRefreshUIViewData.setNextFromButton(false);
330
            mSlideRefreshUIViewModel.getSlideRefreshUIMutableLiveData().setValue(slideRefreshUIViewData);
331
 
332
            /*
17 gabriel 333
            DatabaseHelper.CambioSlide = "NO";
334
            DatabaseHelper.ResumenVisores = "NO";
335
            isnextfrombutton = false;
27 efrain 336
             */
337
 
36 gabriel 338
 
339
            mGalleryViewModel.getSlideMutableLiveData().setValue(mGalleryViewModel.getSlideArrayList());
340
 
1 efrain 341
        }
342
 
20 gabriel 343
 
27 efrain 344
 
345
 
346
 
1 efrain 347
}