package com.obsez.android.lib.filechooser.internals; import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.net.Uri; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.webkit.MimeTypeMap; import android.widget.ListView; import java.util.List; public final class UiUtil { public static int dip2px(int dipValue) { final float scale = Resources.getSystem().getDisplayMetrics().density; return Float.valueOf(dipValue * scale + 0.5f).intValue(); } public static float dip2px(float dipValue) { final float scale = Resources.getSystem().getDisplayMetrics().density; return (dipValue * scale + 0.5f); } public static int px2dip(int pxValue) { final float scale = Resources.getSystem().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } public static Drawable resolveFileTypeIcon(@NonNull Context ctx, Uri fileUri) { final Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(fileUri, getMimeType(ctx, fileUri)); final PackageManager pm = ctx.getPackageManager(); final List matches = pm.queryIntentActivities(intent, 0); for (ResolveInfo match : matches) { //final CharSequence label = match.loadLabel(pm); return match.loadIcon(pm); } return null; //ContextCompat.getDrawable(ctx, R.drawable.ic_file); } public static String getMimeType(@NonNull Context ctx, Uri uri) { String mimeType; if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) { ContentResolver cr = ctx.getApplicationContext().getContentResolver(); mimeType = cr.getType(uri); } else { String fileExtension = MimeTypeMap.getFileExtensionFromUrl(uri.toString()); mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension( fileExtension.toLowerCase()); } return mimeType; } public static void hideKeyboard(@NonNull Activity activity) { InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); // Find the currently focused view, so we can grab the correct window token from it. View view = activity.getCurrentFocus(); // If no view currently has focus, create a new one, just so we can grab a window token from it. if (view == null) view = new View(activity); if (imm != null) imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } // This only works assuming that all list items have the same height! public static int getListYScroll(@NonNull final ListView list) { View child = list.getChildAt(0); return child == null ? -1 : list.getFirstVisiblePosition() * child.getHeight() - child.getTop() + list.getPaddingTop(); } public static void hideKeyboardFrom(@NonNull Context context, @NonNull View view) { InputMethodManager imm = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE); if (imm != null) imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } public static void ensureVisible(@Nullable ListView listView, int pos) { if (listView == null || listView.getAdapter() == null) { return; } if (pos < 0 || pos >= listView.getAdapter().getCount()) { return; } int first = listView.getFirstVisiblePosition(); int last = listView.getLastVisiblePosition(); if (pos < first) { listView.setSelection(pos); return; } if (pos >= last) { listView.setSelection(1 + pos - (last - first)); } } }