package io.github.mayubao.kuaichuan.ui; import android.Manifest; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.content.ContextCompat; import android.support.v4.view.ViewPager; import android.support.v7.widget.SearchView; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import butterknife.Bind; import butterknife.ButterKnife; import butterknife.OnClick; import io.github.mayubao.kuaichuan.AppContext; import io.github.mayubao.kuaichuan.Constant; import io.github.mayubao.kuaichuan.R; import io.github.mayubao.kuaichuan.common.BaseActivity; import io.github.mayubao.kuaichuan.core.entity.FileInfo; import io.github.mayubao.kuaichuan.core.receiver.SeletedFileListChangedBroadcastReceiver; import io.github.mayubao.kuaichuan.core.utils.ToastUtils; import io.github.mayubao.kuaichuan.ui.fragment.FileInfoFragment; import io.github.mayubao.kuaichuan.ui.view.ShowSelectedFileInfoDialog; import io.github.mayubao.kuaichuan.utils.NavigatorUtils; public class ChooseFileActivity extends BaseActivity { /** * 获取文件的请求码 */ public static final int REQUEST_CODE_GET_FILE_INFOS = 200; /** * Topbar相关UI */ @Bind(R.id.tv_back) TextView tv_back; @Bind(R.id.iv_search) ImageView iv_search; @Bind(R.id.search_view) SearchView search_view; @Bind(R.id.tv_title) TextView tv_title; /** * BottomBar相关UI */ @Bind(R.id.btn_selected) Button btn_selected; @Bind(R.id.btn_next) Button btn_next; /** * 其他UI */ @Bind(R.id.tab_layout) TabLayout tab_layout; @Bind(R.id.view_pager) ViewPager view_pager; /** * 应用,图片,音频, 视频 文件Fragment */ FileInfoFragment mCurrentFragment; FileInfoFragment mApkInfoFragment; FileInfoFragment mJpgInfoFragment; FileInfoFragment mMp3InfoFragment; FileInfoFragment mMp4InfoFragment; /** * 选中文件列表的对话框 */ ShowSelectedFileInfoDialog mShowSelectedFileInfoDialog; /** * 更新文件列表的广播 */ SeletedFileListChangedBroadcastReceiver mSeletedFileListChangedBroadcastReceiver = null; /** * 网页传标识 */ private boolean mIsWebTransfer = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_choose_file); ButterKnife.bind(this); init(); } @Override protected void onDestroy() { if(mSeletedFileListChangedBroadcastReceiver != null){ unregisterReceiver(mSeletedFileListChangedBroadcastReceiver); mSeletedFileListChangedBroadcastReceiver = null; } super.onDestroy(); } /** * 初始化 */ private void init(){ tv_title.setText(getResources().getString(R.string.title_choose_file)); tv_title.setVisibility(View.VISIBLE); iv_search.setVisibility(View.INVISIBLE); search_view.setVisibility(View.GONE); mIsWebTransfer = getIntent().getBooleanExtra(Constant.KEY_WEB_TRANSFER_FLAG, false); //Android6.0 requires android.permission.READ_EXTERNAL_STORAGE //TODO if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_CODE_GET_FILE_INFOS); }else{ initData();//初始化数据 } } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == REQUEST_CODE_GET_FILE_INFOS) { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { initData(); } else { // Permission Denied ToastUtils.show(this, getResources().getString(R.string.tip_permission_denied_and_not_get_file_info_list)); } return; } super.onRequestPermissionsResult(requestCode, permissions, grantResults); } /** * 初始化数据 */ private void initData() { mApkInfoFragment = FileInfoFragment.newInstance(FileInfo.TYPE_APK); mJpgInfoFragment = FileInfoFragment.newInstance(FileInfo.TYPE_JPG); mMp3InfoFragment = FileInfoFragment.newInstance(FileInfo.TYPE_MP3); mMp4InfoFragment = FileInfoFragment.newInstance(FileInfo.TYPE_MP4); mCurrentFragment = mApkInfoFragment; String[] titles = getResources().getStringArray(R.array.array_res); view_pager.setAdapter(new ResPagerAdapter(getSupportFragmentManager(), titles)); view_pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { // <item>应用</item> // <item>图片</item> // <item>音乐</item> // <item>视频</item> if (position == 0) { //应用 } else if (position == 1) { //图片 } else if (position == 2) { //音乐 } else if (position == 3) { //视频 } } @Override public void onPageScrollStateChanged(int state) { } }); view_pager.setOffscreenPageLimit(4); tab_layout.setTabMode(TabLayout.MODE_FIXED); tab_layout.setupWithViewPager(view_pager); setSelectedViewStyle(false); mShowSelectedFileInfoDialog = new ShowSelectedFileInfoDialog(getContext()); mSeletedFileListChangedBroadcastReceiver = new SeletedFileListChangedBroadcastReceiver() { @Override public void onSeletecdFileListChanged() { //TODO udpate file list update(); Log.i(TAG, "======>>>udpate file list"); } }; IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(SeletedFileListChangedBroadcastReceiver.ACTION_CHOOSE_FILE_LIST_CHANGED); registerReceiver(mSeletedFileListChangedBroadcastReceiver, intentFilter); } /** * 更新选中文件列表的状态 */ private void update(){ if(mApkInfoFragment != null) mApkInfoFragment.updateFileInfoAdapter(); if(mJpgInfoFragment != null) mJpgInfoFragment.updateFileInfoAdapter(); if(mMp3InfoFragment != null) mMp3InfoFragment.updateFileInfoAdapter(); if(mMp4InfoFragment != null) mMp4InfoFragment.updateFileInfoAdapter(); //更新已选中Button getSelectedView(); } @OnClick({R.id.tv_back, R.id.btn_selected, R.id.btn_next, R.id.iv_search}) public void onClick(View view){ switch (view.getId()){ case R.id.tv_back:{ this.finish(); break; } case R.id.btn_selected:{ // btn_selected.setEnabled(false); // new ShowSelectedFileInfoDialog(getContext()).show(); if(mShowSelectedFileInfoDialog != null){ mShowSelectedFileInfoDialog.show(); } break; } case R.id.btn_next:{ // btn_selected.setEnabled(false); // btn_selected.setBackgroundResource(R.drawable.shape_bottom_text_unenable); // btn_selected.setTextColor(getResources().getColor(R.color.darker_gray)); if(!AppContext.getAppContext().isFileInfoMapExist()){//不存在选中的文件 ToastUtils.show(getContext(), getContext().getString(R.string.tip_please_select_your_file)); return; } if(mIsWebTransfer){ //跳转到网页传 NavigatorUtils.toWebTransferUI(getContext()); return; } //跳转到应用间传输 NavigatorUtils.toChooseReceiverUI(getContext()); break; } case R.id.iv_search:{ btn_selected.setEnabled(true); btn_selected.setBackgroundResource(R.drawable.selector_bottom_text_common); btn_selected.setTextColor(getResources().getColor(R.color.colorPrimary)); break; } } } /** * 获取选中文件的View * @return */ public View getSelectedView(){ //获取SelectedView的时候 触发选择文件 if(AppContext.getAppContext().getFileInfoMap() != null && AppContext.getAppContext().getFileInfoMap().size() > 0 ){ setSelectedViewStyle(true); int size = AppContext.getAppContext().getFileInfoMap().size(); btn_selected.setText(getContext().getResources().getString(R.string.str_has_selected_detail, size)); }else{ setSelectedViewStyle(false); btn_selected.setText(getContext().getResources().getString(R.string.str_has_selected)); } return btn_selected; } /** * 设置选中View的样式 * @param isEnable */ private void setSelectedViewStyle(boolean isEnable){ if(isEnable){ btn_selected.setEnabled(true); btn_selected.setBackgroundResource(R.drawable.selector_bottom_text_common); btn_selected.setTextColor(getResources().getColor(R.color.colorPrimary)); }else{ btn_selected.setEnabled(false); btn_selected.setBackgroundResource(R.drawable.shape_bottom_text_unenable); btn_selected.setTextColor(getResources().getColor(R.color.darker_gray)); } } /** * 资源的PagerAdapter */ class ResPagerAdapter extends FragmentPagerAdapter { String[] sTitleArray; public ResPagerAdapter(FragmentManager fm) { super(fm); } public ResPagerAdapter(FragmentManager fm, String[] sTitleArray) { this(fm); this.sTitleArray = sTitleArray; } @Override public Fragment getItem(int position) { if(position == 0){ //应用 mCurrentFragment = mApkInfoFragment; }else if(position == 1){ //图片 mCurrentFragment = mJpgInfoFragment; }else if(position == 2){ //音乐 mCurrentFragment = mMp3InfoFragment; }else if(position == 3){ //视频 mCurrentFragment = mMp4InfoFragment; } return mCurrentFragment; } @Override public int getCount() { return sTitleArray.length; } @Override public CharSequence getPageTitle(int position) { return sTitleArray[position]; } } }