Proyectos de Subversion Android Microlearning - Nuevo Interface

Rev

Rev 49 | Rev 53 | 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
import android.os.Bundle;
52 gabriel 4
import android.os.Handler;
5
import android.os.Looper;
1 gabriel 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;
36 gabriel 12
import android.widget.Button;
49 gabriel 13
import android.widget.Toast;
1 gabriel 14
 
15
import androidx.annotation.NonNull;
16
import androidx.annotation.Nullable;
17
import androidx.fragment.app.Fragment;
18
import androidx.lifecycle.LifecycleOwner;
19
import androidx.recyclerview.widget.RecyclerView;
20
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
21
 
22
import com.cesams.twogetskills.Configuration;
23
import com.cesams.twogetskills.R;
24
import com.cesams.twogetskills.adapter.TopicListViewAdapter;
25
import com.cesams.twogetskills.dao.AnswerDao;
26
import com.cesams.twogetskills.dao.CapsuleDao;
27
import com.cesams.twogetskills.dao.CompanyDao;
28
import com.cesams.twogetskills.dao.ProgressDao;
29
import com.cesams.twogetskills.dao.QuestionDao;
30
import com.cesams.twogetskills.dao.QuizDao;
31
import com.cesams.twogetskills.dao.SlideDao;
32
import com.cesams.twogetskills.dao.TopicDao;
33
import com.cesams.twogetskills.library.Http;
34
import com.cesams.twogetskills.library.MD5;
35
import com.cesams.twogetskills.entity.Progress;
36
import com.cesams.twogetskills.entity.Topic;
19 gabriel 37
import com.cesams.twogetskills.preference.Preference;
1 gabriel 38
import com.cesams.twogetskills.skeleton.ITwoGetSkills;
39
import com.cesams.twogetskills.viewmodel.TopicViewModel;
52 gabriel 40
import com.google.firebase.messaging.FirebaseMessaging;
1 gabriel 41
 
42
import org.json.JSONException;
43
import org.json.JSONObject;
44
 
45
import java.io.IOException;
49 gabriel 46
import java.sql.Ref;
1 gabriel 47
import java.util.ArrayList;
48
import java.util.Calendar;
49
import java.util.List;
50
import java.util.Random;
51
import java.util.TimeZone;
52
 
53
import okhttp3.Call;
54
import okhttp3.Callback;
55
import okhttp3.OkHttpClient;
56
import okhttp3.Request;
57
import okhttp3.Response;
58
 
59
import androidx.lifecycle.Observer;
60
import androidx.lifecycle.ViewModelProvider;
61
 
62
 
63
public class TopicFragment extends Fragment implements TopicListViewAdapter.ItemClickListener, LifecycleOwner {
64
    public final static String TAG = "C2GS - TopicFragment";
65
    private RecyclerView listView;
66
    private TopicListViewAdapter adapter;
67
    private ITwoGetSkills iTwoGetSkills;
68
    private SwipeRefreshLayout swipeRefreshLayout;
69
    private TopicViewModel mTopicViewModel;
36 gabriel 70
    private Button eliminartoken;
1 gabriel 71
 
72
    @Override
73
    public void onCreate(@Nullable Bundle savedInstanceState) {
74
        super.onCreate(savedInstanceState);
75
        setHasOptionsMenu(true);
76
 
77
 
78
    }
79
 
80
    @Override
81
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
82
        super.onCreateOptionsMenu(menu, inflater);
83
        menu.clear();
84
    }
85
 
86
    @Override
87
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
88
 
89
        return inflater.inflate(R.layout.fragment_topic, container, false);
90
    }
91
 
92
    @Override
93
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
94
        super.onViewCreated(view, savedInstanceState);
95
 
96
        Log.d(TAG, "onViewCreated");
97
 
98
        iTwoGetSkills = (ITwoGetSkills) getActivity();
27 gabriel 99
        iTwoGetSkills.showNavigationAndToolbar();
1 gabriel 100
 
101
       // GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 2);
102
        //LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);
103
        //layoutManager.scrollToPosition(0);
104
 
36 gabriel 105
        eliminartoken = view.findViewById(R.id.button3);
106
        eliminartoken.setOnClickListener(new View.OnClickListener() {
107
            @Override
108
            public void onClick(View view) {
109
                iTwoGetSkills.getPreference().setDeviceToken("");
110
            }
111
        });
112
 
1 gabriel 113
        mTopicViewModel = new ViewModelProvider(requireActivity()).get(TopicViewModel.class);
114
 
115
        adapter = new TopicListViewAdapter(requireActivity(), mTopicViewModel.getTopicArrayList());
116
        adapter.setClickListener(this);
117
 
118
        Observer<ArrayList<Topic>> topicListUpdateObserver = new Observer<ArrayList<Topic>>() {
119
            @Override
120
            public void onChanged(ArrayList<Topic> topicList) {
121
                adapter.notifyDataSetChanged();
122
            }
123
        };
