/* * Copyright (C) 2012 lytsing.org * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.daifan.util; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.os.Environment; import android.text.Spannable; import android.text.style.ForegroundColorSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.TimeZone; public class Util { private static Map<String, SimpleDateFormat> formatMap = new HashMap<String, SimpleDateFormat>(); public static Date parseDate(String str) { String format = "yyyy-MM-dd HH:mm:ss"; if (str == null || "".equals(str)) { return null; } SimpleDateFormat sdf = formatMap.get(format); if (null == sdf) { sdf = new SimpleDateFormat(format, Locale.CHINA); formatMap.put(format, sdf); } synchronized (sdf) { // SimpleDateFormat is not thread safe try { return sdf.parse(str); } catch (ParseException e) { Log.e("Unexpected format(" + str + ") returned from sina.com.cn"); } } return null; } public static String getNowLocaleTime() { Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(date); } /** * needLoadMore * * @param scrollPosition * @param loadedCount * @param totalCount * @return */ public static boolean needLoadMore(long scrollPosition, long loadedCount, long totalCount) { if (scrollPosition > 0) { if (scrollPosition + 3 >= loadedCount && loadedCount < totalCount) { return true; } } return false; } /** * Inflate a new view hierarchy from the specified XML resource. * * @param resource ID for an XML layout resource to load (e.g., * <code>R.layout.asset_info_section_header</code>) * @param context The current context. * @return The root View of the inflated XML file. */ public static View inflateView(int resource, Context context) { return inflateView(resource, context, null); } /** * Inflate a new view hierarchy from the specified xml resource. * * @param resource for an XML layout resource to load (e.g., * @param context The current context. * @param parent simply an object that provides a set of LayoutParams * values for root of the returned hierarchy * @return The root View of the inflated XML file. */ public static View inflateView(int resource, Context context, ViewGroup parent) { LayoutInflater vi = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); return vi.inflate(resource, parent, false); } public static void textHighlight2(TextView textView, String start, String end) { Spannable sp = (Spannable) textView.getText(); String text = textView.getText().toString(); int n = 0; int s = -1; int e = -1; while (n < text.length()) { s = text.indexOf(start, n); if (s != -1) { e = text.indexOf(end, s + start.length()); if (e != -1) { e = e + end.length(); } else { e = text.length(); } n = e; // ics android blue color // see http://developer.android.com/design/style/color.html sp.setSpan(new ForegroundColorSpan(Color.rgb(0x33, 0xB5, 0xE5)), s, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); s = e = -1; } else { n = text.length(); } } } public static void textHighlight(TextView textView, String start, String end) { Spannable sp = (Spannable) textView.getText(); String text = textView.getText().toString(); int n = 0; int s = -1; int e = -1; while (n < text.length()) { s = text.indexOf(start, n); if (s != -1) { e = text.indexOf(end, s + start.length()); if (e != -1) { e = e + end.length(); } else { e = text.length(); } n = e; // ics android blue color // see http://developer.android.com/design/style/color.html sp.setSpan(new ForegroundColorSpan(Color.rgb(0x33, 0xB5, 0xE5)), s, e, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); s = e = -1; } else { n = text.length(); } } } static private String getUpdateInfoFilename() { return Environment.getExternalStorageDirectory().toString() + "/weibo.json"; } static public boolean writeUpdateInfo(String msg) { String fileName = getUpdateInfoFilename(); File f = new File(fileName); try { if (f.exists()) { f.delete(); } f.createNewFile(); FileOutputStream stream = new FileOutputStream(f); stream.write(msg.getBytes()); stream.flush(); stream.close(); return true; } catch (IOException ex) { Log.e("writeUpdateInfo()" + ex); return false; } } public static void showToast(final Activity activity, final String content) { activity.runOnUiThread(new Runnable() { @Override public void run() { Toast toast = Toast.makeText(activity, content, Toast.LENGTH_SHORT); toast.show(); } }); } public static void showToast(final Activity activity, final int resId) { activity.runOnUiThread(new Runnable() { @Override public void run() { Toast toast = Toast.makeText(activity, activity.getString(resId), Toast.LENGTH_SHORT); toast.show(); } }); } protected static void setTextViewContent(final Activity activity, final TextView textView, final String content) { activity.runOnUiThread(new Runnable() { @Override public void run() { if (textView != null) { textView.setText(content); } } }); } }