package org.pyload.android.client; import java.io.File; import java.io.FileInputStream; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.HashMap; import java.util.Locale; import android.app.NotificationManager; import android.content.res.Configuration; import android.view.*; import org.pyload.android.client.components.FragmentTabsPager; import org.pyload.android.client.dialogs.AccountDialog; import org.pyload.android.client.fragments.CollectorFragment; import org.pyload.android.client.fragments.OverviewFragment; import org.pyload.android.client.fragments.QueueFragment; import org.pyload.android.client.module.Eula; import org.pyload.android.client.module.GuiTask; import org.pyload.thrift.Destination; import org.pyload.thrift.PackageDoesNotExists; import org.pyload.thrift.Pyload.Client; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.net.ConnectivityManager; import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.util.Log; import android.widget.TabHost; import android.support.v4.view.MenuItemCompat; public class pyLoad extends FragmentTabsPager { private pyLoadApp app; // keep reference to set indeterminateProgress private MenuItem refreshItem; /** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { Log.d("pyLoad", "Starting pyLoad App"); app = (pyLoadApp) getApplicationContext(); app.prefs = PreferenceManager.getDefaultSharedPreferences(this); initLocale(); super.onCreate(savedInstanceState); Eula.show(this); app.cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); app.init(this); Resources res = getResources(); // Resource object to get Drawables TabHost.TabSpec spec; // Resusable TabSpec for each tab String title; int tab_pyload, tab_queue, tab_collector; if (app.prefs.getBoolean("invert_tabs", false)) { tab_pyload = R.drawable.ic_tab_pyload_inverted; tab_queue = R.drawable.ic_tab_queue_inverted; tab_collector = R.drawable.ic_tab_collector_inverted; } else { tab_pyload = R.drawable.ic_tab_pyload; tab_queue = R.drawable.ic_tab_queue; tab_collector = R.drawable.ic_tab_collector; } title = getString(R.string.overview); spec = mTabHost.newTabSpec(title).setIndicator(title, res.getDrawable(tab_pyload)); mTabsAdapter.addTab(spec, OverviewFragment.class, null); title = getString(R.string.queue); spec = mTabHost.newTabSpec(title).setIndicator(title, res.getDrawable(tab_queue)); mTabsAdapter.addTab(spec, QueueFragment.class, null); title = getString(R.string.collector); spec = mTabHost.newTabSpec(title).setIndicator(title, res.getDrawable(tab_collector)); mTabsAdapter.addTab(spec, CollectorFragment.class, null); } @Override protected void onStart() { super.onStart(); Intent intent = getIntent(); String action = intent.getAction(); Uri data = intent.getData(); // we got a SHARE intent if (Intent.ACTION_SEND.equals(action)) { Intent addURL = new Intent(app, AddLinksActivity.class); addURL.putExtra("url", intent.getStringExtra(Intent.EXTRA_TEXT)); addURL.putExtra("name", intent.getStringExtra(Intent.EXTRA_SUBJECT)); startActivityForResult(addURL, AddLinksActivity.NEW_PACKAGE); intent.setAction(Intent.ACTION_MAIN); // we got a VIEW intent } else if (Intent.ACTION_VIEW.equals(action) && data != null) { if (intent.getScheme().startsWith("http") || intent.getScheme().contains("ftp")) { Intent addURL = new Intent(app, AddLinksActivity.class); addURL.putExtra("url", data.toString()); startActivityForResult(addURL, AddLinksActivity.NEW_PACKAGE); } else if (intent.getScheme().equals("file")) { Intent addURL = new Intent(app, AddLinksActivity.class); addURL.putExtra("dlcpath", data.getPath()); startActivityForResult(addURL, AddLinksActivity.NEW_PACKAGE); } intent.setData(null); } } @Override protected void onResume() { super.onResume(); Intent intent = getIntent(); //app.setCaptchaNotificationShown(intent.getBooleanExtra("CaptchaNotification", false)); if (intent.getBooleanExtra("CaptchaNotification", false)) { NotificationManager notificationManager = (NotificationManager) app.getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.cancel(0); } app.refreshTab(); } @Override protected void onPause() { super.onPause(); app.clearTasks(); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); refreshItem = menu.findItem(R.id.refresh); MenuItemCompat.setShowAsAction(refreshItem, MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); MenuItemCompat.setShowAsAction(menu.findItem(R.id.add_links), MenuItemCompat.SHOW_AS_ACTION_IF_ROOM); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.add_links: startActivityForResult(new Intent(app, AddLinksActivity.class), AddLinksActivity.NEW_PACKAGE); return true; case R.id.refresh: app.resetClient(); app.refreshTab(); return true; case R.id.settings: Intent settingsActivity = new Intent(app, Preferences.class); startActivity(settingsActivity); return true; case R.id.show_accounts: AccountDialog accountsList = new AccountDialog(); accountsList.show(getSupportFragmentManager(), "accountsDialog"); return true; case R.id.remote_settings: Intent serverConfigActivity = new Intent(app, RemoteSettings.class); startActivity(serverConfigActivity); return true; case R.id.restart_failed: app.addTask(new GuiTask(new Runnable() { public void run() { Client client = app.getClient(); client.restartFailed(); } }, app.handleSuccess)); return true; default: return super.onOptionsItemSelected(item); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case AddLinksActivity.NEW_PACKAGE: switch (resultCode) { case RESULT_OK: final String name = data.getStringExtra("name"); final String[] link_array = data.getStringExtra("links").trim() .split("\n"); final Destination dest; final String filepath = data.getStringExtra("filepath"); final String filename = data.getStringExtra("filename"); if (data.getIntExtra("dest", 0) == 0) dest = Destination.Queue; else dest = Destination.Collector; final ArrayList<String> links = new ArrayList<String>(); for (String link_row : link_array) for (String link : link_row.trim().split(" ")) if (!link.equals("")) links.add(link); final String password = data.getStringExtra("password"); app.addTask(new GuiTask(new Runnable() { public void run() { Client client = app.getClient(); if (links.size() > 0) { int pid = client.addPackage(name, links, dest); if (password != null && !password.equals("")) { HashMap<String, String> opts = new HashMap<String, String>(); opts.put("password", password); try { client.setPackageData(pid, opts); } catch (PackageDoesNotExists e) { // TODO Auto-generated catch block e.printStackTrace(); } } } if (filename != null && !filepath.equals("")) { File file = new File(filepath); try { if (file.length() > (1 << 20)) throw new Exception("File size to large"); FileInputStream is = new FileInputStream(file); ByteBuffer buffer = ByteBuffer .allocate((int) file.length()); while (is.getChannel().read(buffer) > 0); buffer.rewind(); is.close(); client.uploadContainer(filename, buffer); } catch (Throwable e) { Log.e("pyLoad", "Error when uploading file", e); } } } }, app.handleSuccess)); break; default: break; } break; default: super.onActivityResult(requestCode, resultCode, data); } } @Override protected void onNewIntent(Intent intent) { Log.d("pyLoad", "got Intent"); super.onNewIntent(intent); } /** * Sets the locale defined in config. */ private void initLocale() { String language = app.prefs.getString("language", ""); Locale locale; if ("".equals(language)) locale = Locale.getDefault(); else locale = new Locale(language); Log.d("pyLoad", "Change locale to: " + locale); Configuration config = new Configuration(getResources().getConfiguration()); config.locale = locale; getResources().updateConfiguration(config, getResources().getDisplayMetrics()); } public void setCaptchaResult(final short tid, final String result) { app.addTask(new GuiTask(new Runnable() { public void run() { Client client = app.getClient(); Log.d("pyLoad", "Send Captcha result: " + tid + " " + result); client.setCaptchaResult(tid, result); } })); } public MenuItem getRefreshItem() { return refreshItem; } }