• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2018 The Chromium Authors
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.base.compat;
6 
7 import android.app.Activity;
8 import android.app.PendingIntent;
9 import android.content.Context;
10 import android.graphics.Bitmap;
11 import android.graphics.drawable.Icon;
12 import android.net.ConnectivityManager;
13 import android.net.Network;
14 import android.net.NetworkInfo;
15 import android.os.Build;
16 import android.os.PowerManager;
17 import android.os.Process;
18 import android.os.UserManager;
19 import android.security.NetworkSecurityPolicy;
20 import android.view.ActionMode;
21 import android.view.Display;
22 import android.view.MotionEvent;
23 import android.view.ViewConfiguration;
24 import android.webkit.WebView;
25 import android.webkit.WebViewClient;
26 
27 import androidx.annotation.RequiresApi;
28 
29 /**
30  * Utility class to use new APIs that were added in M (API level 23). These need to exist in a
31  * separate class so that Android framework can successfully verify classes without
32  * encountering the new APIs.
33  */
34 @RequiresApi(Build.VERSION_CODES.M)
35 public final class ApiHelperForM {
ApiHelperForM()36     private ApiHelperForM() {}
37 
38     /**
39      * See {@link WebViewClient#onPageCommitVisible(WebView, String)}, which was added in M.
40      */
onPageCommitVisible( WebViewClient webViewClient, WebView webView, String url)41     public static void onPageCommitVisible(
42             WebViewClient webViewClient, WebView webView, String url) {
43         webViewClient.onPageCommitVisible(webView, url);
44     }
45 
46     /**
47      * See {@link Process#is64Bit()}.
48      */
isProcess64Bit()49     public static boolean isProcess64Bit() {
50         return Process.is64Bit();
51     }
52 
53     /** See {@link ConnectivityManager#getBoundNetworkForProcess() } */
getBoundNetworkForProcess(ConnectivityManager connectivityManager)54     public static Network getBoundNetworkForProcess(ConnectivityManager connectivityManager) {
55         return connectivityManager.getBoundNetworkForProcess();
56     }
57 
58     /** See {@link Network#getNetworkHandle() } */
getNetworkHandle(Network network)59     public static long getNetworkHandle(Network network) {
60         return network.getNetworkHandle();
61     }
62 
63     /** See @{link ConnectivityManager#getActiveNetwork() } */
getActiveNetwork(ConnectivityManager connectivityManager)64     public static Network getActiveNetwork(ConnectivityManager connectivityManager) {
65         return connectivityManager.getActiveNetwork();
66     }
67 
68     /** See @{link ConnectivityManager#getNetworkInfo(Network) } */
getNetworkInfo( ConnectivityManager connectivityManager, Network network)69     public static NetworkInfo getNetworkInfo(
70             ConnectivityManager connectivityManager, Network network) {
71         return connectivityManager.getNetworkInfo(network);
72     }
73 
74     /** See {@link Activity#requestPermissions(String[], int)}. */
requestActivityPermissions( Activity activity, String[] permissions, int requestCode)75     public static void requestActivityPermissions(
76             Activity activity, String[] permissions, int requestCode) {
77         activity.requestPermissions(permissions, requestCode);
78     }
79 
80     /** See {@link Activity#shouldShowRequestPermissionRationale(String)}. */
shouldShowRequestPermissionRationale( Activity activity, String permission)81     public static boolean shouldShowRequestPermissionRationale(
82             Activity activity, String permission) {
83         return activity.shouldShowRequestPermissionRationale(permission);
84     }
85 
86     /** See {@link PackageManager#isPermissionRevokedByPolicy(String, String)}. */
isPermissionRevokedByPolicy(Activity activity, String permission)87     public static boolean isPermissionRevokedByPolicy(Activity activity, String permission) {
88         return activity.getPackageManager().isPermissionRevokedByPolicy(
89                 permission, activity.getPackageName());
90     }
91 
92     /** See {@link NetworkSecurityPolicy#isCleartextTrafficPermitted()}. */
isCleartextTrafficPermitted()93     public static boolean isCleartextTrafficPermitted() {
94         return NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted();
95     }
96 
97     /** See {@link UserManager#isSystemUser()}. */
isSystemUser(UserManager userManager)98     public static boolean isSystemUser(UserManager userManager) {
99         return userManager.isSystemUser();
100     }
101 
102     /*
103      * See {@link ActionMode#invalidateContentRect()}.
104      * @param actionMode
105      */
invalidateContentRectOnActionMode(ActionMode actionMode)106     public static void invalidateContentRectOnActionMode(ActionMode actionMode) {
107         actionMode.invalidateContentRect();
108     }
109 
onWindowFocusChangedOnActionMode(ActionMode actionMode, boolean gainFocus)110     public static void onWindowFocusChangedOnActionMode(ActionMode actionMode, boolean gainFocus) {
111         actionMode.onWindowFocusChanged(gainFocus);
112     }
113 
getActionModeType(ActionMode actionMode)114     public static int getActionModeType(ActionMode actionMode) {
115         return actionMode.getType();
116     }
117 
getDefaultActionModeHideDuration()118     public static long getDefaultActionModeHideDuration() {
119         return ViewConfiguration.getDefaultActionModeHideDuration();
120     }
121 
hideActionMode(ActionMode actionMode, long duration)122     public static void hideActionMode(ActionMode actionMode, long duration) {
123         actionMode.hide(duration);
124     }
125 
getPendingIntentImmutableFlag()126     public static int getPendingIntentImmutableFlag() {
127         return PendingIntent.FLAG_IMMUTABLE;
128     }
129 
130     /** See {@link ConnectivityManager#reportNetworkConnectivity(Network, boolean)}. */
reportNetworkConnectivity( ConnectivityManager connectivityManager, Network network, boolean hasConnectivity)131     public static void reportNetworkConnectivity(
132             ConnectivityManager connectivityManager, Network network, boolean hasConnectivity) {
133         connectivityManager.reportNetworkConnectivity(network, hasConnectivity);
134     }
135 
136     /** See {@link MotionEvent#getActionButton() }. */
getActionButton(MotionEvent event)137     public static int getActionButton(MotionEvent event) {
138         return event.getActionButton();
139     }
140 
141     /** See {@link Display.Mode#getPhysicalWidth() }. */
getModePhysicalWidth(Display.Mode mode)142     public static int getModePhysicalWidth(Display.Mode mode) {
143         return mode.getPhysicalWidth();
144     }
145 
146     /** See {@link Display.Mode#getPhysicalHeight() }. */
getModePhysicalHeight(Display.Mode mode)147     public static int getModePhysicalHeight(Display.Mode mode) {
148         return mode.getPhysicalHeight();
149     }
150 
151     /** See {@link Icon#createWithBitmap(Bitmap) }. */
createIconWithBitmap(Bitmap bitmap)152     public static Icon createIconWithBitmap(Bitmap bitmap) {
153         return Icon.createWithBitmap(bitmap);
154     }
155 
156     /** See {@link PowerManager#isDeviceIdleMode() }. */
isDeviceIdleMode(PowerManager powerManager)157     public static boolean isDeviceIdleMode(PowerManager powerManager) {
158         return powerManager.isDeviceIdleMode();
159     }
160 
161     /** See {@link Context#getSystemService(Class<T>)}. */
getSystemService(Context context, Class<T> serviceClass)162     public static <T> T getSystemService(Context context, Class<T> serviceClass) {
163         return context.getSystemService(serviceClass);
164     }
165 }
166