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