package com.ihewro.focus.activity; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.widget.FrameLayout; import android.widget.Toast; import com.afollestad.materialdialogs.folderselector.FileChooserDialog; import com.ihewro.focus.R; import com.ihewro.focus.bean.EventMessage; import com.ihewro.focus.bean.Feed; import com.ihewro.focus.bean.FeedRequire; import com.ihewro.focus.bean.Help; import com.ihewro.focus.fragemnt.FeedFolderListManageFragment; import com.ihewro.focus.fragemnt.FeedListManageFragment; import com.ihewro.focus.util.OPMLCreateHelper; import com.ihewro.focus.util.OPMLReadHelper; import com.ihewro.focus.view.RequireListPopupView; import com.lxj.xpopup.XPopup; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Objects; import butterknife.BindView; import butterknife.ButterKnife; import es.dmoral.toasty.Toasty; import pub.devrel.easypermissions.AppSettingsDialog; import pub.devrel.easypermissions.EasyPermissions; /** * 分类管理页面,对分类、分类文件夹增加、删除、修改、排序 */ public class FeedManageActivity extends BackActivity implements EasyPermissions.PermissionCallbacks,FileChooserDialog.FileCallback { @BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.fl_main_body) FrameLayout flMainBody; private Fragment currentFragment = null; OPMLReadHelper opmlReadHelper; OPMLCreateHelper opmlCreateHelper; private FeedListManageFragment feedListManageFragment; private FeedFolderListManageFragment feedFolderListManageFragment; public static void activityStart(Activity activity) { Intent intent = new Intent(activity, FeedManageActivity.class); activity.startActivity(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_feed_manage); ButterKnife.bind(this); EventBus.getDefault().register(this); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); showFeedFolderListManageFragment(); } /** * 显示订阅文件中订阅列表的碎片 * * @param id */ private void showFeedListManageFragment(int id) { if (feedListManageFragment == null) { feedListManageFragment = FeedListManageFragment.newInstance(id); }else { //更新数据 feedListManageFragment.updateData(id); } addOrShowFragment(getSupportFragmentManager().beginTransaction(), feedListManageFragment); } /** * 初始化主fragment */ private void showFeedFolderListManageFragment() { if (feedFolderListManageFragment == null) { feedFolderListManageFragment = FeedFolderListManageFragment.newInstance(); } addOrShowFragment(getSupportFragmentManager().beginTransaction(), feedFolderListManageFragment); } /** * 添加或者显示 fragment * * @param transaction * @param fragment */ private void addOrShowFragment(FragmentTransaction transaction, Fragment fragment) { transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); //设置动画 transaction.setCustomAnimations( R.anim.right_in, R.anim.right_out); //当前的fragment就是点击切换的目标fragment,则不用操作 if (currentFragment == fragment) { return; } Fragment willCloseFragment = currentFragment;//上一个要切换掉的碎片 currentFragment = fragment;//当前要显示的碎片 if (willCloseFragment != null) { transaction.hide(willCloseFragment); } if (!fragment.isAdded()) { // 如果当前fragment未被添加,则添加到Fragment管理器中 transaction.add(R.id.fl_main_body, currentFragment).commitAllowingStateLoss(); } else { transaction.show(currentFragment).commitAllowingStateLoss(); } } @Subscribe(threadMode = ThreadMode.MAIN, sticky = true) public void refreshUI(EventMessage eventBusMessage) { //切换进入feedListFragment if (Objects.equals(eventBusMessage.getType(), EventMessage.SHOW_FEED_LIST_MANAGE)) { int id = Integer.parseInt(eventBusMessage.getMessage()); showFeedListManageFragment(id); }else if (Objects.equals(eventBusMessage.getType(), EventMessage.SHOW_FEED_FOLDER_MANAGE)){ showFeedFolderListManageFragment(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.add, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); switch (item.getItemId()){ case R.id.action_import://导入 opmlReadHelper = new OPMLReadHelper(FeedManageActivity.this); opmlReadHelper.run(); break; case R.id.action_export://导出 opmlCreateHelper = new OPMLCreateHelper(FeedManageActivity.this); opmlCreateHelper.run(); break; case R.id.action_add_by_url: //弹窗 List<FeedRequire> list = new ArrayList<>(); list.add(new FeedRequire("订阅地址","举例:https://www.ihewro.com/feed",FeedRequire.SET_URL)); list.add(new FeedRequire("订阅名称","随意给订阅取一个名字",FeedRequire.SET_NAME)); new XPopup.Builder(FeedManageActivity.this) // .moveUpToKeyboard(false) //如果不加这个,评论弹窗会移动到软键盘上面 .asCustom(new RequireListPopupView(FeedManageActivity.this,list,"手动订阅","适用于高级玩家",new Help(false),new Feed(),getSupportFragmentManager())) .show(); break; } return true; } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); /** * 2. easyPermission 接管权限管理 * {@link OPMLReadHelper#run} */ EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); } @Override public void onBackPressed() { if (currentFragment == null || currentFragment == feedFolderListManageFragment){ finish(); }else if(currentFragment == feedListManageFragment){ showFeedFolderListManageFragment(); } } @Override public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) { //3.1 申请成功 if (requestCode == OPMLReadHelper.RQUEST_STORAGE_READ){ if (opmlReadHelper==null){ opmlReadHelper = new OPMLReadHelper(FeedManageActivity.this); } opmlReadHelper.run(); }else if (requestCode == OPMLCreateHelper.REQUEST_STORAGE_WRITE){ if (opmlCreateHelper==null){ opmlCreateHelper = new OPMLCreateHelper(FeedManageActivity.this); } opmlCreateHelper.run(); } } @Override public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) { //3.2 申请失败 // 用户因为之前点了不再显示权限申请提示导致的申请失败,显示一个引导去设置界面的对话框 if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) { new AppSettingsDialog.Builder(this).build().show(); }else {//用户拒绝的申请,显示通知 Toasty.error(FeedManageActivity.this,"请允许读存储器的权限,这样才能导入文件哦!").show(); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //处理3.2 的第一种情况 if (requestCode == AppSettingsDialog.DEFAULT_SETTINGS_REQ_CODE) { Toast.makeText(this, "从设置界面返回", Toast.LENGTH_SHORT) .show(); } } @Override public void onFileSelection(@NonNull FileChooserDialog dialog, @NonNull File file) { //选择了某个文件 opmlReadHelper.add(file.getAbsolutePath()); } @Override public void onFileChooserDismissed(@NonNull FileChooserDialog dialog) { } @Override protected void onDestroy() { super.onDestroy(); if (EventBus.getDefault().isRegistered(this)){ EventBus.getDefault().unregister(this); } } }