Proyectos de Subversion Android Microlearning - Nuevo Interface

Rev

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