package androidx.core.content; import android.accounts.AccountManager; import android.app.ActivityManager; import android.app.AlarmManager; import android.app.AppOpsManager; import android.app.DownloadManager; import android.app.KeyguardManager; import android.app.NotificationManager; import android.app.SearchManager; import android.app.UiModeManager; import android.app.WallpaperManager; import android.app.admin.DevicePolicyManager; import android.app.job.JobScheduler; import android.app.usage.UsageStatsManager; import android.appwidget.AppWidgetManager; import android.bluetooth.BluetoothManager; import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; import android.content.RestrictionsManager; import android.content.pm.LauncherApps; import android.content.res.ColorStateList; import android.graphics.drawable.Drawable; import android.hardware.ConsumerIrManager; import android.hardware.SensorManager; import android.hardware.camera2.CameraManager; import android.hardware.display.DisplayManager; import android.hardware.input.InputManager; import android.hardware.usb.UsbManager; import android.location.LocationManager; import android.media.AudioManager; import android.media.MediaRouter; import android.media.projection.MediaProjectionManager; import android.media.session.MediaSessionManager; import android.media.tv.TvInputManager; import android.net.ConnectivityManager; import android.net.nsd.NsdManager; import android.net.wifi.WifiManager; import android.net.wifi.p2p.WifiP2pManager; import android.nfc.NfcManager; import android.os.BatteryManager; import android.os.Build; import android.os.Bundle; import android.os.DropBoxManager; import android.os.Handler; import android.os.PowerManager; import android.os.Process; import android.os.UserManager; import android.os.Vibrator; import android.os.storage.StorageManager; import android.print.PrintManager; import android.telecom.TelecomManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.util.Log; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.WindowManager; import android.view.accessibility.AccessibilityManager; import android.view.accessibility.CaptioningManager; import android.view.inputmethod.InputMethodManager; import android.view.textservice.TextServicesManager; import androidx.annotation.ColorInt; import androidx.annotation.ColorRes; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import java.io.File; import java.util.HashMap; import java.util.concurrent.Executor; import java.util.concurrent.RejectedExecutionException; public class ContextCompat { private static final String TAG = "ContextCompat"; private static final Object sLock = new Object(); private static TypedValue sTempValue; public static final class LegacyServiceMapHolder { public static final HashMap, String> SERVICES; static { HashMap, String> hashMap = new HashMap<>(); SERVICES = hashMap; if (Build.VERSION.SDK_INT >= 22) { hashMap.put(SubscriptionManager.class, "telephony_subscription_service"); hashMap.put(UsageStatsManager.class, "usagestats"); } hashMap.put(AppWidgetManager.class, "appwidget"); hashMap.put(BatteryManager.class, "batterymanager"); hashMap.put(CameraManager.class, "camera"); hashMap.put(JobScheduler.class, "jobscheduler"); hashMap.put(LauncherApps.class, "launcherapps"); hashMap.put(MediaProjectionManager.class, "media_projection"); hashMap.put(MediaSessionManager.class, "media_session"); hashMap.put(RestrictionsManager.class, "restrictions"); hashMap.put(TelecomManager.class, "telecom"); hashMap.put(TvInputManager.class, "tv_input"); hashMap.put(AppOpsManager.class, "appops"); hashMap.put(CaptioningManager.class, "captioning"); hashMap.put(ConsumerIrManager.class, "consumer_ir"); hashMap.put(PrintManager.class, "print"); hashMap.put(BluetoothManager.class, "bluetooth"); hashMap.put(DisplayManager.class, "display"); hashMap.put(UserManager.class, "user"); hashMap.put(InputManager.class, "input"); hashMap.put(MediaRouter.class, "media_router"); hashMap.put(NsdManager.class, "servicediscovery"); hashMap.put(AccessibilityManager.class, "accessibility"); hashMap.put(AccountManager.class, "account"); hashMap.put(ActivityManager.class, "activity"); hashMap.put(AlarmManager.class, "alarm"); hashMap.put(AudioManager.class, "audio"); hashMap.put(ClipboardManager.class, "clipboard"); hashMap.put(ConnectivityManager.class, "connectivity"); hashMap.put(DevicePolicyManager.class, "device_policy"); hashMap.put(DownloadManager.class, "download"); hashMap.put(DropBoxManager.class, "dropbox"); hashMap.put(InputMethodManager.class, "input_method"); hashMap.put(KeyguardManager.class, "keyguard"); hashMap.put(LayoutInflater.class, "layout_inflater"); hashMap.put(LocationManager.class, "location"); hashMap.put(NfcManager.class, "nfc"); hashMap.put(NotificationManager.class, "notification"); hashMap.put(PowerManager.class, "power"); hashMap.put(SearchManager.class, "search"); hashMap.put(SensorManager.class, "sensor"); hashMap.put(StorageManager.class, "storage"); hashMap.put(TelephonyManager.class, "phone"); hashMap.put(TextServicesManager.class, "textservices"); hashMap.put(UiModeManager.class, "uimode"); hashMap.put(UsbManager.class, "usb"); hashMap.put(Vibrator.class, "vibrator"); hashMap.put(WallpaperManager.class, "wallpaper"); hashMap.put(WifiP2pManager.class, "wifip2p"); hashMap.put(WifiManager.class, "wifi"); hashMap.put(WindowManager.class, "window"); } private LegacyServiceMapHolder() { } } public static class MainHandlerExecutor implements Executor { private final Handler mHandler; public MainHandlerExecutor(@NonNull Handler handler) { this.mHandler = handler; } @Override // java.util.concurrent.Executor public void execute(Runnable runnable) { if (!this.mHandler.post(runnable)) { throw new RejectedExecutionException(this.mHandler + " is shutting down"); } } } public static int checkSelfPermission(@NonNull Context context, @NonNull String str) { if (str != null) { return context.checkPermission(str, Process.myPid(), Process.myUid()); } throw new IllegalArgumentException("permission is null"); } @Nullable public static Context createDeviceProtectedStorageContext(@NonNull Context context) { if (Build.VERSION.SDK_INT >= 24) { return context.createDeviceProtectedStorageContext(); } return null; } private static synchronized File createFilesDir(File file) { synchronized (ContextCompat.class) { if (file.exists() || file.mkdirs()) { return file; } if (file.exists()) { return file; } Log.w("ContextCompat", "Unable to create files subdir " + file.getPath()); return null; } } public static File getCodeCacheDir(@NonNull Context context) { return context.getCodeCacheDir(); } @ColorInt public static int getColor(@NonNull Context context, @ColorRes int i) { return Build.VERSION.SDK_INT >= 23 ? context.getColor(i) : context.getResources().getColor(i); } @Nullable public static ColorStateList getColorStateList(@NonNull Context context, @ColorRes int i) { return Build.VERSION.SDK_INT >= 23 ? context.getColorStateList(i) : context.getResources().getColorStateList(i); } @Nullable public static File getDataDir(@NonNull Context context) { if (Build.VERSION.SDK_INT >= 24) { return context.getDataDir(); } String str = context.getApplicationInfo().dataDir; if (str != null) { return new File(str); } return null; } @Nullable public static Drawable getDrawable(@NonNull Context context, @DrawableRes int i) { return context.getDrawable(i); } @NonNull public static File[] getExternalCacheDirs(@NonNull Context context) { return context.getExternalCacheDirs(); } @NonNull public static File[] getExternalFilesDirs(@NonNull Context context, @Nullable String str) { return context.getExternalFilesDirs(str); } public static Executor getMainExecutor(Context context) { return Build.VERSION.SDK_INT >= 28 ? context.getMainExecutor() : new MainHandlerExecutor(new Handler(context.getMainLooper())); } @Nullable public static File getNoBackupFilesDir(@NonNull Context context) { return context.getNoBackupFilesDir(); } @NonNull public static File[] getObbDirs(@NonNull Context context) { return context.getObbDirs(); } @Nullable public static T getSystemService(@NonNull Context context, @NonNull Class cls) { if (Build.VERSION.SDK_INT >= 23) { return (T) context.getSystemService(cls); } String systemServiceName = getSystemServiceName(context, cls); if (systemServiceName != null) { return (T) context.getSystemService(systemServiceName); } return null; } @Nullable public static String getSystemServiceName(@NonNull Context context, @NonNull Class cls) { return Build.VERSION.SDK_INT >= 23 ? context.getSystemServiceName(cls) : LegacyServiceMapHolder.SERVICES.get(cls); } public static boolean isDeviceProtectedStorage(@NonNull Context context) { if (Build.VERSION.SDK_INT >= 24) { return context.isDeviceProtectedStorage(); } return false; } public static boolean startActivities(@NonNull Context context, @NonNull Intent[] intentArr) { return startActivities(context, intentArr, null); } public static boolean startActivities(@NonNull Context context, @NonNull Intent[] intentArr, @Nullable Bundle bundle) { context.startActivities(intentArr, bundle); return true; } public static void startActivity(@NonNull Context context, @NonNull Intent intent, @Nullable Bundle bundle) { context.startActivity(intent, bundle); } public static void startForegroundService(@NonNull Context context, @NonNull Intent intent) { if (Build.VERSION.SDK_INT >= 26) { context.startForegroundService(intent); } else { context.startService(intent); } } }