blob: 0bf9ee4820a39ec1fdb8810a2617e0f012e441b3 [file] [log] [blame]
// Copyright 2019 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.plugins.pathprovider;
import android.content.Context;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import androidx.annotation.NonNull;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugin.common.PluginRegistry.Registrar;
import io.flutter.util.PathUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class PathProviderPlugin implements FlutterPlugin, MethodCallHandler {
private Context context;
private MethodChannel channel;
public PathProviderPlugin() {}
public static void registerWith(Registrar registrar) {
PathProviderPlugin instance = new PathProviderPlugin();
instance.channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/path_provider");
instance.context = registrar.context();
instance.channel.setMethodCallHandler(instance);
}
@Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding binding) {
channel =
new MethodChannel(
binding.getFlutterEngine().getDartExecutor(), "plugins.flutter.io/path_provider");
context = binding.getApplicationContext();
channel.setMethodCallHandler(this);
}
@Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
channel.setMethodCallHandler(null);
channel = null;
}
@Override
public void onMethodCall(MethodCall call, @NonNull Result result) {
switch (call.method) {
case "getTemporaryDirectory":
result.success(getPathProviderTemporaryDirectory());
break;
case "getApplicationDocumentsDirectory":
result.success(getPathProviderApplicationDocumentsDirectory());
break;
case "getStorageDirectory":
result.success(getPathProviderStorageDirectory());
break;
case "getExternalCacheDirectories":
result.success(getPathProviderExternalCacheDirectories());
break;
case "getExternalStorageDirectories":
final Integer type = call.argument("type");
final String directoryName = StorageDirectoryMapper.androidType(type);
result.success(getPathProviderExternalStorageDirectories(directoryName));
break;
case "getApplicationSupportDirectory":
result.success(getApplicationSupportDirectory());
break;
default:
result.notImplemented();
}
}
private String getPathProviderTemporaryDirectory() {
return context.getCacheDir().getPath();
}
private String getApplicationSupportDirectory() {
return PathUtils.getFilesDir(context);
}
private String getPathProviderApplicationDocumentsDirectory() {
return PathUtils.getDataDirectory(context);
}
private String getPathProviderStorageDirectory() {
final File dir = context.getExternalFilesDir(null);
if (dir == null) {
return null;
}
return dir.getAbsolutePath();
}
private List<String> getPathProviderExternalCacheDirectories() {
final List<String> paths = new ArrayList<>();
if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
for (File dir : context.getExternalCacheDirs()) {
if (dir != null) {
paths.add(dir.getAbsolutePath());
}
}
} else {
File dir = context.getExternalCacheDir();
if (dir != null) {
paths.add(dir.getAbsolutePath());
}
}
return paths;
}
private List<String> getPathProviderExternalStorageDirectories(String type) {
final List<String> paths = new ArrayList<>();
if (VERSION.SDK_INT >= VERSION_CODES.KITKAT) {
for (File dir : context.getExternalFilesDirs(type)) {
if (dir != null) {
paths.add(dir.getAbsolutePath());
}
}
} else {
File dir = context.getExternalFilesDir(type);
if (dir != null) {
paths.add(dir.getAbsolutePath());
}
}
return paths;
}
}