124
 
125
        mTopicViewModel.getTopicMutableLiveData().observe(requireActivity(), topicListUpdateObserver);
126
        iTwoGetSkills.setTitleActionBar(getActivity().getString(R.string.menu_topics));
127
 
128
        swipeRefreshLayout = (SwipeRefreshLayout) getView().findViewById(R.id.fragment_topic_swipe_layout);
129
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
130
            @Override
131
            public void onRefresh() {
132
 
49 gabriel 133
                RefrescarContent();
1 gabriel 134
 
39 gabriel 135
            }
136
        });
1 gabriel 137
 
138
 
39 gabriel 139
        listView = getView().findViewById(R.id.fragment_topic_listview);
140
        listView.setAdapter(adapter);
141
        //listView.setLayoutManager(gridLayoutManager);
142
        listView.setHasFixedSize(true);
1 gabriel 143
 
144
 
39 gabriel 145
    }
1 gabriel 146
 
49 gabriel 147
    private void RefrescarContent(){
39 gabriel 148
        if (iTwoGetSkills.isConnectedInternet()) {
52 gabriel 149
            Toast.makeText(getContext(), "Iniciando actualizacion...", Toast.LENGTH_SHORT).show();
1 gabriel 150
 
39 gabriel 151
            try {
152
                TimeZone timeZone = TimeZone.getTimeZone("UTC");
153
                Calendar calendar = Calendar.getInstance(timeZone);
154
                TimeZone tz = calendar.getTimeZone();
155
                int created = (int) (calendar.getTimeInMillis() / 1000);
1 gabriel 156
 
39 gabriel 157
                Random random = new Random(created);
158
                int rand = 1000 + random.nextInt(8999);
1 gabriel 159
 
160
 
39 gabriel 161
                Log.d(TAG, "token = " + iTwoGetSkills.getPreference().getDeviceUuid());
162
                Log.d(TAG, "created = " + created);
163
                Log.d(TAG, "rand = " + rand);
164
                Log.d(TAG, "calc = " + iTwoGetSkills.getPreference().getPassword() + ':' + created + ':' + rand);
1 gabriel 165
 
39 gabriel 166
                String secret = MD5.generar(iTwoGetSkills.getPreference().getPassword() + ':' + created + ':' + rand);
1 gabriel 167
 
39 gabriel 168
                Log.d(TAG, "secret = " + secret);
1 gabriel 169
 
39 gabriel 170
                Log.d(TAG, "URL = " + Configuration.URL_REFRESH);
171
                Request request = new Request.Builder()
172
                        .url(Configuration.URL_REFRESH)
173
                        .build();
1 gabriel 174
 
39 gabriel 175
                Http http = new Http(getActivity().getCacheDir(), iTwoGetSkills.getPreference().getDeviceUuid(), secret, created, rand);
176
                OkHttpClient client = http.getHttpClient(false);
1 gabriel 177
 
39 gabriel 178
                Call call = client.newCall(request);
179
                call.enqueue(new Callback() {
180
                    public void onResponse(Call call, Response response)
181
                            throws IOException {
182
                        processResponseServer(response.body().string());
1 gabriel 183
 
39 gabriel 184
                    }
1 gabriel 185
 
39 gabriel 186
                    public void onFailure(Call call, IOException e) {
187
                        Log.d(TAG, "Error :  " + e.getMessage());
188
                    }
189
                });
1 gabriel 190
 
39 gabriel 191
            } catch (Exception e) {
192
                iTwoGetSkills.showMessageSnackBar(e.getMessage());
193
            }
194
 
195
 
196
        } else {
197
            swipeRefreshLayout.setRefreshing(false);
198
        }
1 gabriel 199
    }
200
 
201
    @Override
202
    public void onResume() {
203
        super.onResume();
204
 
205
        loadData();
49 gabriel 206
 
1 gabriel 207
    }
208
 
209
 
210
    @Override
211
    public void onHiddenChanged(boolean hidden) {
212
        super.onHiddenChanged(hidden);
213
 
214
        Log.d(TAG, "onHiddenChanged : " + (hidden ? "true" : "false"));
215
 
216
        if(!hidden) {
217
            loadData();
52 gabriel 218
 
219
            final Handler handler = new Handler(Looper.getMainLooper());
220
            handler.postDelayed(new Runnable() {
221
                @Override
222
                public void run() {
223
 
224
                    if(iTwoGetSkills.getPreference().isRefreshContentRequired())
225
                    {
226
                        RefrescarContent();
227
                    }
228
                    else
229
                    {
230
                        handler.postDelayed(this, 2000);
231
                    }
232
 
233
                }
234
            }, 3000);
1 gabriel 235
        }
49 gabriel 236
 
1 gabriel 237
    }
238
 
239
    private void loadData()
