Proyectos de Subversion Android Microlearning

Rev

Rev 43 | Ir a la última revisión | | Ultima modificación | Ver Log |

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