/*
* Calendula - An assistant for personal medication management.
* Copyright (C) 2016 CITIUS - USC
*
* Calendula 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; either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 this software. If not, see <http://www.gnu.org/licenses/>.
*/
package es.usc.citius.servando.calendula;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.preference.PreferenceManager;
import android.view.View;
import com.getbase.floatingactionbutton.FloatingActionButton;
import com.getbase.floatingactionbutton.FloatingActionsMenu;
import com.mikepenz.google_material_typeface_library.GoogleMaterial;
import com.mikepenz.iconics.IconicsDrawable;
import java.util.ArrayList;
import java.util.List;
import es.usc.citius.servando.calendula.activities.ConfirmSchedulesActivity;
import es.usc.citius.servando.calendula.activities.LeftDrawerMgr;
import es.usc.citius.servando.calendula.activities.MedicinesActivity;
import es.usc.citius.servando.calendula.activities.RoutinesActivity;
import es.usc.citius.servando.calendula.activities.ScanActivity;
import es.usc.citius.servando.calendula.activities.ScheduleCreationActivity;
import es.usc.citius.servando.calendula.activities.SchedulesHelpActivity;
import es.usc.citius.servando.calendula.fragments.ScheduleTypeFragment;
import es.usc.citius.servando.calendula.persistence.Patient;
import es.usc.citius.servando.calendula.util.ScreenUtils;
/**
* Helper to manage the home screen floating action button behaviour
*/
public class FabMenuMgr implements View.OnClickListener{
LeftDrawerMgr drawerMgr;
FloatingActionsMenu fabMenu;
FloatingActionButton fab;
HomePagerActivity activity;
List<FloatingActionButton> scheduleActions;
FloatingActionButton scanQrAction;
private int currentPage = 0;
public FabMenuMgr(FloatingActionButton fab, FloatingActionsMenu fabMenu, LeftDrawerMgr drawerMgr, HomePagerActivity a) {
this.fab = fab;
this.fabMenu = fabMenu;
this.activity = a;
this.drawerMgr = drawerMgr;
this.scheduleActions = getScheduleActions();
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity.getApplicationContext());
fabMenu.setOnFloatingActionsMenuUpdateListener(new FloatingActionsMenu.OnFloatingActionsMenuUpdateListener() {
@Override
public void onMenuExpanded() {
if(!prefs.getBoolean("PREFERENCE_SCHEDULE_HELP_SHOWN", false)){
activity.launchActivityDelayed(SchedulesHelpActivity.class, 600);
}
}
@Override
public void onMenuCollapsed() {
}
});
}
private List<FloatingActionButton> getScheduleActions() {
ArrayList<FloatingActionButton> actions = new ArrayList<>();
FloatingActionButton actionA = (FloatingActionButton) fabMenu.findViewById(R.id.action_a);
FloatingActionButton actionB = (FloatingActionButton) fabMenu.findViewById(R.id.action_b);
FloatingActionButton actionC = (FloatingActionButton) fabMenu.findViewById(R.id.action_c);
actions.add(actionA);
actions.add(actionB);
actions.add(actionC);
scanQrAction = (FloatingActionButton) fabMenu.findViewById(R.id.action_d);
if(CalendulaApp.isPharmaModeEnabled(activity)) {
scanQrAction.setVisibility(View.VISIBLE);
actions.add(scanQrAction);
}else{
scanQrAction.setVisibility(View.GONE);
}
return actions;
}
public void init() {
for(FloatingActionButton f : scheduleActions){
f.setOnClickListener(this);
}
fab.setOnClickListener(this);
fab.setIconDrawable(new IconicsDrawable(activity)
.icon(GoogleMaterial.Icon.gmd_plus)
.paddingDp(5)
.sizeDp(24)
.color(Color.parseColor("#263238")));
onViewPagerItemChange(0);
}
public void onViewPagerItemChange(int currentPage){
this.currentPage = currentPage;
fab.setColorNormal(Color.parseColor("#ecf0f1"));
fab.setColorPressed(Color.parseColor("#e7e7e7"));
// fab.setColorNormalResId(getFabColor(currentPage));
// fab.setColorPressedResId(getFabPressedColor(currentPage));
switch (currentPage){
case 0:
fabMenu.setVisibility(View.GONE);
fab.setVisibility(View.GONE);
break;
case 1:
case 2:
for(FloatingActionButton f : scheduleActions){
f.setVisibility(View.GONE);
}
fabMenu.setVisibility(View.GONE);
fab.setVisibility(View.VISIBLE);
fab.bringToFront();
break;
case 3:
for(FloatingActionButton f : scheduleActions){
f.setVisibility(View.VISIBLE);
}
fab.setVisibility(View.GONE);
fabMenu.setVisibility(View.VISIBLE);
fabMenu.bringToFront();
break;
}
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.add_button:
onClickAdd();
break;
// schedules
case R.id.action_a:
startSchedulesActivity(ScheduleTypeFragment.TYPE_ROUTINES);
break;
case R.id.action_b:
startSchedulesActivity(ScheduleTypeFragment.TYPE_HOURLY);
break;
case R.id.action_c:
startSchedulesActivity(ScheduleTypeFragment.TYPE_PERIOD);
break;
case R.id.action_d:
startScanActivity();
break;
}
}
private void onClickAdd() {
switch (currentPage){
case 0:
return;
case 1:
launchActivity(RoutinesActivity.class);
break;
case 2:
launchActivity(MedicinesActivity.class);
break;
case 3:
return;
}
}
private void launchActivity(Class<?> type){
activity.startActivity(new Intent(activity, type));
activity.overridePendingTransition(0, 0);
}
private void startSchedulesActivity(int scheduleType){
Intent i = new Intent(activity, ScheduleCreationActivity.class);
i.putExtra("scheduleType", scheduleType);
activity.startActivity(i);
activity.overridePendingTransition(0, 0);
fabMenu.collapse();
}
private void startScanActivity(){
Intent i = new Intent(activity, ScanActivity.class);
i.putExtra("after_scan_pkg", activity.getPackageName());
i.putExtra("after_scan_cls", ConfirmSchedulesActivity.class.getName());
activity.startActivity(i);
activity.overridePendingTransition(0, 0);
fabMenu.collapse();
return;
}
public int getFabColor(int page) {
switch (page) {
case 1:
return R.color.android_orange;
case 2:
return R.color.android_pink_dark;
case 3:
return R.color.android_green;
default:
return R.color.android_blue_darker;
}
}
public int getFabPressedColor(int page) {
switch (page) {
case 1:
return R.color.android_orange_dark;
case 2:
return R.color.android_pink;
case 3:
return R.color.android_green_dark;
default:
return R.color.android_blue_dark;
}
}
public void onPatientUpdate(Patient p){
for(FloatingActionButton f: scheduleActions){
f.setColorNormal(p.color());
f.setColorPressed(ScreenUtils.equivalentNoAlpha(p.color(), 0.7f));
}
}
public void onPharmacyModeChanged(boolean enabled){
if(enabled && !scheduleActions.contains(scanQrAction)){
scheduleActions.add(scanQrAction);
scanQrAction.setVisibility(View.VISIBLE);
}else if(!enabled && scheduleActions.contains(scanQrAction)){
scanQrAction.setVisibility(View.GONE);
scheduleActions.remove(scanQrAction);
}
fabMenu.invalidate();
onViewPagerItemChange(currentPage);
}
}