From 9951999ca4183b93bf61ddd6b75e78ef78bff8d0 Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Fri, 16 Feb 2018 22:45:31 -0500 Subject: [PATCH] Add settings for font sizes --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 4 ++ .../card_locker/LoyaltyCardCursorAdapter.java | 8 +++ .../card_locker/LoyaltyCardViewActivity.java | 14 +++++ .../protect/card_locker/MainActivity.java | 9 +++ .../card_locker/preferences/Settings.java | 61 +++++++++++++++++++ .../preferences/SettingsActivity.java | 56 +++++++++++++++++ app/src/main/res/menu/main_menu.xml | 4 ++ app/src/main/res/values/settings.xml | 19 ++++++ app/src/main/res/values/strings.xml | 14 +++++ app/src/main/res/xml/preferences.xml | 46 ++++++++++++++ .../LoyaltyCardCursorAdapterTest.java | 49 +++++++++++++-- .../LoyaltyCardViewActivityTest.java | 43 +++++++++++++ .../protect/card_locker/MainActivityTest.java | 3 +- 14 files changed, 325 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/protect/card_locker/preferences/Settings.java create mode 100644 app/src/main/java/protect/card_locker/preferences/SettingsActivity.java create mode 100644 app/src/main/res/xml/preferences.xml diff --git a/app/build.gradle b/app/build.gradle index 44390ab57..547a6e870 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -54,6 +54,7 @@ dependencies { compile 'com.jaredrummler:colorpicker:1.0.2' compile group: 'com.google.guava', name: 'guava', version: '20.0' compile 'com.github.apl-devs:appintro:v4.2.0' + compile "com.vanniktech:vntnumberpickerpreference:1.0.0" testCompile 'junit:junit:4.12' testCompile "org.robolectric:robolectric:3.3.2" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 264f0fe05..d00820b62 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -51,6 +51,10 @@ android:theme="@style/AppTheme.NoActionBar" android:configChanges="orientation|screenSize" android:windowSoftInputMode="stateHidden"/> + 0) { noteView.setText(loyaltyCard.note); + TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(noteView, + getResources().getInteger(R.integer.settings_card_note_min_font_size_sp)-1, + settings.getCardNoteFontSize(), 1, TypedValue.COMPLEX_UNIT_SP); } else { @@ -122,6 +135,7 @@ public class LoyaltyCardViewActivity extends AppCompatActivity } storeName.setText(loyaltyCard.store); + storeName.setTextSize(settings.getCardTitleFontSize()); int textColor; if(loyaltyCard.headerTextColor != null) diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java index 01f94bb9a..58d4d6b1a 100644 --- a/app/src/main/java/protect/card_locker/MainActivity.java +++ b/app/src/main/java/protect/card_locker/MainActivity.java @@ -30,6 +30,7 @@ import java.util.Calendar; import java.util.Map; import protect.card_locker.intro.IntroActivity; +import protect.card_locker.preferences.SettingsActivity; public class MainActivity extends AppCompatActivity { @@ -164,6 +165,13 @@ public class MainActivity extends AppCompatActivity return true; } + if(id == R.id.action_settings) + { + Intent i = new Intent(getApplicationContext(), SettingsActivity.class); + startActivity(i); + return true; + } + if(id == R.id.action_intro) { startIntro(); @@ -188,6 +196,7 @@ public class MainActivity extends AppCompatActivity .put("ZXing Android Embedded", "https://github.com/journeyapps/zxing-android-embedded") .put("AppIntro", "https://github.com/apl-devs/AppIntro") .put("Color Picker", "https://github.com/jaredrummler/ColorPicker") + .put("VNTNumberPickerPreference", "https://github.com/vanniktech/VNTNumberPickerPreference") .build(); final Map USED_ASSETS = ImmutableMap.of diff --git a/app/src/main/java/protect/card_locker/preferences/Settings.java b/app/src/main/java/protect/card_locker/preferences/Settings.java new file mode 100644 index 000000000..682cba20e --- /dev/null +++ b/app/src/main/java/protect/card_locker/preferences/Settings.java @@ -0,0 +1,61 @@ +package protect.card_locker.preferences; + +import android.content.Context; +import android.content.SharedPreferences; +import android.preference.PreferenceManager; +import android.support.annotation.IntegerRes; +import android.support.annotation.StringRes; + +import protect.card_locker.R; + +public class Settings +{ + private Context context; + private SharedPreferences settings; + + public Settings(Context context) + { + this.context = context; + this.settings = PreferenceManager.getDefaultSharedPreferences(context); + } + + private String getResString(@StringRes int resId) + { + return context.getString(resId); + } + + private int getResInt(@IntegerRes int resId) + { + return context.getResources().getInteger(resId); + } + + private int getInt(@StringRes int keyId, @IntegerRes int defaultId) + { + return settings.getInt(getResString(keyId), getResInt(defaultId)); + } + + public int getCardTitleListFontSize() + { + return getInt(R.string.settings_key_card_title_list_font_size, R.integer.settings_card_title_list_font_size_sp); + } + + public int getCardNoteListFontSize() + { + return getInt(R.string.settings_key_card_note_list_font_size, R.integer.settings_card_note_list_font_size_sp); + } + + public int getCardTitleFontSize() + { + return getInt(R.string.settings_key_card_title_font_size, R.integer.settings_card_title_font_size_sp); + } + + public int getCardIdFontSize() + { + return getInt(R.string.settings_key_card_id_font_size, R.integer.settings_card_id_font_size_sp); + } + + public int getCardNoteFontSize() + { + return getInt(R.string.settings_key_card_note_font_size, R.integer.settings_card_note_font_size_sp); + } +} diff --git a/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java b/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java new file mode 100644 index 000000000..167682048 --- /dev/null +++ b/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java @@ -0,0 +1,56 @@ +package protect.card_locker.preferences; + +import android.os.Bundle; +import android.preference.PreferenceFragment; +import android.support.v7.app.ActionBar; +import android.support.v7.app.AppCompatActivity; +import android.view.MenuItem; + +import protect.card_locker.R; + +public class SettingsActivity extends AppCompatActivity +{ + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + ActionBar actionBar = getSupportActionBar(); + if(actionBar != null) + { + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + } + + // Display the fragment as the main content. + getFragmentManager().beginTransaction() + .replace(android.R.id.content, new SettingsFragment()) + .commit(); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) + { + int id = item.getItemId(); + + if(id == android.R.id.home) + { + finish(); + return true; + } + + return super.onOptionsItemSelected(item); + } + + public static class SettingsFragment extends PreferenceFragment + { + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + // Load the preferences from an XML resource + addPreferencesFromResource(R.xml.preferences); + } + } +} + diff --git a/app/src/main/res/menu/main_menu.xml b/app/src/main/res/menu/main_menu.xml index 5b851c125..5869d9468 100644 --- a/app/src/main/res/menu/main_menu.xml +++ b/app/src/main/res/menu/main_menu.xml @@ -12,6 +12,10 @@ android:icon="@drawable/ic_import_export_white_24dp" android:title="@string/importExport" app:showAsAction="ifRoom"/> + #2093cd #ad62a7 + + + 28 + 14 + 40 + 50 + 50 + + + 40 + 16 + 25 + 10 + 50 + 16 + 50 + 16 + 50 + 26 \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f94750c32..1ac884565 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -106,4 +106,18 @@ Heading Color Color for store text background Color for store text + + Settings + User interface + Card title list font size + pref_card_title_list_font_size_sp + Card note list font size + pref_card_note_list_font_size_sp + Card title font size + pref_card_title_font_size_sp + Card ID font size + pref_card_id_font_size_sp + Card note font size + pref_card_note_font_size_sp + diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml new file mode 100644 index 000000000..893d504b3 --- /dev/null +++ b/app/src/main/res/xml/preferences.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java index 2c8883f3e..225dfb369 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardCursorAdapterTest.java @@ -1,8 +1,10 @@ package protect.card_locker; import android.app.Activity; +import android.content.SharedPreferences; import android.database.Cursor; import android.graphics.Color; +import android.preference.PreferenceManager; import android.view.View; import android.widget.TextView; @@ -23,12 +25,22 @@ public class LoyaltyCardCursorAdapterTest { private Activity activity; private DBHelper db; + private SharedPreferences settings; @Before public void setUp() { activity = Robolectric.setupActivity(MainActivity.class); db = new DBHelper(activity); + settings = PreferenceManager.getDefaultSharedPreferences(activity); + } + + private void setFontSizes(int storeFontSize, int noteFontSize) + { + settings.edit() + .putInt(activity.getResources().getString(R.string.settings_key_card_title_list_font_size), storeFontSize) + .putInt(activity.getResources().getString(R.string.settings_key_card_note_list_font_size), noteFontSize) + .apply(); } private View createView(Cursor cursor) @@ -41,12 +53,21 @@ public class LoyaltyCardCursorAdapterTest return view; } - private void checkView(final View view, final String store, final String note) + private void checkView(final View view, final String store, final String note, boolean checkFontSizes) { final TextView storeField = view.findViewById(R.id.store); - assertEquals(store, storeField.getText().toString()); - final TextView noteField = view.findViewById(R.id.note); + + if(checkFontSizes) + { + int storeFontSize = settings.getInt(activity.getResources().getString(R.string.settings_key_card_title_list_font_size), 0); + int noteFontSize = settings.getInt(activity.getResources().getString(R.string.settings_key_card_note_list_font_size), 0); + + assertEquals(storeFontSize, (int)storeField.getTextSize()); + assertEquals(noteFontSize, (int)noteField.getTextSize()); + } + + assertEquals(store, storeField.getText().toString()); if(note.isEmpty() == false) { assertEquals(View.VISIBLE, noteField.getVisibility()); @@ -70,7 +91,7 @@ public class LoyaltyCardCursorAdapterTest View view = createView(cursor); - checkView(view, card.store, card.note); + checkView(view, card.store, card.note, false); } @Test @@ -84,6 +105,24 @@ public class LoyaltyCardCursorAdapterTest View view = createView(cursor); - checkView(view, card.store, card.note); + checkView(view, card.store, card.note, false); + } + + @Test + public void TestCursorAdapterFontSizes() + { + db.insertLoyaltyCard("store", "note", "cardId", BarcodeFormat.UPC_A.toString(), Color.BLACK, Color.WHITE); + LoyaltyCard card = db.getLoyaltyCard(1); + + Cursor cursor = db.getLoyaltyCardCursor(); + cursor.moveToFirst(); + + setFontSizes(1, 2); + View view = createView(cursor); + checkView(view, card.store, card.note, true); + + setFontSizes(30, 31); + view = createView(cursor); + checkView(view, card.store, card.note, true); } } diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index fe1c7bcc2..f129ff955 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -2,11 +2,14 @@ package protect.card_locker; import android.app.Activity; import android.content.Intent; +import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.ResolveInfo; import android.graphics.Color; import android.os.Bundle; +import android.preference.PreferenceManager; +import android.support.v4.widget.TextViewCompat; import android.view.Menu; import android.view.View; import android.widget.Button; @@ -523,4 +526,44 @@ public class LoyaltyCardViewActivityTest // Save and check the gift card saveLoyaltyCardWithArguments(activity, "store", "note", BARCODE_DATA, BARCODE_TYPE, false); } + + @Test + public void startCheckFontSizes() + { + ActivityController activityController = createActivityWithLoyaltyCard(false); + + Activity activity = (Activity)activityController.get(); + DBHelper db = new DBHelper(activity); + db.insertLoyaltyCard("store", "note", BARCODE_DATA, BARCODE_TYPE, Color.BLACK, Color.WHITE); + + final int STORE_FONT_SIZE = 50; + final int CARD_FONT_SIZE = 40; + final int NOTE_FONT_SIZE = 30; + + SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity); + settings.edit() + .putInt(activity.getResources().getString(R.string.settings_key_card_title_font_size), STORE_FONT_SIZE) + .putInt(activity.getResources().getString(R.string.settings_key_card_id_font_size), CARD_FONT_SIZE) + .putInt(activity.getResources().getString(R.string.settings_key_card_note_font_size), NOTE_FONT_SIZE) + .apply(); + + activityController.start(); + activityController.visible(); + activityController.resume(); + + assertEquals(false, activity.isFinishing()); + + TextView storeName = activity.findViewById(R.id.storeName); + TextView cardIdFieldView = activity.findViewById(R.id.cardIdView); + TextView noteView = activity.findViewById(R.id.noteView); + + TextViewCompat.getAutoSizeMaxTextSize(storeName); + TextViewCompat.getAutoSizeMaxTextSize(storeName); + assertEquals(STORE_FONT_SIZE, (int)storeName.getTextSize()); + assertEquals(CARD_FONT_SIZE, TextViewCompat.getAutoSizeMaxTextSize(cardIdFieldView)); + assertEquals(NOTE_FONT_SIZE, TextViewCompat.getAutoSizeMaxTextSize(noteView)); + + shadowOf(activity).clickMenuItem(android.R.id.home); + assertEquals(true, activity.isFinishing()); + } } diff --git a/app/src/test/java/protect/card_locker/MainActivityTest.java b/app/src/test/java/protect/card_locker/MainActivityTest.java index 9b44f72ea..a74790049 100644 --- a/app/src/test/java/protect/card_locker/MainActivityTest.java +++ b/app/src/test/java/protect/card_locker/MainActivityTest.java @@ -66,12 +66,13 @@ public class MainActivityTest assertTrue(menu != null); // The settings and add button should be present - assertEquals(menu.size(), 4); + assertEquals(menu.size(), 5); assertEquals("Add", menu.findItem(R.id.action_add).getTitle().toString()); assertEquals("Import/Export", menu.findItem(R.id.action_import_export).getTitle().toString()); assertEquals("Start Intro", menu.findItem(R.id.action_intro).getTitle().toString()); assertEquals("About", menu.findItem(R.id.action_about).getTitle().toString()); + assertEquals("Settings", menu.findItem(R.id.action_settings).getTitle().toString()); } @Test