1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.content.browser.accessibility;
6 
7 import android.annotation.TargetApi;
8 import android.database.ContentObserver;
9 import android.net.Uri;
10 import android.os.Build;
11 import android.os.Handler;
12 import android.provider.Settings;
13 
14 import org.chromium.base.ContextUtils;
15 import org.chromium.base.ThreadUtils;
16 import org.chromium.base.annotations.CalledByNative;
17 import org.chromium.base.annotations.JNINamespace;
18 import org.chromium.base.annotations.NativeMethods;
19 
20 /**
21  * Provides utility methods relating to measuring accessibility state on the current platform (i.e.
22  * Android in this case). See content::BrowserAccessibilityStateImpl.
23  */
24 @JNINamespace("content")
25 public class BrowserAccessibilityState {
26     private static class AnimatorDurationScaleObserver extends ContentObserver {
AnimatorDurationScaleObserver(Handler handler)27         public AnimatorDurationScaleObserver(Handler handler) {
28             super(handler);
29         }
30 
31         @Override
onChange(boolean selfChange)32         public void onChange(boolean selfChange) {
33             onChange(selfChange, null);
34         }
35 
36         @Override
onChange(boolean selfChange, Uri uri)37         public void onChange(boolean selfChange, Uri uri) {
38             assert ThreadUtils.runningOnUiThread();
39             BrowserAccessibilityStateJni.get().onAnimatorDurationScaleChanged();
40         }
41     }
42 
43     @CalledByNative
44     @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
registerAnimatorDurationScaleObserver()45     static void registerAnimatorDurationScaleObserver() {
46         Handler handler = new Handler(ThreadUtils.getUiThreadLooper());
47         Uri uri = Settings.Global.getUriFor(Settings.Global.ANIMATOR_DURATION_SCALE);
48         ContextUtils.getApplicationContext().getContentResolver().registerContentObserver(
49                 uri, false, new AnimatorDurationScaleObserver(handler));
50     }
51 
52     @NativeMethods
53     interface Natives {
onAnimatorDurationScaleChanged()54         void onAnimatorDurationScaleChanged();
55     }
56 }
57