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