package edu.stanford.cs.sujogger.util;
import java.text.DateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Environment;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import edu.stanford.cs.gaming.sdk.model.User;
import edu.stanford.cs.sujogger.R;
public class Common {
public static final String ITEM_TITLE = "title";
public static final String CACHE_DIRECTORY = Environment.getExternalStorageDirectory() +
"/.sujogger-user-image-cache/";
public static void log(String tag, String msg) {
if (Constants.SHOW_DEBUG) Log.d(tag, msg);
}
public static Map<String, ?> createItem(String title) {
Map<String, String> item = new HashMap<String, String>();
item.put(ITEM_TITLE, title);
return item;
}
public static String getCacheFileName(String url) {
if (url == null) return null;
return CACHE_DIRECTORY + url.hashCode() + ".jpg";
}
public static String nameListForUsers(User[] users) {
String nameList = "";
for (int i = 0; i < users.length; i++) {
if (i == 0)
nameList += users[i].first_name + " " + users[i].last_name;
else
nameList += ", " + users[i].first_name + " " + users[i].last_name;
}
return nameList;
}
public static User getRegisteredUser(Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
User user = new User();
user.id = prefs.getInt(Constants.USERREG_ID_KEY, 0);
user.first_name = prefs.getString(Constants.USERREG_FIRSTNAME_KEY, null);
user.last_name = prefs.getString(Constants.USERREG_LASTNAME_KEY, null);
user.email = prefs.getString(Constants.USERREG_EMAIL_KEY, null);
user.fb_id = prefs.getLong(Constants.USERREG_FBID_KEY, 0);
user.fb_photo = prefs.getString(Constants.USERREG_PICTURE_KEY, null);
user.fb_token = prefs.getString(Constants.USERREG_TOKEN_KEY, null);
return user;
}
public static String pad(int c) {
if (c >= 10)
return String.valueOf(c);
else
return "0" + String.valueOf(c);
}
public static String timeString(int hour, int minute) {
int hour12 = hour;
String ampm = "AM";
if (hour12 >= 12) {
ampm = "PM";
if (hour12 > 12)
hour12 -= 12;
}
else if (hour12 == 0)
hour12 = 12;
return new StringBuilder()
.append(hour12).append(":")
.append(Common.pad(minute)).append(" ")
.append(ampm).toString();
}
public static String distanceString(Context context, double val) {
UnitsI18n mUnits = new UnitsI18n(context, null);
double mDistance = mUnits.conversionFromMeter(val);
return String.format("%.2f %s", mDistance, mUnits.getDistanceUnit());
}
public static String durationString(Context context, long val) {
long durationSec = val / 1000;
long hours, minutes, seconds;
hours = durationSec / 3600;
durationSec = durationSec - (hours * 3600);
minutes = durationSec / 60;
durationSec = durationSec - (minutes * 60);
seconds = durationSec;
String text = "";
text += String.format("%02d", hours) + ":";
text += String.format("%02d", minutes) + ":";
text += String.format("%02d", seconds);
return text;
}
public static String dateString(long val) {
Date date = new Date(val);
return DateFormat.getInstance().format(date);
}
public static String speedString(Context context, double val) {
UnitsI18n mUnits = new UnitsI18n(context, null);
double speed = mUnits.conversionFromMeterAndMiliseconds(val, 1);
return String.format("%.2f %s", speed, mUnits.getSpeedUnit());
}
public static String paceString(Context context, long duration, double distance) {
UnitsI18n mUnits = new UnitsI18n(context, null);
double mDistance = mUnits.conversionFromMeter(distance);
double time = duration / mDistance;
long timeSec = (long)time / 1000;
long hours, minutes, seconds;
hours = timeSec / 3600;
timeSec = timeSec - (hours * 3600);
minutes = timeSec / 60;
timeSec = timeSec - (minutes * 60);
seconds = timeSec;
String text = "";
if (hours > 0)
text += String.format("%02d", hours) + ":";
text += String.format("%02d", minutes) + ":";
text += String.format("%02d", seconds);
text += "/" + mUnits.getDistanceUnit();
return text;
}
public static void displayAchievementToast(String title, int imgRes, boolean earned, Context context, View toastLayout) {
ImageView image = (ImageView) toastLayout.findViewById(R.id.toast_ach_image);
image.setImageResource(imgRes);
TextView text = (TextView) toastLayout.findViewById(R.id.toast_ach_desc);
String suffix = "achievement earned!";
if (!earned) suffix = "achievement lost";
text.setText(title + " " + suffix);
Toast achToast = new Toast(context);
achToast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
achToast.setDuration(Toast.LENGTH_LONG);
achToast.setView(toastLayout);
achToast.show();
}
public static void displayUpgradeDialog(Context context) {
final Context newContext = context;
AlertDialog.Builder builder = new AlertDialog.Builder(newContext);
builder.setTitle("Upgrade notice");
builder.setMessage(R.string.app_upgrade_message);
builder.setIcon(R.drawable.market_icon);
builder.setNegativeButton(R.string.btn_cancel, null);
builder.setPositiveButton(R.string.upgrade_button, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
try {
Uri uri = Uri.parse(Constants.APP_MARKET_URI);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
newContext.startActivity(intent);
} catch (ActivityNotFoundException e) {
e.printStackTrace();
}
}
});
builder.show();
}
}