Proyectos de Subversion Android Microlearning - Nuevo Interface

Rev

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