Skip to content

Commit

Permalink
Add settings option to choose app theme
Browse files Browse the repository at this point in the history
  • Loading branch information
beansgum committed Sep 7, 2021
1 parent a5e1985 commit 79b50fd
Show file tree
Hide file tree
Showing 10 changed files with 172 additions and 54 deletions.
50 changes: 30 additions & 20 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@

<activity
android:name=".activities.SplashScreenActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:label="@string/app_name"
android:launchMode="singleTop">
<intent-filter>
Expand All @@ -52,44 +52,38 @@

<activity
android:name=".HomeActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:label="@string/app_name"
android:launchMode="singleTop" />

<activity
android:name=".activities.verifyseed.VerifySeedActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:label="@string/app_name"
android:launchMode="singleTop"
android:noHistory="true" />

<activity
android:name=".activities.SetupWalletActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name"
android:launchMode="singleTop" />

<activity
android:name=".activities.verifyseed.SaveSeedActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:label="@string/app_name"
android:launchMode="singleTop"
android:noHistory="true" />

<activity
android:name=".activities.verifyseed.VerifySeedInstruction"
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop"
android:noHistory="true" />

<activity
android:name=".activities.ReaderActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.CaptureActivityAnyOrientation"
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop"
android:screenOrientation="portrait"
android:stateNotNeeded="true"
Expand All @@ -98,12 +92,12 @@

<activity
android:name=".activities.more.SettingsActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.LogViewer"
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<service
Expand All @@ -114,92 +108,108 @@

<activity
android:name=".activities.verifyseed.SeedBackupSuccess"
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.CustomCrashReport"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.License"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.security.ValidateAddress"
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.security.SignMessage"
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.security.VerifyMessage"
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.more.SecurityTools"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.more.HelpActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.more.AboutActivity"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.more.DebugActivity"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.more.PoliteiaActivity"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.RestoreWalletActivity"
android:windowSoftInputMode="adjustResize"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.RestoreSuccessActivity"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.WalletSettings"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.ProposalDetailsActivity"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.more.StatisticsActivity"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.more.ConnectedPeers"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.privacy.AccountMixerActivity"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.privacy.SetupPrivacy"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.privacy.SetupMixerAccounts"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<activity
android:name=".activities.privacy.ManualMixerSetup"
android:configChanges="keyboardHidden|orientation|uiMode"
android:launchMode="singleTop" />

<provider
Expand Down
55 changes: 34 additions & 21 deletions app/src/main/java/com/dcrandroid/HomeActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import android.util.DisplayMetrics
import android.view.MotionEvent
import android.view.View
import android.view.animation.AnimationUtils
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.dcrandroid.activities.BaseActivity
Expand Down Expand Up @@ -67,13 +66,17 @@ class HomeActivity : BaseActivity(), SyncProgressListener, TxAndBlockNotificatio

private lateinit var adapter: NavigationTabsAdapter

private lateinit var currentFragment: Fragment
private var currentFragmentKey = "current_frag"
private var currentFragment: Int = 0
private var currentBottomSheet: FullScreenBottomSheetDialog? = null
private var sendPageSheet: FullScreenBottomSheetDialog? = null

private lateinit var notificationManager: NotificationManager

override fun onCreate(savedInstanceState: Bundle?) {
if (savedInstanceState != null) {
currentFragment = savedInstanceState.getInt(currentFragmentKey)
}
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_tabs)
setSupportActionBar(toolbar)
Expand Down Expand Up @@ -143,34 +146,41 @@ class HomeActivity : BaseActivity(), SyncProgressListener, TxAndBlockNotificatio
}

setupLogoAnim()
GlobalScope.launch(Dispatchers.Default) {
delay(1000)
withContext(Dispatchers.Main) {
checkWifiSync()
}
delay(6000)
try {
multiWallet!!.politeia.sync()
} catch (e: Exception) {
e.printStackTrace()
if (savedInstanceState == null) {
GlobalScope.launch(Dispatchers.Default) {
delay(1000)
withContext(Dispatchers.Main) {
checkWifiSync()
}
delay(6000)
try {
multiWallet!!.politeia.sync()
} catch (e: Exception) {
e.printStackTrace()
}
}
}
}

override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt(currentFragmentKey, currentFragment)
}

private val bottomSheetDismissed = DialogInterface.OnDismissListener {
currentBottomSheet = null
}

