diff --git a/refilc/android/app/src/main/java/hu/refilc/naplo/database/DBManager.java b/refilc/android/app/src/main/java/hu/refilc/naplo/database/DBManager.java index b39409d..29d817e 100644 --- a/refilc/android/app/src/main/java/hu/refilc/naplo/database/DBManager.java +++ b/refilc/android/app/src/main/java/hu/refilc/naplo/database/DBManager.java @@ -53,7 +53,7 @@ public class DBManager { } public Cursor fetchTheme() { - Cursor cursor = this.database.query(SQLiteHelper.TABLE_NAME_SETTINGS, new String[]{SQLiteHelper.THEME, SQLiteHelper.ACCENT_COLOR}, null, null, null, null, null); + Cursor cursor = this.database.query(SQLiteHelper.TABLE_NAME_SETTINGS, new String[]{SQLiteHelper.THEME, SQLiteHelper.CUSTOM_ACCENT_COLOR, SQLiteHelper.CUSTOM_HIGHLIGHT_COLOR, SQLiteHelper.CUSTOM_BACKGROUND_COLOR}, null, null, null, null, null); if (cursor != null) { cursor.moveToFirst(); } @@ -116,4 +116,4 @@ public class DBManager { con.put(SQLiteHelper.DAY_SEL, day_sel); return this.database.update(SQLiteHelper.TABLE_NAME_WIDGETS, con, SQLiteHelper._ID + " = " + _id, null); } -} \ No newline at end of file +} diff --git a/refilc/android/app/src/main/java/hu/refilc/naplo/database/SQLiteHelper.java b/refilc/android/app/src/main/java/hu/refilc/naplo/database/SQLiteHelper.java index 5944408..2bdc39b 100644 --- a/refilc/android/app/src/main/java/hu/refilc/naplo/database/SQLiteHelper.java +++ b/refilc/android/app/src/main/java/hu/refilc/naplo/database/SQLiteHelper.java @@ -16,7 +16,9 @@ public class SQLiteHelper extends SQLiteOpenHelper { public static final String PREMIUM_TOKEN = "premium_token"; public static final String PREMIUM_SCOPES = "premium_scopes"; public static final String LOCALE = "language"; - public static final String ACCENT_COLOR = "accent_color"; + public static final String CUSTOM_ACCENT_COLOR = "custom_accent_color"; + public static final String CUSTOM_BACKGROUND_COLOR = "custom_background_color"; + public static final String CUSTOM_HIGHLIGHT_COLOR = "custom_highlight_color"; public static final String TABLE_NAME_WIDGETS = "widgets"; public static final String TABLE_NAME_USER_DATA = "user_data"; public static final String TABLE_NAME_SETTINGS = "settings"; @@ -33,4 +35,4 @@ public class SQLiteHelper extends SQLiteOpenHelper { db.execSQL("DROP TABLE IF EXISTS widgets"); onCreate(db); } -} \ No newline at end of file +} diff --git a/refilc/android/app/src/main/java/hu/refilc/naplo/widget_timetable/WidgetTimetable.java b/refilc/android/app/src/main/java/hu/refilc/naplo/widget_timetable/WidgetTimetable.java index a6f29c2..29b0fa2 100644 --- a/refilc/android/app/src/main/java/hu/refilc/naplo/widget_timetable/WidgetTimetable.java +++ b/refilc/android/app/src/main/java/hu/refilc/naplo/widget_timetable/WidgetTimetable.java @@ -1,6 +1,7 @@ package hu.refilc.naplo.widget_timetable; import android.app.PendingIntent; +import android.app.UiModeManager; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.Context; @@ -54,12 +55,16 @@ public class WidgetTimetable extends HomeWidgetProvider { @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds, SharedPreferences widgetData) { + Integer[] fullTheme = getFullTheme(context); + Integer[] textColors = getTextColors(context, fullTheme); + for (int i = 0; i < appWidgetIds.length; i++) { RemoteViews views = generateView(context, appWidgetIds[i]); if(userLoggedIn(context)) { int rday = selectDay(context, appWidgetIds[i], 0, true); views.setTextViewText(R.id.nav_current, convertDayOfWeek(context, rday)); + views.setInt(R.id.nav_current, "setTextColor", getColor(context, textColors[0])); } pushUpdate(context, views, appWidgetIds[i]); @@ -73,7 +78,54 @@ public class WidgetTimetable extends HomeWidgetProvider { manager.notifyAppWidgetViewDataChanged(appWidgetSingleId, R.id.widget_list); } + public static int getColor(Context context, int color) { + return context.getResources().getColor(color); + } + + public static Integer[] getTextColors(Context context, Integer[] fullTheme) { + UiModeManager uiModeManager = (UiModeManager) context.getSystemService(Context.UI_MODE_SERVICE); + int nightMode = uiModeManager.getNightMode(); + + int textColor; + int textDescColor; + + if (fullTheme[0] == 0 && nightMode == UiModeManager.MODE_NIGHT_NO) { + textColor = R.color.text_light; + textDescColor = R.color.text_desc_light; + } else if (fullTheme[0] == 1) { + textColor = R.color.text_light; + textDescColor = R.color.text_desc_light; + } else { + textColor = R.color.text; + textDescColor = R.color.text_desc; + } + + return new Integer[]{textColor, textDescColor}; + } + + public static Integer[] getFullTheme(Context context) { + DBManager dbManager = new DBManager(context.getApplicationContext()); + + try { + dbManager.open(); + Cursor cursor = dbManager.fetchTheme(); + dbManager.close(); + + int theme = cursor.getInt(0); + int customBackgroundColor = cursor.getInt(3); + + return new Integer[]{theme, customBackgroundColor}; + } catch (Exception e) { + e.printStackTrace(); + } + + return new Integer[]{0, 0}; + } + public static RemoteViews generateView(Context context, int appId) { + Integer[] fullTheme = getFullTheme(context); + Integer[] textColors = getTextColors(context, fullTheme); + Intent serviceIntent = new Intent(context, WidgetTimetableService.class); serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appId); serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME))); @@ -82,18 +134,25 @@ public class WidgetTimetable extends HomeWidgetProvider { views.setViewVisibility(R.id.need_login, View.GONE); views.setViewVisibility(R.id.tt_grid_cont, View.GONE); + views.setInt(R.id.nav_to_left, "setColorFilter", getColor(context, textColors[1])); + views.setInt(R.id.nav_to_right, "setColorFilter", getColor(context, textColors[1])); + views.setInt(R.id.nav_refresh, "setColorFilter", getColor(context, textColors[1])); + views.setInt(R.id.empty_view, "setTextColor", getColor(context, textColors[0])); if(!userLoggedIn(context)) { views.setViewVisibility(R.id.need_login, View.VISIBLE); views.setOnClickPendingIntent(R.id.open_login, makePending(context, ACTION_WIDGET_CLICK_BUY_PREMIUM, appId)); } else { views.setViewVisibility(R.id.tt_grid_cont, View.VISIBLE); + views.setInt(R.id.widget_list, "setBackgroundColor", fullTheme[1]); + views.setInt(R.id.bottom_nav, "setBackgroundColor", fullTheme[1]); views.setOnClickPendingIntent(R.id.nav_to_left, makePending(context, ACTION_WIDGET_CLICK_NAV_LEFT, appId)); views.setOnClickPendingIntent(R.id.nav_to_right, makePending(context, ACTION_WIDGET_CLICK_NAV_RIGHT, appId)); views.setOnClickPendingIntent(R.id.nav_current, makePending(context, ACTION_WIDGET_CLICK_NAV_TODAY, appId)); views.setOnClickPendingIntent(R.id.nav_refresh, makePending(context, ACTION_WIDGET_CLICK_NAV_REFRESH, appId)); views.setRemoteAdapter(R.id.widget_list, serviceIntent); views.setEmptyView(R.id.widget_list, R.id.empty_view); + views.setInt(R.id.empty_view, "setBackgroundColor", fullTheme[1]); } return views; diff --git a/refilc/android/app/src/main/java/hu/refilc/naplo/widget_timetable/WidgetTimetableDataProvider.java b/refilc/android/app/src/main/java/hu/refilc/naplo/widget_timetable/WidgetTimetableDataProvider.java index 55eaa98..48ed3ec 100644 --- a/refilc/android/app/src/main/java/hu/refilc/naplo/widget_timetable/WidgetTimetableDataProvider.java +++ b/refilc/android/app/src/main/java/hu/refilc/naplo/widget_timetable/WidgetTimetableDataProvider.java @@ -1,5 +1,6 @@ package hu.refilc.naplo.widget_timetable; +import android.app.UiModeManager; import android.appwidget.AppWidgetManager; import android.content.Context; import android.content.Intent; @@ -30,10 +31,14 @@ public class WidgetTimetableDataProvider implements RemoteViewsService.RemoteVie private int rday = 0; - private int theme; + private Integer[] fullTheme; private Integer[] colorValues; + private UiModeManager uiModeManager; + + private int nightMode; + List day_subjects = new ArrayList<>(); List lessonIndexes = new ArrayList<>(); @@ -43,6 +48,7 @@ public class WidgetTimetableDataProvider implements RemoteViewsService.RemoteVie static class Item { int Layout; + int BackgroundColor; int NumVisibility; int NameVisibility; @@ -55,11 +61,14 @@ public class WidgetTimetableDataProvider implements RemoteViewsService.RemoteVie int NameColor; int NameNodescColor; int DescColor; + int RoomColor; + int TimeColor; Integer[] NameNodescPadding = {0, 0, 0, 0}; - public Item(int Layout, int NumVisibility,int NameVisibility,int NameNodescVisibility,int DescVisibility,int RoomVisibility,int TimeVisibility,int NumColor,int NameColor,int NameNodescColor,int DescColor) { + public Item(int Layout, int BackgroundColor, int NumVisibility,int NameVisibility,int NameNodescVisibility,int DescVisibility,int RoomVisibility,int TimeVisibility,int NumColor,int NameColor,int NameNodescColor,int DescColor,int RoomColor, int TimeColor) { this.Layout = Layout; + this.BackgroundColor = BackgroundColor; this.NumVisibility = NumVisibility; this.NameVisibility = NameVisibility; this.NameNodescVisibility = NameNodescVisibility; @@ -71,6 +80,8 @@ public class WidgetTimetableDataProvider implements RemoteViewsService.RemoteVie this.NameColor = NameColor; this.NameNodescColor = NameNodescColor; this.DescColor = DescColor; + this.RoomColor = RoomColor; + this.TimeColor = TimeColor; } } @@ -102,18 +113,25 @@ public class WidgetTimetableDataProvider implements RemoteViewsService.RemoteVie this.context = context; this.appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); - this.theme = getThemeAccent(context); + this.fullTheme = getFullTheme(context); - this.colorValues = new Integer[]{R.color.filc, - R.color.blue_shade300, - R.color.green_shade300, - R.color.lime_shade300, - R.color.yellow_shade300, - R.color.orange_shade300, - R.color.red_shade300, - R.color.pink_shade300, - R.color.purple_shade300}; + this.uiModeManager = (UiModeManager) context.getSystemService(Context.UI_MODE_SERVICE); + this.nightMode = uiModeManager.getNightMode(); + + this.colorValues = new Integer[]{ + R.color.filc, + R.color.blue_shade300, + R.color.green_shade300, + R.color.lime_shade300, + R.color.yellow_shade300, + R.color.orange_shade300, + R.color.red_shade300, + R.color.pink_shade300, + R.color.purple_shade300, + 0, + R.color.teal_shade300 + }; } @Override @@ -148,15 +166,18 @@ public class WidgetTimetableDataProvider implements RemoteViewsService.RemoteVie /* backgroundResources */ view.setInt(R.id.main_lay, "setBackgroundResource", witem.Layout); + view.setInt(R.id.main_lay, "setBackgroundColor", witem.BackgroundColor); /* Paddings */ view.setViewPadding(R.id.tt_item_name_nodesc, witem.NameNodescPadding[0], witem.NameNodescPadding[1], witem.NameNodescPadding[2], witem.NameNodescPadding[3]); /* Text Colors */ - view.setInt(R.id.tt_item_num, "setTextColor", getColor(context, witem.NumColor)); + view.setInt(R.id.tt_item_num, "setTextColor", witem.NumColor); view.setInt(R.id.tt_item_name, "setTextColor", getColor(context, witem.NameColor)); view.setInt(R.id.tt_item_name_nodesc, "setTextColor", getColor(context, witem.NameNodescColor)); view.setInt(R.id.tt_item_desc, "setTextColor", getColor(context, witem.DescColor)); + view.setInt(R.id.tt_item_room, "setTextColor", getColor(context, witem.RoomColor)); + view.setInt(R.id.tt_item_time, "setTextColor", getColor(context, witem.TimeColor)); } public int getColor(Context context, int color) { @@ -167,12 +188,12 @@ public class WidgetTimetableDataProvider implements RemoteViewsService.RemoteVie public RemoteViews getViewAt(int position) { RemoteViews view = new RemoteViews(context.getPackageName(), R.layout.timetable_item); - witem = defaultItem(theme); + witem = defaultItem(fullTheme, nightMode, context); Lesson curr_subject = day_subjects.get(position); if (curr_subject.status.equals("empty")) { - witem.NumColor = R.color.text_miss_num; + witem.NumColor = getColor(context, R.color.text_miss_num); witem.TimeVisibility = View.GONE; witem.RoomVisibility = View.GONE; @@ -181,12 +202,12 @@ public class WidgetTimetableDataProvider implements RemoteViewsService.RemoteVie } if (!curr_subject.substituteTeacher.equals("null")) { - witem.NumColor = R.color.yellow; + witem.NumColor = getColor(context, R.color.yellow); witem.Layout = R.drawable.card_layout_tile_helyetesitett; } if (curr_subject.status.equals("Elmaradt")) { - witem.NumColor = R.color.red; + witem.NumColor = getColor(context, R.color.red); witem.Layout = R.drawable.card_layout_tile_elmarad; } else if (curr_subject.status.equals("TanevRendjeEsemeny")) { witem.NumVisibility = View.GONE; @@ -243,9 +264,6 @@ public class WidgetTimetableDataProvider implements RemoteViewsService.RemoteVie } private void initData() { - - theme = getThemeAccent(context); - rday = WidgetTimetable.selectDay(context, appWidgetId, 0, false); day_subjects.clear(); @@ -297,7 +315,7 @@ public class WidgetTimetableDataProvider implements RemoteViewsService.RemoteVie } } - public static Integer getThemeAccent(Context context) { + public static Integer[] getFullTheme(Context context) { DBManager dbManager = new DBManager(context.getApplicationContext()); try { @@ -305,27 +323,48 @@ public class WidgetTimetableDataProvider implements RemoteViewsService.RemoteVie Cursor cursor = dbManager.fetchTheme(); dbManager.close(); - return cursor.getInt(1); + int theme = cursor.getInt(0); + int customAccentColor = cursor.getInt(1); + int customHighlightColor = cursor.getInt(2); + + return new Integer[]{theme, customAccentColor, customHighlightColor}; } catch (Exception e) { e.printStackTrace(); } - return 0; + return new Integer[]{0, 0, 0}; } - public Item defaultItem(int theme) { + public Item defaultItem(Integer[] fullTheme, int nightMode, Context context) { + int textColor; + int textDescColor; + + if (fullTheme[0] == 0 && nightMode == UiModeManager.MODE_NIGHT_NO) { + textColor = R.color.text_light; + textDescColor = R.color.text_desc_light; + } else if (fullTheme[0] == 1) { + textColor = R.color.text_light; + textDescColor = R.color.text_desc_light; + } else { + textColor = R.color.text; + textDescColor = R.color.text_desc; + } + return new Item( R.drawable.card_layout_tile, + fullTheme[2], View.VISIBLE, View.VISIBLE, View.INVISIBLE, View.VISIBLE, View.VISIBLE, View.VISIBLE, - colorValues[theme >= colorValues.length ? 0 : theme], - R.color.text, - R.color.text, - R.color.text_desc + fullTheme[1], + textColor, + textColor, + textDescColor, + textDescColor, + textColor ); } @@ -353,4 +392,4 @@ public class WidgetTimetableDataProvider implements RemoteViewsService.RemoteVie return null; } -} \ No newline at end of file +} diff --git a/refilc/android/app/src/main/res/drawable-xhdpi/card_layout_bg.xml b/refilc/android/app/src/main/res/drawable-xhdpi/card_layout_bg.xml index 860b811..78dab0f 100644 --- a/refilc/android/app/src/main/res/drawable-xhdpi/card_layout_bg.xml +++ b/refilc/android/app/src/main/res/drawable-xhdpi/card_layout_bg.xml @@ -1,7 +1,7 @@ - - + + - \ No newline at end of file + diff --git a/refilc/android/app/src/main/res/drawable-xhdpi/widget_card_bottom_dark.xml b/refilc/android/app/src/main/res/drawable-xhdpi/widget_card_bottom_dark.xml index 2551ee3..d8ad4a8 100644 --- a/refilc/android/app/src/main/res/drawable-xhdpi/widget_card_bottom_dark.xml +++ b/refilc/android/app/src/main/res/drawable-xhdpi/widget_card_bottom_dark.xml @@ -1,7 +1,7 @@ - - + + - \ No newline at end of file + diff --git a/refilc/android/app/src/main/res/drawable-xhdpi/widget_card_top_dark.xml b/refilc/android/app/src/main/res/drawable-xhdpi/widget_card_top_dark.xml index 4bbd0bb..b17a764 100644 --- a/refilc/android/app/src/main/res/drawable-xhdpi/widget_card_top_dark.xml +++ b/refilc/android/app/src/main/res/drawable-xhdpi/widget_card_top_dark.xml @@ -1,7 +1,7 @@ - - + + - \ No newline at end of file + diff --git a/refilc/android/app/src/main/res/layout/widget_timetable.xml b/refilc/android/app/src/main/res/layout/widget_timetable.xml index 64a9a65..5f4ffa3 100644 --- a/refilc/android/app/src/main/res/layout/widget_timetable.xml +++ b/refilc/android/app/src/main/res/layout/widget_timetable.xml @@ -9,7 +9,6 @@ android:id="@+id/tt_grid_cont" android:layout_width="match_parent" android:layout_height="wrap_content" - android:backgroundTint="#00000000" android:background="@drawable/card_layout_bg" android:orientation="vertical"> diff --git a/refilc/android/app/src/main/res/values/colors.xml b/refilc/android/app/src/main/res/values/colors.xml index e0e5c17..77aa0d8 100644 --- a/refilc/android/app/src/main/res/values/colors.xml +++ b/refilc/android/app/src/main/res/values/colors.xml @@ -16,7 +16,7 @@ #ffE8E8E8 #000000 - #B9B9B9 + #888C8F #B9B9B9 #888C8F #ffF4F9FF @@ -56,12 +56,13 @@ #ffBF5AF2 #ffFF375F - #FF64B5F6 - #FF81C784 - #FFDCE775 - #FFFFF176 + #FF63B5F6 + #FF66BB6A + #FF9CCC65 + #FFFFB74C #FFFF8A65 #FFE57373 #FFF06292 #FFBA68C8 - \ No newline at end of file + #FF22AC9B +