/*
This file is part of RateBeer For Android.
RateBeer for Android 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.
RateBeer for Android 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 RateBeer for Android. If not, see
<http://www.gnu.org/licenses/>.
*/
package com.ratebeer.android.gui.fragments;
import java.util.ArrayList;
import java.util.Date;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.os.Message;
import android.os.Messenger;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.googlecode.androidannotations.annotations.AfterViews;
import com.googlecode.androidannotations.annotations.Bean;
import com.googlecode.androidannotations.annotations.Click;
import com.googlecode.androidannotations.annotations.EFragment;
import com.googlecode.androidannotations.annotations.ItemClick;
import com.googlecode.androidannotations.annotations.OptionsItem;
import com.googlecode.androidannotations.annotations.OptionsMenu;
import com.googlecode.androidannotations.annotations.ViewById;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
import com.ratebeer.android.R;
import com.ratebeer.android.api.ApiMethod;
import com.ratebeer.android.api.CommandSuccessResult;
import com.ratebeer.android.api.UserSettings;
import com.ratebeer.android.api.command.GetDrinkingStatusCommand;
import com.ratebeer.android.api.command.GetTopBeersCommand.TopListType;
import com.ratebeer.android.api.command.ImageUrls;
import com.ratebeer.android.api.command.Style;
import com.ratebeer.android.app.RateBeerForAndroid;
import com.ratebeer.android.gui.*;
import com.ratebeer.android.gui.components.PosterService;
import com.ratebeer.android.gui.components.RateBeerFragment;
import com.ratebeer.android.gui.components.helpers.ErrorLogSender;
import com.ratebeer.android.gui.components.helpers.SearchUiHelper;
import com.ratebeer.android.gui.fragments.SetDrinkingStatusDialogFragment.OnDialogResult;
@EFragment(R.layout.fragment_dashboard)
@OptionsMenu(R.menu.dashboard)
public class DashboardFragment extends RateBeerFragment {
@ViewById
protected Button drinkingStatus;
@ViewById
<<<<<<< HEAD
protected Button myprofile, offlineratings, beerstyles, top50, places, events, beermail, bycountry;
=======
protected Button myprofile, offlineratings, customlists, beerstyles, top50, places, events, beermail, bycountry;
>>>>>>> 9cb2b20cee7ae90e7a5ea61c0ebff4e0c86a6dd6
@ViewById
protected ListView styles;
private LayoutInflater inflater;
private Float density = null;
@Bean
protected ErrorLogSender errorLogSender;
public DashboardFragment() {
}
@AfterViews
public void init() {
<<<<<<< HEAD
=======
customlists.setOnClickListener(onButtonClick(CustomListsFragment_.builder().build(), false));
>>>>>>> 9cb2b20cee7ae90e7a5ea61c0ebff4e0c86a6dd6
offlineratings.setOnClickListener(onButtonClick(OfflineRatingsFragment_.builder().build(), false));
beerstyles.setOnClickListener(onButtonClick(StylesFragment_.builder().build(), false));
top50.setOnClickListener(onButtonClick(TopBeersFragment_.builder().topList(TopListType.Top50).build(), false));
bycountry.setOnClickListener(onButtonClick(TopBeersFragment_.builder().topList(TopListType.TopByCountry)
.build(), false));
places.setOnClickListener(onButtonClick(PlacesFragment_.builder().build(), false));
events.setOnClickListener(onButtonClick(EventsFragment_.builder().build(), true));
beermail.setOnClickListener(onButtonClick(MailsFragment_.builder().build(), true));
updateProfileImage();
// For tablets, also load the beer styles list
if (styles != null) {
styles.setAdapter(new StylesFragment.StyleAdapter(getActivity(),
new ArrayList<Style>(Style.ALL_STYLES.values()), inflater));
}
// Update drinking status
showDrinkingStatus();
refreshDrinkingStatus();
// Show legal stuff on first app start
if (getSettings().isFirstStart()) {
getSettings().recordFirstStart();
load(TextInfoFragment_.builder().title(getString(R.string.app_legal_title))
.info(getString(R.string.app_legal)).build());
}
}
@Click
protected void drinkingStatusClicked() {
new SetDrinkingStatusDialogFragment(new OnDialogResult() {
@Override
public void onSetNewStatus(String newStatus) {
// Update now drinking status
Intent i = new Intent(PosterService.ACTION_SETDRINKINGSTATUS);
i.putExtra(PosterService.EXTRA_NEWSTATUS, newStatus);
i.putExtra(PosterService.EXTRA_BEERID, PosterService.NO_BEER_EXTRA);
i.putExtra(PosterService.EXTRA_MESSENGER, new Messenger(new Handler() {
@Override
public void handleMessage(Message msg) {
// Callback from the poster service; just refresh the drinking status
// if (msg.arg1 == PosterService.RESULT_SUCCESS)
execute(new GetDrinkingStatusCommand(getUser()));
}
}));
getActivity().startService(i);
}
}).show(getFragmentManager(), "dialog");
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
new SearchUiHelper(getActivity()).enhanceSearchInMenu(menu);
}
@OptionsItem(R.id.menu_search)
protected void onStartSearch() {
// Open standard search interface
// Note that this method is only called on API < 8 as SearchView is used for API level >= 8 (via ActionBarSherlock)
getActivity().onSearchRequested();
}
@OptionsItem(R.id.menu_scanbarcode)
protected void onStartBarcodeScanner() {
// Start the search activity (without specific search string), which offers the actual scanning feature
load(SearchFragment_.builder().startBarcodeScanner(true).build());
}
@OptionsItem(R.id.menu_calculator)
protected void onStartCalculator() {
// Start calculator screen
load(CalculatorFragment_.builder().build());
}
@OptionsItem(R.id.menu_preferences)
protected void onOpenPreferences() {
PreferencesInterface_.intent(getActivity()).start();
}
@OptionsItem(R.id.menu_sendreport)
protected void onSendErrorReport() {
errorLogSender.collectAndSendLog(getUser() == null? "<none>": getUser().getUsername());
}
@OptionsItem(R.id.menu_about)
protected void onOpenAbout() {
load(AboutFragment_.builder().build());
}
private void updateProfileImage() {
if (getUser() != null) {
<<<<<<< HEAD
RateBeerForAndroid.getImageCache(getActivity()).loadImage(getActivity(),
ImageUrls.getUserPhotoUrl(getUser().getUsername()),
new ImageLoadingListener() {
@Override
public void onLoadingStarted() {
}
@Override
public void onLoadingFailed(FailReason arg0) {
}
@Override
public void onLoadingComplete(Bitmap arg0) {
=======
RateBeerForAndroid.getImageCache(getActivity()).loadImage(
ImageUrls.getUserPhotoUrl(getUser().getUsername()),
new ImageLoadingListener() {
@Override
public void onLoadingStarted(String url, View view) {
}
@Override
public void onLoadingFailed(String url, View view, FailReason reason) {
}
@Override
public void onLoadingComplete(String url, View view, Bitmap bitmap) {
>>>>>>> 9cb2b20cee7ae90e7a5ea61c0ebff4e0c86a6dd6
if (getActivity() == null) {
return;
}
if (density == null) {
density = getResources().getDisplayMetrics().density;
}
<<<<<<< HEAD
Drawable d = new BitmapDrawable(getResources(), arg0);
=======
Drawable d = new BitmapDrawable(getResources(), bitmap);
>>>>>>> 9cb2b20cee7ae90e7a5ea61c0ebff4e0c86a6dd6
d.setBounds(0, 0, (int) (48 * density), (int) (48 * density));
myprofile.setCompoundDrawables(null, d, null, null);
}
@Override
<<<<<<< HEAD
public void onLoadingCancelled() {
=======
public void onLoadingCancelled(String url, View view) {
>>>>>>> 9cb2b20cee7ae90e7a5ea61c0ebff4e0c86a6dd6
}
});
}
}
@Click
protected void myprofileClicked() {
if (getUser() == null) {
// No user yet, but this is required so start the login screen
<<<<<<< HEAD
com.ratebeer.android.gui.SignIn_.intent(getActivity()).extraIsRedirect(true).start();
=======
SignIn_.intent(getActivity()).extraIsRedirect(true).start();
>>>>>>> 9cb2b20cee7ae90e7a5ea61c0ebff4e0c86a6dd6
} else {
load(UserViewFragment_.builder().userName(getUser().getUsername())
.userId(getUser().getUserID()).build());
}
}
private OnClickListener onButtonClick(final RateBeerFragment fragment, final boolean requiresUser) {
return new OnClickListener() {
@Override
public void onClick(View v) {
if (requiresUser && getUser() == null) {
// No user yet, but this is required so start the login screen
<<<<<<< HEAD
com.ratebeer.android.gui.SignIn_.intent(getActivity()).extraIsRedirect(true).start();
=======
SignIn_.intent(getActivity()).extraIsRedirect(true).start();
>>>>>>> 9cb2b20cee7ae90e7a5ea61c0ebff4e0c86a6dd6
} else {
load(fragment);
}
}
};
}
@ItemClick(R.id.styles)
protected void onStyleClicked(Style item) {
load(StyleViewFragment_.builder().style(item).build());
}
@Override
public void onTaskSuccessResult(CommandSuccessResult result) {
if (getActivity() == null) {
return;
}
if (result.getCommand().getMethod() == ApiMethod.GetDrinkingStatus) {
GetDrinkingStatusCommand getCommand = (GetDrinkingStatusCommand) result.getCommand();
// Override the user settings, in which the drinking status is contained
getSettings().saveUserSettings(new UserSettings(getUser().getUserID(), getUser().getUsername(),
getUser().getPassword(), getCommand.getDrinkingStatus(), getUser().isPremium(), new Date()));
showDrinkingStatus();
}
}
private void refreshDrinkingStatus() {
// At max refresh every 5 minutes
Date d = new Date((new Date()).getTime() - (5 * 60 * 1000)); // = 5 minutes ago
if (getUser() != null && getUser().getLastDrinkingStatusUpdate().before(d)) {
execute(new GetDrinkingStatusCommand(getUser()));
}
}
public void showDrinkingStatus() {
if (getUser() == null || getUser().getDrinkingStatus() == null || getUser().getDrinkingStatus().equals("")) {
drinkingStatus.setVisibility(View.GONE);
} else {
drinkingStatus.setVisibility(View.VISIBLE);
drinkingStatus.setText(getString(R.string.home_nowdrinking, getUser().getDrinkingStatus()));
}
}
}