Add choose file for config

pull/589/head
FongMi 1 year ago
parent 25c55dc72e
commit f338f5c8d5
  1. 2
      app/src/leanback/AndroidManifest.xml
  2. 12
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/FileActivity.java
  3. 11
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java
  4. 11
      app/src/leanback/java/com/fongmi/android/tv/ui/dialog/ConfigDialog.java
  5. 14
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/FilePresenter.java
  6. 0
      app/src/leanback/res/drawable/ic_file_file.xml
  7. 0
      app/src/leanback/res/drawable/ic_file_folder.xml
  8. 0
      app/src/leanback/res/layout/activity_file.xml
  9. 2
      app/src/leanback/res/layout/adapter_file.xml
  10. 4
      app/src/leanback/res/layout/dialog_config.xml
  11. 6
      app/src/main/java/com/fongmi/android/tv/utils/FileChooser.java
  12. 2
      app/src/main/res/values-zh-rCN/strings.xml
  13. 2
      app/src/main/res/values-zh-rTW/strings.xml
  14. 2
      app/src/main/res/values/strings.xml

@ -136,7 +136,7 @@
android:screenOrientation="sensorLandscape" />
<activity
android:name=".ui.activity.PickerActivity"
android:name=".ui.activity.FileActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
android:screenOrientation="sensorLandscape" />

@ -7,17 +7,17 @@ import androidx.leanback.widget.ArrayObjectAdapter;
import androidx.leanback.widget.ItemBridgeAdapter;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.databinding.ActivityPickerBinding;
import com.fongmi.android.tv.databinding.ActivityFileBinding;
import com.fongmi.android.tv.ui.base.BaseActivity;
import com.fongmi.android.tv.ui.presenter.PickPresenter;
import com.fongmi.android.tv.ui.presenter.FilePresenter;
import com.fongmi.android.tv.utils.ResUtil;
import com.github.catvod.utils.Path;
import java.io.File;
public class PickerActivity extends BaseActivity implements PickPresenter.OnClickListener {
public class FileActivity extends BaseActivity implements FilePresenter.OnClickListener {
private ActivityPickerBinding mBinding;
private ActivityFileBinding mBinding;
private ArrayObjectAdapter mAdapter;
private File dir;
@ -27,7 +27,7 @@ public class PickerActivity extends BaseActivity implements PickPresenter.OnClic
@Override
protected ViewBinding getBinding() {
return mBinding = ActivityPickerBinding.inflate(getLayoutInflater());
return mBinding = ActivityFileBinding.inflate(getLayoutInflater());
}
@Override
@ -39,7 +39,7 @@ public class PickerActivity extends BaseActivity implements PickPresenter.OnClic
private void setRecyclerView() {
mBinding.recycler.setHasFixedSize(true);
mBinding.recycler.setVerticalSpacing(ResUtil.dp2px(16));
mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(new PickPresenter(this))));
mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(new FilePresenter(this))));
}
private void update(File dir) {

@ -35,17 +35,21 @@ import com.fongmi.android.tv.ui.dialog.LiveDialog;
import com.fongmi.android.tv.ui.dialog.ProxyDialog;
import com.fongmi.android.tv.ui.dialog.RestoreDialog;
import com.fongmi.android.tv.ui.dialog.SiteDialog;
import com.fongmi.android.tv.utils.FileChooser;
import com.fongmi.android.tv.utils.FileUtil;
import com.fongmi.android.tv.utils.Notify;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.UrlUtil;
import com.github.catvod.bean.Doh;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Path;
import com.permissionx.guolindev.PermissionX;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nullable;
public class SettingActivity extends BaseActivity implements ConfigCallback, SiteCallback, LiveCallback, DohCallback, ProxyCallback {
private ActivitySettingBinding mBinding;
@ -387,4 +391,11 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit
LiveConfig.get().init().load();
VodConfig.get().init().load(getCallback(0));
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode != Activity.RESULT_OK || requestCode != FileChooser.REQUEST_PICK_FILE) return;
setConfig(Config.find("file:/" + FileChooser.getPathFromUri(this, data.getData()).replace(Path.rootPath(), ""), type));
}
}

