aboutsummaryrefslogtreecommitdiff
path: root/subsonic-android/src/github/daneren2005/dsub/activity
diff options
context:
space:
mode:
Diffstat (limited to 'subsonic-android/src/github/daneren2005/dsub/activity')
-rw-r--r--subsonic-android/src/github/daneren2005/dsub/activity/DownloadActivity.java96
-rw-r--r--subsonic-android/src/github/daneren2005/dsub/activity/EqualizerActivity.java278
-rw-r--r--subsonic-android/src/github/daneren2005/dsub/activity/HelpActivity.java117
-rw-r--r--subsonic-android/src/github/daneren2005/dsub/activity/MainActivity.java320
-rw-r--r--subsonic-android/src/github/daneren2005/dsub/activity/QueryReceiverActivity.java56
-rw-r--r--subsonic-android/src/github/daneren2005/dsub/activity/SearchActivity.java91
-rw-r--r--subsonic-android/src/github/daneren2005/dsub/activity/SettingsActivity.java539
-rw-r--r--subsonic-android/src/github/daneren2005/dsub/activity/SubsonicActivity.java641
-rw-r--r--subsonic-android/src/github/daneren2005/dsub/activity/VoiceQueryReceiverActivity.java59
9 files changed, 0 insertions, 2197 deletions
diff --git a/subsonic-android/src/github/daneren2005/dsub/activity/DownloadActivity.java b/subsonic-android/src/github/daneren2005/dsub/activity/DownloadActivity.java
deleted file mode 100644
index bfdc9eb9..00000000
--- a/subsonic-android/src/github/daneren2005/dsub/activity/DownloadActivity.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- This file is part of Subsonic.
-
- Subsonic is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Subsonic is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
-
- Copyright 2009 (C) Sindre Mehus
- */
-package github.daneren2005.dsub.activity;
-
-import github.daneren2005.dsub.R;
-import android.os.Bundle;
-import android.view.MotionEvent;
-import github.daneren2005.dsub.fragments.DownloadFragment;
-import android.app.Dialog;
-import android.view.LayoutInflater;
-import android.widget.EditText;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import android.app.AlertDialog;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.util.Log;
-import android.view.View;
-import com.actionbarsherlock.view.MenuItem;
-import github.daneren2005.dsub.domain.MusicDirectory;
-import github.daneren2005.dsub.service.DownloadFile;
-import github.daneren2005.dsub.service.MusicService;
-import github.daneren2005.dsub.service.MusicServiceFactory;
-import github.daneren2005.dsub.util.SilentBackgroundTask;
-import github.daneren2005.dsub.util.Util;
-import java.util.LinkedList;
-import java.util.List;
-
-public class DownloadActivity extends SubsonicActivity {
- private static final String TAG = DownloadActivity.class.getSimpleName();
- private EditText playlistNameView;
-
- /**
- * Called when the activity is first created.
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.download_activity);
-
- if (findViewById(R.id.download_container) != null && savedInstanceState == null) {
- currentFragment = new DownloadFragment();
- currentFragment.setPrimaryFragment(true);
- getSupportFragmentManager().beginTransaction().add(R.id.download_container, currentFragment, currentFragment.getSupportTag() + "").commit();
- }
-
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- getSupportActionBar().setHomeButtonEnabled(true);
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if(item.getItemId() == android.R.id.home) {
- Intent i = new Intent();
- i.setClass(this, MainActivity.class);
- i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(i);
- return true;
- } else {
- return super.onOptionsItemSelected(item);
- }
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent me) {
- if(currentFragment != null) {
- return ((DownloadFragment)currentFragment).getGestureDetector().onTouchEvent(me);
- } else {
- return false;
- }
- }
-
- @Override
- public void onBackPressed() {
- if(onBackPressedSupport()) {
- super.onBackPressed();
- }
- }
-}
diff --git a/subsonic-android/src/github/daneren2005/dsub/activity/EqualizerActivity.java b/subsonic-android/src/github/daneren2005/dsub/activity/EqualizerActivity.java
deleted file mode 100644
index d9605fc5..00000000
--- a/subsonic-android/src/github/daneren2005/dsub/activity/EqualizerActivity.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- This file is part of Subsonic.
-
- Subsonic is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Subsonic is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
-
- Copyright 2011 (C) Sindre Mehus
- */
-package github.daneren2005.dsub.activity;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import android.app.Activity;
-import android.content.SharedPreferences;
-import android.media.audiofx.Equalizer;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.ContextMenu;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.widget.CheckBox;
-import android.widget.CompoundButton;
-import android.widget.LinearLayout;
-import android.widget.SeekBar;
-import android.widget.TextView;
-import github.daneren2005.dsub.R;
-import github.daneren2005.dsub.audiofx.EqualizerController;
-import github.daneren2005.dsub.service.DownloadServiceImpl;
-import github.daneren2005.dsub.util.Constants;
-import github.daneren2005.dsub.util.Util;
-
-/**
- * Equalizer controls.
- *
- * @author Sindre Mehus
- * @version $Id$
- */
-public class EqualizerActivity extends Activity {
- private static final String TAG = EqualizerActivity.class.getSimpleName();
-
- private static final int MENU_GROUP_PRESET = 100;
-
- private final Map<Short, SeekBar> bars = new HashMap<Short, SeekBar>();
- private EqualizerController equalizerController;
- private Equalizer equalizer;
- private short masterLevel = 0;
-
- @Override
- public void onCreate(Bundle bundle) {
- super.onCreate(bundle);
- setContentView(R.layout.equalizer);
- equalizerController = DownloadServiceImpl.getInstance().getEqualizerController();
- equalizer = equalizerController.getEqualizer();
-
- initEqualizer();
-
- final View presetButton = findViewById(R.id.equalizer_preset);
- registerForContextMenu(presetButton);
- presetButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- presetButton.showContextMenu();
- }
- });
-
- CheckBox enabledCheckBox = (CheckBox) findViewById(R.id.equalizer_enabled);
- enabledCheckBox.setChecked(equalizer.getEnabled());
- enabledCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
- setEqualizerEnabled(b);
- }
- });
- }
-
- @Override
- protected void onPause() {
- super.onPause();
- equalizerController.saveSettings();
-
- if(!equalizer.getEnabled()) {
- equalizerController.release();
- }
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- equalizerController = DownloadServiceImpl.getInstance().getEqualizerController();
- equalizer = equalizerController.getEqualizer();
- }
-
- @Override
- public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) {
- super.onCreateContextMenu(menu, view, menuInfo);
-
- short currentPreset;
- try {
- currentPreset = equalizer.getCurrentPreset();
- } catch (Exception x) {
- currentPreset = -1;
- }
-
- for (short preset = 0; preset < equalizer.getNumberOfPresets(); preset++) {
- MenuItem menuItem = menu.add(MENU_GROUP_PRESET, preset, preset, equalizer.getPresetName(preset));
- if (preset == currentPreset) {
- menuItem.setChecked(true);
- }
- }
- menu.setGroupCheckable(MENU_GROUP_PRESET, true, true);
- }
-
- @Override
- public boolean onContextItemSelected(MenuItem menuItem) {
- short preset = (short) menuItem.getItemId();
- equalizer.usePreset(preset);
- updateBars(false);
- return true;
- }
-
- private void setEqualizerEnabled(boolean enabled) {
- SharedPreferences prefs = Util.getPreferences(EqualizerActivity.this);
- SharedPreferences.Editor editor = prefs.edit();
- editor.putBoolean(Constants.PREFERENCES_EQUALIZER_ON, enabled);
- editor.commit();
- equalizer.setEnabled(enabled);
- updateBars(true);
- }
-
- private void updateBars(boolean changedEnabled) {
- boolean isEnabled = equalizer.getEnabled();
- short minEQLevel = equalizer.getBandLevelRange()[0];
- short maxEQLevel = equalizer.getBandLevelRange()[1];
- for (Map.Entry<Short, SeekBar> entry : bars.entrySet()) {
- short band = entry.getKey();
- SeekBar bar = entry.getValue();
- bar.setEnabled(isEnabled);
- if(band >= (short)0) {
- short setLevel;
- if(changedEnabled) {
- setLevel = (short)(equalizer.getBandLevel(band) - masterLevel);
- bar.setProgress(equalizer.getBandLevel(band) - minEQLevel);
- } else {
- bar.setProgress(equalizer.getBandLevel(band) - minEQLevel);
- setLevel = (short)(equalizer.getBandLevel(band) + masterLevel);
- }
- if(setLevel < minEQLevel) {
- setLevel = minEQLevel;
- } else if(setLevel > maxEQLevel) {
- setLevel = maxEQLevel;
- }
- equalizer.setBandLevel(band, setLevel);
- } else if(!isEnabled) {
- bar.setProgress(-minEQLevel);
- }
- }
-
- if(!isEnabled) {
- masterLevel = 0;
- SharedPreferences prefs = Util.getPreferences(EqualizerActivity.this);
- SharedPreferences.Editor editor = prefs.edit();
- editor.putInt(Constants.PREFERENCES_EQUALIZER_SETTINGS, masterLevel);
- editor.commit();
- }
- }
-
- private void initEqualizer() {
- LinearLayout layout = (LinearLayout) findViewById(R.id.equalizer_layout);
-
- final short minEQLevel = equalizer.getBandLevelRange()[0];
- final short maxEQLevel = equalizer.getBandLevelRange()[1];
-
- // Setup Pregain
- SharedPreferences prefs = Util.getPreferences(this);
- masterLevel = (short)prefs.getInt(Constants.PREFERENCES_EQUALIZER_SETTINGS, 0);
- initPregain(layout, minEQLevel, maxEQLevel);
-
- for (short i = 0; i < equalizer.getNumberOfBands(); i++) {
- final short band = i;
-
- View bandBar = LayoutInflater.from(this).inflate(R.layout.equalizer_bar, null);
- TextView freqTextView = (TextView) bandBar.findViewById(R.id.equalizer_frequency);
- final TextView levelTextView = (TextView) bandBar.findViewById(R.id.equalizer_level);
- SeekBar bar = (SeekBar) bandBar.findViewById(R.id.equalizer_bar);
-
- freqTextView.setText((equalizer.getCenterFreq(band) / 1000) + " Hz");
-
- bars.put(band, bar);
- bar.setMax(maxEQLevel - minEQLevel);
- short level = equalizer.getBandLevel(band);
- if(equalizer.getEnabled()) {
- level = (short) (level - masterLevel);
- }
- bar.setProgress(level - minEQLevel);
- bar.setEnabled(equalizer.getEnabled());
- updateLevelText(levelTextView, level);
-
- bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
- short level = (short) (progress + minEQLevel);
- if (fromUser) {
- equalizer.setBandLevel(band, (short)(level + masterLevel));
- }
- updateLevelText(levelTextView, level);
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- }
- });
- layout.addView(bandBar);
- }
- }
-
- private void initPregain(LinearLayout layout, final short minEQLevel, final short maxEQLevel) {
- View bandBar = LayoutInflater.from(this).inflate(R.layout.equalizer_bar, null);
- TextView freqTextView = (TextView) bandBar.findViewById(R.id.equalizer_frequency);
- final TextView levelTextView = (TextView) bandBar.findViewById(R.id.equalizer_level);
- SeekBar bar = (SeekBar) bandBar.findViewById(R.id.equalizer_bar);
-
- freqTextView.setText("Master");
-
- bars.put((short)-1, bar);
- bar.setMax(maxEQLevel - minEQLevel);
- bar.setProgress(masterLevel - minEQLevel);
- bar.setEnabled(equalizer.getEnabled());
- updateLevelText(levelTextView, masterLevel);
-
- bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
- @Override
- public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
- masterLevel = (short) (progress + minEQLevel);
- if (fromUser) {
- SharedPreferences prefs = Util.getPreferences(EqualizerActivity.this);
- SharedPreferences.Editor editor = prefs.edit();
- editor.putInt(Constants.PREFERENCES_EQUALIZER_SETTINGS, masterLevel);
- editor.commit();
- for (short i = 0; i < equalizer.getNumberOfBands(); i++) {
- short level = (short) ((bars.get(i).getProgress() + minEQLevel) + masterLevel);
- equalizer.setBandLevel(i, level);
- }
- }
- updateLevelText(levelTextView, masterLevel);
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- }
- });
- layout.addView(bandBar);
- }
-
- private void updateLevelText(TextView levelTextView, short level) {
- levelTextView.setText((level > 0 ? "+" : "") + level / 100 + " dB");
- }
-
-}
diff --git a/subsonic-android/src/github/daneren2005/dsub/activity/HelpActivity.java b/subsonic-android/src/github/daneren2005/dsub/activity/HelpActivity.java
deleted file mode 100644
index 6dc516bf..00000000
--- a/subsonic-android/src/github/daneren2005/dsub/activity/HelpActivity.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- This file is part of Subsonic.
-
- Subsonic is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Subsonic is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
-
- Copyright 2009 (C) Sindre Mehus
- */
-
-package github.daneren2005.dsub.activity;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.Window;
-import android.webkit.WebView;
-import android.webkit.WebViewClient;
-import android.widget.Button;
-import github.daneren2005.dsub.R;
-import github.daneren2005.dsub.util.Util;
-
-/**
- * An HTML-based help screen with Back and Done buttons at the bottom.
- *
- * @author Sindre Mehus
- */
-public final class HelpActivity extends Activity {
-
- private WebView webView;
- private Button backButton;
-
- @Override
- protected void onCreate(Bundle bundle) {
- super.onCreate(bundle);
- getWindow().requestFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
-
- setContentView(R.layout.help);
-
- webView = (WebView) findViewById(R.id.help_contents);
- webView.getSettings().setJavaScriptEnabled(true);
- webView.setWebViewClient(new HelpClient());
- if (bundle != null) {
- webView.restoreState(bundle);
- } else {
- webView.loadUrl(getResources().getString(R.string.help_url));
- }
-
- backButton = (Button) findViewById(R.id.help_back);
- backButton.setOnClickListener(new Button.OnClickListener() {
- @Override
- public void onClick(View view) {
- webView.goBack();
- }
- });
-
- Button doneButton = (Button) findViewById(R.id.help_close);
- doneButton.setOnClickListener(new Button.OnClickListener() {
- @Override
- public void onClick(View view) {
- finish();
- }
- });
- }
-
- @Override
- public void onResume() {
- super.onResume();
- }
-
- @Override
- protected void onSaveInstanceState(Bundle state) {
- webView.saveState(state);
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- if (webView.canGoBack()) {
- webView.goBack();
- return true;
- }
- }
- return super.onKeyDown(keyCode, event);
- }
-
- private final class HelpClient extends WebViewClient {
- @Override
- public void onLoadResource(WebView webView, String url) {
- setProgressBarIndeterminateVisibility(true);
- setTitle(getResources().getString(R.string.help_loading));
- super.onLoadResource(webView, url);
- }
-
- @Override
- public void onPageFinished(WebView view, String url) {
- setProgressBarIndeterminateVisibility(false);
- setTitle(view.getTitle());
- backButton.setEnabled(view.canGoBack());
- }
-
- @Override
- public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
- Util.toast(HelpActivity.this, description);
- }
- }
-}
diff --git a/subsonic-android/src/github/daneren2005/dsub/activity/MainActivity.java b/subsonic-android/src/github/daneren2005/dsub/activity/MainActivity.java
deleted file mode 100644
index c077c87c..00000000
--- a/subsonic-android/src/github/daneren2005/dsub/activity/MainActivity.java
+++ /dev/null
@@ -1,320 +0,0 @@
-package github.daneren2005.dsub.activity;
-
-import android.app.AlertDialog;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.res.TypedArray;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.os.Handler;
-import android.preference.PreferenceManager;
-import com.actionbarsherlock.app.ActionBar;
-import com.actionbarsherlock.view.Menu;
-import android.support.v4.view.ViewPager;
-import android.util.Log;
-import android.view.View;
-import android.widget.ImageButton;
-import android.widget.TextView;
-import github.daneren2005.dsub.R;
-import github.daneren2005.dsub.domain.MusicDirectory;
-import github.daneren2005.dsub.domain.PlayerState;
-import github.daneren2005.dsub.fragments.ChatFragment;
-import github.daneren2005.dsub.fragments.MainFragment;
-import github.daneren2005.dsub.fragments.SelectArtistFragment;
-import github.daneren2005.dsub.fragments.SelectDirectoryFragment;
-import github.daneren2005.dsub.fragments.SelectPlaylistFragment;
-import github.daneren2005.dsub.fragments.SelectPodcastsFragment;
-import github.daneren2005.dsub.fragments.SubsonicFragment;
-import github.daneren2005.dsub.service.DownloadFile;
-import github.daneren2005.dsub.service.DownloadServiceImpl;
-import github.daneren2005.dsub.updates.Updater;
-import github.daneren2005.dsub.util.Constants;
-import github.daneren2005.dsub.util.FileUtil;
-import github.daneren2005.dsub.util.SilentBackgroundTask;
-import github.daneren2005.dsub.util.Util;
-import github.daneren2005.dsub.view.ChangeLog;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
-public class MainActivity extends SubsonicActivity {
- private static final String TAG = MainActivity.class.getSimpleName();
- private static boolean infoDialogDisplayed;
- private ScheduledExecutorService executorService;
- private View bottomBar;
- private View coverArtView;
- private TextView trackView;
- private TextView artistView;
- private ImageButton startButton;
- private long lastBackPressTime = 0;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- if (getIntent().hasExtra(Constants.INTENT_EXTRA_NAME_EXIT)) {
- stopService(new Intent(this, DownloadServiceImpl.class));
- finish();
- } else if(getIntent().hasExtra(Constants.INTENT_EXTRA_NAME_DOWNLOAD)) {
- getIntent().removeExtra(Constants.INTENT_EXTRA_NAME_DOWNLOAD);
- Intent intent = new Intent();
- intent.setClass(this, DownloadActivity.class);
- startActivity(intent);
- }
- setContentView(R.layout.main);
- loadSettings();
-
- bottomBar = findViewById(R.id.bottom_bar);
- bottomBar.setOnClickListener(new View.OnClickListener() {
- public void onClick(View v) {
- Intent intent = new Intent();
- intent.setClass(v.getContext(), DownloadActivity.class);
- startActivity(intent);
- }
- });
- coverArtView = bottomBar.findViewById(R.id.album_art);
- trackView = (TextView) bottomBar.findViewById(R.id.track_name);
- artistView = (TextView) bottomBar.findViewById(R.id.artist_name);
-
- ImageButton previousButton = (ImageButton) findViewById(R.id.download_previous);
- previousButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- new SilentBackgroundTask<Void>(MainActivity.this) {
- @Override
- protected Void doInBackground() throws Throwable {
- if(getDownloadService() == null) {
- return null;
- }
-
- getDownloadService().previous();
- return null;
- }
-
- @Override
- protected void done(Void result) {
- update();
- }
- }.execute();
- }
- });
-
- startButton = (ImageButton) findViewById(R.id.download_start);
- startButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- new SilentBackgroundTask<Void>(MainActivity.this) {
- @Override
- protected Void doInBackground() throws Throwable {
- PlayerState state = getDownloadService().getPlayerState();
- if(state == PlayerState.STARTED) {
- getDownloadService().pause();
- } else {
- getDownloadService().start();
- }
-
- return null;
- }
-
- @Override
- protected void done(Void result) {
- update();
- }
- }.execute();
- }
- });
-
- ImageButton nextButton = (ImageButton) findViewById(R.id.download_next);
- nextButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- new SilentBackgroundTask<Void>(MainActivity.this) {
- @Override
- protected Void doInBackground() throws Throwable {
- if(getDownloadService() == null) {
- return null;
- }
-
- if (getDownloadService().getCurrentPlayingIndex() < getDownloadService().size() - 1) {
- getDownloadService().next();
- }
- return null;
- }
-
- @Override
- protected void done(Void result) {
- update();
- }
- }.execute();
- }
- });
-
- viewPager = (ViewPager) findViewById(R.id.pager);
- viewPager.setOffscreenPageLimit(4);
- pagerAdapter = new TabPagerAdapter(this, viewPager);
- viewPager.setAdapter(pagerAdapter);
- viewPager.setOnPageChangeListener(pagerAdapter);
-
- addTab(R.string.button_bar_home, MainFragment.class, null);
- addTab(R.string.button_bar_browse, SelectArtistFragment.class, null);
- addTab(R.string.button_bar_playlists, SelectPlaylistFragment.class, null);
- addTab(R.string.button_bar_podcasts, SelectPodcastsFragment.class, null);
- SharedPreferences prefs = Util.getPreferences(this);
- if(prefs.getBoolean(Constants.PREFERENCES_KEY_CHAT_ENABLED, true)) {
- addTab(R.string.button_bar_chat, ChatFragment.class, null);
- }
-
- getSupportActionBar().setDisplayHomeAsUpEnabled(false);
- getSupportActionBar().setHomeButtonEnabled(false);
- getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
- }
-
- @Override
- protected void onPostCreate(Bundle bundle) {
- super.onPostCreate(bundle);
-
- showInfoDialog();
- checkUpdates();
-
- ChangeLog changeLog = new ChangeLog(this, Util.getPreferences(this));
- if(changeLog.isFirstRun()) {
- changeLog.getLogDialog().show();
- }
- }
-
- @Override
- public void onResume() {
- super.onResume();
-
- final Handler handler = new Handler();
- Runnable runnable = new Runnable() {
- @Override
- public void run() {
- handler.post(new Runnable() {
- @Override
- public void run() {
- update();
- }
- });
- }
- };
-
- if(getIntent().hasExtra(Constants.INTENT_EXTRA_VIEW_ALBUM)) {
- viewPager.setCurrentItem(1);
-
- int fragmentID = R.id.select_artist_layout;
- if(getIntent().hasExtra(Constants.INTENT_EXTRA_NAME_PARENT_ID)) {
- SubsonicFragment fragment = new SelectDirectoryFragment();
- Bundle args = new Bundle();
- args.putString(Constants.INTENT_EXTRA_NAME_ID, getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_PARENT_ID));
- args.putString(Constants.INTENT_EXTRA_NAME_NAME, getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_PARENT_NAME));
- fragment.setArguments(args);
-
- pagerAdapter.queueFragment(fragment, R.id.select_artist_layout);
- fragmentID = fragment.getRootId();
- }
-
- SubsonicFragment fragment = new SelectDirectoryFragment();
- Bundle args = new Bundle();
- args.putString(Constants.INTENT_EXTRA_NAME_ID, getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_ID));
- args.putString(Constants.INTENT_EXTRA_NAME_NAME, getIntent().getStringExtra(Constants.INTENT_EXTRA_NAME_NAME));
- fragment.setArguments(args);
-
- pagerAdapter.queueFragment(fragment, fragmentID);
- getIntent().removeExtra(Constants.INTENT_EXTRA_VIEW_ALBUM);
- }
-
- executorService = Executors.newSingleThreadScheduledExecutor();
- executorService.scheduleWithFixedDelay(runnable, 0L, 1000L, TimeUnit.MILLISECONDS);
- }
-
- @Override
- public void onPause() {
- super.onPause();
- executorService.shutdown();
- }
-
- @Override
- public void onBackPressed() {
- if(onBackPressedSupport()) {
- if(lastBackPressTime < (System.currentTimeMillis() - 4000)) {
- lastBackPressTime = System.currentTimeMillis();
- Util.toast(this, R.string.main_back_confirm);
- } else {
- finish();
- }
- }
- }
-
- private void update() {
- if (getDownloadService() == null) {
- return;
- }
-
- DownloadFile current = getDownloadService().getCurrentPlaying();
- if(current == null) {
- trackView.setText("Title");
- artistView.setText("Artist");
- getImageLoader().loadImage(coverArtView, null, false, false);
- return;
- }
-
- MusicDirectory.Entry song = current.getSong();
- trackView.setText(song.getTitle());
- artistView.setText(song.getArtist());
- getImageLoader().loadImage(coverArtView, song, false, false);
- int[] attrs = new int[] {(getDownloadService().getPlayerState() == PlayerState.STARTED) ? R.attr.media_button_pause : R.attr.media_button_start};
- TypedArray typedArray = this.obtainStyledAttributes(attrs);
- Drawable drawable = typedArray.getDrawable(0);
- startButton.setImageDrawable(drawable);
- typedArray.recycle();
- }
-
- public void checkUpdates() {
- try {
- String version = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
- int ver = Integer.parseInt(version.replace(".", ""));
- Updater updater = new Updater(ver);
- updater.checkUpdates(this);
- }
- catch(Exception e) {
-
- }
- }
-
- private void loadSettings() {
- PreferenceManager.setDefaultValues(this, R.xml.settings, false);
- SharedPreferences prefs = Util.getPreferences(this);
- if (!prefs.contains(Constants.PREFERENCES_KEY_CACHE_LOCATION)) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putString(Constants.PREFERENCES_KEY_CACHE_LOCATION, FileUtil.getDefaultMusicDirectory().getPath());
- editor.commit();
- }
-
- if (!prefs.contains(Constants.PREFERENCES_KEY_OFFLINE)) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putBoolean(Constants.PREFERENCES_KEY_OFFLINE, false);
-
- editor.putString(Constants.PREFERENCES_KEY_SERVER_NAME + 1, "Demo Server");
- editor.putString(Constants.PREFERENCES_KEY_SERVER_URL + 1, "http://demo.subsonic.org");
- editor.putString(Constants.PREFERENCES_KEY_USERNAME + 1, "android-guest");
- editor.putString(Constants.PREFERENCES_KEY_PASSWORD + 1, "guest");
- editor.putInt(Constants.PREFERENCES_KEY_SERVER_INSTANCE, 1);
- editor.commit();
- }
- if(!prefs.contains(Constants.PREFERENCES_KEY_SERVER_COUNT)) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putInt(Constants.PREFERENCES_KEY_SERVER_COUNT, 3);
- editor.commit();
- }
- }
-
- private void showInfoDialog() {
- if (!infoDialogDisplayed) {
- infoDialogDisplayed = true;
- Log.i(TAG, Util.getRestUrl(this, null));
- if (Util.getRestUrl(this, null).contains("demo.subsonic.org")) {
- Util.info(this, R.string.main_welcome_title, R.string.main_welcome_text);
- }
- }
- }
-}
diff --git a/subsonic-android/src/github/daneren2005/dsub/activity/QueryReceiverActivity.java b/subsonic-android/src/github/daneren2005/dsub/activity/QueryReceiverActivity.java
deleted file mode 100644
index 15d0c6a6..00000000
--- a/subsonic-android/src/github/daneren2005/dsub/activity/QueryReceiverActivity.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- This file is part of Subsonic.
-
- Subsonic is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Subsonic is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
-
- Copyright 2009 (C) Sindre Mehus
- */
-
-package github.daneren2005.dsub.activity;
-
-import android.app.Activity;
-import android.app.SearchManager;
-import android.content.Intent;
-import android.os.Bundle;
-import android.provider.SearchRecentSuggestions;
-import github.daneren2005.dsub.util.Constants;
-import github.daneren2005.dsub.util.Util;
-import github.daneren2005.dsub.provider.DSubSearchProvider;
-
-/**
- * Receives search queries and forwards to the SelectAlbumActivity.
- *
- * @author Sindre Mehus
- */
-public class QueryReceiverActivity extends Activity {
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- String query = getIntent().getStringExtra(SearchManager.QUERY);
-
- if (query != null) {
- SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this, DSubSearchProvider.AUTHORITY,
- DSubSearchProvider.MODE);
- suggestions.saveRecentQuery(query, null);
-
- Intent intent = new Intent(QueryReceiverActivity.this, SearchActivity.class);
- intent.putExtra(Constants.INTENT_EXTRA_NAME_QUERY, query);
- Util.startActivityWithoutTransition(QueryReceiverActivity.this, intent);
- }
- finish();
- Util.disablePendingTransition(this);
- }
-} \ No newline at end of file
diff --git a/subsonic-android/src/github/daneren2005/dsub/activity/SearchActivity.java b/subsonic-android/src/github/daneren2005/dsub/activity/SearchActivity.java
deleted file mode 100644
index aeddcf4f..00000000
--- a/subsonic-android/src/github/daneren2005/dsub/activity/SearchActivity.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- This file is part of Subsonic.
-
- Subsonic is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Subsonic is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
-
- Copyright 2009 (C) Sindre Mehus
- */
-
-package github.daneren2005.dsub.activity;
-
-import github.daneren2005.dsub.R;
-import android.content.Intent;
-import android.os.Bundle;
-import android.util.Log;
-import github.daneren2005.dsub.fragments.SearchFragment;
-import github.daneren2005.dsub.util.Constants;
-import com.actionbarsherlock.view.MenuItem;
-
-public class SearchActivity extends SubsonicActivity {
- private static final String TAG = SearchActivity.class.getSimpleName();
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.download_activity);
-
- if (findViewById(R.id.download_container) != null && savedInstanceState == null) {
- currentFragment = new SearchFragment();
- currentFragment.setPrimaryFragment(true);
- getSupportFragmentManager().beginTransaction().add(R.id.download_container, currentFragment, currentFragment.getSupportTag() + "").commit();
- }
-
- getSupportActionBar().setDisplayHomeAsUpEnabled(true);
- getSupportActionBar().setHomeButtonEnabled(true);
- }
-
- @Override
- protected void onNewIntent(Intent intent) {
- super.onNewIntent(intent);
-
- if(currentFragment != null && currentFragment instanceof SearchFragment) {
- String query = intent.getStringExtra(Constants.INTENT_EXTRA_NAME_QUERY);
- boolean autoplay = intent.getBooleanExtra(Constants.INTENT_EXTRA_NAME_AUTOPLAY, false);
- boolean requestsearch = intent.getBooleanExtra(Constants.INTENT_EXTRA_REQUEST_SEARCH, false);
-
- if (query != null) {
- ((SearchFragment)currentFragment).search(query, autoplay);
- } else {
- ((SearchFragment)currentFragment).populateList();
- if (requestsearch) {
- onSearchRequested();
- }
- }
- }
- }
-
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if(item.getItemId() == android.R.id.home) {
- Intent i = new Intent();
- i.setClass(this, MainActivity.class);
- i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(i);
- return true;
- } else {
- return super.onOptionsItemSelected(item);
- }
- }
-
- public void onSupportNewIntent(Intent intent) {
- onNewIntent(intent);
- }
-
- @Override
- public void onBackPressed() {
- if(onBackPressedSupport()) {
- super.onBackPressed();
- }
- }
-} \ No newline at end of file
diff --git a/subsonic-android/src/github/daneren2005/dsub/activity/SettingsActivity.java b/subsonic-android/src/github/daneren2005/dsub/activity/SettingsActivity.java
deleted file mode 100644
index fc56281e..00000000
--- a/subsonic-android/src/github/daneren2005/dsub/activity/SettingsActivity.java
+++ /dev/null
@@ -1,539 +0,0 @@
-/*
- This file is part of Subsonic.
-
- Subsonic is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Subsonic is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
-
- Copyright 2009 (C) Sindre Mehus
- */
-package github.daneren2005.dsub.activity;
-
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.net.Uri;
-import android.os.Bundle;
-import android.preference.EditTextPreference;
-import android.preference.ListPreference;
-import android.preference.Preference;
-import android.preference.PreferenceActivity;
-import android.preference.PreferenceCategory;
-import android.preference.PreferenceScreen;
-import android.provider.SearchRecentSuggestions;
-import android.text.InputType;
-import android.util.Log;
-import github.daneren2005.dsub.R;
-import github.daneren2005.dsub.provider.DSubSearchProvider;
-import github.daneren2005.dsub.service.DownloadService;
-import github.daneren2005.dsub.service.DownloadServiceImpl;
-import github.daneren2005.dsub.service.MusicService;
-import github.daneren2005.dsub.service.MusicServiceFactory;
-import github.daneren2005.dsub.util.Constants;
-import github.daneren2005.dsub.util.LoadingTask;
-import github.daneren2005.dsub.view.ErrorDialog;
-import github.daneren2005.dsub.util.FileUtil;
-import github.daneren2005.dsub.util.Util;
-
-import java.io.File;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-public class SettingsActivity extends PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
- private static final String TAG = SettingsActivity.class.getSimpleName();
- private final Map<String, ServerSettings> serverSettings = new LinkedHashMap<String, ServerSettings>();
- private boolean testingConnection;
- private ListPreference theme;
- private ListPreference maxBitrateWifi;
- private ListPreference maxBitrateMobile;
- private ListPreference maxVideoBitrateWifi;
- private ListPreference maxVideoBitrateMobile;
- private ListPreference networkTimeout;
- private EditTextPreference cacheSize;
- private EditTextPreference cacheLocation;
- private ListPreference preloadCountWifi;
- private ListPreference preloadCountMobile;
- private EditTextPreference randomSize;
- private ListPreference tempLoss;
- private EditTextPreference bufferLength;
- private Preference addServerPreference;
- private PreferenceCategory serversCategory;
- private EditTextPreference chatRefreshRate;
- private ListPreference videoPlayer;
-
- private int serverCount = 3;
- private SharedPreferences settings;
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- applyTheme();
- super.onCreate(savedInstanceState);
- addPreferencesFromResource(R.xml.settings);
-
- theme = (ListPreference) findPreference(Constants.PREFERENCES_KEY_THEME);
- maxBitrateWifi = (ListPreference) findPreference(Constants.PREFERENCES_KEY_MAX_BITRATE_WIFI);
- maxBitrateMobile = (ListPreference) findPreference(Constants.PREFERENCES_KEY_MAX_BITRATE_MOBILE);
- maxVideoBitrateWifi = (ListPreference) findPreference(Constants.PREFERENCES_KEY_MAX_VIDEO_BITRATE_WIFI);
- maxVideoBitrateMobile = (ListPreference) findPreference(Constants.PREFERENCES_KEY_MAX_VIDEO_BITRATE_MOBILE);
- networkTimeout = (ListPreference) findPreference(Constants.PREFERENCES_KEY_NETWORK_TIMEOUT);
- cacheSize = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_CACHE_SIZE);
- cacheLocation = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_CACHE_LOCATION);
- preloadCountWifi = (ListPreference) findPreference(Constants.PREFERENCES_KEY_PRELOAD_COUNT_WIFI);
- preloadCountMobile = (ListPreference) findPreference(Constants.PREFERENCES_KEY_PRELOAD_COUNT_MOBILE);
- randomSize = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_RANDOM_SIZE);
- tempLoss = (ListPreference) findPreference(Constants.PREFERENCES_KEY_TEMP_LOSS);
- bufferLength = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_BUFFER_LENGTH);
- addServerPreference = (Preference) findPreference(Constants.PREFERENCES_KEY_SERVER_ADD);
- serversCategory = (PreferenceCategory) findPreference(Constants.PREFERENCES_KEY_SERVER_KEY);
- chatRefreshRate = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_CHAT_REFRESH);
- videoPlayer = (ListPreference) findPreference(Constants.PREFERENCES_KEY_VIDEO_PLAYER);
-
- settings = Util.getPreferences(this);
- serverCount = settings.getInt(Constants.PREFERENCES_KEY_SERVER_COUNT, 3);
-
- findPreference("clearSearchHistory").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- SearchRecentSuggestions suggestions = new SearchRecentSuggestions(SettingsActivity.this, DSubSearchProvider.AUTHORITY, DSubSearchProvider.MODE);
- suggestions.clearHistory();
- Util.toast(SettingsActivity.this, R.string.settings_search_history_cleared);
- return false;
- }
- });
- findPreference("clearCache").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Util.confirmDialog(SettingsActivity.this, R.string.common_delete, "cache", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- new LoadingTask<Void>(SettingsActivity.this, false) {
- @Override
- protected Void doInBackground() throws Throwable {
- FileUtil.deleteMusicDirectory(SettingsActivity.this);
- return null;
- }
-
- @Override
- protected void done(Void result) {
- Util.toast(SettingsActivity.this, R.string.settings_cache_clear_complete);
- }
-
- @Override
- protected void error(Throwable error) {
- Util.toast(SettingsActivity.this, getErrorMessage(error), false);
- }
- }.execute();
- }
- });
- return false;
- }
- });
-
- addServerPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- serverCount++;
- String instance = String.valueOf(serverCount);
-
- Preference addServerPreference = findPreference(Constants.PREFERENCES_KEY_SERVER_ADD);
- serversCategory.removePreference(addServerPreference);
- serversCategory.addPreference(addServer(serverCount));
- serversCategory.addPreference(addServerPreference);
-
- SharedPreferences.Editor editor = settings.edit();
- editor.putInt(Constants.PREFERENCES_KEY_SERVER_COUNT, serverCount);
- editor.commit();
-
- serverSettings.put(instance, new ServerSettings(instance));
-
- return true;
- }
- });
-
- serversCategory.removePreference(addServerPreference);
- for (int i = 1; i <= serverCount; i++) {
- String instance = String.valueOf(i);
- serversCategory.addPreference(addServer(i));
- serverSettings.put(instance, new ServerSettings(instance));
- }
- serversCategory.addPreference(addServerPreference);
-
- SharedPreferences prefs = Util.getPreferences(this);
- prefs.registerOnSharedPreferenceChangeListener(this);
-
- update();
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
-
- SharedPreferences prefs = Util.getPreferences(this);
- prefs.unregisterOnSharedPreferenceChangeListener(this);
- }
-
- @Override
- public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
- Log.d(TAG, "Preference changed: " + key);
- update();
-
- if (Constants.PREFERENCES_KEY_HIDE_MEDIA.equals(key)) {
- setHideMedia(sharedPreferences.getBoolean(key, false));
- }
- else if (Constants.PREFERENCES_KEY_MEDIA_BUTTONS.equals(key)) {
- setMediaButtonsEnabled(sharedPreferences.getBoolean(key, true));
- }
- else if (Constants.PREFERENCES_KEY_CACHE_LOCATION.equals(key)) {
- setCacheLocation(sharedPreferences.getString(key, ""));
- }
- else if (Constants.PREFERENCES_KEY_SLEEP_TIMER_DURATION.equals(key)){
- DownloadService downloadService = DownloadServiceImpl.getInstance();
- downloadService.setSleepTimerDuration(Integer.parseInt(sharedPreferences.getString(key, "60")));
- }
-
- scheduleBackup();
- }
-
- private void scheduleBackup() {
- try {
- Class managerClass = Class.forName("android.app.backup.BackupManager");
- Constructor managerConstructor = managerClass.getConstructor(Context.class);
- Object manager = managerConstructor.newInstance(this);
- Method m = managerClass.getMethod("dataChanged");
- m.invoke(manager);
- Log.d(TAG, "Backup requested");
- } catch(ClassNotFoundException e) {
- Log.d(TAG, "No backup manager found");
- } catch(Throwable t) {
- Log.d(TAG, "Scheduling backup failed " + t);
- t.printStackTrace();
- }
- }
-
- private void update() {
- if (testingConnection) {
- return;
- }
-
- theme.setSummary(theme.getEntry());
- maxBitrateWifi.setSummary(maxBitrateWifi.getEntry());
- maxBitrateMobile.setSummary(maxBitrateMobile.getEntry());
- maxVideoBitrateWifi.setSummary(maxVideoBitrateWifi.getEntry());
- maxVideoBitrateMobile.setSummary(maxVideoBitrateMobile.getEntry());
- networkTimeout.setSummary(networkTimeout.getEntry());
- cacheSize.setSummary(cacheSize.getText());
- cacheLocation.setSummary(cacheLocation.getText());
- preloadCountWifi.setSummary(preloadCountWifi.getEntry());
- preloadCountMobile.setSummary(preloadCountMobile.getEntry());
- randomSize.setSummary(randomSize.getText());
- tempLoss.setSummary(tempLoss.getEntry());
- bufferLength.setSummary(bufferLength.getText() + " seconds");
- chatRefreshRate.setSummary(chatRefreshRate.getText());
- videoPlayer.setSummary(videoPlayer.getEntry());
- for (ServerSettings ss : serverSettings.values()) {
- ss.update();
- }
- }
-
- private PreferenceScreen addServer(final int instance) {
- final PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(this);
- screen.setTitle(R.string.settings_server_unused);
- screen.setKey(Constants.PREFERENCES_KEY_SERVER_KEY + instance);
-
- final EditTextPreference serverNamePreference = new EditTextPreference(this);
- serverNamePreference.setKey(Constants.PREFERENCES_KEY_SERVER_NAME + instance);
- serverNamePreference.setDefaultValue(getResources().getString(R.string.settings_server_unused));
- serverNamePreference.setTitle(R.string.settings_server_name);
-
- if (serverNamePreference.getText() == null) {
- serverNamePreference.setText(getResources().getString(R.string.settings_server_unused));
- }
-
- serverNamePreference.setSummary(serverNamePreference.getText());
-
- final EditTextPreference serverUrlPreference = new EditTextPreference(this);
- serverUrlPreference.setKey(Constants.PREFERENCES_KEY_SERVER_URL + instance);
- serverUrlPreference.getEditText().setInputType(InputType.TYPE_TEXT_VARIATION_URI);
- serverUrlPreference.setDefaultValue("http://yourhost");
- serverUrlPreference.setTitle(R.string.settings_server_address);
-
- if (serverUrlPreference.getText() == null) {
- serverUrlPreference.setText("http://yourhost");
- }
-
- serverUrlPreference.setSummary(serverUrlPreference.getText());
-
- screen.setSummary(serverUrlPreference.getText());
-
- final EditTextPreference serverUsernamePreference = new EditTextPreference(this);
- serverUsernamePreference.setKey(Constants.PREFERENCES_KEY_USERNAME + instance);
- serverUsernamePreference.setTitle(R.string.settings_server_username);
-
- final EditTextPreference serverPasswordPreference = new EditTextPreference(this);
- serverPasswordPreference.setKey(Constants.PREFERENCES_KEY_PASSWORD + instance);
- serverPasswordPreference.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
- serverPasswordPreference.setSummary("***");
- serverPasswordPreference.setTitle(R.string.settings_server_password);
-
- final Preference serverOpenBrowser = new Preference(this);
- serverOpenBrowser.setKey(Constants.PREFERENCES_KEY_OPEN_BROWSER);
- serverOpenBrowser.setPersistent(false);
- serverOpenBrowser.setTitle(R.string.settings_server_open_browser);
- serverOpenBrowser.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- openInBrowser(instance);
- return true;
- }
- });
-
- Preference serverRemoveServerPreference = new Preference(this);
- serverRemoveServerPreference.setKey(Constants.PREFERENCES_KEY_SERVER_REMOVE + instance);
- serverRemoveServerPreference.setPersistent(false);
- serverRemoveServerPreference.setTitle(R.string.settings_servers_remove);
-
- serverRemoveServerPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- Util.confirmDialog(SettingsActivity.this, R.string.common_delete, screen.getTitle().toString(), new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- // Reset values to null so when we ask for them again they are new
- serverNamePreference.setText(null);
- serverUrlPreference.setText(null);
- serverUsernamePreference.setText(null);
- serverPasswordPreference.setText(null);
-
- int activeServer = Util.getActiveServer(SettingsActivity.this);
- for (int i = instance; i <= serverCount; i++) {
- Util.removeInstanceName(SettingsActivity.this, i, activeServer);
- }
-
- serverCount--;
- SharedPreferences.Editor editor = settings.edit();
- editor.putInt(Constants.PREFERENCES_KEY_SERVER_COUNT, serverCount);
- editor.commit();
-
- serversCategory.removePreference(screen);
- screen.getDialog().dismiss();
- }
- });
-
- return true;
- }
- });
-
- Preference serverTestConnectionPreference = new Preference(this);
- serverTestConnectionPreference.setKey(Constants.PREFERENCES_KEY_TEST_CONNECTION + instance);
- serverTestConnectionPreference.setPersistent(false);
- serverTestConnectionPreference.setTitle(R.string.settings_test_connection_title);
- serverTestConnectionPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- testConnection(instance);
- return false;
- }
- });
-
- screen.addPreference(serverNamePreference);
- screen.addPreference(serverUrlPreference);
- screen.addPreference(serverUsernamePreference);
- screen.addPreference(serverPasswordPreference);
- screen.addPreference(serverRemoveServerPreference);
- screen.addPreference(serverTestConnectionPreference);
- screen.addPreference(serverOpenBrowser);
-
- return screen;
- }
-
- private void applyTheme() {
- String activeTheme = Util.getTheme(this);
- if ("dark".equals(activeTheme)) {
- setTheme(R.style.Theme_DSub_Dark);
- } else if ("black".equals(activeTheme)) {
- setTheme(R.style.Theme_DSub_Black);
- } else if ("light".equals(activeTheme)) {
- setTheme(R.style.Theme_DSub_Light);
- } else if ("dark_fullscreen".equals(activeTheme)) {
- setTheme(R.style.Theme_DSub_Dark_Fullscreen);
- } else if ("black_fullscreen".equals(activeTheme)) {
- setTheme(R.style.Theme_DSub_Black_Fullscreen);
- } else if ("light_fullscreen".equals(activeTheme)) {
- setTheme(R.style.Theme_DSub_Light_Fullscreen);
- } else if("holo".equals(activeTheme)) {
- setTheme(R.style.Theme_DSub_Holo);
- } else if("holo_fullscreen".equals(activeTheme)) {
- setTheme(R.style.Theme_DSub_Holo_Fullscreen);
- }else {
- setTheme(R.style.Theme_DSub_Holo);
- }
- }
-
- private void setHideMedia(boolean hide) {
- File nomediaDir = new File(FileUtil.getSubsonicDirectory(), ".nomedia");
- if (hide && !nomediaDir.exists()) {
- try {
- if (!nomediaDir.createNewFile()) {
- Log.w(TAG, "Failed to create " + nomediaDir);
- }
- } catch(Exception e) {
- Log.w(TAG, "Failed to create " + nomediaDir);
- }
- } else if (nomediaDir.exists()) {
- if (!nomediaDir.delete()) {
- Log.w(TAG, "Failed to delete " + nomediaDir);
- }
- }
- Util.toast(this, R.string.settings_hide_media_toast, false);
- }
-
- private void setMediaButtonsEnabled(boolean enabled) {
- if (enabled) {
- Util.registerMediaButtonEventReceiver(this);
- } else {
- Util.unregisterMediaButtonEventReceiver(this);
- }
- }
-
- private void setCacheLocation(String path) {
- File dir = new File(path);
- if (!FileUtil.ensureDirectoryExistsAndIsReadWritable(dir)) {
- Util.toast(this, R.string.settings_cache_location_error, false);
-
- // Reset it to the default.
- String defaultPath = FileUtil.getDefaultMusicDirectory().getPath();
- if (!defaultPath.equals(path)) {
- SharedPreferences prefs = Util.getPreferences(this);
- SharedPreferences.Editor editor = prefs.edit();
- editor.putString(Constants.PREFERENCES_KEY_CACHE_LOCATION, defaultPath);
- editor.commit();
- cacheLocation.setSummary(defaultPath);
- cacheLocation.setText(defaultPath);
- }
-
- // Clear download queue.
- DownloadService downloadService = DownloadServiceImpl.getInstance();
- downloadService.clear();
- }
- }
-
- private void testConnection(final int instance) {
- LoadingTask<Boolean> task = new LoadingTask<Boolean>(this) {
- private int previousInstance;
-
- @Override
- protected Boolean doInBackground() throws Throwable {
- updateProgress(R.string.settings_testing_connection);
-
- previousInstance = Util.getActiveServer(SettingsActivity.this);
- testingConnection = true;
- Util.setActiveServer(SettingsActivity.this, instance);
- try {
- MusicService musicService = MusicServiceFactory.getMusicService(SettingsActivity.this);
- musicService.ping(SettingsActivity.this, this);
- return musicService.isLicenseValid(SettingsActivity.this, null);
- } finally {
- Util.setActiveServer(SettingsActivity.this, previousInstance);
- testingConnection = false;
- }
- }
-
- @Override
- protected void done(Boolean licenseValid) {
- if (licenseValid) {
- Util.toast(SettingsActivity.this, R.string.settings_testing_ok);
- } else {
- Util.toast(SettingsActivity.this, R.string.settings_testing_unlicensed);
- }
- }
-
- @Override
- protected void cancel() {
- super.cancel();
- Util.setActiveServer(SettingsActivity.this, previousInstance);
- }
-
- @Override
- protected void error(Throwable error) {
- Log.w(TAG, error.toString(), error);
- new ErrorDialog(SettingsActivity.this, getResources().getString(R.string.settings_connection_failure) +
- " " + getErrorMessage(error), false);
- }
- };
- task.execute();
- }
-
- private void openInBrowser(final int instance) {
- SharedPreferences prefs = Util.getPreferences(this);
- String url = prefs.getString(Constants.PREFERENCES_KEY_SERVER_URL + instance, null);
- Uri uriServer = Uri.parse(url);
-
- Intent browserIntent = new Intent(Intent.ACTION_VIEW, uriServer);
- startActivity(browserIntent);
- }
-
- private class ServerSettings {
- private EditTextPreference serverName;
- private EditTextPreference serverUrl;
- private EditTextPreference username;
- private PreferenceScreen screen;
-
- private ServerSettings(String instance) {
-
- screen = (PreferenceScreen) findPreference("server" + instance);
- serverName = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_SERVER_NAME + instance);
- serverUrl = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_SERVER_URL + instance);
- username = (EditTextPreference) findPreference(Constants.PREFERENCES_KEY_USERNAME + instance);
-
- serverUrl.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object value) {
- try {
- String url = (String) value;
- new URL(url);
- if (!url.equals(url.trim()) || url.contains("@") || url.contains("_")) {
- throw new Exception();
- }
- } catch (Exception x) {
- new ErrorDialog(SettingsActivity.this, R.string.settings_invalid_url, false);
- return false;
- }
- return true;
- }
- });
-
- username.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
- @Override
- public boolean onPreferenceChange(Preference preference, Object value) {
- String username = (String) value;
- if (username == null || !username.equals(username.trim())) {
- new ErrorDialog(SettingsActivity.this, R.string.settings_invalid_username, false);
- return false;
- }
- return true;
- }
- });
- }
-
- public void update() {
- serverName.setSummary(serverName.getText());
- serverUrl.setSummary(serverUrl.getText());
- username.setSummary(username.getText());
- screen.setSummary(serverUrl.getText());
- screen.setTitle(serverName.getText());
- }
- }
-}
diff --git a/subsonic-android/src/github/daneren2005/dsub/activity/SubsonicActivity.java b/subsonic-android/src/github/daneren2005/dsub/activity/SubsonicActivity.java
deleted file mode 100644
index d8158f7d..00000000
--- a/subsonic-android/src/github/daneren2005/dsub/activity/SubsonicActivity.java
+++ /dev/null
@@ -1,641 +0,0 @@
-package github.daneren2005.dsub.activity;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageInfo;
-import android.media.AudioManager;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.Environment;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentPagerAdapter;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v4.view.ViewPager;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.View;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemSelectedListener;
-import android.widget.ArrayAdapter;
-import android.widget.Spinner;
-import com.actionbarsherlock.app.ActionBar;
-import com.actionbarsherlock.app.ActionBar.Tab;
-import com.actionbarsherlock.app.ActionBar.TabListener;
-import com.actionbarsherlock.app.SherlockFragmentActivity;
-import com.actionbarsherlock.app.SherlockFragment;
-import com.actionbarsherlock.view.Menu;
-import com.actionbarsherlock.view.MenuItem;
-import github.daneren2005.dsub.R;
-import github.daneren2005.dsub.fragments.SubsonicFragment;
-import github.daneren2005.dsub.service.DownloadService;
-import github.daneren2005.dsub.service.DownloadServiceImpl;
-import github.daneren2005.dsub.util.Constants;
-import github.daneren2005.dsub.util.ImageLoader;
-import github.daneren2005.dsub.util.Util;
-import java.io.File;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-public class SubsonicActivity extends SherlockFragmentActivity implements OnItemSelectedListener {
- private static final String TAG = SubsonicActivity.class.getSimpleName();
- private static ImageLoader IMAGE_LOADER;
- protected static String theme;
- private boolean destroyed = false;
- protected TabPagerAdapter pagerAdapter;
- protected ViewPager viewPager;
- protected List<SubsonicFragment> backStack = new ArrayList<SubsonicFragment>();
- protected SubsonicFragment currentFragment;
- Spinner actionBarSpinner;
- ArrayAdapter<CharSequence> spinnerAdapter;
-
- @Override
- protected void onCreate(Bundle bundle) {
- setUncaughtExceptionHandler();
- applyTheme();
- super.onCreate(bundle);
- startService(new Intent(this, DownloadServiceImpl.class));
- setVolumeControlStream(AudioManager.STREAM_MUSIC);
-
- View actionbar = getLayoutInflater().inflate(R.layout.actionbar_spinner, null);
- actionBarSpinner = (Spinner)actionbar.findViewById(R.id.spinner);
- spinnerAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item);
- spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- actionBarSpinner.setOnItemSelectedListener(this);
- actionBarSpinner.setAdapter(spinnerAdapter);
-
- getSupportActionBar().setCustomView(actionbar);
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- Util.registerMediaButtonEventReceiver(this);
-
- // Make sure to update theme
- if (theme != null && !theme.equals(Util.getTheme(this))) {
- restart();
- }
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- destroyed = true;
- getImageLoader().clear();
- }
-
- @Override
- public void finish() {
- super.finish();
- Util.disablePendingTransition(this);
- }
-
- @Override
- public void onSaveInstanceState(Bundle savedInstanceState) {
- super.onSaveInstanceState(savedInstanceState);
- if(viewPager == null) {
- String[] ids = new String[backStack.size() + 1];
- ids[0] = currentFragment.getTag();
- int i = 1;
- for(SubsonicFragment frag: backStack) {
- ids[i] = frag.getTag();
- i++;
- }
- savedInstanceState.putStringArray(Constants.MAIN_BACK_STACK, ids);
- savedInstanceState.putInt(Constants.MAIN_BACK_STACK_SIZE, backStack.size() + 1);
- } else {
- pagerAdapter.onSaveInstanceState(savedInstanceState);
- }
- }
- @Override
- public void onRestoreInstanceState(Bundle savedInstanceState) {
- if(viewPager == null) {
- super.onRestoreInstanceState(savedInstanceState);
- int size = savedInstanceState.getInt(Constants.MAIN_BACK_STACK_SIZE);
- String[] ids = savedInstanceState.getStringArray(Constants.MAIN_BACK_STACK);
- FragmentManager fm = getSupportFragmentManager();
- currentFragment = (SubsonicFragment)fm.findFragmentByTag(ids[0]);
- currentFragment.setPrimaryFragment(true);
- invalidateOptionsMenu();
- for(int i = 1; i < size; i++) {
- SubsonicFragment frag = (SubsonicFragment)fm.findFragmentByTag(ids[i]);
- backStack.add(frag);
- }
- recreateSpinner();
- } else {
- pagerAdapter.onRestoreInstanceState(savedInstanceState);
- super.onRestoreInstanceState(savedInstanceState);
- }
- }
-
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- com.actionbarsherlock.view.MenuInflater menuInflater = getSupportMenuInflater();
- if(pagerAdapter != null) {
- pagerAdapter.onCreateOptionsMenu(menu, menuInflater);
- } else if(currentFragment != null) {
- currentFragment.onCreateOptionsMenu(menu, menuInflater);
- }
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) {
- if(pagerAdapter != null) {
- return pagerAdapter.onOptionsItemSelected(item);
- } else if(currentFragment != null) {
- return currentFragment.onOptionsItemSelected(item);
- }
- return true;
- }
-
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- boolean isVolumeDown = keyCode == KeyEvent.KEYCODE_VOLUME_DOWN;
- boolean isVolumeUp = keyCode == KeyEvent.KEYCODE_VOLUME_UP;
- boolean isVolumeAdjust = isVolumeDown || isVolumeUp;
- boolean isJukebox = getDownloadService() != null && getDownloadService().isJukeboxEnabled();
-
- if (isVolumeAdjust && isJukebox) {
- getDownloadService().adjustJukeboxVolume(isVolumeUp);
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }
-
- @Override
- public void setTitle(CharSequence title) {
- super.setTitle(title);
- if(pagerAdapter != null) {
- pagerAdapter.recreateSpinner();
- } else {
- recreateSpinner();
- }
- }
- public void setSubtitle(CharSequence title) {
- getSupportActionBar().setSubtitle(title);
- }
-
- @Override
- public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
- int top = spinnerAdapter.getCount() - 1;
- if(position < top) {
- for(int i = top; i > position; i--) {
- if(pagerAdapter != null) {
- pagerAdapter.removeCurrent();
- } else {
- removeCurrent();
- }
- }
- }
- }
-
- @Override
- public void onNothingSelected(AdapterView<?> parent) {
-
- }
-
- public boolean onBackPressedSupport() {
- if(pagerAdapter != null) {
- return pagerAdapter.onBackPressed();
- } else {
- if(backStack.size() > 0) {
- removeCurrent();
- return false;
- } else {
- return true;
- }
- }
- }
-
- public void replaceFragment(SubsonicFragment fragment, int id, int tag) {
- if(pagerAdapter != null) {
- pagerAdapter.replaceCurrent(fragment, id, tag);
- } else {
- if(currentFragment != null) {
- currentFragment.setPrimaryFragment(false);
- }
- backStack.add(currentFragment);
-
- currentFragment = fragment;
- currentFragment.setPrimaryFragment(true);
- invalidateOptionsMenu();
-
- FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
- trans.add(id, fragment, tag + "");
- trans.commit();
- recreateSpinner();
- }
- }
- private void removeCurrent() {
- if(currentFragment != null) {
- currentFragment.setPrimaryFragment(false);
- }
- Fragment oldFrag = (Fragment)currentFragment;
-
- currentFragment = (SubsonicFragment) backStack.remove(backStack.size() - 1);
- currentFragment.setPrimaryFragment(true);
- invalidateOptionsMenu();
-
- FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
- trans.remove(oldFrag);
- trans.commit();
- recreateSpinner();
- }
-
- private void recreateSpinner() {
- if(backStack.size() > 0) {
- spinnerAdapter.clear();
- for(int i = 0; i < backStack.size(); i++) {
- spinnerAdapter.add(backStack.get(i).getTitle());
- }
- spinnerAdapter.add(currentFragment.getTitle());
- spinnerAdapter.notifyDataSetChanged();
- actionBarSpinner.setSelection(spinnerAdapter.getCount() - 1);
- getSupportActionBar().setDisplayShowCustomEnabled(true);
- } else {
- getSupportActionBar().setDisplayShowCustomEnabled(false);
- }
- }
-
- protected void addTab(int titleRes, Class fragmentClass, Bundle args) {
- pagerAdapter.addTab(getString(titleRes), fragmentClass, args);
- }
- protected void addTab(CharSequence title, Class fragmentClass, Bundle args) {
- pagerAdapter.addTab(title, fragmentClass, args);
- }
-
- protected void restart() {
- Intent intent = new Intent(this, this.getClass());
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- intent.putExtras(getIntent());
- Util.startActivityWithoutTransition(this, intent);
- }
-
- private void applyTheme() {
- theme = Util.getTheme(this);
- if ("dark".equals(theme)) {
- setTheme(R.style.Theme_DSub_Dark);
- } else if ("black".equals(theme)) {
- setTheme(R.style.Theme_DSub_Black);
- } else if ("light".equals(theme)) {
- setTheme(R.style.Theme_DSub_Light);
- } else if ("dark_fullscreen".equals(theme)) {
- setTheme(R.style.Theme_DSub_Dark_Fullscreen);
- } else if ("black_fullscreen".equals(theme)) {
- setTheme(R.style.Theme_DSub_Black_Fullscreen);
- } else if ("light_fullscreen".equals(theme)) {
- setTheme(R.style.Theme_DSub_Light_Fullscreen);
- } else if("holo".equals(theme)) {
- setTheme(R.style.Theme_DSub_Holo);
- } else if("holo_fullscreen".equals(theme)) {
- setTheme(R.style.Theme_DSub_Holo_Fullscreen);
- }else {
- setTheme(R.style.Theme_DSub_Holo);
- }
- }
-
- public boolean isDestroyed() {
- return destroyed;
- }
-
- public synchronized ImageLoader getImageLoader() {
- if (IMAGE_LOADER == null) {
- IMAGE_LOADER = new ImageLoader(this);
- }
- return IMAGE_LOADER;
- }
- public synchronized static ImageLoader getStaticImageLoader(Context context) {
- if (IMAGE_LOADER == null) {
- IMAGE_LOADER = new ImageLoader(context);
- }
- return IMAGE_LOADER;
- }
-
- public DownloadService getDownloadService() {
- // If service is not available, request it to start and wait for it.
- for (int i = 0; i < 5; i++) {
- DownloadService downloadService = DownloadServiceImpl.getInstance();
- if (downloadService != null) {
- return downloadService;
- }
- Log.w(TAG, "DownloadService not running. Attempting to start it.");
- startService(new Intent(this, DownloadServiceImpl.class));
- Util.sleepQuietly(50L);
- }
- return DownloadServiceImpl.getInstance();
- }
-
- public ViewPager getViewPager() {
- return viewPager;
- }
- public TabPagerAdapter getPagerAdapter() {
- return pagerAdapter;
- }
-
- public static String getThemeName() {
- return theme;
- }
-
- private void setUncaughtExceptionHandler() {
- Thread.UncaughtExceptionHandler handler = Thread.getDefaultUncaughtExceptionHandler();
- if (!(handler instanceof SubsonicActivity.SubsonicUncaughtExceptionHandler)) {
- Thread.setDefaultUncaughtExceptionHandler(new SubsonicActivity.SubsonicUncaughtExceptionHandler(this));
- }
- }
-
- /**
- * Logs the stack trace of uncaught exceptions to a file on the SD card.
- */
- private static class SubsonicUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
-
- private final Thread.UncaughtExceptionHandler defaultHandler;
- private final Context context;
-
- private SubsonicUncaughtExceptionHandler(Context context) {
- this.context = context;
- defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
- }
-
- @Override
- public void uncaughtException(Thread thread, Throwable throwable) {
- File file = null;
- PrintWriter printWriter = null;
- try {
-
- PackageInfo packageInfo = context.getPackageManager().getPackageInfo("github.daneren2005.dsub", 0);
- file = new File(Environment.getExternalStorageDirectory(), "subsonic-stacktrace.txt");
- printWriter = new PrintWriter(file);
- printWriter.println("Android API level: " + Build.VERSION.SDK);
- printWriter.println("Subsonic version name: " + packageInfo.versionName);
- printWriter.println("Subsonic version code: " + packageInfo.versionCode);
- printWriter.println();
- throwable.printStackTrace(printWriter);
- Log.i(TAG, "Stack trace written to " + file);
- } catch (Throwable x) {
- Log.e(TAG, "Failed to write stack trace to " + file, x);
- } finally {
- Util.close(printWriter);
- if (defaultHandler != null) {
- defaultHandler.uncaughtException(thread, throwable);
- }
-
- }
- }
- }
-
- public class TabPagerAdapter extends FragmentPagerAdapter implements TabListener, ViewPager.OnPageChangeListener {
- private SherlockFragmentActivity activity;
- private ViewPager pager;
- private ActionBar actionBar;
- private SubsonicFragment currentFragment;
- private List<TabInfo> tabs = new ArrayList<TabInfo>();
- private List<List<SubsonicFragment>> frags = new ArrayList<List<SubsonicFragment>>();
- private List<QueuedFragment> queue = new ArrayList<QueuedFragment>();
- private int currentPosition;
-
- public TabPagerAdapter(SherlockFragmentActivity activity, ViewPager pager) {
- super(activity.getSupportFragmentManager());
- this.activity = activity;
- this.actionBar = activity.getSupportActionBar();
- this.pager = pager;
- this.currentPosition = 0;
- }
-
- @Override
- public Fragment getItem(int i) {
- final TabInfo tabInfo = tabs.get(i);
- SubsonicFragment frag = (SubsonicFragment) Fragment.instantiate(activity, tabInfo.fragmentClass.getName(), tabInfo.args);
- List<SubsonicFragment> fragStack = new ArrayList<SubsonicFragment>();
- fragStack.add(frag);
- while(i > frags.size()) {
- frags.add(null);
- }
- if(i == frags.size()) {
- frags.add(i, fragStack);
- } else {
- frags.set(i, fragStack);
- }
- if(currentFragment == null || currentPosition == i) {
- currentFragment = frag;
- currentFragment.setPrimaryFragment(true);
- }
- return frag;
- }
-
- @Override
- public int getCount() {
- return tabs.size();
- }
-
- public void onCreateOptionsMenu(Menu menu, com.actionbarsherlock.view.MenuInflater menuInflater) {
- if(currentFragment != null) {
- currentFragment.onCreateOptionsMenu(menu, menuInflater);
-
- for(QueuedFragment addFragment: queue) {
- replaceFragment(addFragment.fragment, addFragment.id, currentFragment.getSupportTag());
- currentFragment = addFragment.fragment;
- }
- currentFragment.setPrimaryFragment(true);
- queue.clear();
- }
- }
- public boolean onOptionsItemSelected(com.actionbarsherlock.view.MenuItem item) {
- if(currentFragment != null) {
- return currentFragment.onOptionsItemSelected(item);
- } else {
- return false;
- }
- }
-
- public void onTabSelected(Tab tab, FragmentTransaction ft) {
- TabInfo tabInfo = (TabInfo) tab.getTag();
- for (int i = 0; i < tabs.size(); i++) {
- if ( tabs.get(i) == tabInfo ) {
- pager.setCurrentItem(i);
- break;
- }
- }
- }
-
- public void onTabUnselected(Tab tab, FragmentTransaction ft) {}
-
- public void onTabReselected(Tab tab, FragmentTransaction ft) {}
-
- public void onPageScrollStateChanged(int arg0) {}
-
- public void onPageScrolled(int arg0, float arg1, int arg2) {}
-
- public void onPageSelected(int position) {
- currentPosition = position;
- actionBar.setSelectedNavigationItem(position);
- if(currentFragment != null) {
- currentFragment.setPrimaryFragment(false);
- }
- if(position <= frags.size()) {
- List<SubsonicFragment> fragStack = frags.get(position);
- currentFragment = fragStack.get(fragStack.size() - 1);
- if(currentFragment != null) {
- currentFragment.setPrimaryFragment(true);
- }
- activity.invalidateOptionsMenu();
- recreateSpinner();
- }
- }
-
- public void addTab(CharSequence title, Class fragmentClass, Bundle args) {
- final TabInfo tabInfo = new TabInfo(fragmentClass, args);
-
- Tab tab = actionBar.newTab();
- tab.setText(title);
- tab.setTabListener(this);
- tab.setTag(tabInfo);
-
- tabs.add(tabInfo);
-
- actionBar.addTab(tab);
- notifyDataSetChanged();
- }
- public void queueFragment(SubsonicFragment fragment, int id) {
- QueuedFragment frag = new QueuedFragment();
- frag.fragment = fragment;
- frag.id = id;
- queue.add(frag);
- }
- public void replaceCurrent(SubsonicFragment fragment, int id, int tag) {
- if(currentFragment != null) {
- currentFragment.setPrimaryFragment(false);
- }
- List<SubsonicFragment> fragStack = frags.get(currentPosition);
- fragStack.add(fragment);
-
- currentFragment = fragment;
- currentFragment.setPrimaryFragment(true);
- activity.invalidateOptionsMenu();
-
- FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
- trans.add(id, fragment, tag + "");
- trans.commit();
- recreateSpinner();
- }
-
- public void removeCurrent() {
- if(currentFragment != null) {
- currentFragment.setPrimaryFragment(false);
- }
- List<SubsonicFragment> fragStack = frags.get(currentPosition);
- Fragment oldFrag = (Fragment)fragStack.remove(fragStack.size() - 1);
-
- currentFragment = fragStack.get(fragStack.size() - 1);
- currentFragment.setPrimaryFragment(true);
- activity.invalidateOptionsMenu();
-
- FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
- trans.remove(oldFrag);
- trans.commit();
- }
-
- public boolean onBackPressed() {
- List<SubsonicFragment> fragStack = frags.get(currentPosition);
- if(fragStack.size() > 1) {
- removeCurrent();
- recreateSpinner();
- return false;
- } else {
- if(currentPosition == 0) {
- return true;
- } else {
- viewPager.setCurrentItem(0);
- return false;
- }
- }
- }
-
- private void recreateSpinner() {
- if(frags.isEmpty()) {
- return;
- }
-
- List<SubsonicFragment> fragStack = frags.get(currentPosition);
- if(fragStack.size() > 1) {
- spinnerAdapter.clear();
- for(int i = 0; i < fragStack.size(); i++) {
- SubsonicFragment frag = fragStack.get(i);
- spinnerAdapter.add(frag.getTitle());
- }
- spinnerAdapter.notifyDataSetChanged();
- actionBarSpinner.setSelection(spinnerAdapter.getCount() - 1);
- actionBar.setDisplayShowCustomEnabled(true);
- } else {
- actionBar.setDisplayShowCustomEnabled(false);
- }
- }
-
- public void invalidate() {
- FragmentTransaction trans = getSupportFragmentManager().beginTransaction();
- for (int i = 0; i < frags.size(); i++) {
- List<SubsonicFragment> fragStack = frags.get(i);
-
- for(int j = fragStack.size() - 1; j > 0; j--) {
- SubsonicFragment oldFrag = fragStack.remove(j);
- trans.remove((Fragment)oldFrag);
- }
-
- SubsonicFragment frag = (SubsonicFragment)fragStack.get(0);
- frag.invalidate();
- }
- trans.commit();
- }
-
- public void onSaveInstanceState(Bundle savedInstanceState) {
- for(int i = 0; i < frags.size(); i++) {
- List<SubsonicFragment> fragStack = frags.get(i);
- String[] ids = new String[fragStack.size()];
-
- for(int j = 0; j < fragStack.size(); j++) {
- ids[j] = fragStack.get(j).getTag();
- }
- savedInstanceState.putStringArray(Constants.MAIN_BACK_STACK + i, ids);
- savedInstanceState.putInt(Constants.MAIN_BACK_STACK_SIZE + i, fragStack.size());
- }
- savedInstanceState.putInt(Constants.MAIN_BACK_STACK_TABS, frags.size());
- savedInstanceState.putInt(Constants.MAIN_BACK_STACK_POSITION, currentPosition);
- }
-
- public void onRestoreInstanceState(Bundle savedInstanceState) {
- int tabCount = savedInstanceState.getInt(Constants.MAIN_BACK_STACK_TABS);
- FragmentManager fm = activity.getSupportFragmentManager();
- for(int i = 0; i < tabCount; i++) {
- int stackSize = savedInstanceState.getInt(Constants.MAIN_BACK_STACK_SIZE + i);
- String[] ids = savedInstanceState.getStringArray(Constants.MAIN_BACK_STACK + i);
- List<SubsonicFragment> fragStack = new ArrayList<SubsonicFragment>();
-
- for(int j = 0; j < stackSize; j++) {
- SubsonicFragment frag = (SubsonicFragment)fm.findFragmentByTag(ids[j]);
- fragStack.add(frag);
- }
-
- frags.add(i, fragStack);
- }
- currentPosition = savedInstanceState.getInt(Constants.MAIN_BACK_STACK_POSITION);
- List<SubsonicFragment> fragStack = frags.get(currentPosition);
- currentFragment = fragStack.get(fragStack.size() - 1);
- currentFragment.setPrimaryFragment(true);
- activity.invalidateOptionsMenu();
- }
-
- private class TabInfo {
- public final Class fragmentClass;
- public final Bundle args;
- public TabInfo(Class fragmentClass, Bundle args) {
- this.fragmentClass = fragmentClass;
- this.args = args;
- }
- }
- private class QueuedFragment {
- public SubsonicFragment fragment;
- public int id;
- }
- }
-}
diff --git a/subsonic-android/src/github/daneren2005/dsub/activity/VoiceQueryReceiverActivity.java b/subsonic-android/src/github/daneren2005/dsub/activity/VoiceQueryReceiverActivity.java
deleted file mode 100644
index 5cda9ee5..00000000
--- a/subsonic-android/src/github/daneren2005/dsub/activity/VoiceQueryReceiverActivity.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- This file is part of Subsonic.
-
- Subsonic is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- Subsonic is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with Subsonic. If not, see <http://www.gnu.org/licenses/>.
-
- Copyright 2009 (C) Sindre Mehus
- */
-
-package github.daneren2005.dsub.activity;
-
-import android.app.Activity;
-import android.app.SearchManager;
-import android.content.Intent;
-import android.os.Bundle;
-import android.provider.SearchRecentSuggestions;
-import github.daneren2005.dsub.util.Constants;
-import github.daneren2005.dsub.util.Util;
-import github.daneren2005.dsub.provider.DSubSearchProvider;
-
-/**
- * Receives voice search queries and forwards to the SearchActivity.
- *
- * http://android-developers.blogspot.com/2010/09/supporting-new-music-voice-action.html
- *
- * @author Sindre Mehus
- */
-public class VoiceQueryReceiverActivity extends Activity {
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- String query = getIntent().getStringExtra(SearchManager.QUERY);
-
- if (query != null) {
- SearchRecentSuggestions suggestions = new SearchRecentSuggestions(this, DSubSearchProvider.AUTHORITY,
- DSubSearchProvider.MODE);
- suggestions.saveRecentQuery(query, null);
-
- Intent intent = new Intent(VoiceQueryReceiverActivity.this, SearchActivity.class);
- intent.putExtra(Constants.INTENT_EXTRA_NAME_QUERY, query);
- intent.putExtra(Constants.INTENT_EXTRA_NAME_AUTOPLAY, true);
- Util.startActivityWithoutTransition(VoiceQueryReceiverActivity.this, intent);
- }
- finish();
- Util.disablePendingTransition(this);
- }
-} \ No newline at end of file