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.content.ClipData; 9 import android.content.ComponentName; 10 import android.content.pm.PackageManager; 11 import android.media.MediaCodec.CryptoInfo; 12 import android.net.ConnectivityManager; 13 import android.os.Build; 14 import android.os.Process; 15 import android.security.NetworkSecurityPolicy; 16 import android.view.MotionEvent; 17 import android.view.PointerIcon; 18 import android.view.View; 19 import android.view.View.DragShadowBuilder; 20 21 import androidx.annotation.RequiresApi; 22 23 /** 24 * Utility class to use new APIs that were added in N (API level 24). These need to exist in a 25 * separate class so that Android framework can successfully verify classes without 26 * encountering the new APIs. 27 */ 28 @RequiresApi(Build.VERSION_CODES.N) 29 public final class ApiHelperForN { ApiHelperForN()30 private ApiHelperForN() {} 31 32 /** See {@link View#startDragAndDrop(ClipData, DragShadowBuilder, Object, int)}. */ startDragAndDrop( View view, ClipData data, DragShadowBuilder shadowBuilder, Object myLocalState, int flags)33 public static boolean startDragAndDrop( 34 View view, 35 ClipData data, 36 DragShadowBuilder shadowBuilder, 37 Object myLocalState, 38 int flags) { 39 return view.startDragAndDrop(data, shadowBuilder, myLocalState, flags); 40 } 41 42 /** See {@link CryptoInfo#setPattern(Pattern)}. */ setCryptoInfoPattern(CryptoInfo cryptoInfo, int encrypt, int skip)43 public static void setCryptoInfoPattern(CryptoInfo cryptoInfo, int encrypt, int skip) { 44 cryptoInfo.setPattern(new CryptoInfo.Pattern(encrypt, skip)); 45 } 46 47 /** See {@link Activity#setVrModeEnabled(boolean, ComponentName)}. */ setVrModeEnabled( Activity activity, boolean enabled, ComponentName requestedComponent)48 public static void setVrModeEnabled( 49 Activity activity, boolean enabled, ComponentName requestedComponent) 50 throws PackageManager.NameNotFoundException { 51 activity.setVrModeEnabled(enabled, requestedComponent); 52 } 53 54 /** See {@link NetworkSecurityPolicy#isCleartextTrafficPermitted(String)}. */ isCleartextTrafficPermitted(String host)55 public static boolean isCleartextTrafficPermitted(String host) { 56 return NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted(host); 57 } 58 59 /** See {@link View#onResolvePointerIcon(MotionEvent, int)}. */ onResolvePointerIcon(View view, MotionEvent event, int pointerIndex)60 public static PointerIcon onResolvePointerIcon(View view, MotionEvent event, int pointerIndex) { 61 return view.onResolvePointerIcon(event, pointerIndex); 62 } 63 64 /** See {@link Process#getStartUptimeMillis()}. */ getStartUptimeMillis()65 public static long getStartUptimeMillis() { 66 return Process.getStartUptimeMillis(); 67 } 68 69 /** See {@link ConnectivityManager#getRestrictBackgroundStatus(ConnectivityManager)}. */ getRestrictBackgroundStatus(ConnectivityManager cm)70 public static int getRestrictBackgroundStatus(ConnectivityManager cm) { 71 return cm.getRestrictBackgroundStatus(); 72 } 73 } 74