blob: 5f3f7bd6845e45e5d5cb41def65960b301f3e708 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package io.flutter.util;
import android.content.Context;
import android.os.Build;
import androidx.annotation.NonNull;
import java.io.File;
public final class PathUtils {
@NonNull
public static String getFilesDir(@NonNull Context applicationContext) {
File filesDir = applicationContext.getFilesDir();
if (filesDir == null) {
filesDir = new File(getDataDirPath(applicationContext), "files");
}
return filesDir.getPath();
}
@NonNull
public static String getDataDirectory(@NonNull Context applicationContext) {
final String name = "flutter";
File flutterDir = applicationContext.getDir(name, Context.MODE_PRIVATE);
if (flutterDir == null) {
flutterDir = new File(getDataDirPath(applicationContext), "app_" + name);
}
return flutterDir.getPath();
}
@NonNull
public static String getCacheDirectory(@NonNull Context applicationContext) {
File cacheDir;
if (Build.VERSION.SDK_INT >= 21) {
cacheDir = applicationContext.getCodeCacheDir();
if (cacheDir == null) {
cacheDir = applicationContext.getCacheDir();
}
} else {
cacheDir = applicationContext.getCacheDir();
}
if (cacheDir == null) {
// This can happen if the disk is full. This code path is used to set up dart:io's
// `Directory.systemTemp`. It's unknown if the application will ever try to
// use that or not, so do not throw here. In this case, this directory does
// not exist because the disk is full, and the application will later get an
// exception when it tries to actually write.
cacheDir = new File(getDataDirPath(applicationContext), "cache");
}
return cacheDir.getPath();
}
private static String getDataDirPath(Context applicationContext) {
if (Build.VERSION.SDK_INT >= 24) {
return applicationContext.getDataDir().getPath();
} else {
return applicationContext.getApplicationInfo().dataDir;
}
}
}