override fun onBackPressed() {
if (currentFragment is OverviewFragment) {
if (currentFragment == 0) {
InfoDialog(this)
.setDialogTitle(getString(R.string.exit_app_prompt_title))
.setMessage(getString(R.string.exit_app_prompt_message))
.setPositiveButton(
getString(R.string.yes),
DialogInterface.OnClickListener { _, _ ->
finish()
})
getString(R.string.yes)
) { _, _ ->
finish()
}
.setNegativeButton(getString(R.string.no), null)
.show()
} else {
Expand All @@ -181,7 +191,9 @@ class HomeActivity : BaseActivity(), SyncProgressListener, TxAndBlockNotificatio
override fun onDestroy() {
super.onDestroy()

if (multiWallet == null || multiWallet?.openedWalletsCount() == 0) {
if (isChangingConfigurations ||
multiWallet == null || multiWallet?.openedWalletsCount() == 0
) {
return
}
notificationManager.cancelAll()
Expand Down Expand Up @@ -214,7 +226,7 @@ class HomeActivity : BaseActivity(), SyncProgressListener, TxAndBlockNotificatio
}
recycler_view_tabs.adapter = adapter

switchFragment(0)
switchFragment(currentFragment)
}

fun refreshNavigationTabs() {
Expand Down Expand Up @@ -274,7 +286,8 @@ class HomeActivity : BaseActivity(), SyncProgressListener, TxAndBlockNotificatio

fun switchFragment(position: Int) {

currentFragment = when (position) {
currentFragment = position
val fragment = when (position) {
0 -> OverviewFragment()
1 -> {
if (multiWallet!!.openedWalletsCount() > 1) {
Expand All @@ -290,7 +303,7 @@ class HomeActivity : BaseActivity(), SyncProgressListener, TxAndBlockNotificatio

supportFragmentManager
.beginTransaction()
.replace(R.id.frame, currentFragment)
.replace(R.id.frame, fragment)
.commit()

setTabIndicator()
Expand Down
40 changes: 40 additions & 0 deletions app/src/main/java/com/dcrandroid/activities/BaseActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ import android.view.WindowManager
import android.view.inputmethod.InputMethodManager
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.content.ContextCompat
import com.dcrandroid.data.Constants
import com.dcrandroid.extensions.openedWalletsList
import com.dcrandroid.util.WalletData
import dcrlibwallet.AccountMixerNotificationListener
Expand All @@ -25,14 +27,18 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch


@SuppressLint("Registered")
open class BaseActivity : AppCompatActivity(), AccountMixerNotificationListener {

var lastDayNightMode = 0

internal val walletData: WalletData = WalletData.instance
internal val multiWallet: MultiWallet?
get() = walletData.multiWallet

override fun onCreate(savedInstanceState: Bundle?) {
setColorTheme()
super.onCreate(savedInstanceState)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Expand All @@ -46,6 +52,40 @@ open class BaseActivity : AppCompatActivity(), AccountMixerNotificationListener
checkMixerStatus()
}

override fun onRestart() {
super.onRestart()

if (AppCompatDelegate.getDefaultNightMode() != lastDayNightMode) {
recreate()
}
}

fun setColorTheme() {
if (walletData.multiWallet != null) {
val colorTheme = multiWallet!!.readInt32ConfigValueForKey(
Constants.COLOR_THEME,
Constants.DEF_COLOR_THEME
)

lastDayNightMode = nightMode(colorTheme)
if (AppCompatDelegate.getDefaultNightMode() != lastDayNightMode) {
AppCompatDelegate.setDefaultNightMode(lastDayNightMode)
recreate()
}

} else {
lastDayNightMode = AppCompatDelegate.getDefaultNightMode()
}
}

fun nightMode(option: Int): Int {
return when (option) {
0 -> AppCompatDelegate.MODE_NIGHT_NO
1 -> AppCompatDelegate.MODE_NIGHT_YES
else -> AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
}
}

override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
val view = currentFocus
if (view != null && (ev.action == MotionEvent.ACTION_UP || ev.action == MotionEvent.ACTION_MOVE) && view is EditText && !view.javaClass.name.startsWith(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,9 +143,9 @@ class SplashScreenActivity : BaseActivity() {
try {
if (multiWallet != null) {
multiWallet!!.shutdown()
}

walletData.multiWallet = null
walletData.multiWallet = null
}
} catch (e: Exception) {
e.printStackTrace()
}
Expand Down

0 comments on commit 79b50fd

Please sign in to comment.