Rev 1 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
package com.cesams.twogetskills.fragment;import android.os.Bundle;import android.util.Log;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuInflater;import android.view.View;import android.view.ViewGroup;import androidx.annotation.NonNull;import androidx.annotation.Nullable;import androidx.fragment.app.Fragment;import androidx.lifecycle.LifecycleOwner;import androidx.recyclerview.widget.RecyclerView;import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;import com.cesams.twogetskills.Configuration;import com.cesams.twogetskills.R;import com.cesams.twogetskills.adapter.TopicListViewAdapter;import com.cesams.twogetskills.dao.AnswerDao;import com.cesams.twogetskills.dao.CapsuleDao;import com.cesams.twogetskills.dao.CompanyDao;import com.cesams.twogetskills.dao.ProgressDao;import com.cesams.twogetskills.dao.QuestionDao;import com.cesams.twogetskills.dao.QuizDao;import com.cesams.twogetskills.dao.SlideDao;import com.cesams.twogetskills.dao.TopicDao;import com.cesams.twogetskills.library.Http;import com.cesams.twogetskills.library.MD5;import com.cesams.twogetskills.entity.Progress;import com.cesams.twogetskills.entity.Topic;import com.cesams.twogetskills.preference.Preference;import com.cesams.twogetskills.skeleton.ITwoGetSkills;import com.cesams.twogetskills.viewmodel.TopicViewModel;import org.json.JSONException;import org.json.JSONObject;import java.io.IOException;import java.util.ArrayList;import java.util.Calendar;import java.util.List;import java.util.Random;import java.util.TimeZone;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;import androidx.lifecycle.Observer;import androidx.lifecycle.ViewModelProvider;public class TopicFragment extends Fragment implements TopicListViewAdapter.ItemClickListener, LifecycleOwner {public final static String TAG = "C2GS - TopicFragment";private RecyclerView listView;private TopicListViewAdapter adapter;private ITwoGetSkills iTwoGetSkills;private SwipeRefreshLayout swipeRefreshLayout;private TopicViewModel mTopicViewModel;@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setHasOptionsMenu(true);}@Overridepublic void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {super.onCreateOptionsMenu(menu, inflater);menu.clear();}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {return inflater.inflate(R.layout.fragment_topic, container, false);}@Overridepublic void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {super.onViewCreated(view, savedInstanceState);Log.d(TAG, "onViewCreated");iTwoGetSkills = (ITwoGetSkills) getActivity();// GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), 2);//LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false);//layoutManager.scrollToPosition(0);mTopicViewModel = new ViewModelProvider(requireActivity()).get(TopicViewModel.class);adapter = new TopicListViewAdapter(requireActivity(), mTopicViewModel.getTopicArrayList());adapter.setClickListener(this);Observer<ArrayList<Topic>> topicListUpdateObserver = new Observer<ArrayList<Topic>>() {@Overridepublic void onChanged(ArrayList<Topic> topicList) {adapter.notifyDataSetChanged();}};mTopicViewModel.getTopicMutableLiveData().observe(requireActivity(), topicListUpdateObserver);iTwoGetSkills.setTitleActionBar(getActivity().getString(R.string.menu_topics));swipeRefreshLayout = (SwipeRefreshLayout) getView().findViewById(R.id.fragment_topic_swipe_layout);swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {@Overridepublic void onRefresh() {if (iTwoGetSkills.isConnectedInternet()) {try {TimeZone timeZone = TimeZone.getTimeZone("UTC");Calendar calendar = Calendar.getInstance(timeZone);TimeZone tz = calendar.getTimeZone();int created = (int) (calendar.getTimeInMillis() / 1000);Random random = new Random(created);int rand = 1000 + random.nextInt(8999);Log.d(TAG, "token = " + iTwoGetSkills.getPreference().getDeviceUuid());Log.d(TAG, "created = " + created);Log.d(TAG, "rand = " + rand);Log.d(TAG, "calc = " + iTwoGetSkills.getPreference().getPassword() + ':' + created + ':' + rand);String secret = MD5.generar(iTwoGetSkills.getPreference().getPassword() + ':' + created + ':' + rand);Log.d(TAG, "secret = " + secret);Log.d(TAG, "URL = " + Configuration.URL_REFRESH);Request request = new Request.Builder().url(Configuration.URL_REFRESH).build();Http http = new Http(getActivity().getCacheDir(), iTwoGetSkills.getPreference().getDeviceUuid(), secret, created, rand);OkHttpClient client = http.getHttpClient(false);Call call = client.newCall(request);call.enqueue(new Callback() {public void onResponse(Call call, Response response)throws IOException {processResponseServer(response.body().string());}public void onFailure(Call call, IOException e) {Log.d(TAG, "Error : " + e.getMessage());}});} catch (Exception e) {iTwoGetSkills.showMessageSnackBar(e.getMessage());}} else {swipeRefreshLayout.setRefreshing(false);}}});listView = (RecyclerView) getView().findViewById(R.id.fragment_topic_listview);listView.setAdapter(adapter);//listView.setLayoutManager(gridLayoutManager);listView.setHasFixedSize(true);}@Overridepublic void onResume() {super.onResume();Log.d(TAG, "onResume");loadData();}@Overridepublic void onHiddenChanged(boolean hidden) {super.onHiddenChanged(hidden);Log.d(TAG, "onHiddenChanged : " + (hidden ? "true" : "false"));if(!hidden) {loadData();}}private void loadData(){iTwoGetSkills.setTitleActionBar(requireActivity().getString(R.string.menu_topics));TopicDao topicDao = iTwoGetSkills.getDatabase().getTopicDao();ArrayList<Topic> dbTopics = (ArrayList<Topic>) topicDao.selectAll();mTopicViewModel.getTopicArrayList().clear();Topic topic;Progress progress;ProgressDao progressDao = iTwoGetSkills.getDatabase().getProgressDao();for (Topic dbTopic : dbTopics){topic = new Topic();topic.setCompanyUuid(dbTopic.getCompanyUuid());topic.setUuid(dbTopic.getUuid());topic.setName(dbTopic.getName());topic.setDescription(dbTopic.getDescription());topic.setImage(dbTopic.getImage());topic.setPosition(dbTopic.getPosition());progress = progressDao.selectByTopicUuid(topic.getUuid());if(progress != null) {topic.setCompleted(progress.getCompleted());topic.setViewSlides( progress.getViewSlides());topic.setTotalSlides(progress.getTotalSlides());topic.setProgress(progress.getProgress());}mTopicViewModel.getTopicArrayList().add(topic);}mTopicViewModel.getTopicMutableLiveData().setValue(mTopicViewModel.getTopicArrayList());}@Overridepublic void onItemClick(View view, int position) {Log.d(TAG, "onItemClick");iTwoGetSkills.changeTopicActive(mTopicViewModel.getTopicArrayList().get(position).getUuid());}private void processResponseServer(String dataString) {Log.d(TAG, "processResponseServer = " + dataString);getActivity().runOnUiThread(new Runnable() {@Overridepublic void run() {try {JSONObject objJSON = new JSONObject(dataString);boolean success = objJSON.has("success") ? objJSON.getBoolean("success") : false;String message = "";if (objJSON.has("data")) {Object item = objJSON.get("data");if (item instanceof String) {message = item.toString();}}if (success) {Preference preference = iTwoGetSkills.getPreference();iTwoGetSkills.getDatabase().getAnswerDao().removeAll();iTwoGetSkills.getDatabase().getQuestionDao().removeAll();iTwoGetSkills.getDatabase().getQuizDao().removeAll();iTwoGetSkills.getDatabase().getSlideDao().removeAll();iTwoGetSkills.getDatabase().getCapsuleDao().removeAll();iTwoGetSkills.getDatabase().getTopicDao().removeAll();iTwoGetSkills.getDatabase().getUserExtendedDao().removeAll();iTwoGetSkills.getDatabase().getUserLogDao().removeAllUserUuidNotEqual(preference.getUserUuid());iTwoGetSkills.getDatabase().getProgressDao().removeAllUserUuidNotEqual(preference.getUserUuid());JSONObject data = objJSON.getJSONObject("data");iTwoGetSkills.syncFromServer(data);loadData();} else {iTwoGetSkills.showMessageSnackBar(message);}} catch (JSONException e) {Log.d(TAG, e.getMessage());}iTwoGetSkills.reloadNavHeader();swipeRefreshLayout.setRefreshing(false);}});}}