package org.mots.haxsync.utilities;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;
import android.os.Build;
import org.mots.haxsync.R;
import org.mots.haxsync.activities.WelcomeActivity;
import org.mots.haxsync.activities.WorkaroundConfirmation;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.graphics.BitmapFactory;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.BatteryManager;
import android.util.Log;
public class DeviceUtil {
public static boolean isOnline(Context c) {
ConnectivityManager connectionManager = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectionManager.getActiveNetworkInfo() != null && connectionManager.getActiveNetworkInfo().isConnected()){
try {
InetAddress addr = InetAddress.getByName("graph.facebook.com");
addr = InetAddress.getByName("api.facebook.com");
} catch (UnknownHostException e) {
return false;
}
return true;
}
return false;
}
public static boolean isWifi(Context c){
ConnectivityManager cm = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = null;
if (cm != null) {
networkInfo = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
}
return networkInfo != null && networkInfo.isConnected();
}
public static boolean isCharging(Context context){
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);
// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
return (status == BatteryManager.BATTERY_STATUS_CHARGING) || (status == BatteryManager.BATTERY_STATUS_FULL);
}
public static boolean hasAccount(Context context){
AccountManager am = AccountManager.get(context);
return (am.getAccountsByType("org.mots.haxsync.account").length > 0);
}
public static boolean needsWorkaround(Context context){
//workaround is required on 4.1 and all samsung devices <4.3
if(android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR1){
return false;
}
if ((android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN)
&& (android.os.Build.VERSION.SDK_INT < 15 || Build.MANUFACTURER.toLowerCase().contains("samsung"))
&& (android.os.Build.VERSION.SDK_INT < 15 || Build.MODEL.toLowerCase().contains("maxx"))){
SharedPreferences prefs = context.getSharedPreferences(context.getPackageName() + "_preferences", Activity.MODE_MULTI_PROCESS);
if (!prefs.getBoolean("workaround_ignore", false)){
try
{
context.getPackageManager().getApplicationInfo("com.haxsync.facebook.workaround", 0);
}catch (PackageManager.NameNotFoundException e){
return true;
}
}
}
return false;
}
public static Account getAccount(Context c){
AccountManager am = AccountManager.get(c);
Account[] accounts = am.getAccountsByType(c.getString(R.string.ACCOUNT_TYPE));
if (accounts.length == 0)
return null;
return accounts[0];
}
public static void toggleWizard(Context c, boolean display){
PackageManager pm = c.getPackageManager();
pm.setComponentEnabledSetting(new ComponentName(c, WelcomeActivity.class), display ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
public static boolean isWizardShown(Context c){
PackageManager pm = c.getPackageManager();
return (pm.getComponentEnabledSetting(new ComponentName(c, WelcomeActivity.class)) != PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
}
@SuppressLint("NewApi")
public static void showJellyBeanNotification(Context context){
if (needsWorkaround(context)){
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.haxsync.facebook.workaround"));
Intent cancelIntent = new Intent(context, WorkaroundConfirmation.class);
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
PendingIntent cancelContentIntent = PendingIntent.getActivity(context, 1, cancelIntent, PendingIntent.FLAG_CANCEL_CURRENT);
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Resources res = context.getResources();
Notification.Builder builder = new Notification.Builder(context);
builder.setContentIntent(contentIntent)
.setSmallIcon(android.R.drawable.stat_notify_more)
.setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.icon))
.setTicker(res.getString(R.string.jb_warning_ticker))
.setWhen(System.currentTimeMillis())
.setAutoCancel(true)
.setContentTitle(res.getString(R.string.jb_warning_title))
.setContentText(res.getString(R.string.jb_warning_description))
.addAction(android.R.drawable.ic_menu_info_details, context.getString(android.R.string.yes), contentIntent)
.addAction(android.R.drawable.ic_menu_close_clear_cancel, context.getString(android.R.string.no), cancelContentIntent);
Notification n = new Notification.BigTextStyle(builder).bigText(context.getString(R.string.workaround_description)).build();
nm.notify(1, n);
}
}
public static String saveBytes(byte[] file, File dir){
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(dir, "photo.png")));
bos.write(file);
bos.flush();
bos.close();
} catch (Exception e) {
return null;
}
return dir.getAbsolutePath()+"/photo.png";
}
public static boolean isCallable(Context c, Intent intent1) {
List<ResolveInfo> list = c.getPackageManager().queryIntentActivities(intent1,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
public static boolean isTouchWiz(Context c){
PackageManager pm = c.getPackageManager();
try{
pm.getPackageInfo("com.sec.android.app.twlauncher", 0);
} catch (PackageManager.NameNotFoundException e){
try {
pm.getPackageInfo("com.sec.android.app.launcher", 0);
} catch (PackageManager.NameNotFoundException y){
try {
pm.getPackageInfo("com.sec.android.app.samsungapps", 0);
} catch (PackageManager.NameNotFoundException x){
return false;
}
}
}
return true;
}
public static boolean isSense(Context c){
PackageManager pm = c.getPackageManager();
try{
pm.getPackageInfo("com.htc", 0);
} catch (PackageManager.NameNotFoundException e){
return false;
}
return true;
}
public static void log(Context c, String tag, String message){
SharedPreferences prefs = c.getSharedPreferences(c.getPackageName() + "_preferences", Context.MODE_MULTI_PROCESS);
if (prefs.getBoolean("debug_logging", false))
Log.i(tag, message);
}
}