240
    {
19 gabriel 241
        String userUuid = iTwoGetSkills.getPreference().getUserUuid();
1 gabriel 242
        iTwoGetSkills.setTitleActionBar(requireActivity().getString(R.string.menu_topics));
243
 
244
        TopicDao topicDao = iTwoGetSkills.getDatabase().getTopicDao();
245
        ArrayList<Topic> dbTopics = (ArrayList<Topic>) topicDao.selectAll();
246
 
247
        mTopicViewModel.getTopicArrayList().clear();
248
        Topic topic;
249
        Progress progress;
250
        ProgressDao progressDao = iTwoGetSkills.getDatabase().getProgressDao();
251
        for (Topic dbTopic : dbTopics)
252
        {
253
            topic = new Topic();
254
            topic.setCompanyUuid(dbTopic.getCompanyUuid());
255
            topic.setUuid(dbTopic.getUuid());
256
            topic.setName(dbTopic.getName());
257
            topic.setDescription(dbTopic.getDescription());
258
            topic.setImage(dbTopic.getImage());
259
            topic.setPosition(dbTopic.getPosition());
260
 
261
 
19 gabriel 262
            progress = progressDao.selectByTopicUuidAndUserUuid(topic.getUuid(), userUuid);
1 gabriel 263
            if(progress != null) {
264
                topic.setCompleted(progress.getCompleted());
265
                topic.setViewSlides( progress.getViewSlides());
266
                topic.setTotalSlides(progress.getTotalSlides());
267
                topic.setProgress(progress.getProgress());
268
            }
269
 
270
            mTopicViewModel.getTopicArrayList().add(topic);
271
        }
272
 
273
        mTopicViewModel.getTopicMutableLiveData().setValue(mTopicViewModel.getTopicArrayList());
274
 
275
    }
276
 
277
    @Override
278
    public void onItemClick(View view, int position) {
279
        Log.d(TAG, "onItemClick");
280
        iTwoGetSkills.changeTopicActive(mTopicViewModel.getTopicArrayList().get(position).getUuid());
281
    }
282
 
283
    private void processResponseServer(String dataString) {
19 gabriel 284
       // Log.e("El device uuid","en topic: "+iTwoGetSkills.getPreference().getDeviceUuid());
1 gabriel 285
 
286
        Log.d(TAG, "processResponseServer = " + dataString);
287
 
288
        getActivity().runOnUiThread(new Runnable() {
289
 
290
            @Override
291
            public void run() {
292
 
293
                try {
294
                    JSONObject objJSON = new JSONObject(dataString);
295
                    boolean success = objJSON.has("success") ? objJSON.getBoolean("success") : false;
296
                    String message = "";
297
                    if (objJSON.has("data")) {
298
                        Object item = objJSON.get("data");
299
                        if (item instanceof String) {
300
                            message = item.toString();
301
                        }
302
                    }
303
 
304
                    if (success) {
43 gabriel 305
 
19 gabriel 306
                        Preference preference = iTwoGetSkills.getPreference();
307
 
1 gabriel 308
                        iTwoGetSkills.getDatabase().getAnswerDao().removeAll();
309
                        iTwoGetSkills.getDatabase().getQuestionDao().removeAll();
310
                        iTwoGetSkills.getDatabase().getQuizDao().removeAll();
311
                        iTwoGetSkills.getDatabase().getSlideDao().removeAll();
312
                        iTwoGetSkills.getDatabase().getCapsuleDao().removeAll();
313
                        iTwoGetSkills.getDatabase().getTopicDao().removeAll();
314
                        iTwoGetSkills.getDatabase().getUserExtendedDao().removeAll();
19 gabriel 315
                        iTwoGetSkills.getDatabase().getUserLogDao().removeAllUserUuidNotEqual(preference.getUserUuid());
316
                        iTwoGetSkills.getDatabase().getProgressDao().removeAllUserUuidNotEqual(preference.getUserUuid());
1 gabriel 317
 
318
                        JSONObject data = objJSON.getJSONObject("data");
319
                        iTwoGetSkills.syncFromServer(data);
320
 
49 gabriel 321
                        preference.setRefreshContentRequired(false);
322
                        Toast.makeText(getContext(), "¡Contenido actualizado con exito!", Toast.LENGTH_SHORT).show();
1 gabriel 323
 
324
                        loadData();
49 gabriel 325
 
1 gabriel 326
                    } else {
327
                        iTwoGetSkills.showMessageSnackBar(message);
328
                    }
329
 
330
 
331
                } catch (JSONException e) {
332
                    Log.d(TAG, e.getMessage());
333
                }
334
 
8 gabriel 335
              //  iTwoGetSkills.reloadNavHeader();
1 gabriel 336
                swipeRefreshLayout.setRefreshing(false);
337
 
338
            }
339
        });
340
 
341
 
342
    }
19 gabriel 343
}