Proyectos de Subversion Android Microlearning - Nuevo Interface

Rev

Rev 2 | Rev 19 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 gabriel 1
package com.cesams.twogetskills.fragment;
2
 
3 gabriel 3
import static androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_IDLE;
1 gabriel 4
 
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
 
3 gabriel 23
import com.cesams.twogetskills.Constants;
1 gabriel 24
import com.cesams.twogetskills.R;
25
import com.cesams.twogetskills.adapter.GalleryViewPageAdapter;
26
import com.cesams.twogetskills.dao.DatabaseHelper;
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;
3 gabriel 31
 
32
 
33
import com.cesams.twogetskills.room.ResultCount;
1 gabriel 34
import com.cesams.twogetskills.skeleton.ITwoGetSkills;
3 gabriel 35
import com.cesams.twogetskills.viewdata.GalleryRefreshUIViewData;
36
import com.cesams.twogetskills.viewdata.SlideRefreshUIViewData;
37
import com.cesams.twogetskills.viewmodel.GalleryRefreshUIViewModel;
1 gabriel 38
import com.cesams.twogetskills.viewmodel.GalleryViewModel;
3 gabriel 39
import com.cesams.twogetskills.viewmodel.SlideRefreshUIViewModel;
1 gabriel 40
import com.wajahatkarim3.easyflipviewpager.BookFlipPageTransformer2;
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;
3 gabriel 54
    private SlideRefreshUIViewModel mSlideRefreshUIViewModel;
55
    private GalleryRefreshUIViewModel mGalleryRefreshUIView;
1 gabriel 56
 
3 gabriel 57
 
1 gabriel 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
 
3 gabriel 83
        mGalleryRefreshUIView = new ViewModelProvider(requireActivity()).get(GalleryRefreshUIViewModel.class);
84
        mSlideRefreshUIViewModel = new ViewModelProvider(requireActivity()).get(SlideRefreshUIViewModel.class);
1 gabriel 85
        mGalleryViewModel = new ViewModelProvider(requireActivity()).get(GalleryViewModel.class);
3 gabriel 86
        adapter = new GalleryViewPageAdapter(requireActivity(), mGalleryViewModel.getSlideArrayList());
1 gabriel 87
 
88
        viewPager2 = getView().findViewById(R.id.fragment_gallery_viewpager2);
89
        viewPager2.setAdapter(adapter);
90
 
91
 
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.
99
        bookFlipPageTransformer.setScaleAmountPercent(10f);
100
 
101
        // Assign the page transformer to the ViewPager2.
102
        viewPager2.setPageTransformer(bookFlipPageTransformer);
103
 
3 gabriel 104
/*
1 gabriel 105
        Observer<ArrayList<Slide>> slideArrayListUpdateObserver = new Observer<ArrayList<Slide>>() {
106
            @Override
107
            public void onChanged(ArrayList<Slide> slideArrayList) {
3 gabriel 108
                //Este metodo se ejecuta si el slide Array sufre cambios
1 gabriel 109
 
110
 
111
 
112
 
3 gabriel 113
 
1 gabriel 114
            }
115
        };
3 gabriel 116
*/
1 gabriel 117
 
3 gabriel 118
        //mGalleryViewModel.getSlideMutableLiveData().observe(requireActivity(),slideArrayListUpdateObserver);
1 gabriel 119
 
120
 
121
 
122
        mButtonNext = getView().findViewById(R.id.fragment_gallery_button_next);
123
 
124
 
125
 
126
        mButtonNext.setOnClickListener(new View.OnClickListener() {
127
            @Override
128
            public void onClick(View view) {
3 gabriel 129
                SlideRefreshUIViewData slideRefreshUIViewData = mSlideRefreshUIViewModel.getSlideRefreshUIViewData();
130
                slideRefreshUIViewData.setNextFromButton(true);
131
                mSlideRefreshUIViewModel.getSlideRefreshUIMutableLiveData().setValue(slideRefreshUIViewData);
1 gabriel 132
 
133
                viewPager2.setCurrentItem(getItem(+1), true); //getItem(-1) for previous
134
            }
135
        });
