package com.lib.base.utils;

import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.telephony.TelephonyManager;
import android.text.TextUtils;

import com.lib.base.log.KLog;

import java.util.List;

/**
 * App帮助类
 */
public class AppUtil
{
    /**
     * 获取包名
     */
    public static String getMyPackageName(Context context)
    {
        return context.getPackageName();
    }

    /**
     * * 获取应用版本号(用于系统识别)
     * * @return 当前应用的版本号
     */
    public static int getAppVersionCode(Context context)
    {
        try
        {
            PackageManager manager = context.getPackageManager();
            PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
            return info.versionCode;
        } catch (Exception e)
        {
            e.printStackTrace();
            return 0;
        }
    }

    /**
     * * 获取应用版本名称(用于用户识别)
     * * @return 当前应用的版本名称
     */
    public static String getAppVersionName(Context context)
    {
        try
        {
            PackageManager manager = context.getPackageManager();
            PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
            return info.versionName;
        } catch (Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 获取系统版本号
     */
    public static int getAndroidSDKVersion()
    {
        int version = 0;
        try
        {
            version = Integer.valueOf(Build.VERSION.SDK);
        } catch (NumberFormatException e)
        {
            KLog.e(e.toString());
        }
        return version;
    }

    /**
     * 获取应用程序最大可用内存
     *
     * @return
     */
    public static int getMaxMemory()
    {
        return (int) Runtime.getRuntime().maxMemory();
    }

    /**
     * 获取设备唯一识别码
     *
     * @param context
     * @return
     */
    public static String getDeviceId(Context context)
    {
        return ((TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId();
    }

    /**
     * 判断当前程序是否正在运行
     */
    public static boolean isProcessRunning(Context context)
    {
        if (context == null)
            return false;

        String processName = getMyPackageName(context);
        int pid = android.os.Process.myPid();
        ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningAppProcessInfo> processInfoList = manager.getRunningAppProcesses();
        if (processInfoList == null || processInfoList.size() == 0)
        {
            return false;
        }

        for (ActivityManager.RunningAppProcessInfo processInfo : processInfoList)
        {
            if (processInfo != null && processInfo.pid == pid
                    && ObjectUtils.isEquals(processName, processInfo.processName))
            {
                return true;
            }
        }
        return false;
    }

    /**
     * 检查当前程序是否处于后台,需要权限android.permission.GET_TASKS
     */
    public static boolean isApplicationInBackground(Context context)
    {
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> taskList = am.getRunningTasks(1);
        if (taskList != null && !taskList.isEmpty())
        {
            ComponentName topActivity = taskList.get(0).topActivity;
            if (topActivity != null && !topActivity.getPackageName().equals(context.getPackageName()))
            {
                return true;
            }
        }
        return false;
    }

    /**
     * 判断某个界面是否在前台
     *
     * @param context
     * @param className 某个界面名称
     */
    public static boolean isForeground(Context context, String className)
    {
        if (context == null || TextUtils.isEmpty(className))
        {
            return false;
        }

        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(1);
        if (list != null && list.size() > 0)
        {
            ComponentName cpn = list.get(0).topActivity;
            if (className.equals(cpn.getClassName()))
            {
                return true;
            }
        }
        return false;
    }
}