Added preference for setting the application theme

This commit is contained in:
daniel oeh 2012-11-23 19:42:51 +01:00
parent f2175dff16
commit 509423653d
24 changed files with 112 additions and 5 deletions

View File

@ -20,5 +20,15 @@
<item>12</item>
<item>24</item>
</string-array>
<string-array name="theme_options">
<item>Light</item>
<item>Dark</item>
</string-array>
<string-array name="theme_values">
<item>0</item>
<item>1</item>
</string-array>
</resources>

View File

@ -164,6 +164,8 @@
<string name="user_interface_label">User Interface</string>
<string name="pref_auto_delete_title">Auto-delete</string>
<string name="pref_auto_delete_sum">Delete an episode when playback completes or when it is removed from the queue.</string>
<string name="pref_set_theme_title">Select Theme</string>
<string name="pref_set_theme_sum">Change the appearance of AntennaPod.</string>
<!-- Search -->
<string name="search_hint">Search for Feeds or Episodes</string>

View File

@ -3,6 +3,7 @@
<PreferenceCategory android:title="@string/user_interface_label">
<CheckBoxPreference android:title="@string/pref_display_only_episodes_title" android:summary="@string/pref_display_only_episodes_sum" android:key="prefDisplayOnlyEpisodes"/>
<ListPreference android:entryValues="@array/theme_values" android:entries="@array/theme_options" android:title="@string/pref_set_theme_title" android:key="prefTheme" android:summary="@string/pref_set_theme_sum" android:defaultValue="0"/>
</PreferenceCategory><PreferenceCategory android:title="@string/playback_pref" >
<CheckBoxPreference
android:defaultValue="true"

View File

@ -11,6 +11,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.util.Log;
import de.danoeh.antennapod.activity.OpmlImportActivity;
@ -35,6 +36,7 @@ public class PodcastApp extends Application implements
public static final String PREF_AUTO_QUEUE = "prefAutoQueue";
public static final String PREF_DISPLAY_ONLY_EPISODES = "prefDisplayOnlyEpisodes";
public static final String PREF_AUTO_DELETE = "prefAutoDelete";
public static final String PREF_THEME = "prefTheme";
private static float LOGICAL_DENSITY;
@ -43,6 +45,9 @@ public class PodcastApp extends Application implements
private boolean displayOnlyEpisodes;
private static long currentlyPlayingMediaId;
/** Resource id of the currently selected theme. */
private static int theme;
public static PodcastApp getInstance() {
return singleton;
@ -60,6 +65,7 @@ public class PodcastApp extends Application implements
currentlyPlayingMediaId = prefs.getLong(
PlaybackService.PREF_CURRENTLY_PLAYING_MEDIA,
PlaybackService.NO_MEDIA_PLAYING);
readThemeValue();
createImportDirectory();
createNoMediaFile();
prefs.registerOnSharedPreferenceChangeListener(this);
@ -162,6 +168,8 @@ public class PodcastApp extends Application implements
if (id != currentlyPlayingMediaId) {
currentlyPlayingMediaId = id;
}
} else if (key.equals(PREF_THEME)) {
readThemeValue();
}
}
@ -182,4 +190,22 @@ public class PodcastApp extends Application implements
|| (getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE;
}
public static int getThemeResourceId() {
return theme;
}
/** Read value of prefTheme and determine the correct resource id. */
private void readThemeValue() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int prefTheme = Integer.parseInt(prefs.getString(PREF_THEME, "0"));
switch (prefTheme) {
case 0:
theme = R.style.Theme_AntennaPod_Light;
break;
case 1:
theme = R.style.Theme_AntennaPod_Dark;
break;
}
}
}

View File

@ -18,6 +18,7 @@ import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.feed.Feed;
import de.danoeh.antennapod.storage.DownloadRequestException;
@ -44,6 +45,7 @@ public class AddFeedActivity extends SherlockActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
StorageUtils.checkStorageAvailability(this);
setContentView(R.layout.addfeed);

View File

@ -22,6 +22,7 @@ import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.adapter.DownloadlistAdapter;
import de.danoeh.antennapod.asynctask.DownloadStatus;
@ -52,6 +53,7 @@ public class DownloadActivity extends SherlockListActivity implements
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
if (AppConfig.DEBUG)
Log.d(TAG, "Creating Activity");
requester = DownloadRequester.getInstance();

