Proyectos de Subversion Android Microlearning

Rev

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