package com.bigpupdev.synodroid.ui; import java.util.ArrayList; import java.util.List; import com.bigpupdev.synodroid.R; import com.bigpupdev.synodroid.Synodroid; import com.bigpupdev.synodroid.action.AddPwTaskListAction; import com.bigpupdev.synodroid.action.AddTaskListAction; import com.bigpupdev.synodroid.action.ClearAllTaskAction; import com.bigpupdev.synodroid.action.EnumShareAction; import com.bigpupdev.synodroid.action.GetDirectoryListShares; import com.bigpupdev.synodroid.action.RemoveErroneousMultipleTaskAction; import com.bigpupdev.synodroid.action.ResumeAllAction; import com.bigpupdev.synodroid.action.StopAllAction; import com.bigpupdev.synodroid.data.DSMVersion; import com.bigpupdev.synodroid.data.Task; import com.bigpupdev.synodroid.server.SynoServer; import com.bigpupdev.synodroid.utils.ActivityHelper; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.DialogInterface.OnClickListener; import android.content.res.Configuration; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.FragmentManager; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.WindowManager; import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; /** * Front-door {@link Activity} that displays high-level features the schedule application offers to * users. Depending on whether the device is a phone or an Android 3.0+ tablet, different layouts * will be used. For example, on a phone, the primary content is a {@link DashboardFragment}, * whereas on a tablet, both a {@link DashboardFragment} and a {@link TagStreamFragment} are * displayed. */ public class HomeActivity extends BaseActivity { private static final String PREFERENCE_FULLSCREEN = "general_cat.fullscreen"; private static final String PREFERENCE_GENERAL = "general_cat"; private static final String PREFERENCE_SHOW_GET_STARTED = "general_cat.show_get_started"; private static final String PREFERENCE_DEFAULT_DL_FILTER = "general_cat.default_dl_filter"; private static final int ADD_DOWNLOAD = 3; public static final int FILTER_ALL = 0; public static final int FILTER_DOWNLOADING = 1; public static final int FILTER_COMPLETED = 2; public static final int FILTER_ACTIVE = 3; public static final int FILTER_INACTIVE = 4; public static final int FILTER_STOPPED = 5; public String getFilterText(int curFilter){ switch(curFilter){ case HomeActivity.FILTER_DOWNLOADING: return getString(R.string.menu_filter_downloading); case HomeActivity.FILTER_COMPLETED: return getString(R.string.menu_filter_completed); case HomeActivity.FILTER_ACTIVE: return getString(R.string.menu_filter_active); case HomeActivity.FILTER_INACTIVE: return getString(R.string.menu_filter_inactive); case HomeActivity.FILTER_STOPPED: return getString(R.string.menu_filter_stopped); default: return getString(R.string.menu_filter_all); } } //private TagStreamFragment mTagStreamFragment; @Override public boolean onSearchRequested() { showSearchActivity(false); return true; } @Override public void onConfigurationChanged(Configuration newConfig) { // ignore orientation change super.onConfigurationChanged(newConfig); } public void updateActionBarTitle(String title, boolean is_secure){ ActivityHelper ah = getActivityHelper(); if (ah != null) ah.setActionBarTitle(title, is_secure); } /** * Create the connection and error dialogs */ @Override protected Dialog onCreateDialog(int id) { Dialog dialog = super.onCreateDialog(id); switch (id) { // No server have been yet configured case ADD_DOWNLOAD: AlertDialog.Builder add_download = new AlertDialog.Builder(HomeActivity.this); add_download.setTitle(R.string.menu_add); LayoutInflater inflater = getLayoutInflater(); View v = inflater.inflate(R.layout.add_download, null); final EditText edt = (EditText) v.findViewById(R.id.add_url); edt.setText(""); final EditText user = (EditText) v.findViewById(R.id.username); user.setText(""); final EditText pass = (EditText) v.findViewById(R.id.pass); pass.setText(""); final ImageView exp_col = (ImageView) v.findViewById(R.id.exp_col); final LinearLayout creds = (LinearLayout) v.findViewById(R.id.credentials); final RelativeLayout adv = (RelativeLayout) v.findViewById(R.id.adv_settings); adv.setOnClickListener(new android.view.View.OnClickListener(){ @Override public void onClick(View v) { if (creds.getVisibility() == View.GONE){ exp_col.setImageResource(R.drawable.ic_colapse); creds.setVisibility(View.VISIBLE); } else{ creds.setVisibility(View.GONE); exp_col.setImageResource(R.drawable.ic_expand); } } }); try{ if (((Synodroid)getApplication()).getServer().getDsmVersion().smallerThen(DSMVersion.VERSION3_1)){ adv.setVisibility(View.GONE); } } catch (NullPointerException e){} add_download.setView(v); add_download.setCancelable(true); add_download.setPositiveButton(getString(R.string.menu_add), new OnClickListener() { // Launch the Preference activity public void onClick(DialogInterface dialogP, int whichP) { try{ if (((Synodroid)getApplication()).DEBUG) Log.i(Synodroid.DS_TAG, "HomeActivity: Adding url:" + edt.getText().toString()); }catch (Exception ex){/*DO NOTHING*/} Synodroid app = (Synodroid) getApplication(); FragmentManager fm = getSupportFragmentManager(); try{ DownloadFragment fragment_download = (DownloadFragment) fm.findFragmentById(R.id.fragment_download); List<Uri> outlines = new ArrayList<Uri>(); for (String line: edt.getText().toString().split("\n")){ if (line.equals("")) continue; if (!line.startsWith("http://") && !line.startsWith("https://") && !line.startsWith("ftp://") && !line.startsWith("file://") && !line.startsWith("magnet:")){ line = "http://"+line; } if (line.startsWith("http://magnet/")){ line = line.replace("http://magnet/", "magnet:"); } else if (line.startsWith("https://magnet/")){ line = line.replace("https://magnet/", "magnet:"); } outlines.add(Uri.parse(line)); } if (!user.getText().toString().equals("") || !pass.getText().toString().equals("")){ app.executeAsynchronousAction(fragment_download, new AddPwTaskListAction(outlines, user.getText().toString(), pass.getText().toString()), true); } else{ app.executeAsynchronousAction(fragment_download, new AddTaskListAction(outlines), true); } } catch (Exception e){ //Cannot clear all when download fragment not accessible. try{ if (((Synodroid)getApplication()).DEBUG) Log.e(Synodroid.DS_TAG, "HomeActivity: App tried to call add download when download fragment hidden."); }catch (Exception ex){/*DO NOTHING*/} } removeDialog(ADD_DOWNLOAD); } }); add_download.setNegativeButton(getString(android.R.string.cancel), new OnClickListener() { // Launch the Preference activity public void onClick(DialogInterface dialogP, int whichP) { removeDialog(ADD_DOWNLOAD); } }); dialog = add_download.create(); break; } return dialog; } /* * (non-Javadoc) * * @see android.app.Activity#onPause() */ @Override protected void onPause() { super.onPause(); ((Synodroid) getApplication()).pauseServer(); } /* * (non-Javadoc) * * @see android.app.Activity#onResume() */ @Override protected void onResume() { super.onResume(); SharedPreferences preferences = getSharedPreferences(PREFERENCE_GENERAL, Activity.MODE_PRIVATE); if (preferences.getBoolean(PREFERENCE_SHOW_GET_STARTED, true)) { Intent next = new Intent(); next.setClass(HomeActivity.this, GetStartedActivity.class); startActivity(next); } try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Resuming home activity."); }catch (Exception ex){/*DO NOTHING*/} } /* * (non-Javadoc) * * @see android.app.Activity#onNewIntent(android.content.Intent) */ @Override protected void onNewIntent(Intent intentP) { super.onNewIntent(intentP); setIntent(intentP); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { SharedPreferences preferences = getSharedPreferences(PREFERENCE_GENERAL, Activity.MODE_PRIVATE); if (preferences.getBoolean(PREFERENCE_FULLSCREEN, false)) { // Set fullscreen or not getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } else { getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); attachSlidingMenu(); getActivityHelper().setupActionBar(getString(R.string.app_name), true, getSlidingMenu()); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); getActivityHelper().setupHomeActivity(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.refresh_menu_items, menu); getMenuInflater().inflate(R.menu.download_menu_items, menu); super.onCreateOptionsMenu(menu); return true; } private boolean serverValid(SynoServer s){ if (s == null) return false; if (!s.isConnected()) return false; return true; } private void setFilter(int filter){ SharedPreferences preferences = getSharedPreferences(PREFERENCE_GENERAL, Activity.MODE_PRIVATE); preferences.edit().putInt(PREFERENCE_DEFAULT_DL_FILTER, filter).commit(); } @Override public boolean onOptionsItemSelected(MenuItem item) { SynoServer server = ((Synodroid)getApplication()).getServer(); if (item.getItemId() == R.id.menu_refresh) { try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Menu refresh selected."); }catch (Exception ex){/*DO NOTHING*/} if (serverValid(server)) triggerRefresh(); return true; } else if (item.getItemId() == R.id.menu_filter_all) { try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Menu filter_all selected."); }catch (Exception ex){/*DO NOTHING*/} this.setFilter(FILTER_ALL); if (serverValid(server)) triggerRefresh(); return true; } else if (item.getItemId() == R.id.menu_filter_downloading) { try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Menu filter_downloading selected."); }catch (Exception ex){/*DO NOTHING*/} this.setFilter(FILTER_DOWNLOADING); if (serverValid(server)) triggerRefresh(); return true; } else if (item.getItemId() == R.id.menu_filter_completed) { try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Menu filter_completed selected."); }catch (Exception ex){/*DO NOTHING*/} this.setFilter(FILTER_COMPLETED); if (serverValid(server)) triggerRefresh(); return true; } else if (item.getItemId() == R.id.menu_filter_active) { try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Menu filter_active selected."); }catch (Exception ex){/*DO NOTHING*/} this.setFilter(FILTER_ACTIVE); if (serverValid(server)) triggerRefresh(); return true; } else if (item.getItemId() == R.id.menu_filter_inactive) { try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Menu filter_inactive selected."); }catch (Exception ex){/*DO NOTHING*/} this.setFilter(FILTER_INACTIVE); if (serverValid(server)) triggerRefresh(); return true; } else if (item.getItemId() == R.id.menu_filter_stopped) { try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Menu filter_stopped selected."); }catch (Exception ex){/*DO NOTHING*/} this.setFilter(FILTER_STOPPED); if (serverValid(server)) triggerRefresh(); return true; } else if (item.getItemId() == R.id.menu_search){ try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Menu search selected."); }catch (Exception ex){/*DO NOTHING*/} showSearchActivity(false); } else if (item.getItemId() == R.id.menu_add){ try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Menu add selected."); }catch (Exception ex){/*DO NOTHING*/} if (serverValid(server)) showDialog(ADD_DOWNLOAD); } else if (item.getItemId() == R.id.menu_share){ try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Menu get share list selected."); }catch (Exception ex){/*DO NOTHING*/} if (serverValid(server)){ Synodroid app = (Synodroid) getApplication(); FragmentManager fm = getSupportFragmentManager(); try{ DownloadFragment fragment_download = (DownloadFragment) fm.findFragmentById(R.id.fragment_download); if (app.getServer().getDsmVersion().greaterThen(DSMVersion.VERSION3_0)){ app.executeAsynchronousAction(fragment_download, new GetDirectoryListShares(null), false); } else{ app.executeAsynchronousAction(fragment_download, new EnumShareAction(), false); } } catch (Exception e){ try{ if (((Synodroid)getApplication()).DEBUG) Log.e(Synodroid.DS_TAG, "HomeActivity: App tried to call get share when download fragment hidden."); }catch (Exception ex){/*DO NOTHING*/} } } } else if (item.getItemId() == R.id.menu_clear_all){ try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Menu clear all completed selected."); }catch (Exception ex){/*DO NOTHING*/} if (serverValid(server)){ Synodroid app = (Synodroid) getApplication(); FragmentManager fm = getSupportFragmentManager(); try{ DownloadFragment fragment_download = (DownloadFragment) fm.findFragmentById(R.id.fragment_download); app.executeAction(fragment_download, new ClearAllTaskAction(), false); app.delayedRefresh(); } catch (Exception e){ try{ if (((Synodroid)getApplication()).DEBUG) Log.e(Synodroid.DS_TAG, "HomeActivity: App tried to call clear all when download fragment hidden."); }catch (Exception ex){/*DO NOTHING*/} } } } else if (item.getItemId() == R.id.menu_erroneous){ try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Menu clear all erroneous tasks selected."); }catch (Exception ex){/*DO NOTHING*/} if (serverValid(server)){ Synodroid app = (Synodroid) getApplication(); FragmentManager fm = getSupportFragmentManager(); try{ DownloadFragment fragment_download = (DownloadFragment) fm.findFragmentById(R.id.fragment_download); List<Task> t_list = new ArrayList<Task>(); for (int i = 0; i < fragment_download.taskView.getCount(); i++){ Task t = (Task) fragment_download.taskView.getItemAtPosition(i); if (t.status.startsWith("TASK_ERROR_")){ t_list.add(t); } } if (t_list.size() != 0){ app.executeAction(fragment_download, new RemoveErroneousMultipleTaskAction(t_list), false); app.delayedRefresh(); } } catch (Exception e){ try{ if (((Synodroid)getApplication()).DEBUG) Log.e(Synodroid.DS_TAG, "HomeActivity: App tried to remove erroneous tasks when download fragment hidden."); }catch (Exception ex){/*DO NOTHING*/} } } } else if (item.getItemId() == R.id.menu_pause_all){ try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Menu pause all selected."); }catch (Exception ex){/*DO NOTHING*/} if (serverValid(server)){ Synodroid app = (Synodroid) getApplication(); FragmentManager fm = getSupportFragmentManager(); try{ DownloadFragment fragment_download = (DownloadFragment) fm.findFragmentById(R.id.fragment_download); app.executeAction(fragment_download, new StopAllAction(), false); app.delayedRefresh(); } catch (Exception e){ try{ if (((Synodroid)getApplication()).DEBUG) Log.e(Synodroid.DS_TAG, "HomeActivity: App tried to call pause all when download fragment hidden."); }catch (Exception ex){/*DO NOTHING*/} } } } else if (item.getItemId() == R.id.menu_revert){ try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Menu resume all selected."); }catch (Exception ex){/*DO NOTHING*/} if (serverValid(server)){ Synodroid app = (Synodroid) getApplication(); FragmentManager fm = getSupportFragmentManager(); try{ DownloadFragment fragment_download = (DownloadFragment) fm.findFragmentById(R.id.fragment_download); app.executeAction(fragment_download, new ResumeAllAction(), false); app.delayedRefresh(); } catch (Exception e){ try{ if (((Synodroid)getApplication()).DEBUG) Log.e(Synodroid.DS_TAG, "HomeActivity: App tried to call resume all when download fragment hidden."); }catch (Exception ex){/*DO NOTHING*/} } } } return super.onOptionsItemSelected(item); } private void triggerRefresh() { try{ if (((Synodroid)getApplication()).DEBUG) Log.v(Synodroid.DS_TAG,"HomeActivity: Forcing task list refresh."); }catch (Exception ex){/*DO NOTHING*/} ((Synodroid) getApplication()).forceRefresh(); } public void updateRefreshStatus(boolean refreshing) { getActivityHelper().setRefreshActionButtonCompatState(refreshing); } }