package com.mobapphome.mahads.tools; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.net.Uri; import android.util.Log; import android.widget.Toast; import com.mobapphome.mahads.R; import com.mobapphome.mahads.types.MAHRequestResult; import com.mobapphome.mahads.types.Program; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.List; import java.util.Random; public class Utils { //General -------------------------------------------------------------------- public static boolean checkPackageIfExists(Context context, String pckgName) { try { ApplicationInfo info = context.getPackageManager().getApplicationInfo(pckgName, 0); return true; } catch (PackageManager.NameNotFoundException e) { return false; } } static void writeStringToCache(final Context context, String stringToCache) { FileOutputStream outputStream; try { outputStream = context.openFileOutput(Constants.PROGRAM_LIST_CACHE, Context.MODE_PRIVATE); outputStream.write(stringToCache.getBytes()); outputStream.close(); } catch (Exception e) { //e.printStackTrace(); Log.d(Constants.LOG_TAG_MAH_ADS, "IOexception = " + e.getMessage(), e); } } static String readStringFromCache(final Context context) { FileInputStream inputStream; try { inputStream = context.openFileInput(Constants.PROGRAM_LIST_CACHE); BufferedReader r = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder total = new StringBuilder(); String line; while ((line = r.readLine()) != null) { total.append(line).append('\n'); } inputStream.close(); return total.toString(); } catch (Exception e) { Log.d(Constants.LOG_TAG_MAH_ADS, "IOexception = " +e.getMessage(), e); //e.printStackTrace(); } return null; } static int getVersionFromLocal(Context context) { return getSharedPref(context).getInt(Constants.MAH_ADS_VERSION, -1); } public static String getUrlOfImage(String urlRootOnServer, String initialUrlForImage) { if (initialUrlForImage.startsWith("http://") || initialUrlForImage.startsWith("https://")) { return initialUrlForImage; } else { return urlRootOnServer + initialUrlForImage; } } public static String getRootFromUrl(String urlStr) { return urlStr.substring(0, urlStr.lastIndexOf('/') + 1); } static public void showMarket(Context context, String pckgName){ Intent marketIntent = new Intent(Intent.ACTION_VIEW); marketIntent.setData(Uri.parse("market://details?id=" + pckgName)); try { context.startActivity(marketIntent); } catch (ActivityNotFoundException e) { Toast.makeText(context, context.getString(R.string.mah_ads_play_service_not_found), Toast.LENGTH_LONG).show(); Log.e(Constants.LOG_TAG_MAH_ADS, context.getString(R.string.mah_ads_play_service_not_found) + e.getMessage()); } } //Program list filtering---------------------------------------------------------------- private static void programSelect(List<Program> programsSource, List<Program> programsSelectedLocal) { Random random = new Random(); while (programsSource.size() > 0 && programsSelectedLocal.size() < 2) { //Log.i(MAHAdsController.LOG_TAG_MAH_ADS, "DBRequester prog filtered count = " + programsFiltered.size()); int randomIndex = random.nextInt(programsSource.size()); //Log.i(MAHAdsController.LOG_TAG_MAH_ADS, "DBRequester random number = " + randomIndex); Program progRandom = programsSource.get(randomIndex); programsSource.remove(randomIndex); if (!programsSelectedLocal.contains(progRandom)) { programsSelectedLocal.add(progRandom); } } } static MAHRequestResult filterMAHRequestResult(final Context context, MAHRequestResult requestResult) { List<Program> programsTotal = requestResult.getProgramsTotal(); if (programsTotal != null) { List<Program> programsFiltered = new LinkedList<>(); List<Program> programsNotInstalledOld = new LinkedList<>(); List<Program> programsNotInstalledFresh = new LinkedList<>(); List<Program> programsInstalled = new LinkedList<>(); for (Program c : programsTotal) { if (!c.getUri().trim().equals(context.getPackageName().trim())) { programsFiltered.add(c); if (!Utils.checkPackageIfExists(context, c.getUri().trim())) { Program.Freshnest freshnest = c.getFreshnest(); if (freshnest.equals(Program.Freshnest.NEW) || freshnest.equals(Program.Freshnest.UPDATED)) { programsNotInstalledFresh.add(c); } else { programsNotInstalledOld.add(c); } } else { programsInstalled.add(c); } } } //For generating selected programs start List<Program> programsSelectedLocal = new LinkedList<>(); programSelect(programsNotInstalledFresh, programsSelectedLocal); programSelect(programsNotInstalledOld, programsSelectedLocal); programSelect(programsInstalled, programsSelectedLocal); requestResult.setProgramsFiltered(programsFiltered); requestResult.setProgramsSelected(programsSelectedLocal); return requestResult; }else{ Log.i(Constants.LOG_TAG_MAH_ADS, "Programs total is null"); return requestResult; } } static SharedPreferences getSharedPref(Context context) { return context.getSharedPreferences("MAH_ADS", Context.MODE_PRIVATE); } }