content: /*
   * Copyright (C) 2017 The Android Open Source Project
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package com.android.launcher3.util;
  
  import android.content.ContentResolver;
  import android.content.Context;
  import android.database.ContentObserver;
  import android.os.Handler;
  import android.provider.Settings;
  
  /**
   * Utility class to listen for secure settings changes
   */
  public class SecureSettingsObserver extends ContentObserver {
  
      /** Hidden field Settings.Secure.NOTIFICATION_BADGING */
      public static final String NOTIFICATION_BADGING = "notification_badging";
  
      private final ContentResolver mResolver;
      private final String mKeySetting;
      private final int mDefaultValue;
      private final OnChangeListener mOnChangeListener;
  
      public SecureSettingsObserver(ContentResolver resolver, OnChangeListener listener,
              String keySetting, int defaultValue) {
          super(new Handler());
  
          mResolver = resolver;
          mOnChangeListener = listener;
          mKeySetting = keySetting;
          mDefaultValue = defaultValue;
      }
  
      @Override
      public void onChange(boolean selfChange) {
          mOnChangeListener.onSettingsChanged(getValue());
      }
  
      public boolean getValue() {
          return Settings.Secure.getInt(mResolver, mKeySetting, mDefaultValue) == 1;
      }
  
      public void register() {
          mResolver.registerContentObserver(Settings.Secure.getUriFor(mKeySetting), false, this);
      }
  
      public ContentResolver getResolver() {
          return mResolver;
      }
  
      public void dispatchOnChange() {
          onChange(true);
      }
  
      public void unregister() {
          mResolver.unregisterContentObserver(this);
      }
  
      public interface OnChangeListener {
          void onSettingsChanged(boolean isEnabled);
      }
  
      public static SecureSettingsObserver newNotificationSettingsObserver(Context context,
              OnChangeListener listener) {
          return new SecureSettingsObserver(
                  context.getContentResolver(), listener, NOTIFICATION_BADGING, 1);
      }
  }
  