136
 
137
        mButtonPrevious = getView().findViewById(R.id.fragment_gallery_button_previous);
3 gabriel 138
 
1 gabriel 139
        mButtonPrevious.setOnClickListener(new View.OnClickListener() {
140
            @Override
141
            public void onClick(View view) {
142
              //  Log.d("Gallery ViewPager2", "CurrentItem = " + viewPager2.getCurrentItem()  );
3 gabriel 143
                SlideRefreshUIViewData slideRefreshUIViewData = mSlideRefreshUIViewModel.getSlideRefreshUIViewData();
144
                slideRefreshUIViewData.setNextFromButton(true);
145
                mSlideRefreshUIViewModel.getSlideRefreshUIMutableLiveData().setValue(slideRefreshUIViewData);
146
 
1 gabriel 147
                viewPager2.setCurrentItem(getItem(-1), true);
148
 
149
            }
150
        });
151
 
3 gabriel 152
 
153
 
1 gabriel 154
        viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
3 gabriel 155
 
1 gabriel 156
            @Override
157
            public void onPageSelected(int position) {
158
                super.onPageSelected(position);
159
 
160
 
161
                Log.e("Seleccion","de pagina");
162
              //  Log.d(TAG, "registerOnPageChangeCallback");
163
                Slide mItem = mGalleryViewModel.getSlideArrayList().get(position);
164
 
3 gabriel 165
                Log.e("ONPageSelecte","aqui¡ "+mItem.getType());
1 gabriel 166
 
167
                iTwoGetSkills.setTitleActionBar(mItem.getName());
168
                iTwoGetSkills.changeSlideActive(mItem.getUuid(), mItem.getType(), false);
169
 
170
 
3 gabriel 171
 
172
                //Resuelve el fix de pagina vista de imagenes no marcada
173
                loadData(false);
174
 
175
 
1 gabriel 176
            }
3 gabriel 177
 
178
 
179
            @Override
180
            public void onPageScrollStateChanged(int state) {
181
                super.onPageScrollStateChanged(state);
182
 
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
 
192
                }
193
 
194
            }
1 gabriel 195
        });
196
 
197
 
3 gabriel 198
 
199
        loadData(false);
200
 
1 gabriel 201
    }
202
 
203
    private int getItem(int i) {
204
        return viewPager2.getCurrentItem() + i;
205
    }
3 gabriel 206
 
1 gabriel 207
    @Override
3 gabriel 208
    public void onPause() {
209
        super.onPause();
210
    }
211
 
212
    @Override
1 gabriel 213
    public void onResume() {
214
        super.onResume();
215
 
3 gabriel 216
        iTwoGetSkills.getPreference().save();
1 gabriel 217
 
3 gabriel 218
        SlideRefreshUIViewData slideRefreshUIViewData = mSlideRefreshUIViewModel.getSlideRefreshUIViewData();
219
        slideRefreshUIViewData.setResumenVisores(true);
220
        mSlideRefreshUIViewModel.getSlideRefreshUIMutableLiveData().setValue(slideRefreshUIViewData);
221
 
222
 
1 gabriel 223
        loadData(true);
224
    }
225
 
226
 
227
    @Override
228
    public void onHiddenChanged(boolean hidden) {
229
        super.onHiddenChanged(hidden);
230
 
231
        adapter.notifyDataSetChanged();
232
 
3 gabriel 233
        iTwoGetSkills.getPreference().save();
1 gabriel 234
 
3 gabriel 235
        if(!hidden) {
236
            loadData( false);
1 gabriel 237
 
238
        }
239
    }
240
 
