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