Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions app/src/main/java/org/secfirst/umbrella/UmbrellaApplication.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package org.secfirst.umbrella
import android.app.Activity
import android.app.Application
import android.content.Context
import android.content.SharedPreferences
import androidx.appcompat.app.AppCompatDelegate
import androidx.multidex.MultiDex
import com.raizlabs.android.dbflow.config.DatabaseConfig
import com.raizlabs.android.dbflow.config.FlowConfig
Expand Down Expand Up @@ -51,6 +53,28 @@ class UmbrellaApplication : Application(), HasAndroidInjector {
initDaggerComponent()
initFonts()
initDefaultLocation()

//check if dark mode is currently on or off and set the appearance accordingly
val sharedPreferences = getSharedPreferences(
"sharedPrefs", MODE_PRIVATE
)
val isDarkModeOn = sharedPreferences
.getBoolean(
"isDarkModeOn", false
)

if (isDarkModeOn) {
AppCompatDelegate
.setDefaultNightMode(
AppCompatDelegate
.MODE_NIGHT_YES);
}
else {
AppCompatDelegate
.setDefaultNightMode(
AppCompatDelegate
.MODE_NIGHT_NO);
}
}

fun checkPassword(password: String? = null): Boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package org.secfirst.umbrella.feature.account.view

import android.Manifest
import android.app.AlertDialog
import android.app.Application
import android.app.Dialog
import android.app.ProgressDialog
import android.content.BroadcastReceiver
Expand All @@ -16,6 +17,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.app.ShareCompat
import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
Expand Down Expand Up @@ -63,6 +65,14 @@ import org.secfirst.umbrella.feature.tour.view.TourController
import org.secfirst.umbrella.misc.*
import java.io.File
import javax.inject.Inject
import android.content.SharedPreferences
import android.content.Context.MODE_PRIVATE








class SettingsController : BaseController(),
Expand Down Expand Up @@ -101,6 +111,8 @@ class SettingsController : BaseController(),
private lateinit var refreshIntervalDialog: RefreshIntervalDialog
private lateinit var feedSourceDialog: FeedSourceDialog
private lateinit var refreshServerProgress: ProgressDialog
private lateinit var editor: SharedPreferences.Editor
private var isDarkModeOn= false

private val mMessageReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Expand Down Expand Up @@ -207,6 +219,10 @@ class SettingsController : BaseController(),
mainView.settingsSkipPassword.setOnCheckedChangeListener { _, isChecked ->
skipPasswordTip(isChecked)
}
mainView.settingsDarkMode.setOnCheckedChangeListener{_, isChecked ->
toggleDarkMode(isChecked)
}

presenter.submitDefaultLanguage()
presenter.submitSkippPassword()
presenter.prepareView()
Expand All @@ -217,6 +233,17 @@ class SettingsController : BaseController(),
refreshServerProgress = ProgressDialog(context)
refreshServerProgress.setCancelable(false)
refreshServerProgress.setMessage(context.getString(R.string.loading_tour_message))


val sharedPreferences: SharedPreferences = context.getSharedPreferences(
"sharedPrefs", MODE_PRIVATE
)
editor = sharedPreferences.edit()
isDarkModeOn = sharedPreferences.getBoolean("isDarkModeOn", false)

//Check if dark mode is on and set the dark mode switch initial position accordingly
mainView.settingsDarkMode.isChecked = isDarkModeOn

return mainView
}

Expand Down Expand Up @@ -355,6 +382,20 @@ class SettingsController : BaseController(),
if (isChecked) presenter.setSkipPassword(true) else presenter.setSkipPassword(false)
}

private fun toggleDarkMode(isChecked: Boolean) {
if (isChecked) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
editor.putBoolean(
"isDarkModeOn", true);
editor.apply();
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
editor.putBoolean(
"isDarkModeOn", false);
editor.apply();
}
}

private fun feedSourceClick() = feedSourceDialog.show()

private fun refreshIntervalClick() = refreshIntervalDialog.show()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.secfirst.umbrella.feature.base.interactor

import androidx.appcompat.app.AppCompatDelegate

