Add black theme (#726)

* Add black theme

On amoled screens a completely black theme helps save battery,
besides looking awesome!

* Fix first set of merge request issues except the dialog.

* Black theme inherits from dark and only the different values
  are declared
* Make nav bar translucent (for some reason content does not
  go behind it in main activity. Need to investigate)
* Remove nav bar line
* Fix toolbar color

* Fix dialog issue with black theme.

Revert translucent navigation.

* Translations updated, as well as possible from online sources.

* Make login screen respect black theme
This commit is contained in:
qwazix 2018-07-30 16:31:35 +03:00 committed by Konrad Pozniak
parent 6fcb3cb495
commit 562beacfc1
29 changed files with 94 additions and 10 deletions

View file

@ -93,31 +93,25 @@ dependencies {
// EmojiCompat
implementation "com.android.support:support-emoji:$supportLibraryVersion"
implementation "com.android.support:support-emoji-appcompat:$supportLibraryVersion"
implementation "de.c1710:filemojicompat:1.0.14"
implementation 'de.c1710:filemojicompat:1.0.14'
// architecture components
implementation 'android.arch.lifecycle:extensions:1.1.1'
//room
implementation 'android.arch.persistence.room:runtime:1.1.1'
kapt 'android.arch.persistence.room:compiler:1.1.1'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
testImplementation 'junit:junit:4.12'
implementation "com.google.dagger:dagger:$daggerVersion"
kapt "com.google.dagger:dagger-compiler:$daggerVersion"
implementation "com.google.dagger:dagger-android:$daggerVersion"
implementation "com.google.dagger:dagger-android-support:$daggerVersion"
kapt "com.google.dagger:dagger-android-processor:$daggerVersion"
testImplementation "org.robolectric:robolectric:3.8"
testImplementation "org.mockito:mockito-inline:2.19.1"
testImplementation 'org.robolectric:robolectric:3.8'
testImplementation 'org.mockito:mockito-inline:2.19.1'
androidTestImplementation('com.android.support.test.espresso:espresso-core:3.0.1', {
exclude group: 'com.android.support', module: 'support-annotations'
})
debugImplementation 'im.dino:dbinspector:3.4.1@aar'
implementation 'io.reactivex.rxjava2:rxjava:2.1.16'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'com.uber.autodispose:autodispose-android-archcomponents:0.8.0'

View file

@ -25,6 +25,7 @@ import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.TypedValue;
import android.view.Menu;
@ -59,6 +60,10 @@ public abstract class BaseActivity extends AppCompatActivity implements Injectab
* runtime, just individual activities. So, each activity has to set its theme before any
* views are created. */
String theme = preferences.getString("appTheme", ThemeUtils.APP_THEME_DEFAULT);
Log.d("activeTheme", theme);
if (theme.equals("black")) {
setTheme(R.style.TuskyBlackTheme);
}
ThemeUtils.setAppNightMode(theme, this);
long accountId = getIntent().getLongExtra("account", -1);

View file

@ -216,6 +216,11 @@ public final class ComposeActivity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String theme = preferences.getString("appTheme", ThemeUtils.APP_THEME_DEFAULT);
if (theme.equals("black")) {
setTheme(R.style.TuskyDialogActivityBlackTheme);
}
setContentView(R.layout.activity_compose);
replyTextView = findViewById(R.id.composeReplyView);
@ -381,7 +386,6 @@ public final class ComposeActivity
if (intent != null) {
if (startingVisibility == Status.Visibility.UNKNOWN) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
Status.Visibility preferredVisibility = Status.Visibility.byString(
preferences.getString("defaultPostPrivacy",
Status.Visibility.PUBLIC.serverString()));

View file

@ -70,6 +70,9 @@ class LoginActivity : AppCompatActivity(), Injectable {
preferences = PreferenceManager.getDefaultSharedPreferences(this)
val theme = preferences.getString("appTheme", ThemeUtils.APP_THEME_DEFAULT)
if (theme == "black") {
setTheme(R.style.TuskyBlackTheme)
}
ThemeUtils.setAppNightMode(theme, this)
setContentView(R.layout.activity_login)

View file

@ -24,6 +24,7 @@ import android.support.annotation.StringRes;
import android.support.annotation.XmlRes;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import com.keylesspalace.tusky.fragment.PreferencesFragment;
@ -105,6 +106,7 @@ public class PreferencesActivity extends BaseActivity
switch (key) {
case "appTheme": {
String theme = sharedPreferences.getString("appTheme", ThemeUtils.APP_THEME_DEFAULT);
Log.d("activeTheme", theme);
ThemeUtils.setAppNightMode(theme, this);
restartActivitiesOnExit = true;

View file

@ -39,6 +39,7 @@ public class ThemeUtils {
public static final String THEME_NIGHT = "night";
public static final String THEME_DAY = "day";
public static final String THEME_BLACK = "black";
public static final String THEME_AUTO = "auto";
public static Drawable getDrawable(Context context, @AttrRes int attribute,
@ -101,6 +102,9 @@ public class ThemeUtils {
case THEME_DAY:
mode = UiModeManager.MODE_NIGHT_NO;
break;
case THEME_BLACK:
mode = UiModeManager.MODE_NIGHT_YES;
break;
case THEME_AUTO:
mode = UiModeManager.MODE_NIGHT_AUTO;
break;

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="5dp" />
<solid android:color="@color/dialog_background_black" />
</shape>

View file

@ -163,6 +163,7 @@
<string-array name="app_theme_names">
<item>داكنة</item>
<item>فاتحة</item>
<item>أسود</item>
<item>تلقائي عند الغروب</item>
</string-array>

View file

@ -165,6 +165,7 @@
<string-array name="app_theme_names">
<item>Dunkel</item>
<item>Hell</item>
<item>Schwarz</item>
<item>Automatisch bei Sonnenuntergang</item>
</string-array>

View file

@ -164,6 +164,7 @@
<string-array name="app_theme_names">
<item>Oscuro</item>
<item>Claro</item>
<item>Negro</item>
<item>Automático</item>
</string-array>

View file

@ -182,6 +182,7 @@
<string-array name="app_theme_names">
<item>Sombre</item>
<item>Clair</item>
<item>Noir</item>
<item>Basé sur le coucher du soleil</item>
</string-array>

View file

@ -160,6 +160,7 @@
<string-array name="app_theme_names">
<item>Dark</item>
<item>Light</item>
<item>Black</item>
<item>日没による自動設定</item>
</string-array>

View file

@ -9,4 +9,14 @@
<item name="android:windowActionModeOverlay">true</item>
</style>
<style name="TuskyDialogActivityBlackTheme" parent="@style/TuskyBlackTheme">
<item name="android:windowFrame">@null</item>
<item name="android:windowBackground">@drawable/background_dialog_activity_black</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:windowCloseOnTouchOutside">false</item>
<item name="android:windowActionModeOverlay">true</item>
</style>
</resources>

View file

@ -7,4 +7,8 @@
<item name="android:navigationBarDividerColor">@color/status_divider_dark</item>
</style>
<style name="TuskyBlackTheme" parent="TuskyBlackThemeBase">
<item name="android:navigationBarColor">@color/window_background_black</item>
<item name="android:navigationBarDividerColor">@color/window_background_black</item>
</style>
</resources>

View file

@ -174,6 +174,7 @@
<string-array name="app_theme_names">
<item>Donker</item>
<item>Licht</item>
<item>Zwart</item>
<item>Automatisch tijdens zonsondergang</item>
</string-array>

View file

@ -168,6 +168,7 @@
<string-array name="app_theme_names">
<item>Escur</item>
<item>Luminós</item>
<item>Negre</item>
<item>Alba automatica</item>
</string-array>

View file

@ -176,6 +176,7 @@
<string-array name="app_theme_names">
<item>Ciemny</item>
<item>Jasny</item>
<item>Czarny</item>
<item>Zmieniaj automatycznie po zachodzie słońca</item>
</string-array>

View file

@ -174,6 +174,7 @@
<string-array name="app_theme_names">
<item>Noturno</item>
<item>Diurno</item>
<item>Negro</item>
<item>Automático</item>
</string-array>

View file

@ -172,6 +172,7 @@
<string-array name="app_theme_names">
<item>Тёмная</item>
<item>Светлая</item>
<item>Черный</item>
<item>Автоматическая (по времени)</item>
</string-array>

View file

@ -153,6 +153,7 @@
<string-array name="app_theme_names">
<item>கருமை</item>
<item>வெளிச்சம்</item>
<item>பிளாக்</item>
<item>தானியங்கி</item>
</string-array>

View file

@ -160,6 +160,7 @@
<string-array name="app_theme_names">
<item>黑夜</item>
<item>白天</item>
<item>黑色</item>
<item>自动切换</item>
</string-array>

View file

@ -160,6 +160,7 @@
<string-array name="app_theme_names">
<item>黑夜</item>
<item>白天</item>
<item>黑色</item>
<item>自動切換</item>
</string-array>

View file

@ -160,6 +160,7 @@
<string-array name="app_theme_names">
<item>黑夜</item>
<item>白天</item>
<item>黑色</item>
<item>自動切換</item>
</string-array>

View file

@ -160,6 +160,7 @@
<string-array name="app_theme_names">
<item>黑夜</item>
<item>白天</item>
<item>黑色</item>
<item>自动切换</item>
</string-array>

View file

@ -160,6 +160,7 @@
<string-array name="app_theme_names">
<item>黑夜</item>
<item>白天</item>
<item>黑色</item>
<item>自動切換</item>
</string-array>

View file

@ -40,6 +40,15 @@
<color name="report_status_divider_dark">#2F2F2F</color>
<color name="custom_tab_toolbar_dark">#313543</color>
<color name="compose_reply_content_background_dark">#373c4b</color>
<!--Black Theme Colors-->
<color name="color_primary_black">#000000</color>
<color name="color_primary_dark_black">#111111</color> <!--Dark Dark-->
<color name="color_background_black">#000000</color>
<color name="window_background_black">#000000</color>
<color name="edit_text_color_black">#FFFFFF</color>
<color name="text_color_primary_black">#FFFFFF</color>
<color name="toolbar_background_black">#111111</color>
<color name="dialog_background_black">#111111</color>
<!--Light Theme Colors-->
<color name="color_primary_light">#dfdfdf</color>
<color name="color_primary_dark_light">#8f8f8f</color>

View file

@ -35,6 +35,7 @@
<string-array name="app_theme_values">
<item>night</item>
<item>day</item>
<item>black</item>
<item>auto</item>
</string-array>

View file

@ -176,6 +176,7 @@
<string-array name="app_theme_names">
<item>Dark</item>
<item>Light</item>
<item>Black</item>
<item>Automatic at sunset</item>
</string-array>

View file

@ -148,4 +148,30 @@
<item name="android:textSize">?attr/status_text_medium</item>
</style>
<!--Black Application Theme Styles-->
<style name="TuskyBlackThemeBase" parent="TuskyBaseTheme">
<item name="colorPrimary">@color/color_primary_black</item>
<item name="colorPrimaryDark">@color/color_primary_dark_black</item>
<item name="android:colorBackground">@color/color_primary_dark_black</item>
<item name="android:windowBackground">@color/window_background_black</item>
<item name="android:editTextColor">@color/edit_text_color_black</item>
<item name="android:textColorPrimary">@color/text_color_primary_black</item>
<item name="android:actionMenuTextColor">@color/text_color_primary_black</item>
<item name="window_background">@color/window_background_black</item>
<item name="toolbar_background_color">@color/toolbar_background_black</item>
<item name="sensitive_media_warning_background_color">@color/color_background_black</item>
<item name="account_header_background_color">@color/color_background_black</item>
<item name="report_status_background_color">@color/color_background_black</item>
<item name="material_drawer_background">@color/window_background_black</item>
<item name="material_drawer_primary_text">@color/text_color_primary_black</item>
<item name="material_drawer_divider">@color/color_primary_dark_black</item>
<item name="material_drawer_selected">@color/color_primary_black</item>
<item name="material_drawer_selected_text">@color/text_color_primary_black</item>
<item name="material_drawer_header_selection_text">@color/text_color_primary_black</item>
</style>
<style name="TuskyBlackTheme" parent="TuskyBlackThemeBase"/>
</resources>