/*
* Copyright (C) 2016 Glucosio Foundation
*
* This file is part of Glucosio.
*
* Glucosio is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 3.
*
* Glucosio is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Glucosio. If not, see <http://www.gnu.org/licenses/>.
*
*
*/
package org.glucosio.android.fragment;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.LinearLayout;
import android.widget.TextView;
import org.glucosio.android.R;
import org.glucosio.android.activity.A1cCalculatorActivity;
import org.glucosio.android.activity.AddGlucoseActivity;
import org.glucosio.android.activity.MainActivity;
import org.glucosio.android.adapter.AssistantAdapter;
import org.glucosio.android.object.ActionTip;
import org.glucosio.android.presenter.AssistantPresenter;
import java.util.ArrayList;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.Unbinder;
public class AssistantFragment extends Fragment {
private SharedPreferences sharedPref;
@BindView(R.id.fragment_tips_recyclerview)
RecyclerView tipsRecycler;
@BindView(R.id.fragment_assistant_archived)
LinearLayout archivedButton;
@BindView(R.id.fragment_assistant_archived_dismiss)
LinearLayout archivedDismissButton;
private AssistantAdapter adapter;
private ArrayList<ActionTip> actionTips;
private String[] actionTipTitles;
private String[] actionTipDescriptions;
private String[] actionTipActions;
private Unbinder unbinder;
public static AssistantFragment newInstance() {
return new AssistantFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
AssistantPresenter presenter = new AssistantPresenter(this);
actionTips = new ArrayList<>();
actionTipTitles = getResources().getStringArray(R.array.assistant_titles);
actionTipDescriptions = getResources().getStringArray(R.array.assistant_descriptions);
actionTipActions = getResources().getStringArray(R.array.assistant_actions);
populateWithNewTips();
View view = inflater.inflate(R.layout.fragment_assistant, container, false);
unbinder = ButterKnife.bind(this, view);
adapter = new AssistantAdapter(presenter, getActivity().getApplicationContext().getResources(), actionTips);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
llm.setOrientation(LinearLayoutManager.VERTICAL);
tipsRecycler.setLayoutManager(llm);
tipsRecycler.setAdapter(adapter);
tipsRecycler.setHasFixedSize(false);
initSwipeToRemoveTouchHelper();
// If there aren't dismissed tips, don't show archive button
if (actionTipTitles.length == adapter.getItemCount()) {
archivedButton.setVisibility(View.GONE);
}
return view;
}
@Override
public void onDestroyView() {
unbinder.unbind();
super.onDestroyView();
}
// Swipe to remove functionality
private void initSwipeToRemoveTouchHelper() {
ItemTouchHelper.SimpleCallback simpleItemTouchCallback = new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.LEFT) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int swipeDir) {
if (archivedDismissButton.getVisibility() == View.VISIBLE) {
// If we're in archive, restore tips
TextView title = (TextView) viewHolder.itemView.findViewById(R.id.fragment_assistant_item_title);
removePreference(title.getText().toString());
int position = viewHolder.getAdapterPosition();
actionTips.remove(position);
adapter.notifyDataSetChanged();
} else {
// Else archive them
TextView title = (TextView) viewHolder.itemView.findViewById(R.id.fragment_assistant_item_title);
addPreference(title.getText().toString());
int position = viewHolder.getAdapterPosition();
actionTips.remove(position);
adapter.notifyDataSetChanged();
((MainActivity) getActivity()).reloadFragmentAdapter();
}
}
};
final ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
itemTouchHelper.attachToRecyclerView(tipsRecycler);
}
@OnClick(R.id.fragment_assistant_archived_dismiss)
void archivedDismissButtonClick() {
populateWithNewTips();
adapter.notifyDataSetChanged();
tipsRecycler.swapAdapter(adapter, false);
archivedDismissButton.setVisibility(View.GONE);
archivedButton.setVisibility(View.VISIBLE);
((MainActivity) getActivity()).reloadFragmentAdapter();
}
@OnClick(R.id.fragment_assistant_archived)
void archivedButtonClicked() {
populateWithArchivedTips();
adapter.notifyDataSetChanged();
tipsRecycler.swapAdapter(adapter, false);
archivedDismissButton.setVisibility(View.VISIBLE);
final Animation slide = new TranslateAnimation(0, 0, 0, 200);
slide.setDuration(500);
archivedButton.startAnimation(slide);
archivedButton.setVisibility(View.GONE);
}
private void populateWithNewTips() {
actionTips.clear();
for (int i = 0; i < actionTipTitles.length; i++) {
String actionTipTitle = actionTipTitles[i];
String actionTipDescription = actionTipDescriptions[i];
String actionTipAction = actionTipActions[i];
ActionTip actionTip = new ActionTip();
actionTip.setTipTitle(actionTipTitle);
actionTip.setTipDescription(actionTipDescription);
actionTip.setTipAction(actionTipAction);
Boolean value = sharedPref.getBoolean(actionTipTitle, false);
if (!value) {
actionTips.add(actionTip);
}
}
}
private void populateWithArchivedTips() {
actionTips.clear();
for (int i = 0; i < actionTipTitles.length; i++) {
String actionTipTitle = actionTipTitles[i];
String actionTipDescription = actionTipDescriptions[i];
String actionTipAction = actionTipActions[i];
ActionTip actionTip = new ActionTip();
actionTip.setTipTitle(actionTipTitle);
actionTip.setTipDescription(actionTipDescription);
actionTip.setTipAction(actionTipAction);
Boolean value = sharedPref.getBoolean(actionTipTitle, false);
if (value) {
actionTips.add(actionTip);
}
}
}
private void addPreference(String key) {
sharedPref.edit().putBoolean(key, true).apply();
}
private void removePreference(String key) {
sharedPref.edit().putBoolean(key, false).apply();
}
public void addReading() {
Intent intent = new Intent(getActivity(), AddGlucoseActivity.class);
startActivity(intent);
getActivity().finish();
}
public void startExportActivity() {
((MainActivity) getActivity()).showExportCsvDialog();
}
public void startA1CCalculatorActivity() {
Intent intent = new Intent(getActivity(), A1cCalculatorActivity.class);
startActivity(intent);
}
public void openSupportDialog() {
((MainActivity) getActivity()).openSupportDialog();
}
}