interface BaseInteractor {

fun isUserLoggedIn(): Boolean
Expand Down
50 changes: 49 additions & 1 deletion app/src/main/res/layout/account_settings_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -89,14 +89,62 @@
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/DarkModeContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/settings_vertical_margin"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/SkipContainer">

<TextView
android:id="@+id/labelDarkMode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/settings_normal_padding"
android:fontFamily="sans-serif"
android:lineSpacingExtra="8sp"
android:text="@string/toggle_dark_mode"
android:textSize="@dimen/text_size_small"
android:textStyle="normal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<TextView
android:id="@+id/labelDarkModeMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif"
android:lineSpacingExtra="6sp"
android:text="@string/turn_dark_mode_on_or_off"
android:textColor="@color/subtitle_settings_color"
android:textSize="@dimen/text_size_smallest"
android:textStyle="normal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/labelDarkMode" />

<Switch
android:id="@+id/settingsDarkMode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:fontFamily="sans-serif"
android:lineSpacingExtra="8sp"
android:textColor="#de000000"
android:textSize="@dimen/text_size_small"
android:textStyle="normal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/settingsRefreshServer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/settings_normal_padding"
android:padding="@dimen/settings_vertical_margin"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/SkipContainer">
app:layout_constraintTop_toBottomOf="@+id/DarkModeContainer">

<TextView
android:id="@+id/refreshServerLabel"
Expand Down
43 changes: 43 additions & 0 deletions app/src/main/res/values-night/colors.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- change the values below to customise dark mode appearance -->
<color name="colorPrimary">#4a148c</color>
<color name="colorPrimaryDark">#12005e</color>
<color name="colorAccent">@color/umbrella_green</color>
<color name="light_grey">#e5e5e5</color>
<color name="light_white">#e5e5e5</color>
<color name="macaroni_and_cheese">#f3bc2b</color>
<color name="umbrella_green">#FF9ABE2E</color>
<color name="umbrella_purple">#FFB83657</color>
<color name="umbrella_purple_dark">#FF8D2A43</color>
<color name="umbrella_yellow">#FFF2BC2B</color>
<color name="white">#FFFFFF</color>

<color name="blue_pea">#4285f4</color>
<color name="dialog_background">#fafafa</color>
<color name="immersive_background">#88000000</color>
<color name="green_button">#CC9BBF2E</color>
<color name="grey_location">#9b9b9b</color>
<color name="green_dashboard">#9bbf2e</color>
<color name="white_transparent">#CCFFFFFF</color>
<color name="blue">#21449e</color>
<color name="macaroni_cheese">#f3bc2b</color>
<color name="form_background">#f6f6f6</color>
<color name="chilist_view_background">#e5e5e5</color>
<color name="feedSources_color">#000000</color>
<color name="color_line_settings">#1e000000</color>
<color name="teal_settings">#009789</color>
<color name="dark_grey">#FF333333</color>
<color name="feed_list_site_name">#828282</color>
<color name="coachmark_background_dark">#BB000000</color>
<color name="hands_shake_info_text_color">#9b9b9b</color>
<color name="black_38">#4a4a4a</color>
<color name="menu_item_color">#757575</color>
<color name="custom_check_list_item_color">#9b9b9b</color>
<color name="bg_error_view">#e5e5e5</color>
<color name="blue_light">#43a0ca</color>
<color name="form_title_color">#030303</color>
<color name="default_umbrella_black">#de000000</color>
<color name="subtitle_settings_color">#8b000000</color>
<color name="very_light_pink">#e3e3e3</color>
</resources>
102 changes: 102 additions & 0 deletions app/src/main/res/values-night/dimens.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>


<!-- font sizes -->
<dimen name="font_larger">22sp</dimen>
<dimen name="font_list_item">20sp</dimen>
<dimen name="font_large">20sp</dimen>
<dimen name="font_normal">15sp</dimen>
<dimen name="font_small">12sp</dimen>
<dimen name="card_radius">2dp</dimen>
<dimen name="text_size_xlarge">26sp</dimen>
<dimen name="text_size_large">24sp</dimen>
<dimen name="text_size_like_extremely_small">11sp</dimen>
<dimen name="text_size_larger">22sp</dimen>
<dimen name="text_size_normal">20sp</dimen>
<dimen name="text_size_smaller">18sp</dimen>
<dimen name="text_size_small">16sp</dimen>
<dimen name="text_size_smallest">14sp</dimen>
<dimen name="text_size_like_really_small">12sp</dimen>
<dimen name="text_size_like_small">13sp</dimen>


<dimen name="md_dialog_frame_margin">24dp</dimen>
<dimen name="md_content_padding_top">8dp</dimen>
<dimen name="md_content_textsize">16sp</dimen>

<dimen name="dialog_elevation">6dp</dimen>
<dimen name="dialog_corners">2dp</dimen>

<dimen name="card_view_default_radius">2dp</dimen>
<dimen name="dashboard_feed_padding">10dp</dimen>
<dimen name="dashboard_feed_small_padding">5dp</dimen>
<dimen name="dashboard_feed_smallest_padding">3dp</dimen>
<dimen name="dashboard_feed_normal_padding">5dp</dimen>
<dimen name="dashboard_feed_margin_top">10dp</dimen>
<dimen name="dashboard_feed_medium_margin_top">10dp</dimen>
<dimen name="dashboard_feed_smallest_margin_top">3dp</dimen>
<dimen name="dashboard_feed_small_margin_top">5dp</dimen>
<dimen name="dashboard_feed_smallest_margin_bottom">3dp</dimen>
<dimen name="dashboard_feed_big_margin_bottom">16dp</dimen>
<dimen name="dashboard_feed_normal_margin_start">16dp</dimen>
<dimen name="dashboard_feed_big_margin_start">16dp</dimen>
<dimen name="dashboard_feed_big_margin_right">16dp</dimen>


<!--Feed list view-->
<dimen name="feed_list_small_margin_top">10dp</dimen>
<dimen name="feed_list_normal_margin_top">20dp</dimen>
<dimen name="feed_list_big_margin_bottom">20dp</dimen>
<dimen name="feed_list_card_view_radius">2dp</dimen>
<dimen name="feed_list_small_padding">10dp</dimen>
<dimen name="feed_list_smallest_margin_left">5dp</dimen>
<dimen name="feed_list_small_margin_bottom">5dp</dimen>
<dimen name="feed_list_normal_padding">10dp</dimen>

<!--Feed empty view-->
<dimen name="feed_empty_big_margin_top">20dp</dimen>
<dimen name="feed_empty_smallest_margin_top">3dp</dimen>
<dimen name="feed_empty_small_margin_top">5dp</dimen>
<dimen name="feed_empty_smallest_margin_bottom">3dp</dimen>
<dimen name="feed_empty_card_view">2dp</dimen>
<dimen name="feed_empty_normal_padding">10dp</dimen>
<dimen name="feed_empty_small_padding">5dp</dimen>
<dimen name="share_dialog_normal_space">25dp</dimen>
<dimen name="share_dialog_small_space">20dp</dimen>
<dimen name="share_dialog_little_space">10dp</dimen>
<dimen name="decorator_card_padding">8dp</dimen>
<dimen name="test">5dp</dimen>

<dimen name="recycler_view_margin_bottom">56dp</dimen>
<dimen name="segment_item_width">180dp</dimen>
<dimen name="segment_item_small_width">153dp</dimen>
<dimen name="segment_item_height">175dp</dimen>
<dimen name="segment_item_corner_radius">2dp</dimen>
<dimen name="segment_item_small_padding">2dp</dimen>
<dimen name="segment_item_card_height">121dp</dimen>
<dimen name="segment_item_index_margin_start">15dp</dimen>
<dimen name="segment_item_index_margin_top">10dp</dimen>
<dimen name="segment_item_title_width">132dp</dimen>
<dimen name="segment_item_title_margin_start">15dp</dimen>
<dimen name="segment_item_title_margin_top">38dp</dimen>
<dimen name="segment_item_layout_share_margin_bottom">10dp</dimen>
<dimen name="segment_item_fav_margin_start">80dp</dimen>
<dimen name="segment_item_share_margin_start">20dp</dimen>
<dimen name="form_title_text_size">23sp</dimen>
<dimen name="form_title_height">40dp</dimen>
<dimen name="form_layout_small_margin">8dp</dimen>

<dimen name="design_bottom_navigation_text_size" tools:override="true">12sp</dimen>
<dimen name="design_bottom_navigation_active_text_size" tools:override="true">12sp</dimen>

<dimen name="width_icon">20dp</dimen>
<dimen name="height_icon">20dp</dimen>

<!-- Settings -->
<dimen name="settings_normal_padding">5dp</dimen>
<dimen name="settings_bigger_padding">20dp</dimen>
<dimen name="settings_vertical_margin">10dp</dimen>
</resources>
Loading