/* * Sonet - Android Social Networking Widget * Copyright (C) 2009 Bryan Emmanuel * * This program 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. * * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. * * Bryan Emmanuel piusvelte@gmail.com */ package com.piusvelte.sonet; import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.ContentValues; import android.content.Context; import android.content.res.Resources; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import com.piusvelte.sonet.provider.Widgets; import java.util.Calendar; import java.util.TimeZone; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Sonet { private static final String TAG = "Sonet"; protected static final String PRO = "pro"; public static final String Saccess_token = "access_token"; public static final String Sexpires_in = "expires_in"; public static final String ACTION_REFRESH = "com.piusvelte.sonet.Sonet.REFRESH"; public static final String ACTION_UPLOAD = "com.piusvelte.sonet.Sonet.UPLOAD"; protected static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; public static final String EXTRA_ACCOUNT_ID = "com.piusvelte.sonet.Sonet.ACCOUNT_ID"; public static final long INVALID_ACCOUNT_ID = -1; public static final int RESULT_REFRESH = 1; public static int NOTIFY_ID = 1; public static final int TWITTER = 0; public static final int FACEBOOK = 1; public static final int MYSPACE = 2; public static final int BUZZ = 3; public static final int FOURSQUARE = 4; public static final int LINKEDIN = 5; public static final int SMS = 6; public static final int RSS = 7; public static final int IDENTICA = 8; public static final int GOOGLEPLUS = 9; public static final int PINTEREST = 10; public static final int CHATTER = 11; protected static final String AM = "a.m."; protected static final String PM = "p.m."; protected static final String[] MONTHS = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; public static final String Sid = "id"; public static final String Sname = "name"; public static final String Suser = "user"; public static final String Screated_at = "created_at"; public static final String Sprofile_image_url = "profile_image_url"; public static final String Stext = "text"; public static final String Sdata = "data"; public static final String Screated_time = "created_time"; public static final String Sfrom = "from"; public static final String Stype = "type"; public static final String Smessage = "message"; public static final String Sto = "to"; public static final String Slink = "link"; public static final String Sstatus = "status"; public static final String Scomment = "comment"; public static final String Scomments = "comments"; public static final String Sperson = "person"; public static final String Svalues = "values"; public static final String SupdateComments = "updateComments"; public static final String SupdateKey = "updateKey"; public static final String Stimestamp = "timestamp"; public static final String ScurrentShare = "currentShare"; public static final String SupdateType = "updateType"; public static final String SupdateContent = "updateContent"; public static final String SpersonActivities = "personActivities"; public static final String Sconnections = "connections"; public static final String S_total = "_total"; public static final String Svenue = "venue"; public static final String Srecent = "recent"; public static final String SrecommendationsGiven = "recommendationsGiven"; public static final String Sjob = "job"; public static final String Sposition = "position"; public static final String SmemberGroups = "memberGroups"; public static final String Sauthor = "author"; public static final String Sentry = "entry"; public static final String SpostedDate = "postedDate"; public static final String SdisplayName = "displayName"; public static final String Sphoto = "photo"; public static final String SsmallPhotoUrl = "smallPhotoUrl"; public static final String SmoodStatusLastUpdated = "moodStatusLastUpdated"; public static final String SthumbnailUrl = "thumbnailUrl"; public static final String SrecentComments = "recentComments"; public static final String SuserId = "userId"; public static final String SstatusId = "statusId"; public static final String Sitem = "item"; public static final String Sitems = "items"; public static final String Sobject = "object"; public static final String Spublished = "published"; public static final String Sinstance_url = "instance_url"; public static final String Scontent = "content"; public static final String SoriginalContent = "originalContent"; public static final String Sreplies = "replies"; public static final String Simage = "image"; public static final String Surl = "url"; public static final String Sactor = "actor"; public static final String StotalItems = "totalItems"; public static final String ScreatedDate = "createdDate"; public static final String Sbody = "body"; public static final String Stotal = "total"; public static final String ScreatedAt = "createdAt"; public static final String SfirstName = "firstName"; public static final String SlastName = "lastName"; public static final String Sresponse = "response"; public static final String Scheckin = "checkin"; public static final String Sshout = "shout"; public static final String Stitle = "title"; public static final String Sdescription = "description"; public static final String Spubdate = "pubdate"; public static final String SpictureUrl = "pictureUrl"; public static final String SisCommentable = "isCommentable"; public static final String SrecommendationSnippet = "recommendationSnippet"; public static final String Srecommendee = "recommendee"; public static final String Sscreen_name = "screen_name"; public static final String Sin_reply_to_status_id = "in_reply_to_status_id"; public static final String Suser_likes = "user_likes"; public static final String ScommentId = "commentId"; public static final String Sgroups = "groups"; public static final String SNearby = "Nearby"; public static final String Splaces = "places"; public static final String Sresult = "result"; public static final String Sfull_name = "full_name"; public static final String Ssource = "source"; public static final String Sstory = "story"; public static final String Smobile = "mobile"; public static final String Simage_url = "image_url"; public static final String Scounts = "counts"; public static final String Simages = "images"; public static final String Susername = "username"; public static final String Spicture = "picture"; public static final String Sboard = "board"; public static final String Simgur = "i.imgur.com"; public static final String Splace = "place"; public static final String Stags = "tags"; private static final String POWER_SERVICE = Context.POWER_SERVICE; private static WakeLock sWakeLock; static boolean hasLock() { return (sWakeLock != null); } public static void acquire(Context context) { if (hasLock()) sWakeLock.release(); PowerManager pm = (PowerManager) context.getSystemService(POWER_SERVICE); sWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); sWakeLock.acquire(); } public static void release() { if (hasLock()) { sWakeLock.release(); sWakeLock = null; } } public static final int INVALID_SERVICE = -1; public static final int default_interval = 3600000; public static final int default_statuses_per_account = 10; public static final boolean default_time24hr = false; public static final boolean default_backgroundUpdate = true; public static final boolean default_sound = false; public static final boolean default_vibrate = false; public static final boolean default_lights = false; public static final boolean default_instantUpload = false; private Sonet() { // not instantiable } public static final String getAuthority(Context context) { return !context.getPackageName().toLowerCase().contains(PRO) ? SonetProvider.AUTHORITY : SonetProvider.PRO_AUTHORITY; } public static final TimeZone sTimeZone = TimeZone.getTimeZone("GMT"); public static final String[] sRFC822 = { "EEE, d MMM yy HH:mm:ss z", "EEE, d MMM yy HH:mm z", "EEE, d MMM yyyy HH:mm:ss z", "EEE, d MMM yyyy " + "HH:mm z", "d MMM yy HH:mm z", "d MMM yy HH:mm:ss z", "d MMM yyyy HH:mm z", "d MMM yyyy HH:mm:ss z" }; public static String getCreatedText(long epoch, boolean time24hr) { Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(epoch); Calendar todayCal = Calendar.getInstance(); todayCal.setTimeInMillis(System.currentTimeMillis()); int hours = calendar.get(Calendar.HOUR_OF_DAY); // check if the date is from the same day if ((calendar.get(Calendar.ERA) == todayCal.get(Calendar.ERA)) && (calendar.get(Calendar.YEAR) == todayCal.get(Calendar.YEAR)) && (calendar .get(Calendar.DAY_OF_YEAR) == todayCal.get(Calendar.DAY_OF_YEAR))) { if (time24hr) { return String.format("%d:%02d", hours, calendar.get(Calendar.MINUTE)); } else { // set am/pm if (hours == 0) { return String.format("%d:%02d%s", 12, calendar.get(Calendar.MINUTE), Sonet.AM); } else if (hours < 12) { return String.format("%d:%02d%s", hours, calendar.get(Calendar.MINUTE), Sonet.AM); } else if (hours == 12) { return String.format("%d:%02d%s", hours, calendar.get(Calendar.MINUTE), Sonet.PM); } else { return String.format("%d:%02d%s", hours - 12, calendar.get(Calendar.MINUTE), Sonet.PM); } } } else { return String.format("%s %d", Sonet.MONTHS[calendar.get(Calendar.MONTH)], calendar.get(Calendar.DATE)); } } public static int[] getWidgets(Context context, AppWidgetManager awm) { int[] widgets = new int[0]; Class[] clazzes = new Class[] { SonetWidget_2x2.class, SonetWidget_2x3.class, SonetWidget_2x4.class, SonetWidget_4x2.class, SonetWidget_4x3 .class, SonetWidget_4x4.class }; for (Class clazz : clazzes) { widgets = Sonet.arrayCat(widgets, awm.getAppWidgetIds(new ComponentName(context, clazz))); } return widgets; } public static String getServiceName(Resources r, int service) { String[] entries = r.getStringArray(R.array.service_entries); String[] values = r.getStringArray(R.array.service_values); for (int i = 0, l = values.length; i < l; i++) { if (Integer.toString(service).equals(values[i])) { return entries[i]; } } return null; } public static int[] arrayCat(int[] a, int[] b) { int[] c; for (int i = 0, i2 = b.length; i < i2; i++) { int cLen = a.length; c = new int[cLen]; for (int n = 0; n < cLen; n++) { c[n] = a[n]; } a = new int[cLen + 1]; for (int n = 0; n < cLen; n++) { a[n] = c[n]; } a[cLen] = b[i]; } return a; } public static boolean arrayContains(int[] a, int b) { for (int c : a) { if (c == b) { return true; } } return false; } public static boolean HasValues(String[] values) { if (values != null) { for (String value : values) { if (value == null) { return false; } } return true; } return false; } public static Matcher getLinksMatcher(String raw) { return Pattern.compile("\\bhttp(s)?://\\S+\\b", Pattern.CASE_INSENSITIVE).matcher(raw); } public static String initAccountSettings(Context context, int widget, long account) { ContentValues values = new ContentValues(); values.put(Widgets.WIDGET, widget); values.put(Widgets.ACCOUNT, account); return context.getContentResolver().insert(Widgets.getContentUri(context), values).getLastPathSegment(); } }