Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ public final class AdaptScreenUtils {
private static boolean isInitMiui = false;
private static Field mTmpMetrics;

private static DisplayMetrics appDm;

/**
* Adapt for the horizontal screen, and call it in [android.app.Activity.getResources].
*/
Expand Down Expand Up @@ -68,10 +66,7 @@ public static int px2Pt(float pxValue) {
}

private static void setAppDmXdpi(final float xdpi) {
if (appDm == null) {
appDm = Utils.getApp().getResources().getDisplayMetrics();
}
appDm.xdpi = xdpi;
Utils.getApp().getResources().getDisplayMetrics().xdpi = xdpi;
}

private static DisplayMetrics getDisplayMetrics(Resources resources) {
Expand Down
84 changes: 76 additions & 8 deletions utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
Original file line number Diff line number Diff line change
@@ -1,15 +1,22 @@
package com.blankj.utilcode.util;

import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.CursorLoader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.ParcelFileDescriptor;
import android.provider.DocumentsContract;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.content.FileProvider;
import android.util.Log;

import java.io.File;
import java.io.FileDescriptor;

/**
* <pre>
Expand Down Expand Up @@ -43,24 +50,85 @@ public static Uri file2Uri(@NonNull final File file) {
/**
* Uri to file.
*
* @param uri The uri.
* @param columnName The name of the target column.
* <p>e.g. {@link MediaStore.Images.Media#DATA}</p>
* @param uri The uri.
* @return file
*/
public static File uri2File(@NonNull final Uri uri, final String columnName) {
if (ContentResolver.SCHEME_FILE.equals(uri.getScheme())) {
return new File(uri.getPath());
public static File uri2File(@NonNull final Uri uri) {
Log.d("UriUtils", uri.toString());
String authority = uri.getAuthority();
String scheme = uri.getScheme();
if (ContentResolver.SCHEME_FILE.equals(scheme)) {
String path = uri.getPath();
if (path != null) return new File(path);
Log.d("UriUtils", uri.toString() + " parse failed. -> 0");
return null;
} else if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
return getFileFromUri(uri, null, null);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT
&& DocumentsContract.isDocumentUri(Utils.getApp(), uri)) {
if ("com.android.externalstorage.documents".equals(authority)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
if ("primary".equalsIgnoreCase(type)) {
return new File(Environment.getExternalStorageDirectory() + "/" + split[1]);
}
Log.d("UriUtils", uri.toString() + " parse failed. -> 2");
return null;
} else if ("com.android.providers.downloads.documents".equals(authority)) {
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"),
Long.valueOf(id)
);
return getFileFromUri(contentUri, null, null);
} else if ("com.android.providers.media.documents".equals(authority)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
Uri contentUri;
if ("image".equals(type)) {
contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
} else if ("video".equals(type)) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else if ("audio".equals(type)) {
contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
} else {
Log.d("UriUtils", uri.toString() + " parse failed. -> 3");
return null;
}
final String selection = "_id=?";
final String[] selectionArgs = new String[]{split[1]};
return getFileFromUri(contentUri, selection, selectionArgs);
} else {
Log.d("UriUtils", uri.toString() + " parse failed. -> 4");
return null;
}
} else {
Log.d("UriUtils", uri.toString() + " parse failed. -> 5");
return null;
}
}

private static File getFileFromUri(@NonNull final Uri uri) {
return getFileFromUri(uri, null, null);
}

private static File getFileFromUri(@NonNull final Uri uri,
final String selection,
final String[] selectionArgs) {
CursorLoader cl = new CursorLoader(Utils.getApp());
cl.setUri(uri);
cl.setProjection(new String[]{columnName});
cl.setProjection(new String[]{"_data"});
Cursor cursor = null;
try {
cursor = cl.loadInBackground();
int columnIndex = cursor.getColumnIndexOrThrow(columnName);
int columnIndex = cursor.getColumnIndexOrThrow("_data");
cursor.moveToFirst();
return new File(cursor.getString(columnIndex));
} catch (Exception e) {
Log.d("UriUtils", uri.toString() + " parse failed. -> 1");
return null;
} finally {
if (cursor != null) {
cursor.close();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

/**
* <pre>
Expand Down Expand Up @@ -158,9 +158,9 @@ static boolean isAppForeground() {
static class ActivityLifecycleImpl implements ActivityLifecycleCallbacks {

final LinkedList<Activity> mActivityList = new LinkedList<>();
final HashMap<Object, OnAppStatusChangedListener> mStatusListenerMap = new HashMap<>();
final Map<Object, OnAppStatusChangedListener> mStatusListenerMap = new ConcurrentHashMap<>();

final HashMap<Activity, Set<OnActivityDestroyedListener>> mDestroyedListenerMap = new HashMap<>();
final Map<Activity, Set<OnActivityDestroyedListener>> mDestroyedListenerMap = new ConcurrentHashMap<>();

private int mForegroundCount = 0;
private int mConfigCount = 0;
Expand Down