/******************************************************************************* * Copyright 2011, 2012, 2013 fanfou.com, Xiaoke, Zhang * * 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.fanfou.app.opensource.util; import java.io.File; import java.util.Collection; import java.util.List; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.RunningServiceInfo; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.database.Cursor; import android.net.Uri; import android.text.TextUtils; import android.util.Log; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.webkit.MimeTypeMap; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.Toast; import com.fanfou.app.opensource.AppContext; import com.fanfou.app.opensource.PhotoViewPage; import com.fanfou.app.opensource.R; import com.fanfou.app.opensource.SendPage; import com.fanfou.app.opensource.StatusPage; import com.fanfou.app.opensource.api.bean.DirectMessage; import com.fanfou.app.opensource.api.bean.Status; import com.fanfou.app.opensource.http.ResponseCode; import com.fanfou.app.opensource.service.Constants; /** * 网络连接包需要用到的一些静态工具函数 * * @author mcxiaoke * @version 1.0 2011.06.01 * @version 2.0 2011.09.10 * @version 3.0 2011.09.28 * @version 3.5 2011.10.28 * @version 3.6 2011.12.26 * */ public final class CommonHelper { private static final String TAG = "Utils"; public static void checkErrorCode(final Activity context, final int errorCode, final String errorMessage) { if ((errorCode == ResponseCode.HTTP_UNAUTHORIZED) || (errorCode == ResponseCode.HTTP_BAD_REQUEST)) { ToastHelper.showAuthorizationErrorToast(context, context.getString(R.string.msg_authorization_error)); } else { ToastHelper.showErrorToast(context, errorMessage); } } public static ProgressBar createProgress(final Context context) { final ProgressBar p = new ProgressBar(context); p.setIndeterminate(true); final RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams( 40, 40); lp.addRule(RelativeLayout.CENTER_IN_PARENT); p.setLayoutParams(lp); return p; } public static float easeOut(float time, final float start, final float end, final float duration) { return (end * (((time = (time / duration) - 1) * time * time) + 1)) + start; } public static String getDmMaxId(final Cursor c) { if ((c != null) && c.moveToLast()) { final DirectMessage last = DirectMessage.parse(c); if (last != null) { if (AppContext.DEBUG) { Log.d(CommonHelper.TAG, "getDmMaxId() id=" + last.id); } return last.id; } } return null; } public static String getDmSinceId(final Cursor c) { if ((c != null) && c.moveToFirst()) { final DirectMessage first = DirectMessage.parse(c); if (first != null) { if (AppContext.DEBUG) { Log.d(CommonHelper.TAG, "getDmSinceId() id=" + first.id); } return first.id; } } return null; } public static String getExtension(final String filename) { final String filenameArray[] = filename.split("\\."); return filenameArray[filenameArray.length - 1].toLowerCase(); } /** * 获取MaxId * * @param c * @return */ public static String getMaxId(final Cursor c) { if ((c != null) && c.moveToLast()) { final Status first = Status.parse(c); if (first != null) { if (AppContext.DEBUG) { Log.d(CommonHelper.TAG, "getMaxId() id=" + first.id); } return first.id; } } return null; } /** * 获取SinceId * * @param c * @return */ public static String getSinceId(final Cursor c) { if ((c != null) && c.moveToFirst()) { final Status first = Status.parse(c); if (first != null) { if (AppContext.DEBUG) { Log.d(CommonHelper.TAG, "getSinceId() id=" + first.id); } return first.id; } } return null; } public static void goMessageChatPage(final Context context, final Cursor c) { if (c != null) { final DirectMessage dm = DirectMessage.parse(c); if (dm != null) { final Intent intent = new Intent(context, SendPage.class); intent.putExtra(Constants.EXTRA_ID, dm.senderId); intent.putExtra(Constants.EXTRA_USER_NAME, dm.senderScreenName); context.startActivity(intent); } } } public static void goPhotoViewPage(final Context context, final String photoUrl) { final Intent intent = new Intent(context, PhotoViewPage.class); intent.putExtra(Constants.EXTRA_URL, photoUrl); context.startActivity(intent); } public static void goStatusPage(final Context context, final Status s) { if (s != null) { final Intent intent = new Intent(context, StatusPage.class); intent.putExtra(Constants.EXTRA_DATA, s); context.startActivity(intent); } } public static void goStatusPage(final Context context, final String id) { if (!StringHelper.isEmpty(id)) { final Intent intent = new Intent(context, StatusPage.class); intent.putExtra(Constants.EXTRA_ID, id); context.startActivity(intent); } } public static void hideKeyboard(final Context context, final EditText input) { final InputMethodManager imm = (InputMethodManager) context .getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(input.getWindowToken(), 0); } public static void initScreenConfig(final Activity context) { final boolean portrait = OptionHelper.readBoolean(context, R.string.option_force_portrait, false); if (portrait) { context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } } /** * @param c * 集合 * @return 判断集合对象是否为空 */ public static boolean isEmpty(final Collection<?> c) { return (c == null) || (c.size() == 0); } public static boolean isEmpty(final String str) { return (str == null) || str.equals(""); } /** * Checks whether the recording service is currently running. * * @param ctx * the current context * @return true if the service is running, false otherwise */ public static boolean isServiceRunning(final Context ctx, final Class<?> cls) { final ActivityManager activityManager = (ActivityManager) ctx .getSystemService(Context.ACTIVITY_SERVICE); final List<RunningServiceInfo> services = activityManager .getRunningServices(Integer.MAX_VALUE); for (final RunningServiceInfo serviceInfo : services) { final ComponentName componentName = serviceInfo.service; final String serviceName = componentName.getClassName(); if (serviceName.equals(cls.getName())) { return true; } } return false; } public static void lockScreenOrientation(final Activity context) { final boolean portrait = OptionHelper.readBoolean(context, R.string.option_force_portrait, false); if (portrait) { context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else { if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } } } public static void logTime(final String event, final long time) { Log.e("Timer", event + " use time: " + time); } public static void notify(final Context context, final CharSequence text) { if (TextUtils.isEmpty(text)) { return; } if (AppContext.active) { Toast.makeText(context, text, Toast.LENGTH_SHORT).show(); } } public static void notify(final Context context, final int resId) { if (AppContext.active) { Toast.makeText(context, context.getText(resId), Toast.LENGTH_SHORT) .show(); } } public static void open(final Context context, final String fileName) { final String mimeType = MimeTypeMap.getSingleton() .getMimeTypeFromExtension(CommonHelper.getExtension(fileName)); if (mimeType != null) { final Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(fileName)), mimeType); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } } public static void setFullScreen(final Activity activity, final boolean fullscreen) { if (fullscreen) { activity.getWindow().addFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN); activity.getWindow().clearFlags( WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); } else { activity.getWindow().addFlags( WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); activity.getWindow().clearFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN); } } public static void setPortraitOrientation(final Activity activity, final boolean portrait) { if (portrait) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); } } public static void unlockScreenOrientation(final Activity context) { final boolean portrait = OptionHelper.readBoolean(context, R.string.option_force_portrait, false); if (!portrait) { context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); } } }