import android.net.Uri;
import android.os.BatteryManager;
+import android.os.Binder;
import android.os.Build;
import android.os.Environment;
-import android.os.Looper;
-import android.os.IBinder;
import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
import android.os.ParcelFileDescriptor;
+import android.os.VibrationEffect;
import android.os.Vibrator;
import android.os.VibratorManager;
-import android.os.VibrationEffect;
import android.provider.DocumentsContract;
import android.provider.DocumentsContract.Document;
public boolean
checkContentUri (String name, boolean readable, boolean writable)
{
- String mode;
- ParcelFileDescriptor fd;
Uri uri;
int rc, flags;
- ParcelFileDescriptor descriptor;
uri = Uri.parse (name);
flags = 0;
if (writable)
flags |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
- rc = checkCallingUriPermission (uri, flags);
-
- if (rc == PackageManager.PERMISSION_GRANTED)
- return true;
-
- /* In the event checkCallingUriPermission fails and only read
- permissions are being verified, attempt to query the URI. This
- enables ascertaining whether drag and drop URIs can be
- accessed, something otherwise not provided for. */
-
- descriptor = null;
-
- try
- {
- descriptor = resolver.openFileDescriptor (uri, "r");
- return true;
- }
- catch (Exception exception)
- {
- /* Ignored. */
- }
- finally
- {
- try
- {
- if (descriptor != null)
- descriptor.close ();
- }
- catch (IOException exception)
- {
- /* Ignored. */
- }
- }
+ /* checkCallingUriPermission deals with permissions held by callers
+ of functions over the Binder IPC mechanism as contrasted with
+ Emacs itself, while getCallingPid and getCallingUid, despite the
+ class where they reside, return the process credentials against
+ which the system will actually test URIs being opened. */
- return false;
+ rc = checkUriPermission (uri, Binder.getCallingPid (),
+ Binder.getCallingUid (), flags);
+ return rc == PackageManager.PERMISSION_GRANTED;
}
/* Return a 8 character checksum for the string STRING, after encoding
as UTF-8 data. */
- public static String
+ private static String
getDisplayNameHash (String string)
{
byte[] encoded;