Remove watcher onChanged() call on boot

This change removes the onChanged() call in
updateDeveloperOptionsWatcher() if it is being called because the boot
completed intent was received. This is because developer options can be
assumed not to have been toggled during a reboot.

Test: Manually checked that functions related to developer options being
      disabled (e.g. QS tile removed, ongoing traces stopped) are still
      correct.
Bug: 243433714
Change-Id: Ie9b01f646766286bb0354c9577917f760f175d43
diff --git a/src/com/android/traceur/MainFragment.java b/src/com/android/traceur/MainFragment.java
index 77fb286..6b4a72a 100644
--- a/src/com/android/traceur/MainFragment.java
+++ b/src/com/android/traceur/MainFragment.java
@@ -88,7 +88,7 @@
     public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        Receiver.updateDeveloperOptionsWatcher(getContext());
+        Receiver.updateDeveloperOptionsWatcher(getContext(), /* fromBootIntent */ false);
 
         mPrefs = PreferenceManager.getDefaultSharedPreferences(
                 getActivity().getApplicationContext());
diff --git a/src/com/android/traceur/QsService.java b/src/com/android/traceur/QsService.java
index 449598b..bf1300d 100644
--- a/src/com/android/traceur/QsService.java
+++ b/src/com/android/traceur/QsService.java
@@ -55,7 +55,7 @@
         getQsTile().setState(tracingOn ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE);
         getQsTile().setLabel(titleString);
         getQsTile().updateTile();
-        Receiver.updateDeveloperOptionsWatcher(this);
+        Receiver.updateDeveloperOptionsWatcher(this, /* fromBootIntent */ false);
     }
 
     /** When we click the tile, toggle tracing state.
diff --git a/src/com/android/traceur/Receiver.java b/src/com/android/traceur/Receiver.java
index 936f224..94f2325 100644
--- a/src/com/android/traceur/Receiver.java
+++ b/src/com/android/traceur/Receiver.java
@@ -81,7 +81,7 @@
         if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
             Log.i(TAG, "Received BOOT_COMPLETE");
             createNotificationChannels(context);
-            updateDeveloperOptionsWatcher(context);
+            updateDeveloperOptionsWatcher(context, /* fromBootIntent */ true);
             // We know that Perfetto won't be tracing already at boot, so pass the
             // tracingIsOff argument to avoid the Perfetto check.
             updateTracing(context, /* assumeTracingIsOff= */ true);
@@ -199,7 +199,7 @@
      * preference to false to hide the tile. The user will need to re-enable the
      * preference if they decide to turn Developer Options back on again.
      */
-    static void updateDeveloperOptionsWatcher(Context context) {
+    static void updateDeveloperOptionsWatcher(Context context, boolean fromBootIntent) {
         if (mDeveloperOptionsObserver == null) {
             Uri settingUri = Settings.Global.getUriFor(
                 Settings.Global.DEVELOPMENT_SETTINGS_ENABLED);
@@ -239,7 +239,11 @@
 
             context.getContentResolver().registerContentObserver(settingUri,
                 false, mDeveloperOptionsObserver);
-            mDeveloperOptionsObserver.onChange(true);
+            // If this observer is being created and registered on boot, it can be assumed that
+            // developer options did not change in the meantime.
+            if (!fromBootIntent) {
+                mDeveloperOptionsObserver.onChange(true);
+            }
         }
     }