summaryrefslogtreecommitdiffstats
path: root/mobile/android/base/java/org/mozilla/gecko/ScreenshotObserver.java
diff options
context:
space:
mode:
authorMatt A. Tobin <email@mattatobin.com>2019-04-23 15:32:23 -0400
committerMatt A. Tobin <email@mattatobin.com>2019-04-23 15:32:23 -0400
commitabe80cc31d5a40ebed743085011fbcda0c1a9a10 (patch)
treefb3762f06b84745b182af281abb107b95a9fcf01 /mobile/android/base/java/org/mozilla/gecko/ScreenshotObserver.java
parent63295d0087eb58a6eb34cad324c4c53d1b220491 (diff)
downloadUXP-abe80cc31d5a40ebed743085011fbcda0c1a9a10.tar
UXP-abe80cc31d5a40ebed743085011fbcda0c1a9a10.tar.gz
UXP-abe80cc31d5a40ebed743085011fbcda0c1a9a10.tar.lz
UXP-abe80cc31d5a40ebed743085011fbcda0c1a9a10.tar.xz
UXP-abe80cc31d5a40ebed743085011fbcda0c1a9a10.zip
Issue #1053 - Drop support Android and remove Fennec - Part 1a: Remove mobile/android
Diffstat (limited to 'mobile/android/base/java/org/mozilla/gecko/ScreenshotObserver.java')
-rw-r--r--mobile/android/base/java/org/mozilla/gecko/ScreenshotObserver.java146
1 files changed, 0 insertions, 146 deletions
diff --git a/mobile/android/base/java/org/mozilla/gecko/ScreenshotObserver.java b/mobile/android/base/java/org/mozilla/gecko/ScreenshotObserver.java
deleted file mode 100644
index 64f101e51..000000000
--- a/mobile/android/base/java/org/mozilla/gecko/ScreenshotObserver.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*-
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-package org.mozilla.gecko;
-
-import org.mozilla.gecko.AppConstants.Versions;
-import org.mozilla.gecko.permissions.Permissions;
-import org.mozilla.gecko.util.ThreadUtils;
-
-import android.Manifest;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.MediaStore;
-import android.util.Log;
-
-public class ScreenshotObserver {
- private static final String LOGTAG = "GeckoScreenshotObserver";
- public Context context;
-
- /**
- * Listener for screenshot changes.
- */
- public interface OnScreenshotListener {
- /**
- * This callback is executed on the UI thread.
- */
- public void onScreenshotTaken(String data, String title);
- }
-
- private OnScreenshotListener listener;
-
- public ScreenshotObserver() {
- }
-
- public void setListener(Context context, OnScreenshotListener listener) {
- this.context = context;
- this.listener = listener;
- }
-
- private MediaObserver mediaObserver;
- private String[] mediaProjections = new String[] {
- MediaStore.Images.ImageColumns.DATA,
- MediaStore.Images.ImageColumns.DISPLAY_NAME,
- MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME,
- MediaStore.Images.ImageColumns.DATE_TAKEN,
- MediaStore.Images.ImageColumns.TITLE
- };
-
- /**
- * Start ScreenshotObserver if this device is supported and all required runtime permissions
- * have been granted by the user. Calling this method will not prompt for permissions.
- */
- public void start() {
- Permissions.from(context)
- .withPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)
- .doNotPrompt()
- .run(startObserverRunnable());
- }
-
- private Runnable startObserverRunnable() {
- return new Runnable() {
- @Override
- public void run() {
- try {
- if (mediaObserver == null) {
- mediaObserver = new MediaObserver();
- context.getContentResolver().registerContentObserver(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, false, mediaObserver);
- }
- } catch (Exception e) {
- Log.e(LOGTAG, "Failure to start watching media: ", e);
- }
- }
- };
- }
-
- public void stop() {
- if (mediaObserver == null) {
- return;
- }
-
- try {
- context.getContentResolver().unregisterContentObserver(mediaObserver);
- mediaObserver = null;
- } catch (Exception e) {
- Log.e(LOGTAG, "Failure to stop watching media: ", e);
- }
- }
-
- public void onMediaChange(final Uri uri) {
- // Make sure we are on not on the main thread.
- final ContentResolver cr = context.getContentResolver();
- ThreadUtils.postToBackgroundThread(new Runnable() {
- @Override
- public void run() {
- // Find the most recent image added to the MediaStore and see if it's a screenshot.
- final Cursor cursor = cr.query(uri, mediaProjections, null, null, MediaStore.Images.ImageColumns.DATE_ADDED + " DESC LIMIT 1");
- try {
- if (cursor == null) {
- return;
- }
-
- while (cursor.moveToNext()) {
- String data = cursor.getString(0);
- Log.i(LOGTAG, "data: " + data);
- String display = cursor.getString(1);
- Log.i(LOGTAG, "display: " + display);
- String album = cursor.getString(2);
- Log.i(LOGTAG, "album: " + album);
- long date = cursor.getLong(3);
- String title = cursor.getString(4);
- Log.i(LOGTAG, "title: " + title);
- if (album != null && album.toLowerCase().contains("screenshot")) {
- if (listener != null) {
- listener.onScreenshotTaken(data, title);
- break;
- }
- }
- }
- } catch (Exception e) {
- Log.e(LOGTAG, "Failure to process media change: ", e);
- } finally {
- if (cursor != null) {
- cursor.close();
- }
- }
- }
- });
- }
-
- private class MediaObserver extends ContentObserver {
- public MediaObserver() {
- super(null);
- }
-
- @Override
- public void onChange(boolean selfChange) {
- super.onChange(selfChange);
- onMediaChange(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
- }
- }
-}