View File

@ -10,6 +10,7 @@ import com.actionbarsherlock.app.SherlockListActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.adapter.DownloadLogAdapter;
import de.danoeh.antennapod.feed.FeedManager;
@ -26,6 +27,7 @@ public class DownloadLogActivity extends SherlockListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
manager = FeedManager.getInstance();
dla = new DownloadLogAdapter(this, 0, manager.getDownloadLog());

View File

@ -11,6 +11,7 @@ import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.asynctask.FeedImageLoader;
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
@ -37,6 +38,7 @@ public class FeedInfoActivity extends SherlockActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
setContentView(R.layout.feedinfo);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
long feedId = getIntent().getLongExtra(EXTRA_FEED_ID, -1);

View File

@ -15,6 +15,7 @@ import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.Window;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.asynctask.FeedRemover;
import de.danoeh.antennapod.dialog.ConfirmationDialog;
@ -42,6 +43,7 @@ public class FeedItemlistActivity extends SherlockFragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
StorageUtils.checkStorageAvailability(this);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

View File

@ -17,6 +17,7 @@ import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.util.flattr.FlattrUtils;
@ -36,6 +37,7 @@ public class FlattrAuthActivity extends SherlockActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
singleton = this;
authSuccessful = false;
if (AppConfig.DEBUG) Log.d(TAG, "Activity created");

View File

@ -16,6 +16,7 @@ import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.Window;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
import de.danoeh.antennapod.feed.Feed;
@ -42,6 +43,7 @@ public class ItemviewActivity extends SherlockFragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
StorageUtils.checkStorageAvailability(this);
manager = FeedManager.getInstance();
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

View File

@ -20,6 +20,7 @@ import com.actionbarsherlock.view.Window;
import com.viewpagerindicator.TabPageIndicator;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.feed.FeedManager;
import de.danoeh.antennapod.fragment.ExternalPlayerFragment;
@ -46,6 +47,7 @@ public class MainActivity extends SherlockFragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
StorageUtils.checkStorageAvailability(this);
manager = FeedManager.getInstance();
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

View File

@ -18,6 +18,7 @@ import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
import de.danoeh.antennapod.dialog.TimeDialog;
@ -138,6 +139,7 @@ public abstract class MediaplayerActivity extends SherlockFragmentActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
if (AppConfig.DEBUG)
Log.d(TAG, "Creating Activity");
StorageUtils.checkStorageAvailability(this);

View File

@ -12,6 +12,7 @@ import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.viewpagerindicator.TabPageIndicator;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.fragment.MiroGuideChannellistFragment;
@ -34,6 +35,7 @@ public class MiroGuideCategoryActivity extends SherlockFragmentActivity {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setTheme(PodcastApp.getThemeResourceId());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.miroguide_category);

View File

