UIHelper.java

  1package de.gultsch.chat.utils;
  2
  3import java.text.SimpleDateFormat;
  4import java.util.Date;
  5
  6import de.gultsch.chat.R;
  7import de.gultsch.chat.entities.Conversation;
  8import de.gultsch.chat.ui.ConversationActivity;
  9
 10import android.app.Notification;
 11import android.app.PendingIntent;
 12import android.content.Context;
 13import android.content.Intent;
 14import android.content.SharedPreferences;
 15import android.content.res.Resources;
 16import android.graphics.Bitmap;
 17import android.graphics.Canvas;
 18import android.graphics.Paint;
 19import android.graphics.Rect;
 20import android.net.Uri;
 21import android.preference.PreferenceManager;
 22import android.support.v4.app.NotificationCompat;
 23import android.support.v4.app.TaskStackBuilder;
 24import android.util.DisplayMetrics;
 25import android.util.Log;
 26
 27public class UIHelper {
 28	public static String readableTimeDifference(long time) {
 29		if (time == 0) {
 30			return "just now";
 31		}
 32		Date date = new Date(time);
 33		long difference = (System.currentTimeMillis() - time) / 1000;
 34		if (difference < 60) {
 35			return "just now";
 36		} else if (difference < 60 * 10) {
 37			return difference / 60 + " min ago";
 38		} else if (difference < 60 * 60 * 24) {
 39			SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
 40			return sdf.format(date);
 41		} else {
 42			SimpleDateFormat sdf = new SimpleDateFormat("M/D");
 43			return sdf.format(date);
 44		}
 45	}
 46
 47	public static Bitmap getUnknownContactPicture(String name, int size) {
 48		String firstLetter = name.substring(0, 1).toUpperCase();
 49		String centerLetter = name.substring(name.length() / 2,
 50				(name.length() / 2) + 1);
 51
 52		int holoColors[] = { 0xFF1da9da, 0xFFb368d9, 0xFF83b600, 0xFFffa713,
 53				0xFFe92727 };
 54
 55		int color = holoColors[centerLetter.charAt(0) % holoColors.length];
 56
 57		Bitmap bitmap = Bitmap
 58				.createBitmap(size, size, Bitmap.Config.ARGB_8888);
 59		Canvas canvas = new Canvas(bitmap);
 60
 61		bitmap.eraseColor(color);
 62
 63		Paint paint = new Paint();
 64		paint.setColor(0xffe5e5e5);
 65		paint.setTextSize((float) (size * 0.9));
 66		paint.setAntiAlias(true);
 67		Rect rect = new Rect();
 68		paint.getTextBounds(firstLetter, 0, 1, rect);
 69		float width = paint.measureText(firstLetter);
 70		canvas.drawText(firstLetter, (size / 2) - (width / 2), (size / 2)
 71				+ (rect.height() / 2), paint);
 72
 73		return bitmap;
 74	}
 75	
 76	public static Notification getUnreadMessageNotification(Context context, Conversation conversation) {
 77		
 78		SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
 79		String ringtone = sharedPref.getString("notification_ringtone",null);
 80		
 81		Resources res = context.getResources();
 82		NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context);
 83		mBuilder.setLargeIcon(UIHelper.getUnknownContactPicture(conversation.getName(),(int) res.getDimension(android.R.dimen.notification_large_icon_width)));
 84		mBuilder.setContentTitle(conversation.getName());
 85		mBuilder.setContentText(conversation.getLatestMessage());
 86		mBuilder.setSmallIcon(R.drawable.notification);
 87		mBuilder.setLights(0xffffffff, 2000, 4000);
 88		if (ringtone!=null) {
 89			mBuilder.setSound(Uri.parse(ringtone));
 90		}
 91		
 92		TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
 93		stackBuilder.addParentStack(ConversationActivity.class);
 94		
 95		Intent viewConversationIntent = new Intent(context,ConversationActivity.class);
 96		viewConversationIntent.setAction(Intent.ACTION_VIEW);
 97		viewConversationIntent.putExtra(
 98				ConversationActivity.CONVERSATION,
 99				conversation.getUuid());
100		viewConversationIntent
101				.setType(ConversationActivity.VIEW_CONVERSATION);
102		
103		stackBuilder.addNextIntent(viewConversationIntent);
104		
105		PendingIntent resultPendingIntent =
106		        stackBuilder.getPendingIntent(
107		            0,
108		            PendingIntent.FLAG_UPDATE_CURRENT
109		        );
110
111		
112		mBuilder.setContentIntent(resultPendingIntent);
113		return mBuilder.build();
114	}
115}