summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormert <mert.tumer@collabora.com>2020-05-06 15:15:32 +0300
committerMert Tumer <mert.tumer@collabora.com>2020-09-28 14:12:41 +0200
commit5c023938a366f44bbe922214fb8727146d18e127 (patch)
treed14ea8800470a66ab4e9d585cbcf50fda53ccc8e
parentf9ff9227b74cf8def1e76e5f0bb148e6ea280a5d (diff)
android: enable Dark Theme for Dark Mode changes
Change-Id: I631d31558ae9afac9585d12d66237bc04a761555 Reviewed-on: https://gerrit.libreoffice.org/c/online/+/93563 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com> Reviewed-by: Mert Tumer <mert.tumer@collabora.com>
-rw-r--r--android/app/build.gradle2
-rw-r--r--android/app/src/main/AndroidManifest.xml2
-rw-r--r--android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java70
-rw-r--r--android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java14
-rw-r--r--android/app/src/main/res/drawable/ic_folder_black_24dp.xml3
-rw-r--r--android/app/src/main/res/layout/activity_document_browser.xml21
-rw-r--r--android/app/src/main/res/layout/file_explorer_grid_item.xml3
-rw-r--r--android/app/src/main/res/layout/file_list_item.xml4
-rw-r--r--android/app/src/main/res/layout/theme_selection.xml44
-rw-r--r--android/app/src/main/res/values/strings.xml7
-rw-r--r--android/app/src/main/res/values/themes.xml7
-rw-r--r--android/app/src/main/res/xml/libreoffice_preferences.xml13
12 files changed, 167 insertions, 23 deletions
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 627ac6ca9..aa8f5ca16 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -67,7 +67,7 @@ android {
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'androidx.appcompat:appcompat:1.0.2'
+ implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 4e8723706..7777a3262 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -32,7 +32,7 @@
<!-- Document Browser Activity -->
<activity
android:name=".ui.LibreOfficeUIActivity"
- android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"
+ android:configChanges="orientation|screenSize|screenLayout|keyboardHidden|uiMode"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
diff --git a/android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java b/android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java
index c51d098af..701ae8350 100644
--- a/android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java
+++ b/android/app/src/main/java/org/libreoffice/androidapp/SettingsActivity.java
@@ -11,29 +11,97 @@ package org.libreoffice.androidapp;
import android.content.SharedPreferences;
import android.os.Bundle;
-
+import android.view.View;
+import android.widget.RadioGroup;
+import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatDelegate;
+import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
+import org.libreoffice.androidapp.ui.LibreOfficeUIActivity;
public class SettingsActivity extends AppCompatActivity {
+
+ private static SharedPreferences prefs;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
+ setTheme(R.style.LibreOfficeTheme_Base);
super.onCreate(savedInstanceState);
// Display the fragment as the main content.
getSupportFragmentManager().beginTransaction()
.replace(android.R.id.content, new SettingsFragment())
.commit();
+ prefs = getSharedPreferences(LibreOfficeUIActivity.EXPLORER_PREFS_KEY, MODE_PRIVATE);
}
public static class SettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener {
+ int dayNightMode;
+ int selectedThemeBtnId;
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.libreoffice_preferences);
if (!BuildConfig.DEBUG) {
findPreference("ENABLE_SHOW_DEBUG_INFO").setVisible(false);
}
+ Preference themePreference = findPreference("THEME_SELECTION");
+
+ dayNightMode = AppCompatDelegate.getDefaultNightMode();
+ selectedThemeBtnId = R.id.radioBtn_default;
+ switch (dayNightMode) {
+ case AppCompatDelegate.MODE_NIGHT_YES:
+ themePreference.setSummary(R.string.theme_dark);
+ selectedThemeBtnId = R.id.radioBtn_dark;
+ break;
+ case AppCompatDelegate.MODE_NIGHT_NO:
+ themePreference.setSummary(R.string.theme_light);
+ selectedThemeBtnId = R.id.radioBtn_light;
+ break;
+ case AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM:
+ themePreference.setSummary(R.string.theme_system_default);
+ selectedThemeBtnId = R.id.radioBtn_default;
+ break;
+ }
+
+ themePreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ View view = getLayoutInflater().inflate(R.layout.theme_selection, null);
+ RadioGroup group = (RadioGroup) view.findViewById(R.id.radioGrp_theme);
+ group.check(selectedThemeBtnId);
+
+ group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(RadioGroup radioGroup, int i) {
+ switch (i) {
+ case R.id.radioBtn_dark:
+ dayNightMode = AppCompatDelegate.MODE_NIGHT_YES;
+ break;
+ case R.id.radioBtn_light:
+ dayNightMode = AppCompatDelegate.MODE_NIGHT_NO;
+ break;
+ case R.id.radioBtn_default:
+ dayNightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;
+ break;
+ }
+ AppCompatDelegate.setDefaultNightMode(dayNightMode);
+ prefs.edit().putInt(LibreOfficeUIActivity.NIGHT_MODE_KEY, dayNightMode).commit();
+ getActivity().recreate();
+
+ }
+ });
+
+ AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());
+ dialog.setView(view);
+ dialog.setTitle(getString(R.string.choose_theme));
+ dialog.setCancelable(true);
+ dialog.setNegativeButton(getString(R.string.cancel_label), null);
+ dialog.show();
+ return false;
+ }
+ });
}
@Override
diff --git a/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java b/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java
index a36aaaa6c..c83fb3155 100644
--- a/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java
+++ b/android/app/src/main/java/org/libreoffice/androidapp/ui/LibreOfficeUIActivity.java
@@ -81,6 +81,7 @@ import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.app.AppCompatDelegate;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
@@ -99,7 +100,6 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
private int filterMode = FileUtilities.ALL;
private int sortMode;
private boolean showHiddenFiles;
-
// dynamic permissions IDs
private static final int PERMISSION_WRITE_EXTERNAL_STORAGE = 0;
@@ -121,6 +121,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
public static final String NEW_FILE_PATH_KEY = "NEW_FILE_PATH_KEY";
public static final String NEW_DOC_TYPE_KEY = "NEW_DOC_TYPE_KEY";
+ public static final String NIGHT_MODE_KEY = "NIGHT_MODE";
public static final String GRID_VIEW = "0";
public static final String LIST_VIEW = "1";
@@ -157,15 +158,16 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
@Override
public void onCreate(Bundle savedInstanceState) {
+ PreferenceManager.setDefaultValues(this, R.xml.documentprovider_preferences, false);
+ readPreferences();
+ int mode = prefs.getInt(NIGHT_MODE_KEY, AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
+ AppCompatDelegate.setDefaultNightMode(mode);
super.onCreate(savedInstanceState);
// initialize document provider factory
//DocumentProviderFactory.initialize(this);
//documentProviderFactory = DocumentProviderFactory.getInstance();
- PreferenceManager.setDefaultValues(this, R.xml.documentprovider_preferences, false);
- readPreferences();
-
SettingsListenerModel.getInstance().setListener(this);
// Register the LOActivity events broadcast receiver
@@ -174,6 +176,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
// init UI and populate with contents from the provider
createUI();
+
fabOpenAnimation = AnimationUtils.loadAnimation(this, R.anim.fab_open);
fabCloseAnimation = AnimationUtils.loadAnimation(this, R.anim.fab_close);
}
@@ -867,6 +870,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
/** Uploading back when we return from the LOActivity. */
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case LO_ACTIVITY_REQUEST_CODE: {
// TODO probably kill this, we don't need to do anything here any more
@@ -896,7 +900,7 @@ public class LibreOfficeUIActivity extends AppCompatActivity implements Settings
Uri uri = data.getData();
getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
- String extension = (requestCode == CREATE_DOCUMENT_REQUEST_CODE)? "odt": ((requestCode == CREATE_SPREADSHEET_REQUEST_CODE)? "ods": "odp");
+ String extension = (requestCode == CREATE_DOCUMENT_REQUEST_CODE) ? "odt" : ((requestCode == CREATE_SPREADSHEET_REQUEST_CODE) ? "ods" : "odp");
createNewFile(uri, extension);
open(uri);
diff --git a/android/app/src/main/res/drawable/ic_folder_black_24dp.xml b/android/app/src/main/res/drawable/ic_folder_black_24dp.xml
index 1a9a16fb1..3bd99ad87 100644
--- a/android/app/src/main/res/drawable/ic_folder_black_24dp.xml
+++ b/android/app/src/main/res/drawable/ic_folder_black_24dp.xml
@@ -1,5 +1,6 @@
<vector android:autoMirrored="true" android:height="24dp"
android:viewportHeight="24.0" android:viewportWidth="24.0"
- android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+ android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"
+ android:tint="?android:attr/colorControlNormal">
<path android:fillColor="#FF000000" android:pathData="M10,4H4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8c0,-1.1 -0.9,-2 -2,-2h-8l-2,-2z"/>
</vector>
diff --git a/android/app/src/main/res/layout/activity_document_browser.xml b/android/app/src/main/res/layout/activity_document_browser.xml
index 4ab69a188..90584e2e3 100644
--- a/android/app/src/main/res/layout/activity_document_browser.xml
+++ b/android/app/src/main/res/layout/activity_document_browser.xml
@@ -15,6 +15,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true"
+ android:theme="@style/LibreOfficeTheme.Base"
+ style="@style/LibreOfficeTheme.Base"
android:focusableInTouchMode="true"
android:focusable="true">
@@ -23,6 +25,7 @@
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/overview_coordinator_layout"
android:layout_width="match_parent"
+ android:background="?android:attr/colorBackground"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
@@ -33,10 +36,9 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@color/toolbar_background"
android:elevation="3dp"
- app:theme="@style/LibreOfficeTheme.Toolbar"
- app:popupTheme="@style/LibreOfficeTheme"
+ app:theme="@style/LibreOfficeTheme.Base"
+ app:popupTheme="@style/LibreOfficeTheme.Base"
app:layout_scrollFlags="enterAlways|scroll" />
</com.google.android.material.appbar.AppBarLayout>
@@ -72,6 +74,7 @@
android:layout_width="96dp"
android:layout_height="match_parent"
android:layout_weight="1"
+ android:tint="?android:attr/colorControlNormal"
android:scaleType="centerInside"
app:srcCompat="@drawable/ic_list_black_24dp" />
</LinearLayout>
@@ -167,7 +170,7 @@
android:layout_marginBottom="@dimen/new_doc_fab_tweak_bottom"
android:clickable="true"
android:focusable="true"
- app:backgroundTint="@color/background_normal"
+ app:backgroundTint="?android:attr/colorPrimary"
app:fabSize="mini"
app:srcCompat="@drawable/writer"
app:useCompatPadding="true" />
@@ -200,7 +203,7 @@
android:layout_marginBottom="@dimen/new_doc_fab_tweak_bottom"
android:clickable="true"
android:focusable="true"
- app:backgroundTint="@color/background_normal"
+ app:backgroundTint="?android:attr/colorPrimary"
app:fabSize="mini"
app:srcCompat="@drawable/impress"
app:useCompatPadding="true" />
@@ -233,7 +236,7 @@
android:layout_marginBottom="@dimen/new_doc_fab_tweak_bottom"
android:clickable="true"
android:focusable="true"
- app:backgroundTint="@color/background_normal"
+ app:backgroundTint="?android:attr/colorPrimary"
app:fabSize="mini"
app:srcCompat="@drawable/calc"
app:useCompatPadding="true" />
@@ -251,9 +254,9 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
- android:background="@color/background_normal"
- android:theme="@style/LibreOfficeTheme.NavigationView"
+ android:theme="@style/LibreOfficeTheme.Base"
app:headerLayout="@layout/navigation_header"
- app:menu="@menu/navigation_menu" />
+ app:menu="@menu/navigation_menu"/>
+
</androidx.drawerlayout.widget.DrawerLayout>
diff --git a/android/app/src/main/res/layout/file_explorer_grid_item.xml b/android/app/src/main/res/layout/file_explorer_grid_item.xml
index 631168050..d67676ab9 100644
--- a/android/app/src/main/res/layout/file_explorer_grid_item.xml
+++ b/android/app/src/main/res/layout/file_explorer_grid_item.xml
@@ -41,7 +41,7 @@
android:gravity="center_vertical"
android:maxLines="2"
android:textAlignment="center"
- android:textColor="@android:color/secondary_text_light"
+ android:textColor="?android:attr/textColorPrimary"
android:textSize="15sp"
android:textStyle="bold"
tools:text="file or dirname" />
@@ -53,6 +53,7 @@
android:layout_gravity="center"
android:contentDescription="@string/file_actions_icon_desc"
android:scaleType="fitStart"
+ android:tint="?android:attr/textColorPrimary"
app:srcCompat="@drawable/ic_more_vert_black_24dp" />
</LinearLayout>
diff --git a/android/app/src/main/res/layout/file_list_item.xml b/android/app/src/main/res/layout/file_list_item.xml
index d128d913c..28c2abe6f 100644
--- a/android/app/src/main/res/layout/file_list_item.xml
+++ b/android/app/src/main/res/layout/file_list_item.xml
@@ -33,6 +33,7 @@
android:id="@+id/file_item_name"
tools:text="file or dirname"
style="@style/ListItemText"
+ android:textColor="?android:attr/textColorPrimary"
android:layout_height="match_parent"
android:layout_width="0dp"
android:layout_weight="2"
@@ -46,6 +47,7 @@
android:layout_height="match_parent"
android:layout_marginEnd="4dp"
android:textAlignment="textEnd"
+ android:textColor="?android:attr/textColorPrimary"
tools:text="0" />
<TextView
@@ -53,6 +55,7 @@
style="@style/ListItemText"
android:layout_width="30dp"
android:layout_height="match_parent"
+ android:textColor="?android:attr/textColorPrimary"
tools:text="B" />
<ImageView
@@ -61,6 +64,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:contentDescription="@string/file_actions_icon_desc"
+ android:tint="?android:attr/textColorPrimary"
app:srcCompat="@drawable/ic_more_vert_black_24dp" />
<!--TextView
android:id="@+id/file_item_date"
diff --git a/android/app/src/main/res/layout/theme_selection.xml b/android/app/src/main/res/layout/theme_selection.xml
new file mode 100644
index 000000000..80ff1bd8f
--- /dev/null
+++ b/android/app/src/main/res/layout/theme_selection.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical" android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:theme="@style/LibreOfficeTheme.Base">
+
+ <RadioGroup
+ android:id="@+id/radioGrp_theme"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingLeft="26sp"
+ android:paddingTop="16sp">
+
+ <RadioButton
+ android:id="@+id/radioBtn_dark"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="15sp"
+ android:paddingLeft="15sp"
+ android:fontFamily="sans-serif"
+ android:text="@string/theme_dark"
+ android:textSize="18sp" />
+
+ <RadioButton
+ android:id="@+id/radioBtn_light"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="15sp"
+ android:paddingLeft="15sp"
+ android:fontFamily="sans-serif"
+ android:text="@string/theme_light"
+ android:textSize="18sp" />
+
+ <RadioButton
+ android:id="@+id/radioBtn_default"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+
+ android:paddingLeft="15sp"
+ android:fontFamily="sans-serif"
+ android:text="@string/theme_system_default"
+ android:textSize="18sp" />
+ </RadioGroup>
+</LinearLayout> \ No newline at end of file
diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml
index fa8c6f037..9cf1fcb5c 100644
--- a/android/app/src/main/res/values/strings.xml
+++ b/android/app/src/main/res/values/strings.xml
@@ -145,4 +145,11 @@
<string name="bmp_null">Bmp is null!</string>
<string name="directory_not_saved">Directory not saved.</string>
<string name="title_activity_show_html">About</string>
+
+ <!-- Theme settings -->
+ <string name="theme">Theme</string>
+ <string name="choose_theme">Choose theme</string>
+ <string name="theme_system_default">System default</string>
+ <string name="theme_dark">Dark</string>
+ <string name="theme_light">Light</string>
</resources>
diff --git a/android/app/src/main/res/values/themes.xml b/android/app/src/main/res/values/themes.xml
index 8576f9c22..9e922a820 100644
--- a/android/app/src/main/res/values/themes.xml
+++ b/android/app/src/main/res/values/themes.xml
@@ -2,8 +2,7 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="LibreOfficeTheme" parent="LibreOfficeTheme.Base"/>
- <style name="LibreOfficeTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
- </style>
+ <style name="LibreOfficeTheme.Base" parent="Theme.AppCompat.DayNight.NoActionBar"/>
<style name="ListItemText">
<item name="android:gravity">center_vertical</item>
@@ -11,7 +10,7 @@
<item name="android:textSize">14sp</item>
</style>
- <style name="LibreOfficeTheme.Toolbar" parent="Theme.AppCompat.Light.NoActionBar">
+ <style name="LibreOfficeTheme.Toolbar" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="colorPrimary">@color/toolbar_background</item>
</style>
@@ -27,6 +26,6 @@
<item name="android:textStyle">bold</item>
<item name="android:typeface">normal</item>
<item name="android:padding">5dp</item>
- <item name="android:background">@drawable/label_background</item>
+ <item name="android:background">?android:attr/colorPrimary</item>
</style>
</resources>
diff --git a/android/app/src/main/res/xml/libreoffice_preferences.xml b/android/app/src/main/res/xml/libreoffice_preferences.xml
index f8a3b14f5..dac169fb5 100644
--- a/android/app/src/main/res/xml/libreoffice_preferences.xml
+++ b/android/app/src/main/res/xml/libreoffice_preferences.xml
@@ -32,6 +32,19 @@
</PreferenceCategory-->
<PreferenceCategory
+ android:title="@string/theme"
+ android:key="PREF_CATEGORY_THEME"
+ app:iconSpaceReserved="false" >
+
+ <Preference
+ android:title="@string/choose_theme"
+ android:key="THEME_SELECTION"
+ android:summary="@string/theme_system_default"
+ app:iconSpaceReserved="false"/>
+
+ </PreferenceCategory>
+
+ <PreferenceCategory
android:title="@string/pref_category_editor"
android:key="PREF_CATEGORY_EDITOR"
app:iconSpaceReserved="false" >