package com.seafile.seadroid2.ui.activity; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.view.ActionMode; import android.support.v7.widget.Toolbar; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import com.seafile.seadroid2.R; import com.seafile.seadroid2.notification.BaseNotificationProvider; import com.seafile.seadroid2.notification.DownloadNotificationProvider; import com.seafile.seadroid2.ui.adapter.TransferTaskAdapter; import com.seafile.seadroid2.ui.fragment.DownloadTaskFragment; import com.seafile.seadroid2.ui.fragment.UploadTaskFragment; public class TransferActivity extends BaseActivity implements Toolbar.OnMenuItemClickListener { private static final String DEBUG_TAG = "TransferActivity"; private TransferTaskAdapter.TaskType whichTab = TransferTaskAdapter.TaskType.DOWNLOAD_TASK; private TransferTabsAdapter tabsAdapter; private ViewPager pager; private TabLayout mTabLayout; private Menu overFlowMenu = null; @Override protected void onNewIntent(Intent intent) { Bundle extras = intent.getExtras(); if (extras != null) { if (extras.containsKey(BaseNotificationProvider.NOTIFICATION_MESSAGE_KEY)) { // extract the extra-data in the Notification String msg = extras.getString(BaseNotificationProvider.NOTIFICATION_MESSAGE_KEY); if (msg.equals(DownloadNotificationProvider.NOTIFICATION_OPEN_DOWNLOAD_TAB)) { whichTab = TransferTaskAdapter.TaskType.DOWNLOAD_TASK; pager.setCurrentItem(0); } else if (msg.equals(BaseNotificationProvider.NOTIFICATION_OPEN_UPLOAD_TAB)) { whichTab = TransferTaskAdapter.TaskType.UPLOAD_TASK; pager.setCurrentItem(1); } } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.transfer_list_layout); findViewById(R.id.view_toolbar_bottom_line).setVisibility(View.GONE); tabsAdapter = new TransferTabsAdapter(getSupportFragmentManager()); pager = (ViewPager) findViewById(R.id.transfer_list_pager); pager.setAdapter(tabsAdapter); mTabLayout = (TabLayout) findViewById(R.id.sliding_tabs); mTabLayout.setTabsFromPagerAdapter(tabsAdapter); mTabLayout.setupWithViewPager(pager); mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { // Log.d(DEBUG_TAG, "current tab index " + position); whichTab = (tab.getPosition() == 0 ? TransferTaskAdapter.TaskType.DOWNLOAD_TASK : TransferTaskAdapter.TaskType.UPLOAD_TASK); ActionMode mode = null; if (whichTab == TransferTaskAdapter.TaskType.DOWNLOAD_TASK && getUploadTaskFragment() != null) { // slide from Upload tab to Download tab, // so hide the CAB of UploadTaskFragment mode = getUploadTaskFragment().getActionMode(); getUploadTaskFragment().deselectItems(); } else if (whichTab == TransferTaskAdapter.TaskType.UPLOAD_TASK && getDownloadTaskFragment() != null) { // slide from Download tab to Upload tab, // so hide the CAB of DownloadTaskFragment mode = getDownloadTaskFragment().getActionMode(); getDownloadTaskFragment().deselectItems(); } if (mode != null) mode.finish(); supportInvalidateOptionsMenu(); pager.setCurrentItem(tab.getPosition()); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); Toolbar toolbar = getActionBarToolbar(); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setTitle(R.string.transfer_tasks); /** this is hacky to explicitly call onNewIntent() * because it was never called when start the TransferActivity * by notification bar */ onNewIntent(getIntent()); } public void onItemSelected() { // update CAB title if (whichTab == TransferTaskAdapter.TaskType.DOWNLOAD_TASK && getDownloadTaskFragment() != null) { getDownloadTaskFragment().updateContextualActionBar(); } else if (whichTab == TransferTaskAdapter.TaskType.UPLOAD_TASK && getUploadTaskFragment() != null) { getUploadTaskFragment().updateContextualActionBar(); } } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_MENU: if (overFlowMenu != null) { overFlowMenu.performIdentifierAction(R.id.transfer_overflow_menu, 0); } } return super.onKeyUp(keyCode, event); } @Override public boolean onCreateOptionsMenu(Menu menu) { getActionBarToolbar().inflateMenu(R.menu.transfer_list_menu); getActionBarToolbar().setOnMenuItemClickListener(this); return true; } @Override public boolean onPrepareOptionsMenu(Menu menu) { // MenuItem cancel = menu.findItem(R.id.cancel_transfer_tasks); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); return true; } return super.onOptionsItemSelected(item); } @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.cancel_transfer_tasks: if (whichTab == TransferTaskAdapter.TaskType.DOWNLOAD_TASK) { getDownloadTaskFragment().cancelAllDownloadTasks(); } else getUploadTaskFragment().cancelUploadTasks(); return true; case R.id.clear_all_transfer_tasks: // actually this only clear {@link TaskState#FINISHED}, {@link TaskState#FAILED} and {@link TaskState#CANCELLED} tasks. if (whichTab == TransferTaskAdapter.TaskType.DOWNLOAD_TASK) { getDownloadTaskFragment().removeAllDownloadTasks(); } else getUploadTaskFragment().removeAllUploadTasks(); return true; } return super.onOptionsItemSelected(item); } public DownloadTaskFragment getDownloadTaskFragment() { return (DownloadTaskFragment)getFragment(0); } public UploadTaskFragment getUploadTaskFragment() { return (UploadTaskFragment)getFragment(1); } public Fragment getFragment(int index) { return getSupportFragmentManager().findFragmentByTag(makeFragmentName(index)); } private String makeFragmentName(int index) { return "android:switcher:" + R.id.transfer_list_pager + ":" + index; } /** * Adapter for {@link ViewPager} to bind DownloadTaskFragment and UploadTaskFragment */ public class TransferTabsAdapter extends FragmentPagerAdapter { private String downloadTabTitle; private String uploadTabTitle; public TransferTabsAdapter(FragmentManager fm) { super(fm); downloadTabTitle = getString(R.string.transfer_tabs_downloads); uploadTabTitle = getString(R.string.transfer_tabs_uploads); } private DownloadTaskFragment downloadsFragment = null; private UploadTaskFragment uploadsFragment = null; @Override public Fragment getItem(int position) { switch (position) { case 0: if (downloadsFragment == null) { downloadsFragment = new DownloadTaskFragment(); } return downloadsFragment; case 1: if (uploadsFragment == null) { uploadsFragment = new UploadTaskFragment(); } return uploadsFragment; default: return new Fragment(); } } @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return downloadTabTitle; case 1: return uploadTabTitle; default: return null; } } @Override public int getCount() { return 2; } } }