Bug 1240703 - Only start ScreenshotObserver if we have the needed permissions. r?nalexander draft
authorSebastian Kaspari <s.kaspari@gmail.com>
Thu, 21 Jan 2016 16:43:29 +0100
changeset 323927 a3ac33da1f4a5f79f4c751ad7fe3b1801d067074
parent 323914 a97bf8643895445548eed39e658dea0d1e51eecf
child 324380 17274584ab8ee75ea6da90020f01fc8411607295
child 324383 946c86259ea6ff89d1417a765075bd2acf24bd7e
push id9812
push users.kaspari@gmail.com
push dateThu, 21 Jan 2016 15:43:47 +0000
reviewersnalexander
bugs1240703
milestone46.0a1
Bug 1240703 - Only start ScreenshotObserver if we have the needed permissions. r?nalexander
mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
mobile/android/base/java/org/mozilla/gecko/util/ScreenshotObserver.java
--- a/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
+++ b/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java
@@ -1,15 +1,16 @@
 /* -*- 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 android.Manifest;
 import android.os.AsyncTask;
 import org.mozilla.gecko.adjust.AdjustHelperInterface;
 import org.mozilla.gecko.annotation.RobocopTarget;
 import org.mozilla.gecko.AppConstants.Versions;
 import org.mozilla.gecko.DynamicToolbar.PinReason;
 import org.mozilla.gecko.DynamicToolbar.VisibilityTransition;
 import org.mozilla.gecko.GeckoProfileDirectories.NoMozillaDirectoryException;
 import org.mozilla.gecko.Tabs.TabEvents;
@@ -41,16 +42,17 @@ import org.mozilla.gecko.home.HomePager.
 import org.mozilla.gecko.home.HomePanelsManager;
 import org.mozilla.gecko.home.SearchEngine;
 import org.mozilla.gecko.javaaddons.JavaAddonManager;
 import org.mozilla.gecko.menu.GeckoMenu;
 import org.mozilla.gecko.menu.GeckoMenuItem;
 import org.mozilla.gecko.mozglue.ContextUtils;
 import org.mozilla.gecko.mozglue.ContextUtils.SafeIntent;
 import org.mozilla.gecko.overlays.ui.ShareDialog;
+import org.mozilla.gecko.permissions.Permissions;
 import org.mozilla.gecko.preferences.ClearOnShutdownPref;
 import org.mozilla.gecko.preferences.GeckoPreferences;
 import org.mozilla.gecko.prompts.Prompt;
 import org.mozilla.gecko.prompts.PromptListItem;
 import org.mozilla.gecko.restrictions.Restrictable;
 import org.mozilla.gecko.restrictions.RestrictedProfileConfiguration;
 import org.mozilla.gecko.sync.repositories.android.FennecTabsRepository;
 import org.mozilla.gecko.tabqueue.TabQueueHelper;
@@ -927,17 +929,25 @@ public class BrowserApp extends GeckoApp
             return;
         }
 
         EventDispatcher.getInstance().unregisterGeckoThreadListener((GeckoEventListener) this,
             "Prompt:ShowTop");
 
         processTabQueue();
 
-        mScreenshotObserver.start();
+        Permissions.from(this)
+                   .withPermissions(Manifest.permission.WRITE_EXTERNAL_STORAGE)
+                   .doNotPrompt()
+                   .run(new Runnable() {
+                       @Override
+                       public void run() {
+                           mScreenshotObserver.start();
+                       }
+                   });
     }
 
     @Override
     public void onPause() {
         super.onPause();
 
         // Needed for Adjust to get accurate session measurements
         AdjustConstants.getAdjustHelper().onPause();
--- a/mobile/android/base/java/org/mozilla/gecko/util/ScreenshotObserver.java
+++ b/mobile/android/base/java/org/mozilla/gecko/util/ScreenshotObserver.java
@@ -64,16 +64,20 @@ public class ScreenshotObserver {
         }
     }
 
     public void stop() {
         if (!Versions.feature14Plus) {
             return;
         }
 
+        if (mediaObserver == null) {
+            return;
+        }
+
         try {
             context.getContentResolver().unregisterContentObserver(mediaObserver);
             mediaObserver = null;
         } catch (Exception e) {
             Log.e(LOGTAG, "Failure to stop watching media: ", e);
         }
     }