@ -1,6 +1,5 @@
package com.fongmi.android.tv.ui.dialog;
import android.Manifest;
import android.content.DialogInterface;
import android.text.TextUtils;
import android.view.LayoutInflater;
@ -21,10 +20,10 @@ import com.fongmi.android.tv.event.ServerEvent;
import com.fongmi.android.tv.impl.ConfigCallback;
import com.fongmi.android.tv.server.Server;
import com.fongmi.android.tv.ui.custom.CustomTextListener;
import com.fongmi.android.tv.utils.FileChooser;
import com.fongmi.android.tv.utils.QRCode;
import com.fongmi.android.tv.utils.ResUtil;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.permissionx.guolindev.PermissionX;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@ -84,12 +83,11 @@ public class ConfigDialog implements DialogInterface.OnDismissListener {
binding.positive.setText(edit ? R.string.dialog_edit : R.string.dialog_positive);
binding.code.setImageBitmap(QRCode.getBitmap(Server.get().getAddress(3), 200, 0));
binding.info.setText(ResUtil.getString(R.string.push_info, Server.get().getAddress()).replace(",", "\n"));
binding.storage.setVisibility(PermissionX.isGranted(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) ? View.GONE : View.VISIBLE);
}
private void initEvent() {
EventBus.getDefault().register(this);
binding.storage.setOnClickListener(this::onStorage);
binding.choose.setOnClickListener(this::onChoose);
binding.positive.setOnClickListener(this::onPositive);
binding.negative.setOnClickListener(this::onNegative);
binding.text.addTextChangedListener(new CustomTextListener() {
@ -117,8 +115,9 @@ public class ConfigDialog implements DialogInterface.OnDismissListener {
}
}
private void onStorage(View view) {
PermissionX.init(activity).permissions(Manifest.permission.WRITE_EXTERNAL_STORAGE).request((allGranted, grantedList, deniedList) -> binding.storage.setVisibility(allGranted ? View.GONE : View.VISIBLE));
private void onChoose(View view) {
FileChooser.from(activity).show();
dialog.dismiss();
}
private void detect(String s) {

@ -7,15 +7,15 @@ import androidx.annotation.NonNull;
import androidx.leanback.widget.Presenter;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.databinding.AdapterPickerBinding;
import com.fongmi.android.tv.databinding.AdapterFileBinding;
import java.io.File;
public class PickPresenter extends Presenter {
public class FilePresenter extends Presenter {
private final OnClickListener mListener;
public PickPresenter(OnClickListener listener) {
public FilePresenter(OnClickListener listener) {
this.mListener = listener;
}
@ -26,7 +26,7 @@ public class PickPresenter extends Presenter {
@Override
public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {
return new ViewHolder(AdapterPickerBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
return new ViewHolder(AdapterFileBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
}
@Override
@ -35,7 +35,7 @@ public class PickPresenter 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_picker_folder : R.drawable.ic_picker_file);
holder.binding.image.setImageResource(file.isDirectory() ? R.drawable.ic_file_folder : R.drawable.ic_file_file);
}
@Override
@ -44,9 +44,9 @@ public class PickPresenter extends Presenter {
public static class ViewHolder extends Presenter.ViewHolder {
private final AdapterPickerBinding binding;
private final AdapterFileBinding binding;
public ViewHolder(@NonNull AdapterPickerBinding binding) {
public ViewHolder(@NonNull AdapterFileBinding binding) {
super(binding.getRoot());
this.binding = binding;
}

@ -20,7 +20,7 @@
android:layout_height="48dp"
android:layout_margin="16dp"
android:scaleType="fitCenter"
tools:src="@drawable/ic_picker_folder" />
tools:src="@drawable/ic_file_folder" />
<TextView
android:id="@+id/name"

@ -57,7 +57,7 @@
android:orientation="horizontal">
<TextView
android:id="@+id/storage"
android:id="@+id/choose"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
@ -67,7 +67,7 @@
android:focusableInTouchMode="true"
android:gravity="center"
android:singleLine="true"
android:text="@string/setting_storage"
android:text="@string/setting_choose"
android:textColor="@color/white"
android:textSize="14sp" />

@ -15,7 +15,7 @@ import android.provider.MediaStore;
import androidx.fragment.app.Fragment;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.ui.activity.PickerActivity;
import com.fongmi.android.tv.ui.activity.FileActivity;
import com.github.catvod.utils.Path;
import java.io.File;
@ -68,8 +68,8 @@ public class FileChooser {
if (activity != null) activity.startActivityForResult(Intent.createChooser(intent, ""), code);
if (fragment != null) fragment.startActivityForResult(Intent.createChooser(intent, ""), code);
} else {
if (activity != null) activity.startActivityForResult(new Intent(activity, PickerActivity.class), code);
if (fragment != null) fragment.startActivityForResult(new Intent(fragment.getActivity(), PickerActivity.class), code);
if (activity != null) activity.startActivityForResult(new Intent(activity, FileActivity.class), code);
if (fragment != null) fragment.startActivityForResult(new Intent(fragment.getActivity(), FileActivity.class), code);
}
}

@ -75,7 +75,7 @@
<string name="setting_backup">备份</string>
<string name="setting_restore">恢复</string>
<string name="setting_version">版本</string>
<string name="setting_storage">权限</string>
<string name="setting_choose">选择</string>
<string name="setting_off"></string>
<string name="setting_on"></string>

@ -75,7 +75,7 @@
<string name="setting_backup">備份</string>
<string name="setting_restore">還原</string>
<string name="setting_version">版本</string>
<string name="setting_storage">權限</string>
<string name="setting_choose">選擇</string>
<string name="setting_off"></string>
<string name="setting_on"></string>

@ -76,7 +76,7 @@
<string name="setting_backup">Backup</string>
<string name="setting_restore">Restore</string>
<string name="setting_version">Version</string>
<string name="setting_storage">Permission</string>
<string name="setting_choose">Choose</string>
<string name="setting_off">Off</string>
<string name="setting_on">On</string>

Loading…
Cancel
Save