• 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     /** See {@link WebViewClient#onPageCommitVisible(WebView, String)}, which was added in M. */
onPageCommitVisible( WebViewClient webViewClient, WebView webView, String url)39     public static void onPageCommitVisible(
40             WebViewClient webViewClient, WebView webView, String url) {
41         webViewClient.onPageCommitVisible(webView, url);
42     }
43 
44     /** See {@link Process#is64Bit()}. */
isProcess64Bit()45     public static boolean isProcess64Bit() {
46         return Process.is64Bit();
47     }
48 
49     /** See {@link ConnectivityManager#getBoundNetworkForProcess() } */
getBoundNetworkForProcess(ConnectivityManager connectivityManager)50     public static Network getBoundNetworkForProcess(ConnectivityManager connectivityManager) {
51         return connectivityManager.getBoundNetworkForProcess();
52     }
53 
54     /** See {@link Network#getNetworkHandle() } */
getNetworkHandle(Network network)55     public static long getNetworkHandle(Network network) {
56         return network.getNetworkHandle();
57     }
58 
59     /** See @{link ConnectivityManager#getActiveNetwork() } */
getActiveNetwork(ConnectivityManager connectivityManager)60     public static Network getActiveNetwork(ConnectivityManager connectivityManager) {
61         return connectivityManager.getActiveNetwork();
62     }
63 
64     /** See @{link ConnectivityManager#getNetworkInfo(Network) } */
getNetworkInfo( ConnectivityManager connectivityManager, Network network)65     public static NetworkInfo getNetworkInfo(
66             ConnectivityManager connectivityManager, Network network) {
67         return connectivityManager.getNetworkInfo(network);
68     }
69 
70     /** See {@link Activity#requestPermissions(String[], int)}. */
requestActivityPermissions( Activity activity, String[] permissions, int requestCode)71     public static void requestActivityPermissions(
72             Activity activity, String[] permissions, int requestCode) {
73         activity.requestPermissions(permissions, requestCode);
74     }
75 
76     /** See {@link Activity#shouldShowRequestPermissionRationale(String)}. */
shouldShowRequestPermissionRationale( Activity activity, String permission)77     public static boolean shouldShowRequestPermissionRationale(
78             Activity activity, String permission) {
79         return activity.shouldShowRequestPermissionRationale(permission);
80     }
81 
82     /** See {@link PackageManager#isPermissionRevokedByPolicy(String, String)}. */
isPermissionRevokedByPolicy(Activity activity, String permission)83     public static boolean isPermissionRevokedByPolicy(Activity activity, String permission) {
84         return activity.getPackageManager()
85                 .isPermissionRevokedByPolicy(permission, activity.getPackageName());
86     }
87 
88     /** See {@link NetworkSecurityPolicy#isCleartextTrafficPermitted()}. */
isCleartextTrafficPermitted()89     public static boolean isCleartextTrafficPermitted() {
90         return NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted();
91     }
92 
93     /** See {@link UserManager#isSystemUser()}. */
isSystemUser(UserManager userManager)94     public static boolean isSystemUser(UserManager userManager) {
95         return userManager.isSystemUser();
96     }
97 
98     /**
99      * See {@link ActionMode#invalidateContentRect()}.
100      *
101      * @param actionMode
102      */
invalidateContentRectOnActionMode(ActionMode actionMode)103     public static void invalidateContentRectOnActionMode(ActionMode actionMode) {
104         actionMode.invalidateContentRect();
105     }
106 
onWindowFocusChangedOnActionMode(ActionMode actionMode, boolean gainFocus)107     public static void onWindowFocusChangedOnActionMode(ActionMode actionMode, boolean gainFocus) {
108         actionMode.onWindowFocusChanged(gainFocus);
109     }
110 
getActionModeType(ActionMode actionMode)111     public static int getActionModeType(ActionMode actionMode) {
112         return actionMode.getType();
113     }
114 
getDefaultActionModeHideDuration()115     public static long getDefaultActionModeHideDuration() {
116         return ViewConfiguration.getDefaultActionModeHideDuration();
117     }
118 
hideActionMode(ActionMode actionMode, long duration)119     public static void hideActionMode(ActionMode actionMode, long duration) {
120         actionMode.hide(duration);
121     }
122 
getPendingIntentImmutableFlag()123     public static int getPendingIntentImmutableFlag() {
124         return PendingIntent.FLAG_IMMUTABLE;
125     }
126 
127     /** See {@link ConnectivityManager#reportNetworkConnectivity(Network, boolean)}. */
reportNetworkConnectivity( ConnectivityManager connectivityManager, Network network, boolean hasConnectivity)128     public static void reportNetworkConnectivity(
129             ConnectivityManager connectivityManager, Network network, boolean hasConnectivity) {
130         connectivityManager.reportNetworkConnectivity(network, hasConnectivity);
131     }
132 
133     /** See {@link MotionEvent#getActionButton() }. */
getActionButton(MotionEvent event)134     public static int getActionButton(MotionEvent event) {
135         return event.getActionButton();
136     }
137 
138     /** See {@link Display.Mode#getPhysicalWidth() }. */
getModePhysicalWidth(Display.Mode mode)139     public static int getModePhysicalWidth(Display.Mode mode) {
140         return mode.getPhysicalWidth();
141     }
142 
143     /** See {@link Display.Mode#getPhysicalHeight() }. */
getModePhysicalHeight(Display.Mode mode)144     public static int getModePhysicalHeight(Display.Mode mode) {
145         return mode.getPhysicalHeight();
146     }
147 
148     /** See {@link Icon#createWithBitmap(Bitmap) }. */
createIconWithBitmap(Bitmap bitmap)149     public static Icon createIconWithBitmap(Bitmap bitmap) {
150         return Icon.createWithBitmap(bitmap);
151     }
152 
153     /** See {@link PowerManager#isDeviceIdleMode() }. */
isDeviceIdleMode(PowerManager powerManager)154     public static boolean isDeviceIdleMode(PowerManager powerManager) {
155         return powerManager.isDeviceIdleMode();
156     }
157 
158     /** See {@link Context#getSystemService(Class<T>)}. */
getSystemService(Context context, Class<T> serviceClass)159     public static <T> T getSystemService(Context context, Class<T> serviceClass) {
160         return context.getSystemService(serviceClass);
161     }
162 }
163