package com.jiepier.filemanager.ui.main; import android.app.DialogFragment; import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; import android.os.AsyncTask; import android.os.Environment; import android.support.annotation.NonNull; import android.support.v7.view.ActionMode; import android.view.Menu; import android.view.MenuItem; import com.afollestad.materialdialogs.folderselector.FolderChooserDialog; import com.jiepier.filemanager.R; import com.jiepier.filemanager.base.BaseDrawerActivity; import com.jiepier.filemanager.event.CleanChoiceEvent; import com.jiepier.filemanager.task.PasteTaskExecutor; import com.jiepier.filemanager.task.UnzipTask; import com.jiepier.filemanager.task.ZipTask; import com.jiepier.filemanager.util.ClipBoard; import com.jiepier.filemanager.util.FileUtil; import com.jiepier.filemanager.util.ResourceUtil; import com.jiepier.filemanager.util.RxBus.RxBus; import com.jiepier.filemanager.util.StatusBarUtil; import java.io.File; public class MainActivity extends BaseDrawerActivity implements ActionMode.Callback, FolderChooserDialog.FolderCallback, MainContact.View { private MainPresenter mPresenter; private ActionMode mActionMode; private ScannerReceiver mScannerReceiver; private UnInstallReceiver mUninstallReceiver; private int mChoiceCount; @Override public void initUiAndListener() { super.initUiAndListener(); //扫描sd卡的广播 mScannerReceiver = new ScannerReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED); intentFilter.addDataScheme("file"); registerReceiver(mScannerReceiver, intentFilter); //进入界面就开始扫描,进行数据更新,时间特别长,一分钟左右 Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); intent.setData(Uri.fromFile(new File(Environment.getExternalStorageDirectory().getPath()))); sendBroadcast(intent); //监听应用卸载的广播 mUninstallReceiver = new UnInstallReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_PACKAGE_ADDED); filter.addAction(Intent.ACTION_PACKAGE_REMOVED); filter.addAction(Intent.ACTION_PACKAGE_REPLACED); filter.addDataScheme("package"); registerReceiver(mUninstallReceiver, filter); mPresenter = new MainPresenter(this); mPresenter.attachView(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.menu_main, menu); menu.findItem(R.id.paste).setVisible(!ClipBoard.isEmpty()); menu.findItem(R.id.cancel).setVisible(!ClipBoard.isEmpty()); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.cancel: mPresenter.clickCancel(); return true; case R.id.paste: new PasteTaskExecutor(this, mSdCardFragment.getCurrentPath()).start(); return true; case R.id.folderinfo: mPresenter.clickFloderInfo(mSdCardFragment.getCurrentPath()); return true; } return super.onOptionsItemSelected(item); } @Override public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { this.mActionMode = actionMode; return true; } @Override public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) { menu.clear(); getMenuInflater().inflate(R.menu.actionmode, menu); if (mChoiceCount > 1) { menu.removeItem(R.id.actionrename); menu.removeItem(R.id.actionopen); } return true; } @Override public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) { switch (menuItem.getItemId()) { case R.id.actionmove: mPresenter.clickMove(); return true; case R.id.actioncopy: mPresenter.clickCopy(); return true; case R.id.actiondelete: mPresenter.clickDelete(); return true; case R.id.actionshare: mPresenter.clickShare(); return true; case R.id.actionshortcut: mPresenter.clickShortCut(); return true; case R.id.actionzip: mPresenter.clickZip(mSdCardFragment.getCurrentPath()); return true; case R.id.actionrename: mPresenter.clickRename(mSdCardFragment.getCurrentPath()); return true; case R.id.actionopen: mPresenter.clickOpenMode(); return true; case R.id.actionall: mPresenter.clickSelectAll(mSdCardFragment.getCurrentPath()); return true; default: return false; } } @Override public void onDestroyActionMode(ActionMode actionMode) { this.mActionMode = null; RxBus.getDefault().post(new CleanChoiceEvent()); } @Override public void onFolderSelection(@NonNull FolderChooserDialog dialog, @NonNull File folder) { mPresenter.folderSelect(dialog, folder); } @Override public void cretaeActionMode() { if (mActionMode == null) { mActionMode = startSupportActionMode(this); StatusBarUtil.setColor(this, ResourceUtil.getThemeColor(this), 0); } } @Override public void finishActionMode() { if (mActionMode != null) { mActionMode.finish(); } } @Override public void refreshMenu() { invalidateOptionsMenu(); } @Override public void setActionModeTitle(String title) { mActionMode.setTitle(title); } @Override public void createShortCut(String[] files) { for (String file : files) { FileUtil.createShortcut(this, file); } } @Override public void showDialog(DialogFragment dialog) { dialog.show(fm_v4, TAG_DIALOG); } @Override public void showFolderDialog(String TAG) { new FolderChooserDialog.Builder(this) .chooseButton(R.string.md_choose_label) // changes label of the choose button .initialPath(mSdCardFragment.getCurrentPath()) // changes initial path, defaults to external storage directory .tag(TAG) .goUpLabel("Up") // custom go up label, default label is "..." .show(); } @Override public void startShareActivity(Intent intent) { startActivity(Intent.createChooser(intent, getString(R.string.share))); } @Override public void setChoiceCount(int count) { this.mChoiceCount = count; } @Override public void startZipTask(String fileName, String[] files) { final ZipTask task = new ZipTask(this, fileName); task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, files); } @Override public void startUnZipTask(File unZipFile, File folder) { UnzipTask task = new UnzipTask(this); task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, unZipFile, folder); } @Override protected void onDestroy() { super.onDestroy(); mPresenter.detachView(); unregisterReceiver(mScannerReceiver); unregisterReceiver(mUninstallReceiver); } }