package org.iilab.pb.common;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.text.Html;
import android.text.Spanned;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
public class AppUtil {
public static HashMap<String, Drawable> mImageCache = new HashMap<String, Drawable>();
public static void setError(Context context, EditText editText, int messageId) {
editText.setError(
Html.fromHtml("<font color='red'>"
+ context.getString(messageId)
+ "</font>")
);
}
public static void close(Context context) {
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
setDefaultPackage(context, startMain);
context.startActivity(startMain);
}
private static void setDefaultPackage(Context context, Intent startMain) {
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME);
PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(homeIntent, 0);
if (activities.size() > 0) {
String className = activities.get(0).activityInfo.packageName;
startMain.setPackage(className);
}
}
// public static boolean hasInternet(Context context) {
// ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
// if (connectivity != null){
// NetworkInfo[] info = connectivity.getAllNetworkInfo();
// if (info != null){
// for (int i = 0; i < info.length; i++){
// if (info[i].getState() == NetworkInfo.State.CONNECTED){
// return true;
// }
// }
// }
// }
// return false;
// }
public static String capitalizeString(String str){
if(str == null || str.equals("") || str.length() == 0)
return str;
return (str.substring(0, 1).toUpperCase() + str.substring(1, str.length()));
}
private static Calendar clearTimes(Calendar c) {
c.set(Calendar.HOUR_OF_DAY,0);
c.set(Calendar.MINUTE,0);
c.set(Calendar.SECOND,0);
c.set(Calendar.MILLISECOND,0);
return c;
}
public static Boolean isToday(long millis) {
Calendar today = Calendar.getInstance();
today = clearTimes(today);
if(millis > today.getTimeInMillis())
return true;
return false;
}
//set display metrics of drawable for downloaded image
public static Drawable setDownloadedImageMetrices(Drawable drawable,
DisplayMetrics metrics, double densityRatio, int imageScaleFlag) {
Log.e("AppUtil -> setDownloadedImageMetrices", "density ratio = " + densityRatio + " and metrics =" + metrics);
int width, height;
int originalWidthScaled = (int) (drawable.getIntrinsicWidth()* metrics.density * densityRatio);
int originalHeightScaled = (int) (drawable.getIntrinsicHeight()* metrics.density * densityRatio);
Log.e("AppUtil -> setDownloadedImageMetrices", "originalWidthScaled = " + originalWidthScaled + " and originalHeightScaled = " + originalHeightScaled);
if (imageScaleFlag == AppConstants.IMAGE_FULL_WIDTH) {
height = drawable.getIntrinsicHeight() * metrics.widthPixels / drawable.getIntrinsicWidth();
width = metrics.widthPixels;
} else {
if (originalWidthScaled > metrics.widthPixels) {
height = drawable.getIntrinsicHeight() * metrics.widthPixels / drawable.getIntrinsicWidth();
width = metrics.widthPixels;
} else {
height = originalHeightScaled;
width = originalWidthScaled;
}
}
Log.e("AppUtil -> setDownloadedImageMetrices", "final width = " + width + " and height = " + height);
try {
drawable.setBounds(0, 0, width, height);
Log.e(">>>>>>>>>>>>>>", "image width = " + width + " & height = "+ height);
} catch (Exception ex) {
}
return drawable;
}
//remove all the views of previous activity to clear memory
public static void unbindDrawables(View view) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
//clear background activity
public static Intent clearBackStack(Intent i){
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
return i;
}
//change the behave of device back button to device HomeButton
public static Intent behaveAsHomeButton(){
Intent i = new Intent(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_HOME);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
return i;
}
/*-----This method show Toast.-----*/
public static void showToast(String message, int time,Context context) {
Toast.makeText(context, message, time).show();
}
public static void updateImages(final boolean downloadImages, final String textHtml, final Context context, final DisplayMetrics metrics, final TextView tvContent, final int imageScaleFlag) {
if (textHtml == null) return;
Spanned spanned = Html.fromHtml(textHtml,
new Html.ImageGetter() {
@SuppressWarnings("unchecked")
@Override
public Drawable getDrawable(final String source) {
if(
// !AppUtil.hasInternet(context) &&
downloadImages){
try {
Log.e(">>>>>>>>>>>", "Source = " + source);
Drawable drawable = Drawable.createFromStream(context.getAssets().open(source.substring(1, source.length())), null);
drawable = AppUtil.setDownloadedImageMetrices(drawable, metrics, AppConstants.IMAGE_SCALABILITY_FACTOR * metrics.scaledDensity, imageScaleFlag);
mImageCache.put(source, drawable);
updateImages(false, textHtml, context, metrics, tvContent, imageScaleFlag);
return drawable;
} catch (IOException e) {
Log.e(">>>>>>>>>>>>>>","Failed to load image from asset");
e.printStackTrace();
}
return null;
}
// Log.e(">>>>>>", "image src = " + source);
// Drawable drawable = mImageCache.get(source);
// if (drawable != null) {
// return drawable;
// }
// else if (downloadImages) {
// new ImageDownloader(new ImageDownloader.ImageDownloadListener() {
// @Override
// public void onImageDownloadComplete(byte[] bitmapData) {
// try {
// Drawable drawable = new BitmapDrawable(context.getResources(),
// BitmapFactory.decodeByteArray(bitmapData, 0, bitmapData.length));
//
// drawable = AppUtil.setDownloadedImageMetrices(drawable, metrics, AppConstants.IMAGE_SCALABILITY_FACTOR, imageScaleFlag);
// mImageCache.put(source, drawable);
// updateImages(false, textHtml, context, metrics, tvContent, imageScaleFlag);
// } catch (Exception e) {
// e.printStackTrace();
// Log.e(">>>>>>>>>>>>>>","Failed to download image");
// try {
// Drawable drawable = Drawable.createFromStream(context.getAssets().open(source.substring(1, source.length())), null);
//
// drawable = AppUtil.setDownloadedImageMetrices(drawable, metrics, AppConstants.IMAGE_SCALABILITY_FACTOR * metrics.scaledDensity, imageScaleFlag);
// mImageCache.put(source, drawable);
// updateImages(false, textHtml, context, metrics, tvContent, imageScaleFlag);
// } catch (IOException e1) {
// Log.e(">>>>>>>>>>>>>>","Failed to load image from asset");
// e1.printStackTrace();
// }
// }
// }
//
// @Override
// public void onImageDownloadFailed(Exception ex) {
// Log.e("onImageDownloadFailed", "ImageDownloadFailed");
// try {
// Drawable drawable = Drawable.createFromStream(context.getAssets().open(source.substring(1, source.length())), null);
//
// drawable = AppUtil.setDownloadedImageMetrices(drawable, metrics, AppConstants.IMAGE_SCALABILITY_FACTOR * metrics.scaledDensity, imageScaleFlag);
// mImageCache.put(source, drawable);
// updateImages(false, textHtml, context, metrics, tvContent, imageScaleFlag);
// } catch (IOException e1) {
// Log.e(">>>>>>>>>>>>>>","Failed to load image from asset");
// e1.printStackTrace();
// }
// }
// }).execute(source);
// }
return null;
}
}, new MyTagHandler());
tvContent.setText(spanned);
}
}