package com.fastaccess.helper; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.Bitmap; import android.net.Uri; import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.view.View; import android.view.inputmethod.InputMethodManager; import com.fastaccess.App; import com.fastaccess.BuildConfig; import com.fastaccess.data.dao.AppsModel; import com.fastaccess.provider.icon.IconCache; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Created by kosh20111 on 18 Oct 2016, 9:29 PM */ public class AppHelper { public static boolean isApplicationInstalled(Context context, String packageName) { PackageInfo info = null; try { info = context.getPackageManager().getPackageInfo(packageName, 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return info != null; } public static boolean isM() {return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;} public static boolean isLollipopOrHigher() { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP; } public static void hideKeyboard(@NonNull View view) { hideKeyboard(view, view.getContext()); } public static void hideKeyboard(@NonNull View view, @NonNull Context activity) { InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0); } @NonNull public static List<AppsModel> getInstalledPackages(@NonNull Context context) { final PackageManager pm = context.getPackageManager(); Process process; List<AppsModel> result = new ArrayList<>(); BufferedReader bufferedReader = null; IconCache iconCache = App.getInstance().getIconCache(); try { process = Runtime.getRuntime().exec("pm list packages"); bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = bufferedReader.readLine()) != null) { final String packageName = line.substring(line.indexOf(':') + 1); PackageInfo packageInfo = pm.getPackageInfo(packageName, 0); Intent mainIntent = pm.getLaunchIntentForPackage(packageInfo.applicationInfo.packageName); if (mainIntent != null) { ResolveInfo resolveInfo = pm.resolveActivity(mainIntent, 0); if (resolveInfo != null) { if (!packageName.equalsIgnoreCase(BuildConfig.APPLICATION_ID)) { AppsModel model = new AppsModel(); model.setPackageName(resolveInfo.activityInfo.applicationInfo.packageName); model.setActivityInfoName(resolveInfo.activityInfo.name); model.setAppName(resolveInfo.loadLabel(pm).toString()); iconCache.getTitleAndIcon(model, resolveInfo, null); result.add(model); } } } } process.waitFor(); Collections.sort(result, AppsModel.sortApps()); } catch (Exception e) { e.printStackTrace(); } finally { if (bufferedReader != null) try { bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } } return result; } @Nullable public static Fragment getFragmentByTag(@NonNull FragmentManager fragmentManager, @NonNull String tag) { return fragmentManager.findFragmentByTag(tag); } @Nullable public static Fragment getVisibleFragment(@NonNull FragmentManager manager) { List<Fragment> fragments = manager.getFragments(); if (fragments != null && !fragments.isEmpty()) { for (Fragment fragment : fragments) { if (fragment != null && fragment.isVisible()) { Logger.e(fragment.getClass().getSimpleName(), fragment.isVisible()); return fragment; } } } return null; } @Nullable public static String saveBitmap(Bitmap image) { try { File file = FileHelper.generateFile("fa_image_icon"); if (file.exists()) { file.delete(); } OutputStream fOut = new FileOutputStream(file); image.compress(Bitmap.CompressFormat.PNG, 70, fOut); fOut.flush(); fOut.close(); return file.getAbsolutePath(); } catch (Exception e) { return null; } } @SuppressWarnings("StringBufferReplaceableByString") @NonNull public static String getEmailBody() { return new StringBuilder() .append("Version Code: ").append(BuildConfig.VERSION_CODE) .append("\n") .append("Version Name: ").append(BuildConfig.VERSION_NAME) .append("\n") .append("OS Version: ").append(Build.VERSION.SDK_INT) .append("\n") .append("Manufacturer: ").append(Build.MANUFACTURER) .append("\n") .append("Phone Model: ").append(Build.MODEL) .append("\n") .append("--------------------------------------------") .append("\n") .toString(); } public static void openAppInPlayStore(@NonNull Context context) { final String appPackageName = BuildConfig.APPLICATION_ID; try { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName))); } catch (android.content.ActivityNotFoundException e) { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://play.google.com/store/apps/details?id=" + appPackageName))); } } }