From a76a465cf1136604a4b64da12e58f4ca3a1f3668 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=AD?= Date: Sun, 3 Nov 2013 16:12:22 +0100 Subject: [PATCH] Re-add theming, much better this time --- .gitignore | 1 + AndroidManifest.xml | 1 + CHANGELOG.md | 1 + proguard-project.txt | 1 - res/values-v11/styles.xml | 11 +++++ res/values/array.xml | 9 ++++ res/values/strings.xml | 2 + res/values/styles.xml | 27 +++++++++++ res/xml/preferences.xml | 5 ++ src/org/fdroid/fdroid/AppDetails.java | 2 + src/org/fdroid/fdroid/FDroid.java | 48 +++++++++++++++---- src/org/fdroid/fdroid/FDroidApp.java | 23 +++++++++ src/org/fdroid/fdroid/ManageRepo.java | 2 + .../fdroid/fdroid/PreferencesActivity.java | 12 ++++- src/org/fdroid/fdroid/SearchResults.java | 2 + 15 files changed, 136 insertions(+), 11 deletions(-) create mode 100644 res/values-v11/styles.xml create mode 100644 res/values/styles.xml diff --git a/.gitignore b/.gitignore index 578cc9238..36c1ea6f6 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ build.properties bin/* gen/* proguard.cfg +build.xml *~ .idea *.iml diff --git a/AndroidManifest.xml b/AndroidManifest.xml index c7fa5e9b1..971ba3f90 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -31,6 +31,7 @@ android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:allowBackup="true" + android:theme="@style/AppThemeDark" android:supportsRtl="false" > + + + + + + diff --git a/res/values/array.xml b/res/values/array.xml index aa3def54d..f72e1ac1f 100644 --- a/res/values/array.xml +++ b/res/values/array.xml @@ -15,6 +15,15 @@ 24 + + Dark + Light + + + dark + light + + Off (unsafe) Normal diff --git a/res/values/strings.xml b/res/values/strings.xml index 1d3efa3fd..72e796099 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -146,5 +146,7 @@ You don\'t have any available app that can handle %s Compact Layout Only show app names and summaries in list + Theme + Choose a theme to use diff --git a/res/values/styles.xml b/res/values/styles.xml new file mode 100644 index 000000000..9a13e761c --- /dev/null +++ b/res/values/styles.xml @@ -0,0 +1,27 @@ + + + + + + + #FF000000 + #FFFFFFFF + + + + + + + + diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index 6dadfa468..3c75c506c 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -26,6 +26,11 @@ + = 11) { + LayoutInflater li = LayoutInflater.from(this); + view = li.inflate(R.layout.about, null); + } else { + view = View.inflate( + new ContextThemeWrapper(this, R.style.AboutDialogLight), + R.layout.about, null); + } // Fill in the version... - TextView tv = (TextView) view.findViewById(R.id.version); - PackageManager pm = getPackageManager(); try { - PackageInfo pi = pm.getPackageInfo(getApplicationContext() - .getPackageName(), 0); - tv.setText(pi.versionName); + PackageInfo pi = getPackageManager() + .getPackageInfo(getApplicationContext() + .getPackageName(), 0); + ((TextView) view.findViewById(R.id.version)) + .setText(pi.versionName); } catch (Exception e) { } - Builder p = new AlertDialog.Builder(this).setView(view); + Builder p = null; + if (Build.VERSION.SDK_INT >= 11) { + p = new AlertDialog.Builder(this).setView(view); + } else { + p = new AlertDialog.Builder( + new ContextThemeWrapper( + this, R.style.AboutDialogLight) + ).setView(view); + } final AlertDialog alrt = p.create(); alrt.setIcon(R.drawable.ic_launcher); alrt.setTitle(getString(R.string.about_title)); @@ -244,6 +264,16 @@ public class FDroid extends FragmentActivity { } else if ((resultCode & PreferencesActivity.RESULT_REFILTER) != 0) { ((FDroidApp) getApplication()).filterApps(); } + + if ((resultCode & PreferencesActivity.RESULT_RESTART) != 0) { + ((FDroidApp) getApplication()).reloadTheme(); + final Intent intent = getIntent(); + overridePendingTransition(0, 0); + intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + finish(); + overridePendingTransition(0, 0); + startActivity(intent); + } break; } @@ -251,7 +281,7 @@ public class FDroid extends FragmentActivity { private void createViews() { viewPager = (ViewPager)findViewById(R.id.main_pager); - AppListFragmentPageAdapter viewPageAdapter = new AppListFragmentPageAdapter(this); + viewPageAdapter = new AppListFragmentPageAdapter(this); viewPager.setAdapter(viewPageAdapter); viewPager.setOnPageChangeListener( new ViewPager.SimpleOnPageChangeListener() { public void onPageSelected(int position) { diff --git a/src/org/fdroid/fdroid/FDroidApp.java b/src/org/fdroid/fdroid/FDroidApp.java index 061a0d280..9d401f92c 100644 --- a/src/org/fdroid/fdroid/FDroidApp.java +++ b/src/org/fdroid/fdroid/FDroidApp.java @@ -26,6 +26,7 @@ import java.util.concurrent.Semaphore; import android.os.Build; import android.app.Application; +import android.app.Activity; import android.preference.PreferenceManager; import android.util.Log; import android.content.Context; @@ -43,6 +44,27 @@ import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; public class FDroidApp extends Application { + private static enum Theme { + dark, light + } + private static Theme curTheme = Theme.dark; + + public void reloadTheme() { + curTheme = Theme.valueOf(PreferenceManager + .getDefaultSharedPreferences(getBaseContext()) + .getString("theme", "dark")); + } + public void applyTheme(Activity activity) { + switch (curTheme) { + case dark: + //activity.setTheme(R.style.AppThemeDark); + return; + case light: + activity.setTheme(R.style.AppThemeLight); + return; + } + } + @Override public void onCreate() { super.onCreate(); @@ -58,6 +80,7 @@ public class FDroidApp extends Application { // because the install intent says it's finished when it hasn't. SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(getBaseContext()); + curTheme = Theme.valueOf(prefs.getString("theme", "dark")); if (!prefs.getBoolean("cacheDownloaded", false)) { File local_path = DB.getDataPath(this); diff --git a/src/org/fdroid/fdroid/ManageRepo.java b/src/org/fdroid/fdroid/ManageRepo.java index d2275d10b..12a9076c7 100644 --- a/src/org/fdroid/fdroid/ManageRepo.java +++ b/src/org/fdroid/fdroid/ManageRepo.java @@ -81,6 +81,8 @@ public class ManageRepo extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { + ((FDroidApp) getApplication()).applyTheme(this); + super.onCreate(savedInstanceState); ActionBarCompat abCompat = ActionBarCompat.create(this); abCompat.setDisplayHomeAsUpEnabled(true); diff --git a/src/org/fdroid/fdroid/PreferencesActivity.java b/src/org/fdroid/fdroid/PreferencesActivity.java index 59bb1bf1a..d0690d808 100644 --- a/src/org/fdroid/fdroid/PreferencesActivity.java +++ b/src/org/fdroid/fdroid/PreferencesActivity.java @@ -35,15 +35,20 @@ public class PreferencesActivity extends PreferenceActivity implements public static final int RESULT_RELOAD = 1; public static final int RESULT_REFILTER = 2; + public static final int RESULT_RESTART = 4; private int result = 0; @Override protected void onCreate(Bundle savedInstanceState) { + + ((FDroidApp) getApplication()).applyTheme(this); + super.onCreate(savedInstanceState); ActionBarCompat.create(this).setDisplayHomeAsUpEnabled(true); addPreferencesFromResource(R.xml.preferences); for (String prefkey : new String[] { - "updateInterval", "rooted", "incompatibleVersions" }) { + "updateInterval", "rooted", "incompatibleVersions", + "theme" }) { findPreference(prefkey).setOnPreferenceChangeListener(this); } CheckBoxPreference onlyOnWifi = (CheckBoxPreference) @@ -83,6 +88,11 @@ public class PreferencesActivity extends PreferenceActivity implements setResult(result); return true; } + if (key.equals("theme")) { + result |= RESULT_RESTART; + setResult(result); + return true; + } return false; } diff --git a/src/org/fdroid/fdroid/SearchResults.java b/src/org/fdroid/fdroid/SearchResults.java index 14975b43d..e1b2ece03 100644 --- a/src/org/fdroid/fdroid/SearchResults.java +++ b/src/org/fdroid/fdroid/SearchResults.java @@ -70,6 +70,8 @@ public class SearchResults extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { + ((FDroidApp) getApplication()).applyTheme(this); + super.onCreate(savedInstanceState); ActionBarCompat.create(this).setDisplayHomeAsUpEnabled(true); applist = new AvailableAppListAdapter(this);