Proyectos de Subversion Android Microlearning - Nuevo Interface

Rev

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