diff --git a/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java b/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java
index e054ba6e..ba0c36dc 100644
--- a/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/BaseActivity.java
@@ -38,7 +38,7 @@ public abstract class BaseActivity extends AppCompatActivity {
break;
case 2:
- if(TimeHelper.timeBetweenHours(18, 6)) { // 6pm to 6am
+ if(TimeHelper.timeBetweenHours(tinyDB.getInt("darkThemeTimeHour"), tinyDB.getInt("lightThemeTimeHour"), tinyDB.getInt("darkThemeTimeMinute"), tinyDB.getInt("lightThemeTimeMinute"))) {
tinyDB.putString("currentTheme", "dark");
setTheme(R.style.AppTheme);
@@ -55,7 +55,7 @@ public abstract class BaseActivity extends AppCompatActivity {
setTheme(R.style.AppThemeRetro);
break;
case 4:
- if(TimeHelper.timeBetweenHours(18, 6)) { // 6pm to 6am
+ if(TimeHelper.timeBetweenHours(tinyDB.getInt("darkThemeTimeHour"), tinyDB.getInt("lightThemeTimeHour"), tinyDB.getInt("darkThemeTimeMinute"), tinyDB.getInt("lightThemeTimeMinute"))) {
tinyDB.putString("currentTheme", "dark");
setTheme(R.style.AppTheme);
diff --git a/app/src/main/java/org/mian/gitnex/activities/SettingsAppearanceActivity.java b/app/src/main/java/org/mian/gitnex/activities/SettingsAppearanceActivity.java
index 56c78aca..04aa0315 100644
--- a/app/src/main/java/org/mian/gitnex/activities/SettingsAppearanceActivity.java
+++ b/app/src/main/java/org/mian/gitnex/activities/SettingsAppearanceActivity.java
@@ -1,14 +1,20 @@
package org.mian.gitnex.activities;
+import android.app.Dialog;
+import android.app.TimePickerDialog;
import android.os.Bundle;
+import android.text.format.DateFormat;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
-import android.widget.TextView;
+import android.widget.TimePicker;
import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
import com.google.android.material.switchmaterial.SwitchMaterial;
+import org.jetbrains.annotations.NotNull;
import org.mian.gitnex.R;
import org.mian.gitnex.databinding.ActivitySettingsAppearanceBinding;
+import org.mian.gitnex.helpers.TinyDB;
import org.mian.gitnex.helpers.Toasty;
/**
@@ -38,13 +44,11 @@ public class SettingsAppearanceActivity extends BaseActivity {
ImageView closeActivity = activitySettingsAppearanceBinding.close;
- final TextView tvDateTimeSelected = activitySettingsAppearanceBinding.tvDateTimeSelected; // setter for time
- final TextView customFontSelected = activitySettingsAppearanceBinding.customFontSelected; // setter for custom font
- final TextView themeSelected = activitySettingsAppearanceBinding.themeSelected; // setter for theme
-
LinearLayout timeFrame = activitySettingsAppearanceBinding.timeFrame;
LinearLayout customFontFrame = activitySettingsAppearanceBinding.customFontFrame;
LinearLayout themeFrame = activitySettingsAppearanceBinding.themeSelectionFrame;
+ LinearLayout lightTimeFrame = activitySettingsAppearanceBinding.lightThemeTimeSelectionFrame;
+ LinearLayout darkTimeFrame = activitySettingsAppearanceBinding.darkThemeTimeSelectionFrame;
SwitchMaterial counterBadgesSwitch = activitySettingsAppearanceBinding.switchCounterBadge;
@@ -55,35 +59,36 @@ public class SettingsAppearanceActivity extends BaseActivity {
initCloseListener();
closeActivity.setOnClickListener(onClickListener);
- if(!tinyDB.getString("timeStr").isEmpty()) {
+ String lightMinute = String.valueOf(tinyDB.getInt("lightThemeTimeMinute"));
+ String lightHour = String.valueOf(tinyDB.getInt("lightThemeTimeHour"));
+ if(lightMinute.length() == 1) lightMinute = "0" + lightMinute;
+ if(lightHour.length() == 1) lightHour = "0" + lightHour;
- tvDateTimeSelected.setText(tinyDB.getString("timeStr"));
+ String darkMinute = String.valueOf(tinyDB.getInt("darkThemeTimeMinute"));
+ String darkHour = String.valueOf(tinyDB.getInt("darkThemeTimeHour"));
+ if(darkMinute.length() == 1) darkMinute = "0" + darkMinute;
+ if(darkHour.length() == 1) darkHour = "0" + darkHour;
+
+ activitySettingsAppearanceBinding.lightThemeSelectedTime.setText(ctx.getResources().getString(R.string.settingsThemeTimeSelectedHint, lightHour,
+ lightMinute));
+ activitySettingsAppearanceBinding.darkThemeSelectedTime.setText(ctx.getResources().getString(R.string.settingsThemeTimeSelectedHint, darkHour,
+ darkMinute));
+ activitySettingsAppearanceBinding.tvDateTimeSelected.setText(tinyDB.getString("timeStr"));
+ activitySettingsAppearanceBinding.customFontSelected.setText(tinyDB.getString("customFontStr", "Manrope"));
+ activitySettingsAppearanceBinding.themeSelected.setText(tinyDB.getString("themeStr", "Dark"));
+
+ if(tinyDB.getString("themeStr").startsWith("Auto")) {
+ darkTimeFrame.setVisibility(View.VISIBLE);
+ lightTimeFrame.setVisibility(View.VISIBLE);
+ }
+ else {
+ darkTimeFrame.setVisibility(View.GONE);
+ lightTimeFrame.setVisibility(View.GONE);
}
- if(!tinyDB.getString("customFontStr").isEmpty()) {
-
- customFontSelected.setText(tinyDB.getString("customFontStr"));
- }
-
- if(!tinyDB.getString("themeStr").isEmpty()) {
-
- themeSelected.setText(tinyDB.getString("themeStr"));
- }
-
- if(timeSelectedChoice == 0) {
-
- timeSelectedChoice = tinyDB.getInt("timeId");
- }
-
- if(customFontSelectedChoice == 0) {
-
- customFontSelectedChoice = tinyDB.getInt("customFontId", 1);
- }
-
- if(themeSelectedChoice == 0) {
-
- themeSelectedChoice = tinyDB.getInt("themeId");
- }
+ timeSelectedChoice = tinyDB.getInt("timeId");
+ customFontSelectedChoice = tinyDB.getInt("customFontId", 1);
+ themeSelectedChoice = tinyDB.getInt("themeId");
counterBadgesSwitch.setChecked(tinyDB.getBoolean("enableCounterBadges"));
@@ -105,7 +110,7 @@ public class SettingsAppearanceActivity extends BaseActivity {
tsBuilder.setSingleChoiceItems(themeList, themeSelectedChoice, (dialogInterfaceTheme, i) -> {
themeSelectedChoice = i;
- themeSelected.setText(themeList[i]);
+ activitySettingsAppearanceBinding.themeSelected.setText(themeList[i]);
tinyDB.putString("themeStr", themeList[i]);
tinyDB.putInt("themeId", i);
@@ -120,6 +125,16 @@ public class SettingsAppearanceActivity extends BaseActivity {
cfDialog.show();
});
+ lightTimeFrame.setOnClickListener(view -> {
+ LightTimePicker timePicker = new LightTimePicker();
+ timePicker.show(getSupportFragmentManager(), "timePicker");
+ });
+
+ darkTimeFrame.setOnClickListener(view -> {
+ DarkTimePicker timePicker = new DarkTimePicker();
+ timePicker.show(getSupportFragmentManager(), "timePicker");
+ });
+
// custom font dialog
customFontFrame.setOnClickListener(view -> {
@@ -131,7 +146,7 @@ public class SettingsAppearanceActivity extends BaseActivity {
cfBuilder.setSingleChoiceItems(customFontList, customFontSelectedChoice, (dialogInterfaceCustomFont, i) -> {
customFontSelectedChoice = i;
- customFontSelected.setText(customFontList[i]);
+ activitySettingsAppearanceBinding.customFontSelected.setText(customFontList[i]);
tinyDB.putString("customFontStr", customFontList[i]);
tinyDB.putInt("customFontId", i);
@@ -157,7 +172,7 @@ public class SettingsAppearanceActivity extends BaseActivity {
tBuilder.setSingleChoiceItems(timeList, timeSelectedChoice, (dialogInterfaceTime, i) -> {
timeSelectedChoice = i;
- tvDateTimeSelected.setText(timeList[i]);
+ activitySettingsAppearanceBinding.tvDateTimeSelected.setText(timeList[i]);
tinyDB.putString("timeStr", timeList[i]);
tinyDB.putInt("timeId", i);
@@ -184,4 +199,54 @@ public class SettingsAppearanceActivity extends BaseActivity {
onClickListener = view -> finish();
}
+ public static class LightTimePicker extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
+
+ TinyDB db = TinyDB.getInstance(getContext());
+
+ @NotNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ int hour = db.getInt("lightThemeTimeHour");
+ int minute = db.getInt("lightThemeTimeMinute");
+
+ return new TimePickerDialog(getActivity(), this, hour, minute, true);
+ }
+
+ @Override
+ public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
+ db.putInt("lightThemeTimeHour", hourOfDay);
+ db.putInt("lightThemeTimeMinute", minute);
+ db.putBoolean("refreshParent", true);
+ requireActivity().overridePendingTransition(0, 0);
+ this.dismiss();
+ Toasty.success(requireActivity().getApplicationContext(), requireContext().getResources().getString(R.string.settingsSave));
+ requireActivity().recreate();
+ }
+ }
+
+ public static class DarkTimePicker extends DialogFragment implements TimePickerDialog.OnTimeSetListener {
+
+ TinyDB db = TinyDB.getInstance(getContext());
+
+ @NotNull
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ int hour = db.getInt("darkThemeTimeHour");
+ int minute = db.getInt("darkThemeTimeMinute");
+
+ return new TimePickerDialog(getActivity(), this, hour, minute, true);
+ }
+
+ @Override
+ public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
+ db.putInt("darkThemeTimeHour", hourOfDay);
+ db.putInt("darkThemeTimeMinute", minute);
+ db.putBoolean("refreshParent", true);
+ requireActivity().overridePendingTransition(0, 0);
+ this.dismiss();
+ Toasty.success(requireActivity().getApplicationContext(), requireContext().getResources().getString(R.string.settingsSave));
+ requireActivity().recreate();
+ }
+ }
+
}
diff --git a/app/src/main/java/org/mian/gitnex/core/MainApplication.java b/app/src/main/java/org/mian/gitnex/core/MainApplication.java
index 23250edc..7142a2e6 100644
--- a/app/src/main/java/org/mian/gitnex/core/MainApplication.java
+++ b/app/src/main/java/org/mian/gitnex/core/MainApplication.java
@@ -157,5 +157,15 @@ public class MainApplication extends Application {
tinyDB.putInt("langId", 0);
}
+ if(tinyDB.getInt("darkThemeTimeHour", 100) == 100) {
+ tinyDB.putInt("lightThemeTimeHour", 6);
+ tinyDB.putInt("lightThemeTimeMinute", 0);
+ tinyDB.putInt("darkThemeTimeHour", 18);
+ tinyDB.putInt("darkThemeTimeMinute", 0);
+ }
+
+ if(tinyDB.getString("timeStr").isEmpty()) {
+ tinyDB.putString("timeStr", getString(R.string.settingsDateTimeHeaderDefault));
+ }
}
}
diff --git a/app/src/main/java/org/mian/gitnex/helpers/TimeHelper.java b/app/src/main/java/org/mian/gitnex/helpers/TimeHelper.java
index 022cd9c9..37d08332 100644
--- a/app/src/main/java/org/mian/gitnex/helpers/TimeHelper.java
+++ b/app/src/main/java/org/mian/gitnex/helpers/TimeHelper.java
@@ -69,17 +69,17 @@ public class TimeHelper {
}
- public static boolean timeBetweenHours(int fromHour, int toHour) {
+ public static boolean timeBetweenHours(int fromHour, int toHour, int fromMinute, int toMinute) {
Calendar cal = Calendar.getInstance();
Calendar from = Calendar.getInstance();
from.set(Calendar.HOUR_OF_DAY, fromHour);
- from.set(Calendar.MINUTE, 0);
+ from.set(Calendar.MINUTE, fromMinute);
Calendar to = Calendar.getInstance();
to.set(Calendar.HOUR_OF_DAY, toHour);
- to.set(Calendar.MINUTE, 0);
+ to.set(Calendar.MINUTE, toMinute);
if(to.before(from)) {
if(cal.after(to)) {
diff --git a/app/src/main/res/drawable/shape_list_divider.xml b/app/src/main/res/drawable/shape_list_divider.xml
new file mode 100644
index 00000000..ff307019
--- /dev/null
+++ b/app/src/main/res/drawable/shape_list_divider.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_settings_appearance.xml b/app/src/main/res/layout/activity_settings_appearance.xml
index 16853f75..90ac744a 100644
--- a/app/src/main/res/layout/activity_settings_appearance.xml
+++ b/app/src/main/res/layout/activity_settings_appearance.xml
@@ -81,6 +81,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Pretty
Normal
Choose Language
+ Light Theme Switch Time
+ Dark Theme Switch Time
+ %s:%s
Choose Time Format
Translate GitNex via Crowdin
Green - Black
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index d782d482..96d33d6a 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -2,7 +2,7 @@
-