@ -6,6 +6,7 @@ import android.annotation.SuppressLint;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
@ -21,6 +22,7 @@ import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.adapter.MiroGuideItemlistAdapter;
import de.danoeh.antennapod.dialog.DownloadRequestErrorDialogCreator;
@ -62,6 +64,7 @@ public class MiroGuideChannelViewActivity extends SherlockActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.miroguide_channelview);
@ -101,6 +104,7 @@ public class MiroGuideChannelViewActivity extends SherlockActivity {
return null;
}
@SuppressLint("NewApi")
@Override
protected void onPostExecute(Void result) {
if (AppConfig.DEBUG)
@ -115,7 +119,9 @@ public class MiroGuideChannelViewActivity extends SherlockActivity {
listEntries.setAdapter(listAdapter);
progLoading.setVisibility(View.GONE);
layoutContent.setVisibility(View.VISIBLE);
invalidateOptionsMenu();
if (Build.VERSION.SDK_INT >= 11) {
invalidateOptionsMenu();
}
} else {
finish();
}
@ -145,6 +151,7 @@ public class MiroGuideChannelViewActivity extends SherlockActivity {
return true;
}
@SuppressLint("NewApi")
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
@ -157,16 +164,21 @@ public class MiroGuideChannelViewActivity extends SherlockActivity {
return true;
case R.id.add_feed:
try {
DownloadRequester.getInstance().downloadFeed(this,
new Feed(channel.getDownloadUrl(), new Date(), channel.getName()));
DownloadRequester.getInstance().downloadFeed(
this,
new Feed(channel.getDownloadUrl(), new Date(), channel
.getName()));
} catch (DownloadRequestException e) {
e.printStackTrace();
DownloadRequestErrorDialogCreator.newRequestErrorDialog(this, e.getMessage());
DownloadRequestErrorDialogCreator.newRequestErrorDialog(this,
e.getMessage());
}
Toast toast = Toast.makeText(this, R.string.miro_feed_added,
Toast.LENGTH_LONG);
toast.show();
invalidateOptionsMenu();
if (Build.VERSION.SDK_INT >= 11) {
invalidateOptionsMenu();
}
return true;
default:
return false;

View File

@ -15,6 +15,7 @@ import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.miroguide.conn.MiroGuideException;
import de.danoeh.antennapod.miroguide.conn.MiroGuideService;
@ -34,6 +35,7 @@ public class MiroGuideMainActivity extends SherlockListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.miroguide_categorylist);

View File

@ -11,6 +11,7 @@ import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.fragment.MiroGuideChannellistFragment;
@ -26,6 +27,7 @@ public class MiroGuideSearchActivity extends SherlockFragmentActivity {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setTheme(PodcastApp.getThemeResourceId());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.miroguidesearch);
}

View File

@ -16,6 +16,7 @@ import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.opml.OpmlElement;
@ -36,6 +37,7 @@ public class OpmlFeedChooserActivity extends SherlockActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
setContentView(R.layout.opml_selection);
butConfirm = (Button) findViewById(R.id.butConfirm);

View File

@ -19,6 +19,7 @@ import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.asynctask.OpmlFeedQueuer;
import de.danoeh.antennapod.asynctask.OpmlImportWorker;
@ -42,6 +43,8 @@ public class OpmlImportActivity extends SherlockActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.opml_import);

View File

@ -10,6 +10,7 @@ import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.feed.FeedManager;
import de.danoeh.antennapod.fragment.PlaybackHistoryFragment;
@ -44,6 +45,8 @@ public class PlaybackHistoryActivity extends SherlockFragmentActivity {
@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setTheme(PodcastApp.getThemeResourceId());
if (AppConfig.DEBUG)
Log.d(TAG, "Activity created");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

View File

@ -3,12 +3,14 @@ package de.danoeh.antennapod.activity;
import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import com.actionbarsherlock.app.SherlockPreferenceActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.asynctask.FlattrClickWorker;
import de.danoeh.antennapod.asynctask.OpmlExportWorker;
@ -29,6 +31,8 @@ public class PreferenceActivity extends SherlockPreferenceActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
addPreferencesFromResource(R.xml.preferences);
findPreference(PREF_FLATTR_THIS_APP).setOnPreferenceClickListener(
@ -79,6 +83,17 @@ public class PreferenceActivity extends SherlockPreferenceActivity {
return true;
}
});
findPreference(PodcastApp.PREF_THEME).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
Intent i = getIntent();
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
finish();
startActivity(i);
return true;
}
});
}

View File

@ -16,6 +16,7 @@ import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.adapter.SearchlistAdapter;
import de.danoeh.antennapod.feed.Feed;
@ -43,6 +44,8 @@ public class SearchActivity extends SherlockListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setContentView(R.layout.searchlist);
txtvStatus = (TextView) findViewById(android.R.id.empty);

View File

@ -10,6 +10,7 @@ import android.util.Log;
import com.actionbarsherlock.app.SherlockActivity;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.util.StorageUtils;
@ -20,6 +21,8 @@ public class StorageErrorActivity extends SherlockActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(PodcastApp.getThemeResourceId());
setContentView(R.layout.storage_error);
}

View File

@ -18,6 +18,7 @@ import android.widget.VideoView;
import com.actionbarsherlock.view.Window;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.service.PlaybackService;
import de.danoeh.antennapod.service.PlayerStatus;
@ -39,6 +40,8 @@ public class VideoplayerActivity extends MediaplayerActivity implements
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
setTheme(PodcastApp.getThemeResourceId());
super.onCreate(savedInstanceState);
}