package com.socioboard.t_board_pro.adapters; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.TimeZone; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.http.message.BasicNameValuePair; import org.json.JSONObject; import com.socioboard.t_board_pro.AnyUserProfileDialog; import com.socioboard.t_board_pro.MainActivity; import com.socioboard.t_board_pro.SchedulleComposeActivity; import com.socioboard.t_board_pro.dialog.ShowTweetComposeDialog; import com.socioboard.t_board_pro.lazylist.ImageLoader; import com.socioboard.t_board_pro.twitterapi.TwitterPostRequestFollow; import com.socioboard.t_board_pro.twitterapi.TwitterPostRequestPerams; import com.socioboard.t_board_pro.twitterapi.TwitterPostRequestUnFollow; import com.socioboard.t_board_pro.twitterapi.TwitterRequestCallBack; import com.socioboard.t_board_pro.util.Const; import com.socioboard.t_board_pro.util.MainSingleTon; import com.socioboard.t_board_pro.util.ModelUserDatas; import com.socioboard.t_board_pro.util.TboardproLocalData; import com.socioboard.t_board_pro.util.TmpCallback; import com.socioboard.t_board_pro.util.TweetModel; import com.socioboard.tboardpro.R; import android.app.AlertDialog; import android.app.Dialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.Intent; import android.content.SharedPreferences.Editor; import android.graphics.drawable.ColorDrawable; import android.os.Handler; import android.text.method.LinkMovementMethod; import android.util.SparseBooleanArray; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; public class TweetsAdapter extends BaseAdapter { private Context context; public ArrayList<TweetModel> tweetModels; public ImageLoader imageLoader; public Context activity; public static Handler handler = new Handler(); public Handler handler2 = new Handler(); public ProgressDialog progressDialog; TboardproLocalData tboardproLocalData; ArrayList<String> sendingids; ArrayList<String> sentIds; ArrayList<ModelUserDatas> navDrawerItems; Dialog dialogopenSelect; public TweetsAdapter(ArrayList<TweetModel> tweetModels, Context activity) { this.context = activity; this.activity = activity; this.tweetModels = tweetModels; imageLoader = new ImageLoader(context); progressDialog = new ProgressDialog(activity); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setIndeterminate(true); progressDialog.setCancelable(true); tboardproLocalData = new TboardproLocalData(activity); sendingids = tboardproLocalData.getAllSendingIDs(MainSingleTon.currentUserModel.getUserid()); sentIds = tboardproLocalData.getAllSentIDs(MainSingleTon.currentUserModel.getUserid()); dialogopenSelect = new Dialog(context); dialogopenSelect.requestWindowFeature(Window.FEATURE_NO_TITLE); dialogopenSelect.setContentView(R.layout.select_user_dialog); dialogopenSelect.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); Window window = dialogopenSelect.getWindow(); lp.copyFrom(window.getAttributes()); lp.width = WindowManager.LayoutParams.MATCH_PARENT; lp.height = WindowManager.LayoutParams.MATCH_PARENT; window.setAttributes(lp); dialogopenSelect.setCancelable(true); } @Override public int getCount() { return tweetModels.size(); } @Override public TweetModel getItem(int position) { return tweetModels.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater mInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = mInflater.inflate(R.layout.single_tweet, parent, false); } final TweetModel tweetModel = getItem(position); ImageView profilePic = (ImageView) convertView.findViewById(R.id.profile_pic); RelativeLayout relTweetImage = (RelativeLayout) convertView.findViewById(R.id.relTweetImage); RelativeLayout SingetweetRelative = (RelativeLayout) convertView.findViewById(R.id.SingetweetRelative); if (tweetModel.getMediaImagerUrl().isEmpty()) { System.out.println("*****************getMediaImagerUrl Empty "); relTweetImage.setVisibility(View.GONE); } else { System.out.println("******** " + tweetModel.getMediaImagerUrl()); relTweetImage.setVisibility(View.VISIBLE); ImageView imageView1Tweet = (ImageView) convertView.findViewById(R.id.imageView1Tweet); imageLoader.DisplayImage(tweetModel.getMediaImagerUrl(), imageView1Tweet); } final Button buttonFollow = (Button) convertView.findViewById(R.id.buttonFollow); final Button buttonUnfollow = (Button) convertView.findViewById(R.id.buttonUnfollow); if (tweetModel.isFollowing()) { buttonFollow.setVisibility(View.INVISIBLE); buttonUnfollow.setVisibility(View.VISIBLE); } else { buttonFollow.setVisibility(View.VISIBLE); buttonUnfollow.setVisibility(View.INVISIBLE); } if (MainSingleTon.currentUserModel.getUserid().contains(tweetModel.getUserID())) { buttonUnfollow.setVisibility(View.INVISIBLE); buttonFollow.setVisibility(View.INVISIBLE); } buttonFollow.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (MainSingleTon.isNeedTOstopFollowing) { showToast("You have Exceeded Follow Limit Today"); } else { myprint("buttonFollow " + getItem(position)); buttonFollow.setVisibility(View.INVISIBLE); buttonUnfollow.setVisibility(View.VISIBLE); getItem(position).setFollowing(true); TwitterPostRequestFollow twitterPostRequestFollow = new TwitterPostRequestFollow( MainSingleTon.currentUserModel, new TwitterRequestCallBack() { @Override public void onSuccess(JSONObject jsonObject) { } @Override public void onSuccess(String jsonResult) { addDMStatus(tweetModel.getUserID()); myprint("buttonFollow onSuccess"); ++MainSingleTon.followingCount; MainSingleTon.toFollowingModelsIDs.add(tweetModel.getUserID()); MainActivity.isNeedToRefreshDrawer = true; } @Override public void onFailure(Exception e) { myprint("buttonFollow onFailure" + e); getItem(position).setFollowing(false); } }); twitterPostRequestFollow.executeThisRequest(tweetModel.getUserID()); } } }); buttonUnfollow.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { myprint("buttonUnfollow " + getItem(position)); if (MainSingleTon.isNeedTOstopFollowing) { showToast("You have Exceeded Follow Limit Today"); } else { buttonUnfollow.setVisibility(View.INVISIBLE); buttonFollow.setVisibility(View.VISIBLE); getItem(position).setFollowing(false); TwitterPostRequestUnFollow twitterPostRequestUnFollow = new TwitterPostRequestUnFollow( MainSingleTon.currentUserModel, new TwitterRequestCallBack() { @Override public void onSuccess(JSONObject jsonObject) { } @Override public void onSuccess(String jsonResult) { myprint("buttonUnfollow onSuccess"); --MainSingleTon.followingCount; MainSingleTon.toFollowingModelsIDs.remove(tweetModel.getUserID()); MainActivity.isNeedToRefreshDrawer = true; } @Override public void onFailure(Exception e) { myprint("buttonUnfollow onFailure" + e); getItem(position).setFollowing(true); } }); twitterPostRequestUnFollow.executeThisRequest(tweetModel.getUserID()); } } }); final ImageView imageViewFav; imageViewFav = (ImageView) convertView.findViewById(R.id.imageView1Fav); ImageView imageViewReply = (ImageView) convertView.findViewById(R.id.imageView1REply); final ImageView imageView2Retweet = (ImageView) convertView.findViewById(R.id.imageView1Retweet); profilePic.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String newUser = tweetModel.getUserName(); newUser = newUser.replace("@", ""); if (newUser.contains(MainSingleTon.currentUserModel.getUsername())) { return; } AnyUserProfileDialog anyUserProfile = new AnyUserProfileDialog(activity, newUser, tweetModel.getUserID()); } }); TextView userName = (TextView) convertView.findViewById(R.id.usersName); userName.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { handler.post(new Runnable() { @Override public void run() { String newUser = tweetModel.getUserName(); newUser = newUser.replace("@", ""); if (newUser.contains(MainSingleTon.currentUserModel.getUsername())) { return; } AnyUserProfileDialog anyUserProfile = new AnyUserProfileDialog(activity, (newUser), tweetModel.getUserID()); } }); } }); TextView favCount = (TextView) convertView.findViewById(R.id.tweetViewfavs); TextView retweetCount = (TextView) convertView.findViewById(R.id.tweetViewRetweet); TextView fullname = (TextView) convertView.findViewById(R.id.usersFullName); TextView tweettime = (TextView) convertView.findViewById(R.id.textView1Time); TextView tweetView = (TextView) convertView.findViewById(R.id.tweetView); if (tweetModel.isRetweeted()) { imageView2Retweet.setImageResource(R.drawable.ic_action_rt_on_focused); } else { imageView2Retweet.setImageResource(R.drawable.ic_action_rt_off_focused); } if (tweetModel.isIsfavourated()) { imageViewFav.setImageResource(R.drawable.ic_action_fave_on_focused); } else { imageViewFav.setImageResource(R.drawable.ic_action_fave_off_focused); } userName.setText(tweetModel.getUserName()); fullname.setText(tweetModel.getFullName()); retweetCount.setText("" + tweetModel.getRetweetCount()); favCount.setText("" + tweetModel.getFavCount()); // "Wed Aug 29 17:12:58 +0000 2012" String[] timeArray = tweetModel.getTweetTime().split(" "); String month = monthInt(timeArray[1]), day = timeArray[2]; String year = timeArray[5]; String[] timeArrayHMS = timeArray[3].split(":"); String hr, min, sec; hr = timeArrayHMS[0]; min = timeArrayHMS[1]; sec = timeArrayHMS[2]; if (month.length() == 1) { month = "0" + month; } if (day.length() == 1) { day = "0" + day; } if (hr.length() == 1) { hr = "0" + hr; } if (min.length() == 1) { min = "0" + min; } if (sec.length() == 1) { sec = "0" + min; } // String format = "yyyy/MM/dd HH:mm:ss"; String dateInUtc = year + "/" + month + "/" + day + " " + hr + ":" + min + ":" + sec; String dateAndTime = UTCtoLocalPrettyTime(tweetModel.getTweetTime()); System.out.println("UTCtoLocalPrettyTime " + dateAndTime); tweettime.setText(dateAndTime); imageLoader.DisplayImage(tweetModel.getUserImagerUrl(), profilePic); tweetView.setMovementMethod(LinkMovementMethod.getInstance()); tweetView.setText(tweetModel.getTweeet_str()); imageView2Retweet.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (tweetModel.isRetweeted()) { return; } myprint(" imageView2Retweet"); progressDialog.setMessage("Wait..."); showProgress(); TwitterPostRequestPerams postPeramsRequest = new TwitterPostRequestPerams( MainSingleTon.currentUserModel, new TwitterRequestCallBack() { @Override public void onSuccess(JSONObject jsonObject) { myprint(""); } @Override public void onSuccess(String jsonResult) { getItem(position).setRetweeted(true); long count = getItem(position).getRetweetCount(); ++count; MainSingleTon.tweetsCount++; MainActivity.isNeedToRefreshDrawer = true; getItem(position).setRetweetCount(count); handler.post(new Runnable() { @Override public void run() { progressDialog.cancel(); imageView2Retweet.setImageResource(R.drawable.ic_action_rt_on_focused); notifyDataSetChanged(); } }); myprint("onSuccess " + jsonResult); } @Override public void onFailure(Exception e) { myprint("onFailure "); progressDialog.cancel(); showToast("Failed!"); } }); String url = MainSingleTon.reTweeting + tweetModel.getTweetId() + ".json"; List<BasicNameValuePair> peramPairs = new ArrayList<BasicNameValuePair>(); peramPairs.add(new BasicNameValuePair("id", tweetModel.getTweetId())); postPeramsRequest.executeThisRequest(url, peramPairs); } }); imageViewReply.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { myprint(" imageViewReply"); handler2.post(new Runnable() { @Override public void run() { String mentions = tweetModel.getUserName(); Pattern pattern = Pattern.compile("@\\s*(\\w+)"); String input = tweetModel.getTweeet_str(); Matcher m = pattern.matcher(input); while (m.find()) { mentions = mentions + " " + m.group(); System.out.println("" + m.group()); } ShowTweetComposeDialog tweetComposeDialog = new ShowTweetComposeDialog(activity, mentions, handler); tweetComposeDialog.showThis(); } }); } }); imageViewFav.setOnClickListener(new OnClickListener() { @Override public void onClick(final View view) { progressDialog.setMessage("Just a moment..."); showProgress(); myprint(" imageViewFav"); String url; TwitterPostRequestPerams postPeramsRequest = new TwitterPostRequestPerams( MainSingleTon.currentUserModel, new TwitterRequestCallBack() { @Override public void onSuccess(JSONObject jsonObject) { myprint(""); } @Override public void onSuccess(String jsonResult) { myprint("onSuccess " + jsonResult); handler.post(new Runnable() { @Override public void run() { long count = getItem(position).getFavCount(); progressDialog.cancel(); if (tweetModel.isIsfavourated()) { imageViewFav.setImageResource(R.drawable.ic_action_fave_off_focused); getItem(position).setIsfavourated(false); --count; MainSingleTon.favoritesCount--; MainActivity.isNeedToRefreshDrawer = true; } else { imageViewFav.setImageResource(R.drawable.ic_action_fave_on_focused); getItem(position).setIsfavourated(true); MainSingleTon.favoritesCount++; MainActivity.isNeedToRefreshDrawer = true; ++count; } getItem(position).setFavCount(count); notifyDataSetChanged(); } }); } @Override public void onFailure(Exception e) { // TODO Auto-generated method stub myprint("onFailure "); handler.post(new Runnable() { @Override public void run() { if (progressDialog.isShowing()) { progressDialog.dismiss(); } Toast.makeText(activity, "Failed", Toast.LENGTH_LONG).show(); } }); } }); List<BasicNameValuePair> peramPairs = new ArrayList<BasicNameValuePair>(); peramPairs.add(new BasicNameValuePair(Const.id, tweetModel.getTweetId())); if (tweetModel.isIsfavourated()) { url = MainSingleTon.favouritesDestroy; } else { url = MainSingleTon.favouritesCreate; } postPeramsRequest.executeThisRequest(url, peramPairs); } }); final ImageView imageViewReplySchedule, imageView1MultiRetweet, imageView1MultiFav, imageView1RetweetSchedule; imageViewReplySchedule = (ImageView) convertView.findViewById(R.id.imageViewReplySchedule); imageView1MultiRetweet = (ImageView) convertView.findViewById(R.id.imageView1MultiRetweet); imageView1MultiFav = (ImageView) convertView.findViewById(R.id.imageView1MultiFav); imageView1RetweetSchedule = (ImageView) convertView.findViewById(R.id.imageView1RetweetSchedule); imageViewReplySchedule.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { myprint(" imageViewReply"); String mentions = tweetModel.getUserName(); Pattern pattern = Pattern.compile("@\\s*(\\w+)"); String input = tweetModel.getTweeet_str(); Matcher m = pattern.matcher(input); while (m.find()) { mentions = mentions + " " + m.group(); System.out.println("" + m.group()); } MainSingleTon.insertedText = mentions; MainSingleTon.in_reply_to_status_id = tweetModel.getTweetId(); Intent intent = new Intent(context, SchedulleComposeActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } }); imageView1RetweetSchedule.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { myprint(" imageView1RetweetSchedule"); MainSingleTon.retweet_to_status_id = tweetModel.getTweetId(); MainSingleTon.insertedText = tweetModel.getTweeet_str(); Intent intent = new Intent(context, SchedulleComposeActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } }); imageView1MultiRetweet.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { myprint(" imageView2Retweet"); openSelectDialog(new TmpCallback() { @Override public void onsuccess() { // TODO Auto-generated method stub Thread thread = new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < navDrawerItems.size(); i++) { if (sparseBooleanArray.get(i)) { TwitterPostRequestPerams postPeramsRequest = new TwitterPostRequestPerams( navDrawerItems.get(i), new TwitterRequestCallBack() { @Override public void onSuccess(JSONObject jsonObject) { myprint(""); } @Override public void onSuccess(String jsonResult) { myprint("onSuccess " + jsonResult); } @Override public void onFailure(Exception e) { myprint("onFailure "); } }); String url = MainSingleTon.reTweeting + tweetModel.getTweetId() + ".json"; List<BasicNameValuePair> peramPairs = new ArrayList<BasicNameValuePair>(); peramPairs.add(new BasicNameValuePair("id", tweetModel.getTweetId())); postPeramsRequest.executeThisRequest(url, peramPairs); try { Thread.sleep(1000); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } else { myprint("* * * * * * * Not Selected navDrawerItems.item * * * * *" + navDrawerItems.get(i)); } } } }); thread.start(); } @Override public void onsuccess(Object... params) { // TODO Auto-generated method stub } }); } }); imageView1MultiFav.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { openSelectDialog(new TmpCallback() { @Override public void onsuccess() { // TODO Auto-generated method stub Thread thread = new Thread(new Runnable() { @Override public void run() { for (int i = 0; i < navDrawerItems.size(); i++) { if (sparseBooleanArray.get(i)) { String url; TwitterPostRequestPerams postPeramsRequest = new TwitterPostRequestPerams( navDrawerItems.get(i), new TwitterRequestCallBack() { @Override public void onSuccess(JSONObject jsonObject) { myprint(""); } @Override public void onSuccess(String jsonResult) { myprint("onSuccess " + jsonResult); } @Override public void onFailure(Exception e) { // TODO Auto-generated // method // stub myprint("onFailure"); } }); List<BasicNameValuePair> peramPairs = new ArrayList<BasicNameValuePair>(); peramPairs.add(new BasicNameValuePair(Const.id, tweetModel.getTweetId())); url = MainSingleTon.favouritesCreate; postPeramsRequest.executeThisRequest(url, peramPairs); try { Thread.sleep(1000); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } else { myprint("* * * * * * * Not Selected navDrawerItems.item * * * * *" + navDrawerItems.get(i)); } } } }); thread.start(); } @Override public void onsuccess(Object... params) { // TODO Auto-generated method stub } }); } }); if (position != 0 && position % 10 == 0) { SingetweetRelative.setVisibility(View.GONE); } else { SingetweetRelative.setVisibility(View.VISIBLE); } return convertView; } SparseBooleanArray sparseBooleanArray; int count; protected void openSelectDialog(final TmpCallback tmpCallback) { handler2.post(new Runnable() { @Override public void run() { // TODO Auto-generated method stub ListView listView = (ListView) dialogopenSelect.findViewById(R.id.listView1select); final SelectAccountAdapter selectAccountAdapter; navDrawerItems = tboardproLocalData.getAllUsersDataArlist(); sparseBooleanArray = new SparseBooleanArray(navDrawerItems.size()); for (int i = 0; i < navDrawerItems.size(); ++i) { sparseBooleanArray.put(i, false); if (navDrawerItems.get(i).getUserid().contains(MainSingleTon.currentUserModel.getUserid())) { sparseBooleanArray.put(i, true); } } selectAccountAdapter = new SelectAccountAdapter(navDrawerItems, context, sparseBooleanArray); listView.setAdapter(selectAccountAdapter); Button buttonDone, cancelbtn; buttonDone = (Button) dialogopenSelect.findViewById(R.id.button1); buttonDone.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { sparseBooleanArray = selectAccountAdapter.sparseBooleanArray; count = selectAccountAdapter.count; myprint("buttonCancel"); dialogopenSelect.cancel(); tmpCallback.onsuccess(); } }); cancelbtn = (Button) dialogopenSelect.findViewById(R.id.cancelbtn); cancelbtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { dialogopenSelect.cancel(); } }); new Handler().post(new Runnable() { @Override public void run() { dialogopenSelect.show(); } }); dialogopenSelect.setOnCancelListener(new OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { count = 0; for (int i = 0; i < navDrawerItems.size(); ++i) { if (sparseBooleanArray.get(i)) { ++count; myprint("dialog.setOnCancel" + sparseBooleanArray.get(i)); } } } }); } }); } public static String getPrettyTime(long milis) { // System.out.println("**********************"); // System.out.println(android.text.format.DateUtils // .getRelativeTimeSpanString(milis)); // System.out.println("**********************"); return android.text.format.DateUtils.getRelativeTimeSpanString(milis).toString(); } public void myprint(Object msg) { System.out.println(msg.toString()); } String extractImageUrl(String tweet) { String url = null; int start = tweet.indexOf("https://pbs"); if (start < 0) { return url; } String started = tweet.substring(start); int end = started.indexOf(" "); if (end < 0) { url = started.substring(0, started.length() - 1); } else { url = started.substring(0, end); } myprint("extractImageUrl " + url); return url; } void showToast(final String msg) { handler.post(new Runnable() { @Override public void run() { Toast.makeText(activity, msg, Toast.LENGTH_LONG).show(); } }); } private void addDMStatus(final String Userid) { if (MainSingleTon.autoDmfirstime.contains("yes")) { handler.post(new Runnable() { @Override public void run() { new AlertDialog.Builder(activity).setTitle("Direct Message") .setMessage("A thanks message will be sent to those users. who are following you back!") .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Editor editor = context.getSharedPreferences("twtboardpro", Context.MODE_PRIVATE).edit(); editor.putString("autoDmfirstime", "no"); editor.putBoolean("autodm", true); MainSingleTon.autodm = true; MainSingleTon.autoDmfirstime = "no"; editor.commit(); addDMStatus(Userid); } }).setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { Editor editor = context.getSharedPreferences("twtboardpro", Context.MODE_PRIVATE).edit(); editor.putString("autoDmfirstime", "no"); editor.putBoolean("autodm", false); editor.commit(); MainSingleTon.autoDmfirstime = "no"; MainSingleTon.autodm = false; } }).setIcon(R.drawable.ic_launcher).show(); } }); } else { myprint("Not to diss[ay fvnefisdfnvko nvkjn"); if (MainSingleTon.autodm) { if (sendingids.contains(Userid) || sentIds.contains(Userid)) { } else { tboardproLocalData.addNewDMsendingId(Userid, MainSingleTon.currentUserModel.getUserid()); sendingids.add(Userid); } } else { } } } void showProgress() { handler2.post(new Runnable() { @Override public void run() { progressDialog.show(); } }); } void hideProgress() { handler2.post(new Runnable() { @Override public void run() { progressDialog.cancel(); } }); } public String monthInt(String month) { // System.out.print("Enter month's number: "); int monthNumber; switch (month.toLowerCase()) { case "Jan": monthNumber = 1; break; case "Feb": monthNumber = 2; break; case "Mar": monthNumber = 3; break; case "Apr": monthNumber = 4; break; case "May": monthNumber = 5; break; case "Jun": monthNumber = 6; break; case "Jly": monthNumber = 7; break; case "Aug": monthNumber = 8; break; case "Sep": monthNumber = 9; break; case "Oct": monthNumber = 10; break; case "Nov": monthNumber = 11; break; case "Dec": monthNumber = 12; break; default: monthNumber = 1; break; } if (monthNumber < 10) { return "0" + monthNumber; } else { return "" + monthNumber; } } public String UTCtoLocalPrettyTime(String dateInUtc) { long currentmilis = System.currentTimeMillis(); String twitterFormat = "EEE MMM dd HH:mm:ss zzzz yyyy"; String format = "yyyy/MM/dd HH:mm:ss"; SimpleDateFormat sdf = new SimpleDateFormat(format); SimpleDateFormat sdfTwitterFormat = new SimpleDateFormat(twitterFormat); SimpleDateFormat sdf2sameDay = new SimpleDateFormat("hh:mm a"); SimpleDateFormat sdf2ThisYear = new SimpleDateFormat("dd MMM hh:mm a"); SimpleDateFormat sdf2LAstYear = new SimpleDateFormat("dd MMM yyyy hh:mm a"); Date date = null; long preparedTime = 0; try { date = sdfTwitterFormat.parse(dateInUtc); preparedTime = date.getTime(); // System.out.println("preparedTime " + preparedTime); // System.out.println("currentmilis " + currentmilis); } catch (ParseException e) { e.printStackTrace(); } if (date == null) { return dateInUtc; } else { Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(preparedTime); System.out.println("preparedTime " + preparedTime); System.out.println("currentmilis " + currentmilis); if (preparedTime > currentmilis) { return sdf.format(calendar.getTime()); } else if (preparedTime < currentmilis && preparedTime > (currentmilis - 60000)) { return "Just Now"; } else if (preparedTime < currentmilis && preparedTime > (currentmilis - 60 * 60 * 1000)) { long minsOver = currentmilis - preparedTime; return "" + minsOver / 60000L + " mins ago"; } else if (preparedTime > getMorningStartDayStamp(currentmilis) && preparedTime < currentmilis) { return sdf2sameDay.format(calendar.getTime()); } else if (preparedTime > getYearStartDayStamp(currentmilis)) { return sdf2ThisYear.format(calendar.getTime()); } else { return sdf2LAstYear.format(calendar.getTime()); } } } public static long getMorningStartDayStamp(long originalStamp) { System.out.println("** getMorningStartDayStamp **** "); long morningStamp = 0; Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(originalStamp); String dd, mm, yyyy; dd = "" + calendar.get(Calendar.DAY_OF_MONTH); if (dd.length() == 1) { dd = "0" + dd; } mm = "" + (calendar.get(Calendar.MONTH) + 1); if (mm.length() == 1) { mm = "0" + mm; } yyyy = "" + calendar.get(Calendar.YEAR); String yymmdd = yyyy + "/" + mm + "/" + dd; System.out.println("yymmdd " + yymmdd); String local_time = yymmdd + " 00:00:00"; String format = "yyyy/MM/dd HH:mm:ss"; SimpleDateFormat sdf = new SimpleDateFormat(format); Date date; try { date = sdf.parse(local_time.trim()); // Convert Local Time to UTC (Works Fine) sdf.setTimeZone(TimeZone.getDefault()); Date gmtTime = new Date(sdf.format(date)); morningStamp = gmtTime.getTime(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("morningStamp = " + morningStamp); return morningStamp; } public static long getYearStartDayStamp(long originalStamp) { System.out.println("** getMorningStartDayStamp **** "); long YearStart = 0; Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(originalStamp); String yyyy; yyyy = "" + calendar.get(Calendar.YEAR); String yymmdd = yyyy + "/01/01"; System.out.println("yymmdd " + yymmdd); String local_time = yymmdd + " 00:00:00"; String format = "yyyy/MM/dd HH:mm:ss"; SimpleDateFormat sdf = new SimpleDateFormat(format); Date date; try { date = sdf.parse(local_time.trim()); // Convert Local Time to UTC (Works Fine) sdf.setTimeZone(TimeZone.getDefault()); Date gmtTime = new Date(sdf.format(date)); YearStart = gmtTime.getTime(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("YearStart = " + YearStart); return YearStart; } private static final int SECOND_MILLIS = 1000; private static final int MINUTE_MILLIS = 60 * SECOND_MILLIS; private static final int HOUR_MILLIS = 60 * MINUTE_MILLIS; private static final int DAY_MILLIS = 24 * HOUR_MILLIS; public static String getTimeAgo(long time) { if (time < 1000000000000L) { // if timestamp given in seconds, convert to millis time *= 1000; } long now = System.currentTimeMillis(); if (time > now || time <= 0) { return null; } // TODO: localize final long diff = now - time; if (diff < MINUTE_MILLIS) { return "just now"; } else if (diff < 2 * MINUTE_MILLIS) { return "a minute ago"; } else if (diff < 50 * MINUTE_MILLIS) { return diff / MINUTE_MILLIS + " minutes ago"; } else if (diff < 90 * MINUTE_MILLIS) { return "an hour ago"; } else if (diff < 24 * HOUR_MILLIS) { return diff / HOUR_MILLIS + " hours ago"; } else if (diff < 48 * HOUR_MILLIS) { return "yesterday"; } else { return diff / DAY_MILLIS + " days ago"; } } }