From a5c66a8c6ed9c9fd174aeb448e428d288e52f1e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=AD?= Date: Fri, 10 Jan 2014 22:12:57 +0100 Subject: [PATCH] New setting: "Small screen" to avoid ellipsizing on small screens --- res/values/strings.xml | 3 +++ res/xml/preferences.xml | 3 +++ src/org/fdroid/fdroid/AppDetails.java | 6 ++++- src/org/fdroid/fdroid/Preferences.java | 26 +++++++++++++++++++ .../fdroid/fdroid/PreferencesActivity.java | 11 ++++---- .../fdroid/fdroid/views/AppListAdapter.java | 16 ++++++++++-- .../views/fragments/AppListFragment.java | 2 ++ 7 files changed, 59 insertions(+), 8 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index f0d7d4506..d7af74136 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -163,6 +163,9 @@ Compact Layout Show icons at a smaller size Show icons at regular size + Small screen + Adapt layouts to smaller screens + Use normal layouts Theme Unsigned URL diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index 7b8cbd11e..3d4b3922d 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -25,6 +25,9 @@ + 0) { holder.api.setText(getString(R.string.minsdk_or_later, Utils.getAndroidVersionName(apk.minSdkVersion))); + holder.api.setEnabled(apk.compatible); + holder.api.setVisibility(View.VISIBLE); } else { - holder.api.setText(""); + holder.api.setVisibility(View.GONE); } if (apk.srcname != null) { @@ -325,6 +327,7 @@ public class AppDetails extends ListActivity { SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(getBaseContext()); + pref_smallDensity = prefs.getBoolean("smallDensity", false); pref_expert = prefs.getBoolean("expert", false); pref_permissions = prefs.getBoolean("showPermissions", false); pref_incompatibleVersions = prefs.getBoolean( @@ -334,6 +337,7 @@ public class AppDetails extends ListActivity { } + private boolean pref_smallDensity; private boolean pref_expert; private boolean pref_permissions; private boolean pref_incompatibleVersions; diff --git a/src/org/fdroid/fdroid/Preferences.java b/src/org/fdroid/fdroid/Preferences.java index d90b46de3..052dbe4e6 100644 --- a/src/org/fdroid/fdroid/Preferences.java +++ b/src/org/fdroid/fdroid/Preferences.java @@ -35,17 +35,21 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi public static final String PREF_THEME = "theme"; public static final String PREF_PERMISSIONS = "showPermissions"; public static final String PREF_COMPACT_LAYOUT = "compactlayout"; + public static final String PREF_SMALL_DENSITY = "smallDensity"; public static final String PREF_IGN_TOUCH = "ignoreTouchscreen"; public static final String PREF_CACHE_APK = "cacheDownloaded"; public static final String PREF_EXPERT = "expert"; public static final String PREF_DB_SYNC = "dbSyncMode"; private static final boolean DEFAULT_COMPACT_LAYOUT = false; + private static final boolean DEFAULT_SMALL_DENSITY = false; private boolean compactLayout = DEFAULT_COMPACT_LAYOUT; + private boolean smallDensity = DEFAULT_SMALL_DENSITY; private Map initialized = new HashMap(); private List compactLayoutListeners = new ArrayList(); + private List smallDensityListeners = new ArrayList(); private boolean isInitialized(String key) { return initialized.containsKey(key) && initialized.get(key); @@ -67,6 +71,14 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi return compactLayout; } + public boolean hasSmallDensity() { + if (!isInitialized(PREF_SMALL_DENSITY)) { + initialize(PREF_SMALL_DENSITY); + smallDensity = preferences.getBoolean(PREF_SMALL_DENSITY, DEFAULT_SMALL_DENSITY); + } + return smallDensity; + } + public void registerCompactLayoutChangeListener(ChangeListener listener) { compactLayoutListeners.add(listener); } @@ -75,6 +87,14 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi compactLayoutListeners.remove(listener); } + public void registerSmallDensityChangeListener(ChangeListener listener) { + smallDensityListeners.add(listener); + } + + public void unregisterSmallDensityChangeListener(ChangeListener listener) { + smallDensityListeners.remove(listener); + } + @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Log.d("FDroid", "Invalidating preference '" + key + "'."); @@ -85,6 +105,12 @@ public class Preferences implements SharedPreferences.OnSharedPreferenceChangeLi listener.onPreferenceChange(); } } + + if (key.equals(PREF_SMALL_DENSITY)) { + for ( ChangeListener listener : smallDensityListeners ) { + listener.onPreferenceChange(); + } + } } private static Preferences instance; diff --git a/src/org/fdroid/fdroid/PreferencesActivity.java b/src/org/fdroid/fdroid/PreferencesActivity.java index 109b08870..48b21edea 100644 --- a/src/org/fdroid/fdroid/PreferencesActivity.java +++ b/src/org/fdroid/fdroid/PreferencesActivity.java @@ -51,6 +51,7 @@ public class PreferencesActivity extends PreferenceActivity implements Preferences.PREF_THEME, Preferences.PREF_PERMISSIONS, Preferences.PREF_COMPACT_LAYOUT, + Preferences.PREF_SMALL_DENSITY, Preferences.PREF_IGN_TOUCH, Preferences.PREF_CACHE_APK, Preferences.PREF_EXPERT, @@ -67,11 +68,7 @@ public class PreferencesActivity extends PreferenceActivity implements protected void onoffSummary(String key, int on, int off) { CheckBoxPreference pref = (CheckBoxPreference)findPreference(key); - if (pref.isChecked()) { - pref.setSummary(on); - } else { - pref.setSummary(off); - } + pref.setSummary(pref.isChecked() ? on : off); } protected void entrySummary(String key) { @@ -119,6 +116,10 @@ public class PreferencesActivity extends PreferenceActivity implements onoffSummary(key, R.string.compactlayout_on, R.string.compactlayout_off); + } else if (key.equals(Preferences.PREF_SMALL_DENSITY)) { + onoffSummary(key, R.string.small_density_on, + R.string.small_density_off); + } else if (key.equals(Preferences.PREF_THEME)) { entrySummary(key); if (changing) { diff --git a/src/org/fdroid/fdroid/views/AppListAdapter.java b/src/org/fdroid/fdroid/views/AppListAdapter.java index d1ad13000..df2157724 100644 --- a/src/org/fdroid/fdroid/views/AppListAdapter.java +++ b/src/org/fdroid/fdroid/views/AppListAdapter.java @@ -91,6 +91,7 @@ abstract public class AppListAdapter extends BaseAdapter { public View getView(int position, View convertView, ViewGroup parent) { boolean compact = Preferences.get().hasCompactLayout(); + boolean small = Preferences.get().hasSmallDensity(); DB.App app = items.get(position); ViewHolder holder; @@ -116,8 +117,19 @@ abstract public class AppListAdapter extends BaseAdapter { ImageLoader.getInstance().displayImage(app.iconUrl, holder.icon, displayImageOptions); - holder.status.setText(getVersionInfo(app)); - holder.license.setText(app.license); + if (small) { + holder.status.setVisibility(View.GONE); + } else { + holder.status.setVisibility(View.VISIBLE); + holder.status.setText(getVersionInfo(app)); + } + + if (small) { + holder.license.setVisibility(View.GONE); + } else { + holder.license.setVisibility(View.VISIBLE); + holder.license.setText(app.license); + } // Disable it all if it isn't compatible... View[] views = { diff --git a/src/org/fdroid/fdroid/views/fragments/AppListFragment.java b/src/org/fdroid/fdroid/views/fragments/AppListFragment.java index 98ee1d9b4..a0095d2c3 100644 --- a/src/org/fdroid/fdroid/views/fragments/AppListFragment.java +++ b/src/org/fdroid/fdroid/views/fragments/AppListFragment.java @@ -26,12 +26,14 @@ abstract class AppListFragment extends Fragment implements AdapterView.OnItemCli public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Preferences.get().registerCompactLayoutChangeListener(this); + Preferences.get().registerSmallDensityChangeListener(this); } @Override public void onDestroy() { super.onDestroy(); Preferences.get().unregisterCompactLayoutChangeListener(this); + Preferences.get().unregisterSmallDensityChangeListener(this); } @Override