package com.orisider.gdfs.ui.activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.github.rtyley.android.sherlock.roboguice.activity.RoboSherlockFragmentActivity;
import com.ipaulpro.afilechooser.FileChooserFragment;
import com.orisider.gdfs.R;
import com.orisider.gdfs.ui.event.GDFSDialogConfirmEvent;
import com.orisider.gdfs.ui.fragment.MainF;
import com.orisider.gdfs.ui.fragment.diag.AboutFragment;
import com.orisider.gdfs.ui.fragment.diag.ConfirmFragment;
import com.orisider.gdfs.util.Constant;
import roboguice.event.Observes;
import roboguice.inject.InjectView;
import java.io.File;
import java.util.List;
public class MainActivity extends RoboSherlockFragmentActivity implements FileChooserFragment.FileChooserListener {
private static final String BUNDLE_KEY_SELECTED_TAB = "selected_tab";
private static final String BUNDLE_KEY_SELECTED_FILE = "selected_file";
private static final String DEFAULT_TITLE = "GDFS";
private int selectedTabIndex = 0;
private File selectedFile = null;
@InjectView(R.id.pager)
private ViewPager pager;
private TabPagerAdapter adapter;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar ab = getSupportActionBar();
ab.setDisplayHomeAsUpEnabled(false);
ab.setDisplayShowHomeEnabled(true);
setTitle(DEFAULT_TITLE);
setContentView(R.layout.a_main);
initTab();
if (savedInstanceState != null) {
selectedTabIndex = savedInstanceState.getInt(BUNDLE_KEY_SELECTED_TAB, 0);
selectedFile = (File) savedInstanceState.getSerializable(BUNDLE_KEY_SELECTED_FILE);
FileChooserFragment f = getFileChooseFragment();
if (f != null) {
f.setListener(this);
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.a_main, menu);
MenuItem launchItem = menu.findItem(R.id.launch_gdrive);
launchItem.setVisible(isGdriveInstalled());
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.launch_gdrive:
startActivity(new Intent().setComponent(new ComponentName(Constant.PKG_GDRIVE,
"com.google.android.apps.docs.app.NewMainProxyActivity")).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
break;
case R.id.about:
new AboutFragment().show(getSupportFragmentManager(), Constant.FRAG_TAG_DIALOG);
break;
default:
}
return true;
}
private boolean isGdriveInstalled() {
List<ApplicationInfo> packages;
PackageManager pm = getPackageManager();
packages = pm.getInstalledApplications(0);
for (ApplicationInfo packageInfo : packages) {
if (packageInfo.packageName.equals(Constant.PKG_GDRIVE))
return true;
}
return false;
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(BUNDLE_KEY_SELECTED_TAB, selectedTabIndex);
outState.putSerializable(BUNDLE_KEY_SELECTED_FILE, selectedFile);
}
private void initTab() {
final ActionBar ab = getSupportActionBar();
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ViewPager.SimpleOnPageChangeListener pageChangeListener = new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
ab.setSelectedNavigationItem(position);
}
};
pager.setOnPageChangeListener(pageChangeListener);
adapter = new TabPagerAdapter(this);
pager.setAdapter(adapter);
ab.addTab(
getSupportActionBar().newTab().setText(R.string.tab_home).setTabListener(new CustomTabListener(pager,
this)));
ab.addTab(
getSupportActionBar().newTab().setText(R.string.tab_explorer).setTabListener(new CustomTabListener
(pager, this)));
}
@Override
public void onUpRequestedOnRoot() {
finish();
}
private String filePath;
@Override
public void onFilePathChanged(String newFilePath) {
filePath = newFilePath;
if (pager.getCurrentItem() == 1) {
setTitle(filePath);
}
}
@Override
public void onMediaUnmounted() {
}
@Override
public void onFileSelected(File file) {
selectedFile = file;
ConfirmFragment.newInstance(getString(R.string.confirm_upload, file.getName())).show
(getSupportFragmentManager(),
Constant.FRAG_TAG_DIALOG);
}
@SuppressWarnings("UnusedDeclaration")
private void onConfirmed(@Observes GDFSDialogConfirmEvent confirmResult) {
if (confirmResult.confirm && selectedFile != null) {
startService(new Intent().setAction(Constant.ACTION_DRIVE_UPLOAD).putExtra(Constant.FILE_URI
, Uri.fromFile(selectedFile)));
}
}
@Override
public void onBackPressed() {
if (getSupportActionBar().getSelectedNavigationIndex() == 0) {
super.onBackPressed();
} else {
getFileChooseFragment().updateBreadcrumb(false);
}
}
private FileChooserFragment getFileChooseFragment() {
return (FileChooserFragment) getSupportFragmentManager().findFragmentByTag("android:switcher:" + pager.getId
() + ":1");
}
private static class CustomTabListener implements ActionBar.TabListener {
private final ViewPager pager;
private final MainActivity act;
CustomTabListener(ViewPager pager, MainActivity act) {
this.pager = pager;
this.act = act;
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fakeFt) {
pager.setCurrentItem(tab.getPosition());
if (tab.getPosition() == 0) {
act.setTitle(DEFAULT_TITLE);
} else {
act.setTitle(act.filePath);
}
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
}
private static class TabPagerAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT = 2;
private final MainActivity act;
public TabPagerAdapter(MainActivity act) {
super(act.getSupportFragmentManager());
this.act = act;
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return new MainF();
case 1:
FileChooserFragment f = new FileChooserFragment();
f.setListener(act);
return f;
default:
return null;
}
}
@Override
public int getCount() {
return PAGE_COUNT;
}
}
}