This commit is contained in:
Mariotaku Lee 2017-01-07 23:51:21 +08:00
parent ad1f14c20c
commit 42c5b0ca27
15 changed files with 482 additions and 330 deletions

View File

@ -32,7 +32,9 @@ import android.support.annotation.ColorInt;
import android.support.annotation.FloatRange;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StyleRes;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.TwilightManagerAccessor;
import android.support.v7.view.menu.ActionMenuItemView;
import android.support.v7.widget.ActionMenuView;
import android.support.v7.widget.Toolbar;
@ -48,6 +50,7 @@ import android.view.WindowManager;
import android.widget.FrameLayout;
import org.apache.commons.lang3.ArrayUtils;
import org.jetbrains.annotations.NotNull;
import org.mariotaku.chameleon.ChameleonUtils;
import org.mariotaku.twidere.Constants;
import org.mariotaku.twidere.R;
@ -569,4 +572,11 @@ public class ThemeUtils implements Constants {
return Color.HSVToColor(hsv);
}
}
@StyleRes
public static int getCurrentTheme(@NotNull final Context context, @StyleRes final int lightTheme,
@StyleRes final int darkTheme) {
if (TwilightManagerAccessor.INSTANCE.isNight(context)) return darkTheme;
return lightTheme;
}
}

View File

@ -0,0 +1,13 @@
package android.support.v7.app
import android.content.Context
/**
* Created by mariotaku on 2017/1/7.
*/
object TwilightManagerAccessor {
fun isNight(context: Context): Boolean {
return TwilightManager.getInstance(context).isNight
}
}

View File

