diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/FileActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/FileActivity.java
index c2098e9c3..2069beb14 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/FileActivity.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/FileActivity.java
@@ -1,5 +1,6 @@
package com.fongmi.android.tv.ui.activity;
+import android.Manifest;
import android.content.Intent;
import android.net.Uri;
@@ -12,6 +13,7 @@ import com.fongmi.android.tv.ui.base.BaseActivity;
import com.fongmi.android.tv.ui.presenter.FilePresenter;
import com.fongmi.android.tv.utils.ResUtil;
import com.github.catvod.utils.Path;
+import com.permissionx.guolindev.PermissionX;
import java.io.File;
@@ -33,7 +35,7 @@ public class FileActivity extends BaseActivity implements FilePresenter.OnClickL
@Override
protected void initView() {
setRecyclerView();
- update(Path.root());
+ PermissionX.init(this).permissions(Manifest.permission.WRITE_EXTERNAL_STORAGE).request((allGranted, grantedList, deniedList) -> update(Path.root()));
}
private void setRecyclerView() {
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FilePresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FilePresenter.java
index 19f90d664..419e49b01 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FilePresenter.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FilePresenter.java
@@ -35,7 +35,7 @@ public class FilePresenter extends Presenter {
ViewHolder holder = (ViewHolder) viewHolder;
holder.binding.name.setText(file.getName());
holder.binding.getRoot().setOnClickListener(v -> mListener.onItemClick(file));
- holder.binding.image.setImageResource(file.isDirectory() ? R.drawable.ic_file_folder : R.drawable.ic_file_file);
+ holder.binding.image.setImageResource(file.isDirectory() ? R.drawable.ic_folder : R.drawable.ic_file);
}
@Override
diff --git a/app/src/leanback/res/layout/activity_file.xml b/app/src/leanback/res/layout/activity_file.xml
index 7d8ce1464..6437288ae 100644
--- a/app/src/leanback/res/layout/activity_file.xml
+++ b/app/src/leanback/res/layout/activity_file.xml
@@ -7,6 +7,8 @@
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:clipChildren="false"
+ android:clipToPadding="false"
android:padding="24dp" />
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/adapter_file.xml b/app/src/leanback/res/layout/adapter_file.xml
index 05c9b0d70..7090bdf4a 100644
--- a/app/src/leanback/res/layout/adapter_file.xml
+++ b/app/src/leanback/res/layout/adapter_file.xml
@@ -14,13 +14,13 @@
android:gravity="center_vertical"
android:orientation="horizontal">
-
+ tools:src="@drawable/ic_folder" />
+
+
update(Path.root()));
+ }
+
+ private void setRecyclerView() {
+ mBinding.recycler.setHasFixedSize(true);
+ mBinding.recycler.setAdapter(mAdapter = new FileAdapter(this));
+ }
+
+ private void update(File dir) {
+ mBinding.recycler.scrollToPosition(0);
+ mAdapter.addAll(Path.list(this.dir = dir));
+ }
+
+ @Override
+ public void onItemClick(File file) {
+ if (file.isDirectory()) {
+ update(file);
+ } else {
+ setResult(RESULT_OK, new Intent().setData(Uri.fromFile(file)));
+ finish();
+ }
+ }
+
+ @Override
+ public void onBackPressed() {
+ if (isRoot()) {
+ super.onBackPressed();
+ } else {
+ update(dir.getParentFile());
+ }
+ }
+}
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/FileAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/FileAdapter.java
new file mode 100644
index 000000000..8e0609079
--- /dev/null
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/FileAdapter.java
@@ -0,0 +1,65 @@
+package com.fongmi.android.tv.ui.adapter;
+
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
+
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.fongmi.android.tv.R;
+import com.fongmi.android.tv.databinding.AdapterFileBinding;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+public class FileAdapter extends RecyclerView.Adapter {
+
+ private final OnClickListener mListener;
+ private final List mItems;
+
+ public FileAdapter(OnClickListener listener) {
+ this.mItems = new ArrayList<>();
+ this.mListener = listener;
+ }
+
+ public interface OnClickListener {
+
+ void onItemClick(File file);
+ }
+
+ public void addAll(List items) {
+ mItems.clear();
+ mItems.addAll(items);
+ notifyDataSetChanged();
+ }
+
+ @Override
+ public int getItemCount() {
+ return mItems.size();
+ }
+
+ @NonNull
+ @Override
+ public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ return new ViewHolder(AdapterFileBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
+ }
+
+ @Override
+ public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
+ File file = mItems.get(position);
+ holder.binding.name.setText(file.getName());
+ holder.binding.getRoot().setOnClickListener(v -> mListener.onItemClick(file));
+ holder.binding.image.setImageResource(file.isDirectory() ? R.drawable.ic_folder : R.drawable.ic_file);
+ }
+
+ static class ViewHolder extends RecyclerView.ViewHolder {
+
+ private final AdapterFileBinding binding;
+
+ ViewHolder(@NonNull AdapterFileBinding binding) {
+ super(binding.getRoot());
+ this.binding = binding;
+ }
+ }
+}
diff --git a/app/src/mobile/res/layout/activity_file.xml b/app/src/mobile/res/layout/activity_file.xml
new file mode 100644
index 000000000..1e5c5e7d6
--- /dev/null
+++ b/app/src/mobile/res/layout/activity_file.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/mobile/res/layout/adapter_file.xml b/app/src/mobile/res/layout/adapter_file.xml
new file mode 100644
index 000000000..9e9439e50
--- /dev/null
+++ b/app/src/mobile/res/layout/adapter_file.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
\ No newline at end of file