package com.android.nebulasdk; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.text.TextUtils; import com.android.SharePreUtils; import com.android.database.DaoManager; import com.android.database.lib.AdsInfoBean; import com.android.database.lib.AppBean; import com.android.database.lib.DownLoadTaskBean; import com.android.database.lib.LocalAppBean; import com.android.database.lib.MusicAppBean; import com.android.database.lib.NetShortAppBean; import com.android.database.lib.RecommendAppBean; import com.android.database.lib.ShortAppBean; import com.android.database.lib.VideoAppBean; import com.android.eventbaus.EventBusUtils; import com.android.eventbaus.MessageEvent; import com.android.nebulasdk.bean.FavNaviBean; import com.android.util.FileUtil; import com.android.util.GsonUtil; import com.android.util.LogUtils; import com.android.util.PakageInstallUtil; import com.android.util.SharedPreferencesUtil; import org.json.JSONArray; import org.json.JSONObject; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; public class AppManager { private Context mContext; private static AppManager mInstance=null; public static final int CATEGORY_MUSIC=0x00; public static final int CATEGORY_RECOMMEND=0x01; public static final int CATEGORY_VIDEO=0x02; public static final int CATEGORY_LOCAL=0x03; public static final int CATEGORY_MYAPPS=0x04; public static final int CATEGORY_SHORT=0x05; /**快捷栏数量*/ public static final int SHORT_COUNT=16; private static final String SHORTAPP_ONFIG="/system/MXQRES/mxq_config.json"; private static final String ICON_ASSERT_DIR="/system/MXQRES/"; //主界面图标0 public static final String ICON_00_TAG="icon_00.png"; //主界面图标1 public static final String ICON_01_TAG="icon_01.png"; //主界面图标2 public static final String ICON_02_TAG="icon_02.png"; //主界面图标3 public static final String ICON_03_TAG="icon_03.png"; //主界面图标4 public static final String ICON_04_TAG="icon_04.png"; /**主界面推荐数据*/ private Map favRecommendCacheData = new HashMap<>(); private AppManager(Context context){ this.mContext = context; DaoManager.initeDao(mContext); LogUtils.loge("AppManager init"); } public static void init(Context context){ if(mInstance==null){ mInstance = new AppManager(context); } } public static AppManager getInstance(){ return mInstance; } public List getmyAppByCategory(){ return DaoManager.getInstance().queryList(AppBean.class); } public List getVideoAppByCategory(){ return DaoManager.getInstance().queryList(VideoAppBean.class); } public List getMusicAppByCategory(){ return DaoManager.getInstance().queryList(MusicAppBean.class); } public List getRecommendAppByCategory(){ return DaoManager.getInstance().queryList(RecommendAppBean.class); } public List getLocalAppBeanAppByCategory(){ return DaoManager.getInstance().queryList(LocalAppBean.class); } public List getShortAppBeanAppByCategory(){ List shortAppBeanList = DaoManager.getInstance().queryList(ShortAppBean.class); List netShortAppBeanList = DaoManager.getInstance().queryList(NetShortAppBean.class); Map filterAppBeanMap =new HashMap<>(); int netShortStartIndex=0; for (NetShortAppBean netShortAppBean:netShortAppBeanList){ if(filterAppBeanMap.size() newShortAppBeanList = new ArrayList<>(); Iterator it= filterAppBeanMap.keySet().iterator(); while (it.hasNext()){ newShortAppBeanList.add(filterAppBeanMap.get(it.next())); } LogUtils.loge("newShortAppBeanList222222 :"+GsonUtil.GsonString(newShortAppBeanList)); return filterApps(newShortAppBeanList); } /**过滤出已安装的app*/ private List filterApps(List shortAppBeanList){ List shortAppBeanLists= new ArrayList<>(); if(shortAppBeanList!=null){ for (ShortAppBean shortAppBean:shortAppBeanList){ if(PakageInstallUtil.checkAppInstall(mContext, shortAppBean.getPackageName())){ shortAppBeanLists.add(shortAppBean); } } } Collections.sort(shortAppBeanLists, new Comparator() { @Override public int compare(ShortAppBean o1, ShortAppBean o2) { //按升序排序 return Integer.compare(o1.getIndex(), o2.getIndex()); } }); LogUtils.loge("newShortAppBeanList333333 :"+GsonUtil.GsonString(shortAppBeanLists)); return shortAppBeanLists; } public void selectAppByCategory(AppBean appBean,int category){ LogUtils.loge("collect app package name is "+appBean.getPackageName()); if(CATEGORY_VIDEO ==category){ if(appBean.getSelect()==1) { VideoAppBean videoAppBean = new VideoAppBean(); videoAppBean.setAppName(appBean.getAppName()); videoAppBean.setPackageName(appBean.getPackageName()); videoAppBean.setCategory(CATEGORY_VIDEO); videoAppBean.setItemType(1); DaoManager.getInstance().insert(VideoAppBean.class, videoAppBean); }else { List appBeanList = DaoManager.getInstance().queryByKeyList(VideoAppBean.class,"packageName",appBean.getPackageName()); DaoManager.getInstance().deleteByList(VideoAppBean.class,appBeanList); } }else if(CATEGORY_MUSIC ==category){ if(appBean.getSelect()==1) { MusicAppBean musicAppBean = new MusicAppBean(); musicAppBean.setAppName(appBean.getAppName()); musicAppBean.setPackageName(appBean.getPackageName()); musicAppBean.setCategory(CATEGORY_MUSIC); musicAppBean.setItemType(1); DaoManager.getInstance().insert(MusicAppBean.class, musicAppBean); }else { List appBeanList = DaoManager.getInstance().queryByKeyList(MusicAppBean.class,"packageName",appBean.getPackageName()); DaoManager.getInstance().deleteByList(MusicAppBean.class,appBeanList); } }else if(CATEGORY_RECOMMEND ==category){ if(appBean.getSelect()==1) { LogUtils.loge("no query app info by package name"); RecommendAppBean recommendAppBean = new RecommendAppBean(); recommendAppBean.setAppName(appBean.getAppName()); recommendAppBean.setPackageName(appBean.getPackageName()); recommendAppBean.setCategory(CATEGORY_VIDEO); recommendAppBean.setItemType(1); DaoManager.getInstance().insert(RecommendAppBean.class, recommendAppBean); }else { List appBeanList = DaoManager.getInstance().queryByKeyList(RecommendAppBean.class,"packageName",appBean.getPackageName()); DaoManager.getInstance().deleteByList(RecommendAppBean.class,appBeanList); } }else if(CATEGORY_LOCAL ==category){ if(appBean.getSelect()==1) { LocalAppBean localAppBean = new LocalAppBean(); localAppBean.setAppName(appBean.getAppName()); localAppBean.setPackageName(appBean.getPackageName()); localAppBean.setCategory(CATEGORY_VIDEO); localAppBean.setItemType(1); DaoManager.getInstance().insert(LocalAppBean.class, localAppBean); }else { //del List appBeanList = DaoManager.getInstance().queryByKeyList(LocalAppBean.class,"packageName",appBean.getPackageName()); DaoManager.getInstance().deleteByList(LocalAppBean.class,appBeanList); } }else if(CATEGORY_SHORT ==category){ if(appBean.getSelect()==1){ LogUtils.loge("CATEGORY_SHORT insert:"); ShortAppBean shortAppBean = new ShortAppBean(); shortAppBean.setAppName(appBean.getAppName()); shortAppBean.setPackageName(appBean.getPackageName()); shortAppBean.setCategory(CATEGORY_SHORT); shortAppBean.setItemType(1); DaoManager.getInstance().insert(ShortAppBean.class,shortAppBean); }else { LogUtils.loge("CATEGORY_SHORT deleteByList:"); List appBeanList = DaoManager.getInstance().queryByKeyList(ShortAppBean.class,"packageName",appBean.getPackageName()); if(appBeanList!=null&&appBeanList.size()>0) { DaoManager.getInstance().deleteByList(ShortAppBean.class, appBeanList); } List netShortAppBeanList = DaoManager.getInstance().queryByKeyList(NetShortAppBean.class,"packageName",appBean.getPackageName()); if(netShortAppBeanList!=null&&netShortAppBeanList.size()>0){ DaoManager.getInstance().deleteByList(NetShortAppBean.class,netShortAppBeanList); } } // if(appBeanList!=null&&appBeanList.size()>0){ // ShortAppBean appBeanTmp = appBeanList.get(0); // appBeanTmp.setCategory(CATEGORY_SHORT); // appBeanTmp.setItemType(1); // DaoManager.getInstance().update(ShortAppBean.class,appBeanTmp); // }else { // LogUtils.loge("no query app info by package name"); // ShortAppBean videoAppBean = new ShortAppBean(); // videoAppBean.setAppName(appBean.getAppName()); // videoAppBean.setPackageName(appBean.getPackageName()); // videoAppBean.setCategory(CATEGORY_SHORT); // videoAppBean.setItemType(1); // DaoManager.getInstance().insert(ShortAppBean.class,videoAppBean); // } } } public void addShortcutInfo(String packageName,String apName,int index){ List shortcutInfoBeanList =DaoManager.getInstance().queryByKeyList(AppBean.class,"packageName",packageName); if(shortcutInfoBeanList!=null&&shortcutInfoBeanList.size()>0){ LogUtils.loge(packageName+" 已存在"); AppBean appBean = shortcutInfoBeanList.get(0); appBean.setCategory(CATEGORY_SHORT); DaoManager.getInstance().update(AppBean.class,appBean); }else { AppBean shortcutInfoBean = new AppBean(); shortcutInfoBean.setIndex(index); shortcutInfoBean.setPackageName(packageName); shortcutInfoBean.setAppName(apName); shortcutInfoBean.setCategory(CATEGORY_SHORT); DaoManager.getInstance().insert(AppBean.class,shortcutInfoBean); } } public void delShortcutInfo(String packageName){ List shortcutInfoBeanList =DaoManager.getInstance().queryByKeyList(AppBean.class,"packageName",packageName); if(shortcutInfoBeanList!=null&&shortcutInfoBeanList.size()>0){ LogUtils.loge(packageName+" 已存在"); DaoManager.getInstance().deleteByList(AppBean.class,shortcutInfoBeanList); }else { LogUtils.loge(packageName+" 不存在"); } } /*初始化快捷方式*/ public void initLocalConfigData(){ String json = getAssertData(mContext, SHORTAPP_ONFIG); if(json==null){ return; } try { LogUtils.loge("getAssertData===>"+json); JSONObject jsonObject = new JSONObject(json); JSONObject jsonObject01=jsonObject.getJSONObject("Homeshortcut"); String appStr = jsonObject01.getString("packageName"); JSONArray jsonArrayObject=jsonObject.getJSONArray("Favapp"); for (int i=0;i appBeanList = new ArrayList<>(); // for (int i = 0; i < array.length; i++) { // ShortAppBean appBean = new ShortAppBean(); // appBean.setPackageName(array[i]); // appBean.setIndex(i); // appBean.setItemType(1); // appBean.setCategory(CATEGORY_SHORT); // List tmpList =DaoManager.getInstance().queryByKeyList(ShortAppBean.class,"packageName",appBean.getPackageName()); // if(tmpList==null||tmpList.size()==0){ // appBeanList.add(appBean); // }else { // ShortAppBean tmpapp = tmpList.get(0); // tmpapp.setCategory(CATEGORY_SHORT); // DaoManager.getInstance().update(ShortAppBean.class,tmpapp); // } // } int flag =SharedPreferencesUtil.getSharePrefrencesInteger(mContext,SharedPreferencesUtil.CONFIG_INIOR); if(flag==1){//数据已初始化完成 return; } String[] shortcutArray =appStr.split(","); List appBeanList = new ArrayList<>(); for (int i = 0; i < shortcutArray.length; i++) { String packageName= shortcutArray[i]; if(PakageInstallUtil.checkAppInstall(mContext,packageName)) { ShortAppBean appBean = new ShortAppBean(); appBean.setPackageName(packageName); appBean.setIndex(i); appBean.setItemType(1); appBeanList.add(appBean); } } if(appBeanList.size()>0){ DaoManager.getInstance().insert(ShortAppBean.class, appBeanList); SharedPreferencesUtil.setSharePrefrencesInteger(mContext, SharedPreferencesUtil.CONFIG_INIOR, 1); } } catch (Exception e) { e.printStackTrace(); } // } } public void initApplications() { PackageManager manager = mContext.getPackageManager(); Map appBeanMaps = new HashMap<>(); queryLauncherApp(manager,appBeanMaps); queryLeanbackLauncherApp(manager,appBeanMaps); List appBeanList = new ArrayList<>(); Iterator it =appBeanMaps.keySet().iterator(); while (it.hasNext()){ String key = it.next(); AppBean appBean =appBeanMaps.get(key); appBeanList.add(appBean); } LogUtils.loge("get appBeanList===>"+appBeanList.size()); if(appBeanList.size()>0) { DaoManager.getInstance().insert(AppBean.class, appBeanList); }else { LogUtils.loge("没有要更新的数据"); } } private void queryLauncherApp( PackageManager manager ,Map appBeanMap){ if(appBeanMap==null){ return; } Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); final List apps = manager.queryIntentActivities(mainIntent, 0); Collections.sort(apps, new ResolveInfo.DisplayNameComparator(manager)); for (int i=0;i tmpList = DaoManager.getInstance().queryByKeyList(AppBean.class,"packageName",appBean.getPackageName()); // if(tmpList==null||tmpList.size()==0){ appBeanMap.put(packageName,appBean); // } LogUtils.loge("======package======"+appBean.getPackageName()); } } private void queryLeanbackLauncherApp( PackageManager manager ,Map appBeanMap){ if(appBeanMap==null){ return; } Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LEANBACK_LAUNCHER); final List apps = manager.queryIntentActivities(mainIntent, 0); Collections.sort(apps, new ResolveInfo.DisplayNameComparator(manager)); for (int i=0;i tmpList = DaoManager.getInstance().queryByKeyList(AppBean.class,"packageName",appBean.getPackageName()); // if(tmpList==null||tmpList.size()==0){ appBeanMap.put(packageName,appBean); // } LogUtils.loge("======package======"+appBean.getPackageName()); } } public void addAppInfo(String packageName){ try { PackageManager manager = mContext.getPackageManager(); ApplicationInfo applicationInfo =manager.getApplicationInfo(packageName,0); AppBean appBean = new AppBean(); appBean.setAppName(applicationInfo.name); appBean.setPackageName(applicationInfo.packageName); appBean.setItemType(1); DaoManager.getInstance().insert(AppBean.class, appBean); } catch (Exception e) { e.printStackTrace(); } } public void removeAppInfo(String packageName){ try { List appBeanList =DaoManager.getInstance().queryByKeyList(AppBean.class,"packageName",packageName); if(appBeanList!=null&&appBeanList.size()>0){ DaoManager.getInstance().deleteByList(AppBean.class,appBeanList); } List videoAppBeanList =DaoManager.getInstance().queryByKeyList(VideoAppBean.class,"packageName",packageName); if(videoAppBeanList!=null&&videoAppBeanList.size()>0){ DaoManager.getInstance().deleteByList(VideoAppBean.class,videoAppBeanList); } List recommendAppBeanBeanList =DaoManager.getInstance().queryByKeyList(RecommendAppBean.class,"packageName",packageName); if(recommendAppBeanBeanList!=null&&recommendAppBeanBeanList.size()>0){ DaoManager.getInstance().deleteByList(RecommendAppBean.class,recommendAppBeanBeanList); } List musicAppBeanList =DaoManager.getInstance().queryByKeyList(MusicAppBean.class,"packageName",packageName); if(musicAppBeanList!=null&&musicAppBeanList.size()>0){ DaoManager.getInstance().deleteByList(MusicAppBean.class,musicAppBeanList); } List localAppBeanList =DaoManager.getInstance().queryByKeyList(LocalAppBean.class,"packageName",packageName); if(localAppBeanList!=null&&localAppBeanList.size()>0){ DaoManager.getInstance().deleteByList(LocalAppBean.class,localAppBeanList); } List shortAppBeanList =DaoManager.getInstance().queryByKeyList(ShortAppBean.class,"packageName",packageName); if(shortAppBeanList!=null&&shortAppBeanList.size()>0){ DaoManager.getInstance().deleteByList(ShortAppBean.class,shortAppBeanList); } }catch (Exception e){ e.printStackTrace(); } } private static String getAssertData(Context context,String filepath){ File file = new File(filepath); if(!file.exists()){ return null; } String resultString =""; try { InputStream is = new FileInputStream(file); BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(is)); String jsonString =""; while ((jsonString=bufferedReader.readLine())!=null) { resultString+=jsonString; } } catch (Exception e) { e.printStackTrace(); } return resultString; } public FavNaviBean getFavNaviBean(int index){ AdsInfoBean adsInfoBean = ADManager.getInstance().getADInfoById(index,ADManager.ADTYPE_IMAGE); LogUtils.loge("adsInfoBean===>"+GsonUtil.GsonString(adsInfoBean)); FavNaviBean favNaviBean =null; if(adsInfoBean!=null&&adsInfoBean.getState()==1){ //先加载网络图片 if (PakageInstallUtil.checkAppInstall(mContext, adsInfoBean.getInfo())) { if (adsInfoBean.getLocalFilePath() != null) { File file = new File(adsInfoBean.getLocalFilePath()); if (file.exists()) { favNaviBean = new FavNaviBean(index, adsInfoBean.getLocalFilePath(), adsInfoBean.getInfo(), null); }else {//考虑下载好图片重启后变回 -tmp文件的情况 File tempFile=new File(adsInfoBean.getLocalFilePath()+"-tmp"); //对已上报的图片文件 系统丢失文件情况 重新下载 if(!tempFile.exists()&& SharePreUtils.filterByKeyValue(String.valueOf(adsInfoBean.getAdResourceId()),String.valueOf(0))){ LogUtils.loge("sys lost file which has upload,redownload it but not notify"); ADManager.getInstance().hasDownloadButLostFile(adsInfoBean,adsInfoBean.getAdUri(),0,adsInfoBean.getAdSize()); } if(tempFile.exists()&&tempFile.length()==adsInfoBean.getAdSize()){ tempFile.renameTo(file); tempFile.delete(); EventBusUtils.postMsg(new MessageEvent(MessageEvent.ACTION_UPADATE_DATA_SOURCE)); LogUtils.loge("下载大小完成但重命名失败同时下载任务已清除图片至始至终未显示处理 sys rename failed bug solved"); } LogUtils.loge(file.getPath()+" is not exit"); } } }else { LogUtils.loge(adsInfoBean.getInfo()+" is not exit");//考虑下载好APK重启后变回 -tmp文件的情况 补充clearApkFileByPowerDown 下载任务有脏数据情况下 String appUrl = adsInfoBean.getAppUrl(); boolean taskTableHasIt=false; List list = DaoManager.getInstance().queryList(DownLoadTaskBean.class); for (int i = 0; i 0){ boolean flag = PakageInstallUtil.silentInstall(mContext, file.getAbsolutePath()); LogUtils.loge("no task and restart sys apk back to tmp install result="+flag); } }else if(file.exists()&&file.length()==adsInfoBean.getAppSize()){ if(list!=null&&list.size()>0){ boolean flag = PakageInstallUtil.silentInstall(mContext, file.getAbsolutePath()); LogUtils.loge("no task and restart sys apk not install result="+flag); } } } } } if(favNaviBean==null){ //再加载本地图片 FavNaviBean favNaviBeantmp=favRecommendCacheData.get(index); if (favNaviBeantmp!=null&&PakageInstallUtil.checkAppInstall(mContext, favNaviBeantmp.getRelatedApp())){ if(favNaviBeantmp.getImgPath()!=null) { File file = new File(favNaviBeantmp.getImgPath()); if (file.exists()) { favNaviBean = favNaviBeantmp; } } } } if(favNaviBean==null){ //最后给默认图片 favNaviBean = new FavNaviBean(index,null,null,null); } LogUtils.loge("favNaviBean===>"+ GsonUtil.GsonString(favNaviBean)); return favNaviBean; } public FavNaviBean getFavNaviBeanByLocal(int index){ FavNaviBean favNaviBean =null; if(favNaviBean==null){ //再加载本地图片 favNaviBean =favRecommendCacheData.get(index); } if(favNaviBean==null){ //最后给默认图片 favNaviBean = new FavNaviBean(index,null,null,null); } LogUtils.loge("favNaviBean===>"+ GsonUtil.GsonString(favNaviBean)); return favNaviBean; } }