package com.openfeint.internal.notifications; import java.util.HashMap; import java.util.Map; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.openfeint.api.R; import com.openfeint.api.resource.Achievement; import com.openfeint.internal.OpenFeintInternal; import com.openfeint.internal.request.BitmapRequest; import com.openfeint.internal.request.ExternalBitmapRequest; public class AchievementNotification extends NotificationBase { protected AchievementNotification(Achievement achievement, Map<String,Object> userData) { //TODO: read from achievement or factory function super(OpenFeintInternal.getRString(R.string.of_achievement_unlocked), null, Category.Achievement, Type.Success, userData); } public void loadedImage(Bitmap map) { displayView.invalidate(); } @Override protected boolean createView() { final Achievement achievement = (Achievement) getUserData().get("achievement"); LayoutInflater inflater = (LayoutInflater)OpenFeintInternal.getInstance().getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); displayView = inflater.inflate(R.layout.of_achievement_notification, null); if (achievement.isUnlocked) { displayView.findViewById(R.id.of_achievement_progress_icon).setVisibility(View.INVISIBLE); } else { displayView.findViewById(R.id.of_achievement_score_icon).setVisibility(View.INVISIBLE); } ((TextView)displayView.findViewById(R.id.of_achievement_text)).setText(achievement.title); final String scoreText = achievement.isUnlocked ? Integer.toString(achievement.gamerscore) : String.format("%d%%", (int)achievement.percentComplete); ((TextView)displayView.findViewById(R.id.of_achievement_score)).setText(scoreText); if(null != achievement.iconUrl) { final Drawable iconImage = getResourceDrawable(achievement.iconUrl); if(null == iconImage) { //try to load from Feint server BitmapRequest req = new ExternalBitmapRequest(achievement.iconUrl) { @Override public void onSuccess(Bitmap responseBody) { ((ImageView)displayView.findViewById(R.id.of_achievement_icon)).setImageDrawable(new BitmapDrawable(responseBody)); showToast(); } @Override public void onFailure(String exceptionMessage) { OpenFeintInternal.log("NotificationImage", "Failed to load image "+ achievement.iconUrl + ":" + exceptionMessage); showToast(); } }; req.launch(); return false; } else { ((ImageView)displayView.findViewById(R.id.of_achievement_icon)).setImageDrawable(iconImage); } } return true; } @Override protected void drawView(Canvas canvas) { displayView.draw(canvas); } public static void showStatus(Achievement achievement) { Map<String,Object> userData = new HashMap<String,Object>(); userData.put("achievement", achievement); AchievementNotification notification = new AchievementNotification(achievement, userData); notification.checkDelegateAndView(); } }