/*
* 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.activity;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.app.Dialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Typeface;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.AppBarLayout;
import android.support.design.widget.BottomSheetBehavior;
import android.support.design.widget.BottomSheetDialog;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.Snackbar;
import android.support.design.widget.TabLayout;
import android.support.graphics.drawable.VectorDrawableCompat;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;
import com.github.clans.fab.FloatingActionButton;
import com.google.android.gms.appinvite.AppInviteInvitation;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GoogleApiAvailability;
import com.mikepenz.materialdrawer.AccountHeaderBuilder;
import com.mikepenz.materialdrawer.Drawer;
import com.mikepenz.materialdrawer.DrawerBuilder;
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem;
import com.mikepenz.materialdrawer.model.interfaces.IDrawerItem;
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;
import org.glucosio.android.GlucosioApplication;
import org.glucosio.android.R;
import org.glucosio.android.adapter.HomePagerAdapter;
import org.glucosio.android.analytics.Analytics;
import org.glucosio.android.db.DatabaseHandler;
import org.glucosio.android.presenter.ExportPresenter;
import org.glucosio.android.presenter.MainPresenter;
import org.glucosio.android.tools.LocaleHelper;
import org.glucosio.android.view.ExportView;
import java.util.Calendar;
import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;
public class MainActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener, ExportView {
private static final String INTENT_EXTRA_DROPDOWN = "history_dropdown";
private static final int REQUEST_INVITE = 1;
private static final String INTENT_EXTRA_PAGER = "pager";
private BottomSheetBehavior bottomSheetBehavior;
private ExportPresenter exportPresenter;
private RadioButton exportRangeButton;
private HomePagerAdapter homePagerAdapter;
private MainPresenter presenter;
private ViewPager viewPager;
private BottomSheetDialog bottomSheetAddDialog;
private TextView exportDialogDateFrom;
private TextView exportDialogDateTo;
private View bottomSheetAddDialogView;
private TabLayout tabLayout;
private LocaleHelper localeHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GlucosioApplication application = (GlucosioApplication) getApplication();
initPresenters(application);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar);
tabLayout = (TabLayout) findViewById(R.id.activity_main_tab_layout);
viewPager = (ViewPager) findViewById(R.id.activity_main_pager);
if (toolbar != null) {
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
getSupportActionBar().setElevation(0);
getSupportActionBar().setTitle("");
getSupportActionBar().setLogo(R.drawable.ic_logo);
}
homePagerAdapter = new HomePagerAdapter(getSupportFragmentManager(), getApplicationContext());
viewPager.setAdapter(homePagerAdapter);
tabLayout.setupWithViewPager(viewPager);
tabLayout.addOnTabSelectedListener(
new TabLayout.ViewPagerOnTabSelectedListener(viewPager) {
@Override
public void onTabSelected(TabLayout.Tab tab) {
super.onTabSelected(tab);
}
});
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (position == 2) {
hideFabAnimation();
LinearLayout emptyLayout = (LinearLayout) findViewById(R.id.activity_main_empty_layout);
ViewPager pager = (ViewPager) findViewById(R.id.activity_main_pager);
if (pager.getVisibility() == View.GONE) {
pager.setVisibility(View.VISIBLE);
emptyLayout.setVisibility(View.INVISIBLE);
}
} else {
showFabAnimation();
checkIfEmptyLayout();
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
FloatingActionButton fabAddReading = (FloatingActionButton) findViewById(R.id.activity_main_fab_add_reading);
fabAddReading.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
bottomSheetAddDialog.show();
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
});
bottomSheetAddDialog = new BottomSheetDialog(this);
// Add Nav Drawer
final PrimaryDrawerItem itemSettings = new PrimaryDrawerItem().withName(R.string.action_settings).withIcon(VectorDrawableCompat.create(getResources(), R.drawable.ic_settings_grey_24dp, null)).withSelectable(false).withTypeface(Typeface.DEFAULT_BOLD);
final PrimaryDrawerItem itemExport = new PrimaryDrawerItem().withName(R.string.sidebar_backup_export).withIcon(VectorDrawableCompat.create(getResources(), R.drawable.ic_backup_grey_24dp, null)).withSelectable(false).withTypeface(Typeface.DEFAULT_BOLD);
final PrimaryDrawerItem itemFeedback = new PrimaryDrawerItem().withName(R.string.menu_support).withIcon(VectorDrawableCompat.create(getResources(), R.drawable.ic_announcement_grey_24dp, null)).withSelectable(false).withTypeface(Typeface.DEFAULT_BOLD);
final PrimaryDrawerItem itemAbout = new PrimaryDrawerItem().withName(R.string.preferences_about_glucosio).withIcon(VectorDrawableCompat.create(getResources(), R.drawable.ic_info_grey_24dp, null)).withSelectable(false).withTypeface(Typeface.DEFAULT_BOLD);
final PrimaryDrawerItem itemInvite = new PrimaryDrawerItem().withName(R.string.action_invite).withIcon(VectorDrawableCompat.create(getResources(), R.drawable.ic_face_grey_24dp, null)).withSelectable(false).withTypeface(Typeface.DEFAULT_BOLD);
final PrimaryDrawerItem itemDonate = new PrimaryDrawerItem().withName(R.string.about_donate).withIcon(VectorDrawableCompat.create(getResources(), R.drawable.ic_favorite_grey_24dp, null)).withSelectable(false).withTypeface(Typeface.DEFAULT_BOLD);
final PrimaryDrawerItem itemA1C = new PrimaryDrawerItem().withName(R.string.activity_converter_title).withIcon(VectorDrawableCompat.create(getResources(), R.drawable.ic_calculator_a1c_grey_24dp, null)).withSelectable(false).withTypeface(Typeface.DEFAULT_BOLD);
final PrimaryDrawerItem itemReminders = new PrimaryDrawerItem().withName(R.string.activity_reminders_title).withIcon(VectorDrawableCompat.create(getResources(), R.drawable.ic_alarm_grey_24dp, null)).withSelectable(false).withTypeface(Typeface.DEFAULT_BOLD);
DrawerBuilder drawerBuilder = new DrawerBuilder()
.withActivity(this)
.withTranslucentStatusBar(false)
.withToolbar(toolbar)
.withActionBarDrawerToggle(true)
.withAccountHeader(new AccountHeaderBuilder()
.withActivity(this)
.withHeaderBackground(R.drawable.drawer_header)
.build()
)
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public boolean onItemClick(View view, int position, IDrawerItem drawerItem) {
if (drawerItem.equals(itemSettings)) {
// Settings
openPreferences();
} else if (drawerItem.equals(itemAbout)) {
// About
startAboutActivity();
} else if (drawerItem.equals(itemFeedback)) {
// Feedback
openSupportDialog();
} else if (drawerItem.equals(itemInvite)) {
// Invite
showInviteDialog();
} else if (drawerItem.equals(itemExport)) {
// Export
startExportActivity();
} else if (drawerItem.equals(itemDonate)) {
// Donate
openDonateIntent();
} else if (drawerItem.equals(itemA1C)) {
openA1CCalculator();
} else if (drawerItem.equals(itemReminders)) {
openRemindersActivity();
}
return false;
}
});
if (isPlayServicesAvailable()) {
drawerBuilder.addDrawerItems(
itemA1C,
itemReminders,
itemExport,
itemSettings,
itemFeedback,
itemAbout,
itemDonate,
itemInvite
)
.withSelectedItem(-1)
.build();
} else {
drawerBuilder.addDrawerItems(
itemA1C,
itemReminders,
itemExport,
itemSettings,
itemFeedback,
itemAbout,
itemDonate
)
.withSelectedItem(-1)
.build();
}
// Restore pager position
Bundle b = getIntent().getExtras();
if (b != null) {
viewPager.setCurrentItem(b.getInt("pager"));
}
checkIfEmptyLayout();
bottomSheetAddDialog.setContentView(bottomSheetAddDialogView);
bottomSheetBehavior = BottomSheetBehavior.from((View) bottomSheetAddDialogView.getParent());
bottomSheetBehavior.setHideable(false);
Analytics analytics = application.getAnalytics();
Log.i("MainActivity", "Setting screen name: " + "main");
analytics.reportScreen("Main Activity");
}
private void openRemindersActivity() {
Intent intent = new Intent(this, RemindersActivity.class);
startActivity(intent);
}
private void initPresenters(GlucosioApplication application) {
final DatabaseHandler dbHandler = application.getDBHandler();
localeHelper = new LocaleHelper();
presenter = new MainPresenter(this, dbHandler);
exportPresenter = new ExportPresenter(this, dbHandler);
}
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
@Override
public void onExportStarted(int numberOfItemsToExport) {
showExportedSnackBar(numberOfItemsToExport); // TODO: 09/09/16 Instead of calling this method, move logic to this callback ?
Log.d("Activity", "onExportStarted(): you might want to track this event");
}
@Override
public void onNoItemsToExport() {
showNoReadingsSnackBar(); // TODO: 09/09/16 Instead of calling this method, move logic to this callback ?
Log.e("Activity", "onNoItemsToExport(): you might want to track this event");
}
@Override
public void onExportFinish(Uri uri) {
showShareDialog(uri); // TODO: 09/09/16 Instead of calling this method, move logic to this callback ?
Log.e("Activity", "onExportFinish(): you might want to track this event");
}
@Override
public void onExportError() {
showExportError(); // TODO: 09/09/16 Instead of calling this method, move logic to this callback ?
Log.e("Activity", "onExportError(): you might want to track this event");
}
private void openA1CCalculator() {
Intent calculatorIntent = new Intent(this, A1cCalculatorActivity.class);
startActivity(calculatorIntent);
}
private void openDonateIntent() {
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.glucosio.org/donate/"));
startActivity(browserIntent);
}
public void startExportActivity() {
openBackupDialog();
}
private void startAboutActivity() {
Intent intent = new Intent(this, AboutActivity.class);
startActivity(intent);
}
public void startHelloActivity() {
Intent intent = new Intent(this, HelloActivity.class);
startActivity(intent);
finish();
}
public void openPreferences() {
Intent intent = new Intent(this, PreferencesActivity.class);
startActivity(intent);
finishActivity();
}
public void finishActivity() {
// dismiss dialog if still expanded
bottomSheetAddDialog.dismiss();
// then close activity
finish();
}
public void onGlucoseFabClicked(View v) {
openNewAddActivity(AddGlucoseActivity.class);
}
public void onKetoneFabClicked(View v) {
openNewAddActivity(AddKetoneActivity.class);
}
public void onPressureFabClicked(View v) {
openNewAddActivity(AddPressureActivity.class);
}
public void onHB1ACFabClicked(View v) {
openNewAddActivity(AddA1CActivity.class);
}
public void onCholesterolFabClicked(View v) {
openNewAddActivity(AddCholesterolActivity.class);
}
public void onWeightFabClicked(View v) {
openNewAddActivity(AddWeightActivity.class);
}
private void openNewAddActivity(Class<?> activity) {
Intent intent = new Intent(this, activity);
// Pass pager position to open it again later
Bundle b = new Bundle();
b.putInt(INTENT_EXTRA_PAGER, viewPager.getCurrentItem());
b.putInt(INTENT_EXTRA_DROPDOWN, homePagerAdapter.getHistoryFragment().getHistoryDropdownPosition());
intent.putExtras(b);
startActivity(intent);
finishActivity();
}
public void openSupportDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getResources().getString(R.string.menu_support_title));
builder.setItems(getResources().getStringArray(R.array.menu_support_options), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
// Email
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.parse("mailto:hello@glucosio.org"));
boolean activityExists = emailIntent.resolveActivityInfo(getPackageManager(), 0) != null;
if (activityExists) {
startActivity(emailIntent);
} else {
showSnackBar(getResources().getString(R.string.menu_support_error1), Snackbar.LENGTH_LONG);
}
} else {
// Forum
String url = "http://community.glucosio.org/";
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setPackage("com.android.chrome");
try {
startActivity(i);
} catch (ActivityNotFoundException e) {
// Chrome is probably not installed
// Try with the default browser
i.setPackage(null);
startActivity(i);
}
}
}
});
builder.show();
}
public void openBackupDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getResources().getString(R.string.activity_main_dialog_backup_export_title));
builder.setItems(getResources().getStringArray(R.array.menu_backup_options), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
if (checkPlayServices()) {
// TODO: Finish backup in next release
Intent intent = new Intent(getApplicationContext(), BackupActivity.class);
startActivity(intent);
} else {
dialog.dismiss();
}
} else {
// Export to CSV
showExportCsvDialog();
}
}
});
builder.show();
}
public void showExportCsvDialog() {
final Dialog exportDialog = new Dialog(MainActivity.this, R.style.GlucosioTheme);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(exportDialog.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
exportDialog.setContentView(R.layout.dialog_export);
exportDialog.getWindow().setAttributes(lp);
exportDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
exportDialog.getWindow().setDimAmount(0.5f);
exportDialog.show();
exportDialogDateFrom = (TextView) exportDialog.findViewById(R.id.activity_export_date_from);
exportDialogDateTo = (TextView) exportDialog.findViewById(R.id.activity_export_date_to);
exportRangeButton = (RadioButton) exportDialog.findViewById(R.id.activity_export_range);
final RadioButton exportAllButton = (RadioButton) exportDialog.findViewById(R.id.activity_export_all);
final TextView exportButton = (TextView) exportDialog.findViewById(R.id.dialog_export_add);
final TextView cancelButton = (TextView) exportDialog.findViewById(R.id.dialog_export_cancel);
exportRangeButton.setChecked(true);
exportDialogDateFrom.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar now = Calendar.getInstance();
DatePickerDialog dpd = DatePickerDialog.newInstance(
MainActivity.this,
now.get(Calendar.YEAR),
now.get(Calendar.MONTH),
now.get(Calendar.DAY_OF_MONTH)
);
dpd.show(getFragmentManager(), "fromDateDialog");
dpd.setMaxDate(now);
}
});
exportDialogDateTo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Calendar now = Calendar.getInstance();
DatePickerDialog dpd = DatePickerDialog.newInstance(
MainActivity.this,
now.get(Calendar.YEAR),
now.get(Calendar.MONTH),
now.get(Calendar.DAY_OF_MONTH)
);
dpd.show(getFragmentManager(), "toDateDialog");
dpd.setMaxDate(now);
}
});
exportRangeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isChecked = exportRangeButton.isChecked();
exportDialogDateFrom.setEnabled(true);
exportDialogDateTo.setEnabled(true);
exportAllButton.setChecked(!isChecked);
}
});
exportAllButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isChecked = exportAllButton.isChecked();
exportDialogDateFrom.setEnabled(false);
exportDialogDateTo.setEnabled(false);
exportRangeButton.setChecked(!isChecked);
exportButton.setEnabled(true);
}
});
exportButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (validateExportDialog()) {
exportPresenter.onExportClicked(exportAllButton.isChecked());
exportDialog.dismiss();
} else {
showSnackBar(getResources().getString(R.string.dialog_error), Snackbar.LENGTH_LONG);
}
}
});
cancelButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
exportDialog.dismiss();
}
});
}
private boolean validateExportDialog() {
String dateTo = exportDialogDateTo.getText().toString();
String dateFrom = exportDialogDateFrom.getText().toString();
return !exportRangeButton.isChecked() || !(TextUtils.isEmpty(dateTo) || TextUtils.isEmpty(dateFrom));
}
public CoordinatorLayout getFabView() {
return (CoordinatorLayout) findViewById(R.id.activity_main_coordinator_layout);
}
public void reloadFragmentAdapter() {
homePagerAdapter.notifyDataSetChanged();
}
public void turnOffToolbarScrolling() {
Toolbar mToolbar = (Toolbar) findViewById(R.id.activity_main_toolbar);
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.activity_main_appbar_layout);
//turn off scrolling
AppBarLayout.LayoutParams toolbarLayoutParams = (AppBarLayout.LayoutParams) mToolbar.getLayoutParams();
toolbarLayoutParams.setScrollFlags(0);
mToolbar.setLayoutParams(toolbarLayoutParams);
CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
appBarLayoutParams.setBehavior(new AppBarLayout.Behavior());
appBarLayout.setLayoutParams(appBarLayoutParams);
}
public void turnOnToolbarScrolling() {
Toolbar mToolbar = (Toolbar) findViewById(R.id.activity_main_toolbar);
AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.activity_main_appbar_layout);
//turn on scrolling
AppBarLayout.LayoutParams toolbarLayoutParams = (AppBarLayout.LayoutParams) mToolbar.getLayoutParams();
toolbarLayoutParams.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
mToolbar.setLayoutParams(toolbarLayoutParams);
CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
appBarLayoutParams.setBehavior(new AppBarLayout.Behavior());
appBarLayout.setLayoutParams(appBarLayoutParams);
}
public Toolbar getToolbar() {
return (Toolbar) findViewById(R.id.activity_main_toolbar);
}
public LocaleHelper getLocaleHelper() { return localeHelper; }
private void hideFabAnimation() {
final View fab = findViewById(R.id.activity_main_fab_add_reading);
fab.animate()
.translationY(-5)
.alpha(0.0f)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
fab.setVisibility(View.INVISIBLE);
}
});
}
private void showFabAnimation() {
final View fab = findViewById(R.id.activity_main_fab_add_reading);
if (fab.getVisibility() == View.INVISIBLE) {
// Prepare the View for the animation
fab.setVisibility(View.VISIBLE);
fab.setAlpha(0.0f);
fab.animate()
.alpha(1f)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
fab.setVisibility(View.VISIBLE);
}
});
} else {
// do nothing
// probably swiping from OVERVIEW to HISTORY tab
}
}
public void showInviteDialog() {
Intent intent = new AppInviteInvitation.IntentBuilder(getString(R.string.invitation_title))
.setMessage(getString(R.string.invitation_message))
.setCallToActionText(getString(R.string.invitation_cta))
.build();
startActivityForResult(intent, REQUEST_INVITE);
}
public void checkIfEmptyLayout() {
LinearLayout emptyLayout = (LinearLayout) findViewById(R.id.activity_main_empty_layout);
ViewPager pager = (ViewPager) findViewById(R.id.activity_main_pager);
if (presenter.isdbEmpty()) {
pager.setVisibility(View.GONE);
tabLayout.setVisibility(View.GONE);
emptyLayout.setVisibility(View.VISIBLE);
bottomSheetAddDialogView = getLayoutInflater().inflate(R.layout.fragment_add_bottom_dialog_disabled, null);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (getResources().getConfiguration().orientation == 1) {
// If Portrait choose vertical curved line
ImageView arrow = (ImageView) findViewById(R.id.activity_main_arrow);
arrow.setBackground(getResources().getDrawable(R.drawable.curved_line_vertical));
} else {
// Else choose horizontal one
ImageView arrow = (ImageView) findViewById(R.id.activity_main_arrow);
arrow.setBackground((getResources().getDrawable(R.drawable.curved_line_horizontal)));
}
}
} else {
pager.setVisibility(View.VISIBLE);
emptyLayout.setVisibility(View.GONE);
bottomSheetAddDialogView = getLayoutInflater().inflate(R.layout.fragment_add_bottom_dialog, null);
}
}
public void showExportedSnackBar(int nReadings) {
View rootLayout = findViewById(android.R.id.content);
Snackbar.make(rootLayout, getString(R.string.activity_export_snackbar_1) + " " + nReadings + " " + getString(R.string.activity_export_snackbar_2), Snackbar.LENGTH_SHORT).show();
}
public void showNoReadingsSnackBar() {
View rootLayout = findViewById(android.R.id.content);
Snackbar.make(rootLayout, getString(R.string.activity_export_no_readings_snackbar), Snackbar.LENGTH_SHORT).show();
}
public void showExportError() {
View rootLayout = findViewById(android.R.id.content);
Snackbar.make(rootLayout, getString(R.string.activity_export_issue_generic), Snackbar.LENGTH_SHORT).show();
}
private void showSnackBar(String text, int lengthLong) {
View rootLayout = findViewById(android.R.id.content);
Snackbar.make(rootLayout, text, lengthLong).show();
}
public void showShareDialog(Uri uri) {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setData(uri);
shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
shareIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
shareIntent.setType("*/*");
startActivity(Intent.createChooser(shareIntent, getResources().getString(R.string.share_using)));
}
@Override
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
// Check which dialog set the date
if (view.getTag().equals("fromDateDialog")) {
exportPresenter.setFromYear(year);
exportPresenter.setFromMonth(monthOfYear);
exportPresenter.setFromDay(dayOfMonth);
int monthToShow = monthOfYear + 1;
String date = +dayOfMonth + "/" + monthToShow + "/" + year;
exportDialogDateFrom.setText(date);
} else {
exportPresenter.setToYear(year);
exportPresenter.setToMonth(monthOfYear);
exportPresenter.setToDay(dayOfMonth);
int monthToShow = monthOfYear + 1;
String date = +dayOfMonth + "/" + monthToShow + "/" + year;
exportDialogDateTo.setText(date);
}
}
private boolean isPlayServicesAvailable() {
GoogleApiAvailability googleAPI = GoogleApiAvailability.getInstance();
int status = googleAPI.isGooglePlayServicesAvailable(getApplicationContext());
if (status == ConnectionResult.SUCCESS)
return true;
else {
Log.d("STATUS", "Error connecting with Google Play services. Code: " + String.valueOf(status));
return false;
}
}
public void onA1cInfoClicked(View view) {
new AlertDialog.Builder(MainActivity.this)
.setMessage(getString(R.string.overview_hb1ac_info))
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// continue with delete
}
})
.show();
addA1cAnalyticsEvent();
}
private void addA1cAnalyticsEvent() {
Analytics analytics = ((GlucosioApplication) getApplication()).getAnalytics();
analytics.reportAction("A1C", "A1C disclaimer opened");
}
/**
* Check the device to make sure it has the Google Play Services APK. If
* it doesn't, display a dialog that allows users to download the APK from
* the Google Play Store or enable it in the device's system settings.
*/
private boolean checkPlayServices() {
GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
int resultCode = apiAvailability.isGooglePlayServicesAvailable(this);
if (resultCode != ConnectionResult.SUCCESS) {
if (apiAvailability.isUserResolvableError(resultCode)) {
apiAvailability.getErrorDialog(this, resultCode, 9000)
.show();
} else {
Log.i("Glucosio", "This device is not supported.");
showErrorDialogPlayServices();
}
return false;
}
return true;
}
private void showErrorDialogPlayServices() {
Toast.makeText(getApplicationContext(), R.string.activity_main_error_play_services, Toast.LENGTH_SHORT).show();
}
}