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