@ -51,7 +51,6 @@ import org.mariotaku.twidere.TwidereConstants.SHARED_PREFERENCES_NAME
import org.mariotaku.twidere.activity.iface.IControlBarActivity
import org.mariotaku.twidere.activity.iface.IExtendedActivity
import org.mariotaku.twidere.activity.iface.IThemedActivity
import org.mariotaku.twidere.constant.nightModeKey
import org.mariotaku.twidere.constant.themeColorKey
import org.mariotaku.twidere.constant.themeKey
import org.mariotaku.twidere.fragment.iface.IBaseFragment.SystemWindowsInsetsCallback
@ -62,6 +61,7 @@ import org.mariotaku.twidere.util.dagger.GeneralComponentHelper
import org.mariotaku.twidere.util.support.ActivitySupport
import org.mariotaku.twidere.util.support.ActivitySupport.TaskDescriptionCompat
import org.mariotaku.twidere.util.theme.TwidereAppearanceCreator
import org.mariotaku.twidere.util.theme.getCurrentThemeResource
import org.mariotaku.twidere.view.iface.IExtendedView.OnFitSystemWindowsListener
import java.lang.reflect.InvocationTargetException
import java.util.*
@ -179,12 +179,10 @@ open class BaseActivity : ChameleonActivity(), IExtendedActivity<BaseActivity>,
StrictModeUtils.detectAllThreadPolicy()
}
val prefs = getSharedPreferences(SHARED_PREFERENCES_NAME, Context.MODE_PRIVATE)
val nightMode = prefs[nightModeKey]
val themeResource = getThemeResource(prefs[themeKey], prefs[themeColorKey], nightMode)
val themeResource = getThemeResource(prefs[themeKey], prefs[themeColorKey])
if (themeResource != 0) {
setTheme(themeResource)
}
delegate.setLocalNightMode(nightMode)
super.onCreate(savedInstanceState)
ActivitySupport.setTaskDescription(this, TaskDescriptionCompat(title.toString(), null,
ColorUtils.setAlphaComponent(overrideTheme.colorToolbar, 0xFF)))
@ -386,7 +384,9 @@ open class BaseActivity : ChameleonActivity(), IExtendedActivity<BaseActivity>,
}
@StyleRes
protected open fun getThemeResource(theme: String, themeColor: Int, nightMode: Int): Int = 0
protected open fun getThemeResource(theme: String, themeColor: Int): Int {
return getCurrentThemeResource(this, theme)
}
companion object {

View File

@ -44,8 +44,6 @@ import org.mariotaku.twidere.R
import org.mariotaku.twidere.constant.IntentConstants.*
import org.mariotaku.twidere.constant.KeyboardShortcutConstants.ACTION_NAVIGATION_BACK
import org.mariotaku.twidere.constant.KeyboardShortcutConstants.CONTEXT_TAG_NAVIGATION
import org.mariotaku.twidere.constant.SharedPreferenceConstants.VALUE_THEME_NAME_DARK
import org.mariotaku.twidere.constant.SharedPreferenceConstants.VALUE_THEME_NAME_LIGHT
import org.mariotaku.twidere.fragment.*
import org.mariotaku.twidere.util.KeyboardShortcutsHandler
import org.mariotaku.twidere.util.ThemeUtils
@ -62,6 +60,11 @@ class SettingsActivity : BaseActivity(), OnItemClickListener, OnPreferenceStartF
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_settings)
if (savedInstanceState != null) {
shouldRecreate = savedInstanceState.getBoolean(EXTRA_SHOULD_RECREATE, shouldRecreate)
shouldRestart = savedInstanceState.getBoolean(EXTRA_SHOULD_RESTART, shouldRestart)
}
val backgroundAlpha = currentThemeBackgroundAlpha
detailFragmentContainer.setBackgroundColor(backgroundAlpha shl 24 or 0xFFFFFF and ThemeUtils.getThemeBackgroundColor(this))
@ -101,42 +104,6 @@ class SettingsActivity : BaseActivity(), OnItemClickListener, OnPreferenceStartF
}
}
private fun initEntries() {
entriesAdapter.addHeader(getString(R.string.appearance))
entriesAdapter.addPreference("theme", R.drawable.ic_action_color_palette, getString(R.string.theme),
R.xml.preferences_theme)
entriesAdapter.addPreference("cards", R.drawable.ic_action_card, getString(R.string.cards),
R.xml.preferences_cards)
entriesAdapter.addHeader(getString(R.string.function))
entriesAdapter.addPreference("tabs", R.drawable.ic_action_tab, getString(R.string.tabs),
CustomTabsFragment::class.java)
entriesAdapter.addPreference("extension", R.drawable.ic_action_extension, getString(R.string.extensions),
ExtensionsListFragment::class.java)
entriesAdapter.addPreference("refresh", R.drawable.ic_action_refresh, getString(R.string.refresh),
R.xml.preferences_refresh)
entriesAdapter.addPreference("notifications", R.drawable.ic_action_notification, getString(R.string.settings_notifications),
R.xml.preferences_notifications)
entriesAdapter.addPreference("network", R.drawable.ic_action_web, getString(R.string.network),
R.xml.preferences_network)
entriesAdapter.addPreference("compose", R.drawable.ic_action_status_compose, getString(R.string.action_compose),
R.xml.preferences_compose)
entriesAdapter.addPreference("content", R.drawable.ic_action_twidere_square, getString(R.string.content),
R.xml.preferences_content)
entriesAdapter.addPreference("storage", R.drawable.ic_action_storage, getString(R.string.preference_title_storage),
R.xml.preferences_storage)
entriesAdapter.addPreference("other", R.drawable.ic_action_more_horizontal, getString(R.string.other_settings),
R.xml.preferences_other)
entriesAdapter.addHeader(getString(R.string.title_about))
entriesAdapter.addPreference("about", R.drawable.ic_action_info, getString(R.string.title_about),
R.xml.preferences_about)
val browserArgs = Bundle()
browserArgs.putString(EXTRA_URI, "file:///android_asset/gpl-3.0-standalone.html")
entriesAdapter.addPreference("license", R.drawable.ic_action_open_source, getString(R.string.title_open_source_license),
SupportBrowserFragment::class.java, browserArgs)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode == RESULT_SETTINGS_CHANGED && data != null) {
shouldRecreate = data.getBooleanExtra(EXTRA_SHOULD_RECREATE, false)
@ -145,11 +112,6 @@ class SettingsActivity : BaseActivity(), OnItemClickListener, OnPreferenceStartF
super.onActivityResult(requestCode, resultCode, data)
}
private val isTopSettings: Boolean
get() = java.lang.Boolean.parseBoolean("true")
override fun finish() {
if (shouldRecreate || shouldRestart) {
val data = Intent()
@ -160,8 +122,10 @@ class SettingsActivity : BaseActivity(), OnItemClickListener, OnPreferenceStartF
super.finish()
}
private fun finishNoRestart() {
super.finish()
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putBoolean(EXTRA_SHOULD_RECREATE, shouldRecreate)
outState.putBoolean(EXTRA_SHOULD_RESTART, shouldRestart)
}
override fun handleKeyboardShortcutSingle(handler: KeyboardShortcutsHandler, keyCode: Int, event: KeyEvent, metaState: Int): Boolean {
@ -208,16 +172,49 @@ class SettingsActivity : BaseActivity(), OnItemClickListener, OnPreferenceStartF
openDetails(position)
}
override fun getThemeResource(theme: String, themeColor: Int, nightMode: Int): Int {
when (theme) {
VALUE_THEME_NAME_LIGHT -> {
return R.style.Theme_Twidere_Light
}
VALUE_THEME_NAME_DARK -> {
return R.style.Theme_Twidere_Dark
}
}
return super.getThemeResource(theme, themeColor, nightMode)
private fun finishNoRestart() {
super.finish()
}
private val isTopSettings: Boolean
get() = java.lang.Boolean.parseBoolean("true")
private fun initEntries() {
entriesAdapter.addHeader(getString(R.string.appearance))
entriesAdapter.addPreference("theme", R.drawable.ic_action_color_palette, getString(R.string.theme),
R.xml.preferences_theme)
entriesAdapter.addPreference("cards", R.drawable.ic_action_card, getString(R.string.cards),
R.xml.preferences_cards)
entriesAdapter.addHeader(getString(R.string.function))
entriesAdapter.addPreference("tabs", R.drawable.ic_action_tab, getString(R.string.tabs),
CustomTabsFragment::class.java)
entriesAdapter.addPreference("extension", R.drawable.ic_action_extension, getString(R.string.extensions),
ExtensionsListFragment::class.java)
entriesAdapter.addPreference("refresh", R.drawable.ic_action_refresh, getString(R.string.refresh),
R.xml.preferences_refresh)
entriesAdapter.addPreference("notifications", R.drawable.ic_action_notification, getString(R.string.settings_notifications),
R.xml.preferences_notifications)
entriesAdapter.addPreference("network", R.drawable.ic_action_web, getString(R.string.network),
R.xml.preferences_network)
entriesAdapter.addPreference("compose", R.drawable.ic_action_status_compose, getString(R.string.action_compose),
R.xml.preferences_compose)
entriesAdapter.addPreference("content", R.drawable.ic_action_twidere_square, getString(R.string.content),
R.xml.preferences_content)
entriesAdapter.addPreference("storage", R.drawable.ic_action_storage, getString(R.string.preference_title_storage),
R.xml.preferences_storage)
entriesAdapter.addPreference("other", R.drawable.ic_action_more_horizontal, getString(R.string.other_settings),
R.xml.preferences_other)
entriesAdapter.addHeader(getString(R.string.title_about))
entriesAdapter.addPreference("about", R.drawable.ic_action_info, getString(R.string.title_about),
R.xml.preferences_about)
val browserArgs = Bundle()
browserArgs.putString(EXTRA_URI, "file:///android_asset/gpl-3.0-standalone.html")
entriesAdapter.addPreference("license", R.drawable.ic_action_open_source, getString(R.string.title_open_source_license),
SupportBrowserFragment::class.java, browserArgs)
}
private fun openDetails(position: Int) {

View File

@ -2,7 +2,6 @@ package org.mariotaku.twidere.constant
import android.content.SharedPreferences
import android.os.Build
import android.support.v7.app.AppCompatDelegate
import android.text.TextUtils
import org.mariotaku.kpreferences.*
import org.mariotaku.ktextension.toLong
@ -60,25 +59,6 @@ val themeColorKey = KIntKey(KEY_THEME_COLOR, 0)
val filterUnavailableQuoteStatusesKey = KBooleanKey("filter_unavailable_quote_statuses", false)
val filterPossibilitySensitiveStatusesKey = KBooleanKey("filter_possibility_sensitive_statuses", false)
object nightModeKey : KSimpleKey<Int>(KEY_THEME, AppCompatDelegate.MODE_NIGHT_NO) {
override fun read(preferences: SharedPreferences): Int {
return when (preferences.getString(key, null)) {
VALUE_THEME_NAME_AUTO -> AppCompatDelegate.MODE_NIGHT_AUTO
VALUE_THEME_NAME_DARK -> AppCompatDelegate.MODE_NIGHT_YES
else -> AppCompatDelegate.MODE_NIGHT_NO
}
}
override fun write(editor: SharedPreferences.Editor, value: Int): Boolean {
editor.putString(key, when (value) {
AppCompatDelegate.MODE_NIGHT_NO -> VALUE_THEME_NAME_LIGHT
AppCompatDelegate.MODE_NIGHT_YES -> VALUE_THEME_NAME_DARK
else -> VALUE_THEME_NAME_AUTO
})
return true
}
}
object themeBackgroundAlphaKey : KSimpleKey<Int>(KEY_THEME_BACKGROUND_ALPHA, 0xFF) {
override fun read(preferences: SharedPreferences): Int {
return preferences.getInt(KEY_THEME_BACKGROUND_ALPHA, DEFAULT_THEME_BACKGROUND_ALPHA)

View File

@ -0,0 +1,27 @@
package org.mariotaku.twidere.util.theme
import android.content.Context
import org.mariotaku.twidere.R
import org.mariotaku.twidere.constant.SharedPreferenceConstants.VALUE_THEME_NAME_AUTO
import org.mariotaku.twidere.constant.SharedPreferenceConstants.VALUE_THEME_NAME_DARK
import org.mariotaku.twidere.util.ThemeUtils
/**
* Created by mariotaku on 2017/1/7.
*/
fun getCurrentThemeResource(context: Context, theme: String): Int {
val a = context.obtainStyledAttributes(R.styleable.TwidereTheme)
try {
val lightTheme = a.getResourceId(R.styleable.TwidereTheme_lightThemeResource, 0)
val darkTheme = a.getResourceId(R.styleable.TwidereTheme_darkThemeResource, 0)
if (lightTheme == 0 || darkTheme == 0) return 0
return when (theme) {
VALUE_THEME_NAME_AUTO -> ThemeUtils.getCurrentTheme(context, lightTheme, darkTheme)
VALUE_THEME_NAME_DARK -> darkTheme
else -> lightTheme
}
} finally {
a.recycle()
}
}

View File

@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Twidere" parent="Theme.Twidere.Light"/>
<style name="Theme.Twidere.Dialog" parent="Theme.Twidere.Light.Dialog"/>
<style name="Theme.Twidere.DialogWhenLarge.NoActionBar" parent="Theme.Twidere.Light.DialogWhenLarge.NoActionBar"/>
</resources>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Twidere.DayNight" parent="Theme.Twidere.Light"/>
<style name="Theme.Twidere.Dialog.DayNight" parent="Theme.Twidere.Light.Dialog"/>
<style name="Theme.Twidere.DialogWhenLarge.NoActionBar.DayNight" parent="Theme.Twidere.Light.DialogWhenLarge.NoActionBar"/>
<style name="Theme.Twidere.NoActionBar.DayNight" parent="Theme.Twidere.Light.NoActionBar"/>
<style name="Theme.Twidere.Compose.DayNight" parent="Theme.Twidere.Light.Compose"/>
<style name="Theme.Twidere.QuickSearchBar.DayNight" parent="Theme.Twidere.Light.QuickSearchBar"/>
<style name="Theme.Twidere.NoDisplay.DayNight" parent="Theme.Twidere.Light.NoDisplay"/>
</resources>

View File

@ -13,6 +13,11 @@
<attr name="quoteIndicatorBackgroundColor" format="color"/>
<attr name="linePageIndicatorStyle" format="reference"/>
<attr name="mediaLabelBackground" format="color"/>
</declare-styleable>
<declare-styleable name="TwidereTheme">
<attr name="darkThemeResource" format="reference"/>
<attr name="lightThemeResource" format="reference"/>
</declare-styleable>
<declare-styleable name="ColorLabelView">

View File

@ -1,55 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="Theme.Twidere" parent="Theme.Twidere.Dark"/>
<style name="Theme.Twidere.Dialog" parent="Theme.Twidere.Dark.Dialog"/>
<style name="Theme.Twidere.DialogWhenLarge.NoActionBar" parent="Theme.Twidere.Dark.DialogWhenLarge.NoActionBar"/>
<style name="Theme.Twidere.NoActionBar" parent="Theme.Twidere">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<style name="Theme.Twidere" parent="Theme.Twidere.DayNight">
<item name="darkThemeResource">@style/Theme.Twidere.Dark</item>
<item name="lightThemeResource">@style/Theme.Twidere.Light</item>
</style>
<style name="Theme.Twidere.Compose" parent="Theme.Twidere.Dialog">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBarOverlay">false</item>
<item name="android:windowActionModeOverlay">false</item>
<style name="Theme.Twidere.Dialog" parent="Theme.Twidere.Dialog.DayNight">
<item name="darkThemeResource">@style/Theme.Twidere.Dark.Dialog</item>
<item name="lightThemeResource">@style/Theme.Twidere.Light.Dialog</item>
</style>
<style name="Theme.Twidere.QuickSearchBar" parent="Theme.Twidere.Dialog">
<item name="windowNoTitle">true</item>
<item name="windowActionModeOverlay">false</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">100%</item>
<item name="android:windowActionBarOverlay">false</item>
<item name="android:windowActionModeOverlay">false</item>
<style name="Theme.Twidere.DialogWhenLarge.NoActionBar" parent="Theme.Twidere.DialogWhenLarge.NoActionBar.DayNight">
<item name="darkThemeResource">@style/Theme.Twidere.Dark.DialogWhenLarge.NoActionBar</item>
<item name="lightThemeResource">@style/Theme.Twidere.Light.DialogWhenLarge.NoActionBar
</item>
</style>
<style name="Theme.Twidere.NoDisplay" parent="Theme.Twidere.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowTitleStyle">@style/Widget.TextView.WindowTitle.NoDisplay</item>
<style name="Theme.Twidere.NoActionBar" parent="Theme.Twidere.NoActionBar.DayNight">
<item name="darkThemeResource">@style/Theme.Twidere.Dark.NoActionBar</item>
<item name="lightThemeResource">@style/Theme.Twidere.Light.NoActionBar</item>
</style>
<style name="Theme.Twidere.Compose" parent="Theme.Twidere.Compose.DayNight">
<item name="darkThemeResource">@style/Theme.Twidere.Dark.Compose</item>
<item name="lightThemeResource">@style/Theme.Twidere.Light.Compose</item>
</style>
<style name="Theme.Twidere.QuickSearchBar" parent="Theme.Twidere.QuickSearchBar.DayNight">
<item name="darkThemeResource">@style/Theme.Twidere.Dark.QuickSearchBar</item>
<item name="lightThemeResource">@style/Theme.Twidere.Light.QuickSearchBar</item>
</style>
<style name="Theme.Twidere.NoDisplay" parent="Theme.Twidere.NoDisplay.DayNight">
<item name="darkThemeResource">@style/Theme.Twidere.Dark.NoDisplay</item>
<item name="lightThemeResource">@style/Theme.Twidere.Light.NoDisplay</item>
</style>
<style name="Theme.Twidere.Viewer" parent="Theme.Twidere.Dark">

View File

@ -21,200 +21,4 @@
<style name="Theme.AppCompat.TranslucentDecor"/>
<style name="Theme.Twidere.Dark" parent="Theme.AppCompat">
<!-- Widget styles -->
<item name="android:listSeparatorTextViewStyle">@style/Widget.Dark.TextView.ListSeparator
</item>
<!-- Card UI styles -->
<item name="cardActionButtonStyle">@style/Widget.CardActionButton</item>
<item name="profileImageStyle">@style/Widget.ProfileImage</item>
<item name="profileImageStyleLarge">@style/Widget.ProfileImage.Large</item>
<item name="cardItemBackgroundColor">@color/background_color_card_item_dark</item>
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_light</item>
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
<item name="mediaLabelBackground">#505050</item>
<item name="colorToolbar">@color/background_color_action_bar_dark</item>
<item name="isToolbarColored">false</item>
<item name="actionBarTheme">@style/Theme.Twidere.Dark.ActionBar</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
<style name="Theme.Twidere.Light" parent="Theme.AppCompat.Light">
<!-- Widget styles -->
<item name="android:listSeparatorTextViewStyle">@style/Widget.Light.TextView.ListSeparator
</item>
<!-- Card UI styles -->
<item name="cardActionButtonStyle">@style/Widget.Light.CardActionButton</item>
<item name="profileImageStyle">@style/Widget.Light.ProfileImage</item>
<item name="profileImageStyleLarge">@style/Widget.Light.ProfileImage.Large</item>
<item name="cardItemBackgroundColor">@color/background_color_card_item_light</item>
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_dark</item>
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
<item name="mediaLabelBackground">#dddddd</item>
<item name="colorToolbar">?colorPrimary</item>
<item name="isToolbarColored">true</item>
<item name="actionBarTheme">@style/Theme.Twidere.Light.ActionBar</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
<style name="Theme.Twidere.Light.DarkActionBar" parent="Theme.Twidere.Light">
<item name="actionBarTheme">@style/Theme.Twidere.Dark.ActionBar</item>
</style>
<style name="Theme.Twidere.Dark.DialogWhenLarge.NoActionBar" parent="Theme.AppCompat.DialogWhenLarge">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">false</item>
<!-- Widget styles -->
<item name="android:listSeparatorTextViewStyle">@style/Widget.Dark.TextView.ListSeparator
</item>
<!-- Card UI styles -->
<item name="cardActionButtonStyle">@style/Widget.CardActionButton</item>
<item name="profileImageStyle">@style/Widget.ProfileImage</item>
<item name="profileImageStyleLarge">@style/Widget.ProfileImage.Large</item>
<item name="cardItemBackgroundColor">@color/background_color_card_item_dark</item>
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_light</item>
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
<item name="colorToolbar">@color/background_color_action_bar_dark</item>
<item name="isToolbarColored">false</item>
<item name="actionBarTheme">@null</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
<style name="Theme.Twidere.Light.DialogWhenLarge.NoActionBar" parent="Theme.AppCompat.Light.DialogWhenLarge">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">false</item>
<!-- Widget styles -->
<item name="android:listSeparatorTextViewStyle">@style/Widget.Light.TextView.ListSeparator
</item>
<!-- Card UI styles -->
<item name="cardActionButtonStyle">@style/Widget.Light.CardActionButton</item>
<item name="profileImageStyle">@style/Widget.Light.ProfileImage</item>
<item name="profileImageStyleLarge">@style/Widget.Light.ProfileImage.Large</item>
<item name="cardItemBackgroundColor">@color/background_color_card_item_light</item>
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_dark</item>
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
<item name="colorToolbar">?colorPrimary</item>
<item name="isToolbarColored">true</item>
<item name="actionBarTheme">@null</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
<style name="Theme.Twidere.Dark.Dialog" parent="Theme.AppCompat.Dialog">
<!-- TODO this is a simple fix for https://github.com/TwidereProject/Twidere-Android/issues/579 -->
<item name="android:windowBackground">@drawable/abc_dialog_material_background_dark</item>
<!-- Widget styles -->
<item name="android:listSeparatorTextViewStyle">@style/Widget.Dark.TextView.ListSeparator
</item>
<item name="android:panelColorBackground">#3c3c3c</item>
<!-- Card UI styles -->
<item name="cardActionButtonStyle">@style/Widget.CardActionButton</item>
<item name="profileImageStyle">@style/Widget.ProfileImage</item>
<item name="profileImageStyleLarge">@style/Widget.ProfileImage.Large</item>
<item name="cardItemBackgroundColor">@color/background_color_card_item_dark</item>
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_light</item>
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
<item name="colorToolbar">@color/background_color_action_bar_dark</item>
<item name="isToolbarColored">false</item>
<item name="actionBarTheme">@null</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
<style name="Theme.Twidere.Light.Dialog" parent="Theme.AppCompat.Light.Dialog">
<!-- Widget styles -->
<item name="android:listSeparatorTextViewStyle">@style/Widget.Light.TextView.ListSeparator
</item>
<item name="android:panelColorBackground">#e5e5e5</item>
<!-- Card UI styles -->
<item name="cardActionButtonStyle">@style/Widget.Light.CardActionButton</item>
<item name="profileImageStyle">@style/Widget.Light.ProfileImage</item>
<item name="profileImageStyleLarge">@style/Widget.Light.ProfileImage.Large</item>
<item name="cardItemBackgroundColor">@color/background_color_card_item_light</item>
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_dark</item>
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
<item name="colorToolbar">?colorPrimary</item>
<item name="isToolbarColored">true</item>
<item name="actionBarTheme">@null</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
<style name="Theme.Twidere.Dark.NoActionBar" parent="Theme.Twidere.Dark">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="Theme.Twidere.Light.NoActionBar" parent="Theme.Twidere.Light">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="Theme.Twidere.Light.DarkActionBar.NoActionBar" parent="Theme.Twidere.Light.DarkActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="Theme.Twidere.Light.ActionBar" parent="Theme.Twidere.Light">
<item name="colorPrimary">?android:colorBackground</item>
<item name="colorAccent">?android:colorBackground</item>
</style>
<style name="Theme.Twidere.Dark.ActionBar" parent="Theme.Twidere.Dark">
<item name="colorPrimary">?android:colorForeground</item>
<item name="colorAccent">?android:colorForeground</item>
</style>
</resources>

View File

@ -0,0 +1,148 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Twidere - Twitter client for Android
~
~ Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<style name="Theme.Twidere.Dark" parent="Theme.AppCompat">
<!-- Widget styles -->
<item name="android:listSeparatorTextViewStyle">@style/Widget.Dark.TextView.ListSeparator
</item>
<!-- Card UI styles -->
<item name="cardActionButtonStyle">@style/Widget.CardActionButton</item>
<item name="profileImageStyle">@style/Widget.ProfileImage</item>
<item name="profileImageStyleLarge">@style/Widget.ProfileImage.Large</item>
<item name="cardItemBackgroundColor">@color/background_color_card_item_dark</item>
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_light</item>
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
<item name="mediaLabelBackground">#505050</item>
<item name="colorToolbar">@color/background_color_action_bar_dark</item>
<item name="isToolbarColored">false</item>
<item name="actionBarTheme">@style/Theme.Twidere.Dark.ActionBar</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
<style name="Theme.Twidere.Dark.DialogWhenLarge.NoActionBar" parent="Theme.AppCompat.DialogWhenLarge">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">false</item>
<!-- Widget styles -->
<item name="android:listSeparatorTextViewStyle">@style/Widget.Dark.TextView.ListSeparator
</item>
<!-- Card UI styles -->
<item name="cardActionButtonStyle">@style/Widget.CardActionButton</item>
<item name="profileImageStyle">@style/Widget.ProfileImage</item>
<item name="profileImageStyleLarge">@style/Widget.ProfileImage.Large</item>
<item name="cardItemBackgroundColor">@color/background_color_card_item_dark</item>
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_light</item>
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
<item name="colorToolbar">@color/background_color_action_bar_dark</item>
<item name="isToolbarColored">false</item>
<item name="actionBarTheme">@null</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
<style name="Theme.Twidere.Dark.Dialog" parent="Theme.AppCompat.Dialog">
<!-- TODO this is a simple fix for https://github.com/TwidereProject/Twidere-Android/issues/579 -->
<item name="android:windowBackground">@drawable/abc_dialog_material_background_dark</item>
<!-- Widget styles -->
<item name="android:listSeparatorTextViewStyle">@style/Widget.Dark.TextView.ListSeparator
</item>
<item name="android:panelColorBackground">#3c3c3c</item>
<!-- Card UI styles -->
<item name="cardActionButtonStyle">@style/Widget.CardActionButton</item>
<item name="profileImageStyle">@style/Widget.ProfileImage</item>
<item name="profileImageStyleLarge">@style/Widget.ProfileImage.Large</item>
<item name="cardItemBackgroundColor">@color/background_color_card_item_dark</item>
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_light</item>
<item name="messageBubbleColor">@color/message_bubble_color_dark</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_dark</item>
<item name="colorToolbar">@color/background_color_action_bar_dark</item>
<item name="isToolbarColored">false</item>
<item name="actionBarTheme">@null</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
<style name="Theme.Twidere.Dark.NoActionBar" parent="Theme.Twidere.Dark">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="Theme.Twidere.Dark.ActionBar" parent="Theme.Twidere.Dark">
<item name="colorPrimary">?android:colorForeground</item>
<item name="colorAccent">?android:colorForeground</item>
</style>
<style name="Theme.Twidere.Dark.NoDisplay" parent="Theme.Twidere.Dark.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowTitleStyle">@style/Widget.TextView.WindowTitle.NoDisplay</item>
</style>
<style name="Theme.Twidere.Dark.Compose" parent="Theme.Twidere.Dark.Dialog">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBarOverlay">false</item>
<item name="android:windowActionModeOverlay">false</item>
</style>
<style name="Theme.Twidere.Dark.QuickSearchBar" parent="Theme.Twidere.Dark.Dialog">
<item name="windowNoTitle">true</item>
<item name="windowActionModeOverlay">false</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">100%</item>
<item name="android:windowActionBarOverlay">false</item>
<item name="android:windowActionModeOverlay">false</item>
</style>
</resources>

View File

@ -0,0 +1,155 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Twidere - Twitter client for Android
~
~ Copyright (C) 2012-2014 Mariotaku Lee <mariotaku.lee@gmail.com>
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<resources>
<style name="Theme.Twidere.Light" parent="Theme.AppCompat.Light">
<!-- Widget styles -->
<item name="android:listSeparatorTextViewStyle">@style/Widget.Light.TextView.ListSeparator
</item>
<!-- Card UI styles -->
<item name="cardActionButtonStyle">@style/Widget.Light.CardActionButton</item>
<item name="profileImageStyle">@style/Widget.Light.ProfileImage</item>
<item name="profileImageStyleLarge">@style/Widget.Light.ProfileImage.Large</item>
<item name="cardItemBackgroundColor">@color/background_color_card_item_light</item>
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_dark</item>
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
<item name="mediaLabelBackground">#dddddd</item>
<item name="colorToolbar">?colorPrimary</item>
<item name="isToolbarColored">true</item>
<item name="actionBarTheme">@style/Theme.Twidere.Light.ActionBar</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
<style name="Theme.Twidere.Light.DarkActionBar" parent="Theme.Twidere.Light">
<item name="actionBarTheme">@style/Theme.Twidere.Dark.ActionBar</item>
</style>
<style name="Theme.Twidere.Light.DialogWhenLarge.NoActionBar" parent="Theme.AppCompat.Light.DialogWhenLarge">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">false</item>
<!-- Widget styles -->
<item name="android:listSeparatorTextViewStyle">@style/Widget.Light.TextView.ListSeparator
</item>
<!-- Card UI styles -->
<item name="cardActionButtonStyle">@style/Widget.Light.CardActionButton</item>
<item name="profileImageStyle">@style/Widget.Light.ProfileImage</item>
<item name="profileImageStyleLarge">@style/Widget.Light.ProfileImage.Large</item>
<item name="cardItemBackgroundColor">@color/background_color_card_item_light</item>
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_dark</item>
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
<item name="colorToolbar">?colorPrimary</item>
<item name="isToolbarColored">true</item>
<item name="actionBarTheme">@null</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
<style name="Theme.Twidere.Light.Dialog" parent="Theme.AppCompat.Light.Dialog">
<!-- Widget styles -->
<item name="android:listSeparatorTextViewStyle">@style/Widget.Light.TextView.ListSeparator
</item>
<item name="android:panelColorBackground">#e5e5e5</item>
<!-- Card UI styles -->
<item name="cardActionButtonStyle">@style/Widget.Light.CardActionButton</item>
<item name="profileImageStyle">@style/Widget.Light.ProfileImage</item>
<item name="profileImageStyleLarge">@style/Widget.Light.ProfileImage.Large</item>
<item name="cardItemBackgroundColor">@color/background_color_card_item_light</item>
<!-- Twidere specific styles -->
<item name="menuIconColor">@color/action_icon_dark</item>
<item name="messageBubbleColor">@color/message_bubble_color_light</item>
<item name="quoteIndicatorBackgroundColor">@color/quote_indicator_background_light</item>
<item name="colorToolbar">?colorPrimary</item>
<item name="isToolbarColored">true</item>
<item name="actionBarTheme">@null</item>
<item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Material</item>
</style>
<style name="Theme.Twidere.Light.NoActionBar" parent="Theme.Twidere.Light">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="Theme.Twidere.Light.DarkActionBar.NoActionBar" parent="Theme.Twidere.Light.DarkActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="Theme.Twidere.Light.ActionBar" parent="Theme.Twidere.Light">
<item name="colorPrimary">?android:colorBackground</item>
<item name="colorAccent">?android:colorBackground</item>
</style>
<style name="Theme.Twidere.Light.NoDisplay" parent="Theme.Twidere.Light.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowTitleStyle">@style/Widget.TextView.WindowTitle.NoDisplay</item>
</style>
<style name="Theme.Twidere.Light.Compose" parent="Theme.Twidere.Light.Dialog">
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">false</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBarOverlay">false</item>
<item name="android:windowActionModeOverlay">false</item>
</style>
<style name="Theme.Twidere.Light.QuickSearchBar" parent="Theme.Twidere.Light.Dialog">
<item name="windowNoTitle">true</item>
<item name="windowActionModeOverlay">false</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">100%</item>
<item name="android:windowActionBarOverlay">false</item>
<item name="android:windowActionModeOverlay">false</item>
</style>
</resources>

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Twidere.DayNight" parent="Theme.Twidere.Dark"/>
<style name="Theme.Twidere.Dialog.DayNight" parent="Theme.Twidere.Dark.Dialog"/>
<style name="Theme.Twidere.DialogWhenLarge.NoActionBar.DayNight" parent="Theme.Twidere.Dark.DialogWhenLarge.NoActionBar"/>
<style name="Theme.Twidere.NoActionBar.DayNight" parent="Theme.Twidere.Dark.NoActionBar"/>
<style name="Theme.Twidere.Compose.DayNight" parent="Theme.Twidere.Dark.Compose"/>
<style name="Theme.Twidere.QuickSearchBar.DayNight" parent="Theme.Twidere.Dark.QuickSearchBar"/>
<style name="Theme.Twidere.NoDisplay.DayNight" parent="Theme.Twidere.Dark.NoDisplay"/>
</resources>

View File

@ -12,6 +12,9 @@
android:key="theme"
android:order="21"
android:title="@string/theme">
<extra
android:name="should_recreate"
android:value="true"/>
<extra
android:name="recreate_activity"
android:value="true"/>