Proyectos de Subversion Android Microlearning - Inconcert

Rev

| Ultima modificación | Ver Log |

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