diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f7d30dba9..4ebbd3d2e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -83,7 +83,8 @@ android:windowSoftInputMode="stateHidden"/> + android:label="@string/settings" + android:theme="@style/AppTheme.NoActionBar"/> diff --git a/app/src/main/java/protect/card_locker/ImportExportActivity.java b/app/src/main/java/protect/card_locker/ImportExportActivity.java index 23c56b695..73b6d7149 100644 --- a/app/src/main/java/protect/card_locker/ImportExportActivity.java +++ b/app/src/main/java/protect/card_locker/ImportExportActivity.java @@ -17,6 +17,12 @@ import android.widget.Button; import android.widget.EditText; import android.widget.Toast; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.widget.Toolbar; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -26,16 +32,10 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.List; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; import protect.card_locker.importexport.DataFormat; import protect.card_locker.importexport.ImportExportResult; -public class ImportExportActivity extends AppCompatActivity +public class ImportExportActivity extends CatimaAppCompatActivity { private static final String TAG = "Catima"; diff --git a/app/src/main/java/protect/card_locker/LoyaltyCard.java b/app/src/main/java/protect/card_locker/LoyaltyCard.java index 75b82f87b..d2434710d 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCard.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCard.java @@ -4,14 +4,14 @@ import android.database.Cursor; import android.os.Parcel; import android.os.Parcelable; +import androidx.annotation.Nullable; + import com.google.zxing.BarcodeFormat; import java.math.BigDecimal; import java.util.Currency; import java.util.Date; -import androidx.annotation.Nullable; - public class LoyaltyCard implements Parcelable { public final int id; public final String store; diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java b/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java index 6ddbdd645..ddcdccb1d 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java @@ -14,13 +14,14 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.cardview.widget.CardView; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.recyclerview.widget.RecyclerView; + import java.math.BigDecimal; import java.text.DateFormat; import java.util.ArrayList; -import androidx.cardview.widget.CardView; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.recyclerview.widget.RecyclerView; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import protect.card_locker.preferences.Settings; diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index 10696b195..ba5699e4f 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -35,6 +35,14 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.widget.Toolbar; +import androidx.core.content.FileProvider; +import androidx.exifinterface.media.ExifInterface; +import androidx.fragment.app.DialogFragment; + import com.google.android.material.chip.Chip; import com.google.android.material.chip.ChipGroup; import com.google.android.material.floatingactionbutton.FloatingActionButton; @@ -63,16 +71,7 @@ import java.util.Locale; import java.util.NoSuchElementException; import java.util.concurrent.Callable; -import androidx.annotation.NonNull; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; -import androidx.core.content.FileProvider; -import androidx.exifinterface.media.ExifInterface; -import androidx.fragment.app.DialogFragment; - -public class LoyaltyCardEditActivity extends AppCompatActivity +public class LoyaltyCardEditActivity extends CatimaAppCompatActivity { private static final String TAG = "Catima"; @@ -245,6 +244,8 @@ public class LoyaltyCardEditActivity extends AppCompatActivity cardImageBack = findViewById(R.id.backImage); enterButton = findViewById(R.id.enterButton); + cardImageFront.setBackgroundColor(getThemeColor()); + cardImageBack.setBackgroundColor(getThemeColor()); warnOnInvalidBarcodeType = () -> { if (!(boolean) barcodeImage.getTag()) { diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardLockerApplication.java b/app/src/main/java/protect/card_locker/LoyaltyCardLockerApplication.java index 4765f6fc9..e954400d6 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardLockerApplication.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardLockerApplication.java @@ -2,6 +2,7 @@ package protect.card_locker; import androidx.appcompat.app.AppCompatDelegate; import androidx.multidex.MultiDexApplication; + import protect.card_locker.preferences.Settings; public class LoyaltyCardLockerApplication extends MultiDexApplication { diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index 8e8b65efe..11a484104 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -26,6 +26,15 @@ import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.content.res.AppCompatResources; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.appcompat.widget.Toolbar; +import androidx.constraintlayout.widget.Guideline; +import androidx.core.graphics.drawable.DrawableCompat; +import androidx.core.widget.TextViewCompat; + import com.google.android.material.appbar.AppBarLayout; import com.google.android.material.bottomsheet.BottomSheetBehavior; import com.google.android.material.floatingactionbutton.FloatingActionButton; @@ -38,18 +47,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import androidx.annotation.NonNull; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.content.res.AppCompatResources; -import androidx.appcompat.widget.AppCompatTextView; -import androidx.appcompat.widget.Toolbar; -import androidx.constraintlayout.widget.Guideline; -import androidx.core.graphics.drawable.DrawableCompat; -import androidx.core.widget.TextViewCompat; import protect.card_locker.preferences.Settings; -public class LoyaltyCardViewActivity extends AppCompatActivity +public class LoyaltyCardViewActivity extends CatimaAppCompatActivity { private static final String TAG = "Catima"; @@ -175,6 +175,9 @@ public class LoyaltyCardViewActivity extends AppCompatActivity centerGuideline.setGuidelinePercent(0.5f); barcodeScaler = findViewById(R.id.barcodeScaler); barcodeScaler.setProgress(100); + minimizeButton.setBackgroundColor(getThemeColor()); + maximizeButton.setBackgroundColor(getThemeColor()); + bottomSheetButton.setBackgroundColor(getThemeColor()); barcodeScaler.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java index 647353238..14b3367f6 100644 --- a/app/src/main/java/protect/card_locker/MainActivity.java +++ b/app/src/main/java/protect/card_locker/MainActivity.java @@ -18,14 +18,7 @@ import android.view.MotionEvent; import android.view.View; import android.widget.Toast; -import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.google.android.material.tabs.TabLayout; - -import java.io.UnsupportedEncodingException; -import java.util.List; - import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.view.ActionMode; import androidx.appcompat.widget.SearchView; import androidx.appcompat.widget.Toolbar; @@ -33,9 +26,16 @@ import androidx.core.app.ActivityCompat; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; + +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import com.google.android.material.tabs.TabLayout; + +import java.io.UnsupportedEncodingException; +import java.util.List; + import protect.card_locker.preferences.SettingsActivity; -public class MainActivity extends AppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener, GestureDetector.OnGestureListener +public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener, GestureDetector.OnGestureListener { private static final String TAG = "Catima"; diff --git a/app/src/main/java/protect/card_locker/ManageGroupsActivity.java b/app/src/main/java/protect/card_locker/ManageGroupsActivity.java index 97cd880ce..93199ff3d 100644 --- a/app/src/main/java/protect/card_locker/ManageGroupsActivity.java +++ b/app/src/main/java/protect/card_locker/ManageGroupsActivity.java @@ -10,19 +10,18 @@ import android.view.WindowManager; import android.widget.EditText; import android.widget.TextView; -import com.google.android.material.floatingactionbutton.FloatingActionButton; - -import java.util.List; - import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; -public class ManageGroupsActivity extends AppCompatActivity implements GroupCursorAdapter.GroupAdapterListener +import com.google.android.material.floatingactionbutton.FloatingActionButton; + +import java.util.List; + +public class ManageGroupsActivity extends CatimaAppCompatActivity implements GroupCursorAdapter.GroupAdapterListener { private static final String TAG = "Catima"; @@ -116,7 +115,7 @@ public class ManageGroupsActivity extends AppCompatActivity implements GroupCurs } private void createGroup() { - AlertDialog.Builder builder = new AlertDialog.Builder(this); + AlertDialog.Builder builder = new AlertDialog.Builder(this,R.style.AlertDialogTheme); builder.setTitle(R.string.enter_group_name); final EditText input = new EditText(this); input.setInputType(InputType.TYPE_CLASS_TEXT); diff --git a/app/src/main/java/protect/card_locker/ScanActivity.java b/app/src/main/java/protect/card_locker/ScanActivity.java index ddf33f8ca..625bd9091 100644 --- a/app/src/main/java/protect/card_locker/ScanActivity.java +++ b/app/src/main/java/protect/card_locker/ScanActivity.java @@ -11,6 +11,9 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.widget.Toolbar; + import com.google.zxing.ResultPoint; import com.google.zxing.client.android.Intents; import com.journeyapps.barcodescanner.BarcodeCallback; @@ -20,17 +23,13 @@ import com.journeyapps.barcodescanner.DecoratedBarcodeView; import java.util.List; -import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; - /** * Custom Scannner Activity extending from Activity to display a custom layout form scanner view. * * Based on https://github.com/journeyapps/zxing-android-embedded/blob/0fdfbce9fb3285e985bad9971c5f7c0a7a334e7b/sample/src/main/java/example/zxing/CustomScannerActivity.java * originally licensed under Apache 2.0 */ -public class ScanActivity extends AppCompatActivity { +public class ScanActivity extends CatimaAppCompatActivity { private static final String TAG = "Catima"; private CaptureManager capture; diff --git a/app/src/main/java/protect/card_locker/ShortcutHelper.java b/app/src/main/java/protect/card_locker/ShortcutHelper.java index 29bbff461..7e06fdf68 100644 --- a/app/src/main/java/protect/card_locker/ShortcutHelper.java +++ b/app/src/main/java/protect/card_locker/ShortcutHelper.java @@ -5,15 +5,15 @@ import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; +import androidx.core.content.pm.ShortcutInfoCompat; +import androidx.core.content.pm.ShortcutManagerCompat; +import androidx.core.graphics.drawable.IconCompat; + import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; import java.util.List; -import androidx.core.content.pm.ShortcutInfoCompat; -import androidx.core.content.pm.ShortcutManagerCompat; -import androidx.core.graphics.drawable.IconCompat; - class ShortcutHelper { // Android documentation says that no more than 5 shortcuts diff --git a/app/src/main/java/protect/card_locker/Utils.java b/app/src/main/java/protect/card_locker/Utils.java index c2930f89a..52a91b951 100644 --- a/app/src/main/java/protect/card_locker/Utils.java +++ b/app/src/main/java/protect/card_locker/Utils.java @@ -15,6 +15,9 @@ import android.provider.MediaStore; import android.util.Log; import android.widget.Toast; +import androidx.core.graphics.ColorUtils; +import androidx.exifinterface.media.ExifInterface; + import com.google.zxing.BinaryBitmap; import com.google.zxing.LuminanceSource; import com.google.zxing.MultiFormatReader; @@ -37,9 +40,7 @@ import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Locale; -import androidx.core.graphics.ColorUtils; import protect.card_locker.preferences.Settings; -import androidx.exifinterface.media.ExifInterface; public class Utils { private static final String TAG = "Catima"; diff --git a/app/src/main/java/protect/card_locker/preferences/Settings.java b/app/src/main/java/protect/card_locker/preferences/Settings.java index a28ac5f8a..aed6c3858 100644 --- a/app/src/main/java/protect/card_locker/preferences/Settings.java +++ b/app/src/main/java/protect/card_locker/preferences/Settings.java @@ -3,12 +3,13 @@ package protect.card_locker.preferences; import android.content.Context; import android.content.SharedPreferences; -import java.util.Locale; - import androidx.annotation.IntegerRes; import androidx.annotation.StringRes; import androidx.appcompat.app.AppCompatDelegate; import androidx.preference.PreferenceManager; + +import java.util.Locale; + import protect.card_locker.R; import protect.card_locker.Utils; diff --git a/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java b/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java index edbc3dbe0..9a7d8b2d9 100644 --- a/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java +++ b/app/src/main/java/protect/card_locker/preferences/SettingsActivity.java @@ -1,36 +1,31 @@ package protect.card_locker.preferences; -import android.app.AlarmManager; -import android.app.PendingIntent; + import android.content.Context; -import android.content.Intent; -import android.os.Build; import android.os.Bundle; -import android.util.Log; import android.view.MenuItem; -import com.journeyapps.barcodescanner.Util; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - import androidx.appcompat.app.ActionBar; -import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatDelegate; +import androidx.appcompat.widget.Toolbar; import androidx.core.app.ActivityCompat; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.FragmentActivity; import androidx.preference.ListPreference; import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + import nl.invissvenska.numberpickerpreference.NumberDialogPreference; import nl.invissvenska.numberpickerpreference.NumberPickerPreferenceDialogFragment; -import protect.card_locker.MainActivity; +import protect.card_locker.CatimaAppCompatActivity; import protect.card_locker.R; import protect.card_locker.Utils; -public class SettingsActivity extends AppCompatActivity +public class SettingsActivity extends CatimaAppCompatActivity { @Override protected void attachBaseContext(Context base) { @@ -43,7 +38,8 @@ public class SettingsActivity extends AppCompatActivity super.onCreate(savedInstanceState); setTitle(R.string.settings); setContentView(R.layout.settings_activity); - + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); ActionBar actionBar = getSupportActionBar(); if(actionBar != null) { @@ -120,6 +116,15 @@ public class SettingsActivity extends AppCompatActivity return true; }); + Preference colorPreference = findPreference(getResources().getString(R.string.setting_key_theme_color)); + assert colorPreference != null; + colorPreference.setOnPreferenceChangeListener((preference, o) -> { + FragmentActivity activity = getActivity(); + if (activity != null) { + ActivityCompat.recreate(activity); + } + return true; + }); localePreference.setOnPreferenceChangeListener((preference, newValue) -> { // Refresh the activity parent.finish(); diff --git a/app/src/main/res/layout/loyalty_card_edit_activity.xml b/app/src/main/res/layout/loyalty_card_edit_activity.xml index 619ee1fa7..630fa326e 100644 --- a/app/src/main/res/layout/loyalty_card_edit_activity.xml +++ b/app/src/main/res/layout/loyalty_card_edit_activity.xml @@ -1,10 +1,11 @@ - + android:layout_height="match_parent" + android:fitsSystemWindows="true"> @@ -401,7 +401,6 @@ android:layout_height="wrap_content" android:adjustViewBounds="true" android:minHeight="50dp" - android:background="@color/colorPrimary" android:contentDescription="@string/backImageDescription" android:scaleType="fitCenter" app:srcCompat="@drawable/ic_camera_white" /> diff --git a/app/src/main/res/layout/loyalty_card_view_layout.xml b/app/src/main/res/layout/loyalty_card_view_layout.xml index 28f04bb88..96061fa53 100644 --- a/app/src/main/res/layout/loyalty_card_view_layout.xml +++ b/app/src/main/res/layout/loyalty_card_view_layout.xml @@ -55,7 +55,6 @@ app:srcCompat="@drawable/ic_baseline_arrow_drop_up_24" android:contentDescription="@string/moveBarcodeToTopOfScreen" app:tint="#ffffff" - android:background="@color/colorPrimary" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toTopOf="@+id/barcode" app:layout_constraintEnd_toEndOf="parent" @@ -86,7 +85,6 @@ app:srcCompat="@drawable/ic_baseline_arrow_drop_down_24" android:contentDescription="@string/moveBarcodeToCenterOfScreen" app:tint="#ffffff" - android:background="@color/colorPrimary" app:layout_constraintTop_toBottomOf="@+id/barcode" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> @@ -149,7 +147,6 @@ android:layout_width="match_parent" android:layout_height="80dp" android:layout_gravity="top|start" - android:background="@color/colorPrimary" android:scaleType="fitCenter" app:tint="#ffffff" app:srcCompat="@drawable/ic_baseline_arrow_drop_up_24" /> diff --git a/app/src/main/res/layout/settings_activity.xml b/app/src/main/res/layout/settings_activity.xml index 9e4f026e1..6b237fc87 100644 --- a/app/src/main/res/layout/settings_activity.xml +++ b/app/src/main/res/layout/settings_activity.xml @@ -2,8 +2,23 @@ + + + + + + @string/settings_dark_theme + + @string/settings_key_catima_theme + @string/settings_key_pink_theme + @string/settings_key_magenta_theme + @string/settings_key_violet_theme + @string/settings_key_blue_theme + @string/settings_key_sky_blue_theme + @string/settings_key_green_theme + @string/settings_key_grey_theme + @string/settings_key_brown_theme + + + + @string/settings_catima_theme + @string/settings_pink_theme + @string/settings_magenta_theme + @string/settings_violet_theme + @string/settings_blue_theme + @string/settings_sky_blue_theme + @string/settings_green_theme + @string/settings_grey_theme + @string/settings_brown_theme + + + bg diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aca676ddc..42c405a1c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -216,4 +216,26 @@ Language pref_locale System + + pref_theme_color + Theme color + Catima + Pink + Magenta + Violet + Blue + Sky blue + Green + Grey + Brown + catima_theme + pink_theme + magenta_theme + violet_theme + blue_theme + sky_blue_theme + green_theme + grey_theme + brown_theme + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 88a54ea39..9a770a874 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,16 +1,81 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + #ff0000 + #DF0000 + + #e91e63 + #CB1755 + + #9b26af + #7a1ea1 + + #6639b6 + #502ca7 + + #3F51B5 + #3445A2 + + #03A9F4 + #0094D7 + + #4CAF50 + #419744 + + + + + #9d9d9d + #606060 + #f90 + + #795548 + #63453B + #e81d62 + + + diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index cbd9051cd..a192204bb 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -16,6 +16,16 @@ app:iconSpaceReserved="false" app:singleLineTitle="false" /> + + +