3 gabriel 241
    private void loadData( boolean background) {
1 gabriel 242
 
243
 
3 gabriel 244
        GalleryRefreshUIViewData galleryRefreshUIViewData = mGalleryRefreshUIView.getGalleryRefreshUIViewData();
245
 
1 gabriel 246
        SlideDao slideDao = iTwoGetSkills.getDatabase().getSlideDao();
247
        Progress progress;
3 gabriel 248
        boolean showFinish = false;
249
        List<Slide> dbSlides;
1 gabriel 250
        ProgressDao progressDao = iTwoGetSkills.getDatabase().getProgressDao();
251
 
3 gabriel 252
        if(!background)
253
        {
254
            dbSlides = slideDao.selectAllByCapsuleUuid(iTwoGetSkills.getCapsuleUuidActive());
255
            progress = progressDao.selectByTopicUuid(iTwoGetSkills.getTopicUuidActive());
1 gabriel 256
 
3 gabriel 257
            galleryRefreshUIViewData.setDbSlidesActive(dbSlides);
258
            galleryRefreshUIViewData.setProgreso(progress);
1 gabriel 259
 
3 gabriel 260
            mGalleryRefreshUIView.getGalleryRefreshUIMutableLiveData().setValue(galleryRefreshUIViewData);
261
 
262
        }
263
        else
264
 
265
        {
266
            dbSlides=galleryRefreshUIViewData.getdbSlidesActive();
267
            progress= galleryRefreshUIViewData.getProgreso();
268
 
269
        }
270
 
2 gabriel 271
        if (progress != null) {
1 gabriel 272
            showFinish = progress.getProgress() >= 100 && progress.getCompleted() == 0;
273
        }
2 gabriel 274
        if (!showFinish) {
1 gabriel 275
            progress = progressDao.selectByCapsuleUuid(iTwoGetSkills.getCapsuleUuidActive());
2 gabriel 276
            if (progress != null) {
1 gabriel 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;
2 gabriel 286
        for (Slide dbSlide : dbSlides) {
1 gabriel 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
 
2 gabriel 300
            if (slide.getUuid().equals(iTwoGetSkills.getSlideUuidActive())) {
1 gabriel 301
                position = i;
302
            }
303
 
304
            progress = progressDao.selectBySlideUuid(slide.getUuid());
2 gabriel 305
            if (progress != null) {
1 gabriel 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
 
3 gabriel 316
           iTwoGetSkills.setTitleActionBar(mGalleryViewModel.getSlideArrayList().get(position).getName());
1 gabriel 317
 
318
 
3 gabriel 319
            SlideRefreshUIViewData slideRefreshUIViewData = mSlideRefreshUIViewModel.getSlideRefreshUIViewData();
1 gabriel 320
 
3 gabriel 321
            if (!slideRefreshUIViewData.isNextFromButton()) {
322
                if (slideRefreshUIViewData.isCambioSlide()) {
323
                    viewPager2.setCurrentItem(position, false);
324
                }
1 gabriel 325
 
3 gabriel 326
            }
1 gabriel 327
 
3 gabriel 328
            //Cuando ejecuto los visores de capsula como el reproductor de video y regreso, me aseguro de marcar vista el slide
329
            if (slideRefreshUIViewData.isResumenVisores()) {
1 gabriel 330
 
3 gabriel 331
                adapter.notifyItemChanged(viewPager2.getCurrentItem());
1 gabriel 332
 
3 gabriel 333
            }
1 gabriel 334
 
3 gabriel 335
            slideRefreshUIViewData.setCambioSlide(false);
336
            slideRefreshUIViewData.setResumenVisores(false);
337
            slideRefreshUIViewData.setNextFromButton(false);
1 gabriel 338
 
3 gabriel 339
            mSlideRefreshUIViewModel.getSlideRefreshUIMutableLiveData().setValue(slideRefreshUIViewData);
1 gabriel 340
 
341
 
2 gabriel 342
 
3 gabriel 343
            mGalleryViewModel.getSlideMutableLiveData().setValue(mGalleryViewModel.getSlideArrayList());
2 gabriel 344
 
1 gabriel 345
        }
2 gabriel 346
 
1 gabriel 347
 
3 gabriel 348
 
349
 
350
 
1 gabriel 351
}