From 61dd82dd9f22795a8391132d72918befa7b2acfb Mon Sep 17 00:00:00 2001 From: Nihar Thakkar Date: Tue, 21 Aug 2018 08:35:36 +0530 Subject: [PATCH 01/81] Create content provider for notes --- app/src/main/AndroidManifest.xml | 6 +++ .../notes/providers/AppContentProvider.java | 45 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 app/src/main/java/it/niedermann/owncloud/notes/providers/AppContentProvider.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5b23bd715..4c740367c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -173,5 +173,11 @@ + + diff --git a/app/src/main/java/it/niedermann/owncloud/notes/providers/AppContentProvider.java b/app/src/main/java/it/niedermann/owncloud/notes/providers/AppContentProvider.java new file mode 100644 index 000000000..347554b15 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/providers/AppContentProvider.java @@ -0,0 +1,45 @@ +package it.niedermann.owncloud.notes.providers; + +import android.content.ContentProvider; +import android.content.ContentValues; +import android.database.Cursor; +import android.net.Uri; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +public class AppContentProvider extends ContentProvider { + + @Override + public boolean onCreate() { + return false; + } + + @Nullable + @Override + public Cursor query(@NonNull Uri uri, @Nullable String[] strings, @Nullable String s, @Nullable String[] strings1, @Nullable String s1) { + return null; + } + + @Nullable + @Override + public String getType(@NonNull Uri uri) { + return null; + } + + @Nullable + @Override + public Uri insert(@NonNull Uri uri, @Nullable ContentValues contentValues) { + return null; + } + + @Override + public int delete(@NonNull Uri uri, @Nullable String s, @Nullable String[] strings) { + return 0; + } + + @Override + public int update(@NonNull Uri uri, @Nullable ContentValues contentValues, @Nullable String s, @Nullable String[] strings) { + return 0; + } +} -- GitLab From 1d68dc6595bc715c5d47ba7d5aa0d4f85c2b8bbd Mon Sep 17 00:00:00 2001 From: Nihar Thakkar Date: Wed, 22 Aug 2018 09:50:42 +0530 Subject: [PATCH 02/81] Check if sync is enabled/disabled and show a Snackbar --- app/src/main/AndroidManifest.xml | 4 +- .../notes/persistence/NotesRepository.java | 133 +++++++++--------- .../notes/shared/util/AccountSyncUtil.java | 62 ++++++++ 3 files changed, 133 insertions(+), 66 deletions(-) create mode 100644 app/src/main/java/it/niedermann/owncloud/notes/shared/util/AccountSyncUtil.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4c740367c..4a0a35950 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -4,6 +4,8 @@ + + @@ -175,7 +177,7 @@ diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java index 27865a3ba..6eff34f06 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java @@ -70,6 +70,7 @@ import it.niedermann.owncloud.notes.shared.model.ImportStatus; import it.niedermann.owncloud.notes.shared.model.NavigationCategory; import it.niedermann.owncloud.notes.shared.model.NotesSettings; import it.niedermann.owncloud.notes.shared.model.SyncResultStatus; +import it.niedermann.owncloud.notes.shared.util.AccountSyncUtil; import it.niedermann.owncloud.notes.shared.util.ApiVersionUtil; import it.niedermann.owncloud.notes.shared.util.NoteUtil; import it.niedermann.owncloud.notes.shared.util.SSOUtil; @@ -815,80 +816,82 @@ public class NotesRepository { syncActive.put(account.getId(), false); } Log.d(TAG, "Sync requested (" + (onlyLocalChanges ? "onlyLocalChanges" : "full") + "; " + (Boolean.TRUE.equals(syncActive.get(account.getId())) ? "sync active" : "sync NOT active") + ") ..."); - if (isSyncPossible() && (!Boolean.TRUE.equals(syncActive.get(account.getId())) || onlyLocalChanges)) { - syncActive.put(account.getId(), true); - try { - Log.d(TAG, "... starting now"); - final NotesServerSyncTask syncTask = new NotesServerSyncTask(context, this, account, onlyLocalChanges, apiProvider) { - @Override - void onPreExecute() { - syncStatus.postValue(true); - if (!syncScheduled.containsKey(localAccount.getId()) || syncScheduled.get(localAccount.getId()) == null) { - syncScheduled.put(localAccount.getId(), false); - } - if (!onlyLocalChanges && Boolean.TRUE.equals(syncScheduled.get(localAccount.getId()))) { - syncScheduled.put(localAccount.getId(), false); + if (AccountSyncUtil.isSyncEnable(context, account)) { + if (isSyncPossible() && (!Boolean.TRUE.equals(syncActive.get(account.getId())) || onlyLocalChanges)) { + syncActive.put(account.getId(), true); + try { + Log.d(TAG, "... starting now"); + final NotesServerSyncTask syncTask = new NotesServerSyncTask(context, this, account, onlyLocalChanges, apiProvider) { + @Override + void onPreExecute() { + syncStatus.postValue(true); + if (!syncScheduled.containsKey(localAccount.getId()) || syncScheduled.get(localAccount.getId()) == null) { + syncScheduled.put(localAccount.getId(), false); + } + if (!onlyLocalChanges && Boolean.TRUE.equals(syncScheduled.get(localAccount.getId()))) { + syncScheduled.put(localAccount.getId(), false); + } } - } - @Override - void onPostExecute(SyncResultStatus status) { - for (Throwable e : exceptions) { - Log.e(TAG, e.getMessage(), e); - } - if (!status.pullSuccessful || !status.pushSuccessful) { - syncErrors.postValue(exceptions); - } - syncActive.put(localAccount.getId(), false); - // notify callbacks - if (callbacks.containsKey(localAccount.getId()) && callbacks.get(localAccount.getId()) != null) { - for (ISyncCallback callback : Objects.requireNonNull(callbacks.get(localAccount.getId()))) { - callback.onFinish(); + @Override + void onPostExecute(SyncResultStatus status) { + for (Throwable e : exceptions) { + Log.e(TAG, e.getMessage(), e); } + if (!status.pullSuccessful || !status.pushSuccessful) { + syncErrors.postValue(exceptions); + } + syncActive.put(localAccount.getId(), false); + // notify callbacks + if (callbacks.containsKey(localAccount.getId()) && callbacks.get(localAccount.getId()) != null) { + for (ISyncCallback callback : Objects.requireNonNull(callbacks.get(localAccount.getId()))) { + callback.onFinish(); + } + } + notifyWidgets(); + updateDynamicShortcuts(localAccount.getId()); + // start next sync if scheduled meanwhile + if (syncScheduled.containsKey(localAccount.getId()) && syncScheduled.get(localAccount.getId()) != null && Boolean.TRUE.equals(syncScheduled.get(localAccount.getId()))) { + scheduleSync(localAccount, false); + } + syncStatus.postValue(false); } - notifyWidgets(); - updateDynamicShortcuts(localAccount.getId()); - // start next sync if scheduled meanwhile - if (syncScheduled.containsKey(localAccount.getId()) && syncScheduled.get(localAccount.getId()) != null && Boolean.TRUE.equals(syncScheduled.get(localAccount.getId()))) { - scheduleSync(localAccount, false); - } - syncStatus.postValue(false); + }; + syncTask.addCallbacks(account, callbacksPush.get(account.getId())); + callbacksPush.put(account.getId(), new ArrayList<>()); + if (!onlyLocalChanges) { + syncTask.addCallbacks(account, callbacksPull.get(account.getId())); + callbacksPull.put(account.getId(), new ArrayList<>()); } - }; - syncTask.addCallbacks(account, callbacksPush.get(account.getId())); - callbacksPush.put(account.getId(), new ArrayList<>()); - if (!onlyLocalChanges) { - syncTask.addCallbacks(account, callbacksPull.get(account.getId())); - callbacksPull.put(account.getId(), new ArrayList<>()); + syncExecutor.submit(syncTask); + } catch (NextcloudFilesAppAccountNotFoundException e) { + Log.e(TAG, "... Could not find " + SingleSignOnAccount.class.getSimpleName() + " for account name " + account.getAccountName()); + e.printStackTrace(); } - syncExecutor.submit(syncTask); - } catch (NextcloudFilesAppAccountNotFoundException e) { - Log.e(TAG, "... Could not find " + SingleSignOnAccount.class.getSimpleName() + " for account name " + account.getAccountName()); - e.printStackTrace(); - } - } else if (!onlyLocalChanges) { - Log.d(TAG, "... scheduled"); - syncScheduled.put(account.getId(), true); - if (callbacksPush.containsKey(account.getId()) && callbacksPush.get(account.getId()) != null) { - final var callbacks = callbacksPush.get(account.getId()); - if (callbacks != null) { - for (final var callback : callbacks) { - callback.onScheduled(); + } else if (!onlyLocalChanges) { + Log.d(TAG, "... scheduled"); + syncScheduled.put(account.getId(), true); + if (callbacksPush.containsKey(account.getId()) && callbacksPush.get(account.getId()) != null) { + final var callbacks = callbacksPush.get(account.getId()); + if (callbacks != null) { + for (final var callback : callbacks) { + callback.onScheduled(); + } + } else { + Log.w(TAG, "List of push-callbacks was set for account \"" + account.getAccountName() + "\" but it was null"); } - } else { - Log.w(TAG, "List of push-callbacks was set for account \"" + account.getAccountName() + "\" but it was null"); } - } - } else { - Log.d(TAG, "... do nothing"); - if (callbacksPush.containsKey(account.getId()) && callbacksPush.get(account.getId()) != null) { - final var callbacks = callbacksPush.get(account.getId()); - if (callbacks != null) { - for (final var callback : callbacks) { - callback.onScheduled(); + } else { + Log.d(TAG, "... do nothing"); + if (callbacksPush.containsKey(account.getId()) && callbacksPush.get(account.getId()) != null) { + final var callbacks = callbacksPush.get(account.getId()); + if (callbacks != null) { + for (final var callback : callbacks) { + callback.onScheduled(); + } + } else { + Log.w(TAG, "List of push-callbacks was set for account \"" + account.getAccountName() + "\" but it was null"); } - } else { - Log.w(TAG, "List of push-callbacks was set for account \"" + account.getAccountName() + "\" but it was null"); } } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/shared/util/AccountSyncUtil.java b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/AccountSyncUtil.java new file mode 100644 index 000000000..27c379e87 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/shared/util/AccountSyncUtil.java @@ -0,0 +1,62 @@ +/* + * Copyright MURENA SAS 2023 + * 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 . + */ + +package it.niedermann.owncloud.notes.shared.util; + +import android.accounts.AccountManager; +import android.content.ContentResolver; +import android.content.Context; +import android.util.Log; + +import it.niedermann.owncloud.notes.persistence.entity.Account; + +public class AccountSyncUtil { + + private static final String TAG = AccountSyncUtil.class.getSimpleName(); + private static final String murena_account_type = "e.foundation.webdav.eelo"; + private static final String notes_content_authority = "foundation.e.notes.android.providers.AppContentProvider"; + + private AccountSyncUtil() { + throw new UnsupportedOperationException("Do not instantiate this util class."); + } + + private static android.accounts.Account[] getMurenaAccountsOnDevice(AccountManager accountManager) { + return accountManager.getAccountsByType(murena_account_type); + } + + private static boolean isSyncEnable(android.accounts.Account account) { + return ContentResolver.getMasterSyncAutomatically() && ContentResolver.getSyncAutomatically(account, notes_content_authority); + } + + public static boolean isSyncEnable(Context context, Account account) { + AccountManager accountManager = AccountManager.get(context); + + try { + android.accounts.Account[] murenaAccounts = getMurenaAccountsOnDevice(accountManager); + + for (android.accounts.Account murenaAccount : murenaAccounts) { + if (account.getAccountName().equals(murenaAccount.name)) { + return isSyncEnable(murenaAccount); + } + } + } catch (SecurityException e) { + Log.e(TAG, "Failed to load murena accounts", e); + } + + return true; + } + +} -- GitLab From f0b4fd47a4c1764230d741d0e2016793ddf13480 Mon Sep 17 00:00:00 2001 From: Nihar Thakkar Date: Wed, 22 Aug 2018 09:51:50 +0530 Subject: [PATCH 03/81] Use a sharedUID --- app/src/main/AndroidManifest.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4a0a35950..2faf4f510 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,7 @@ + xmlns:tools="http://schemas.android.com/tools" + android:sharedUserId="android.uid.system"> -- GitLab From 266bdf23d19f37024f919d738182d19dd1d8886d Mon Sep 17 00:00:00 2001 From: Romain Hunault Date: Thu, 23 Aug 2018 10:28:06 +0200 Subject: [PATCH 04/81] Setup CI --- .gitlab-ci.yml | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 000000000..b044ddb95 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,30 @@ +image: "registry.gitlab.eelo.io:5000/eelo/docker-android-apps-cicd:latest" + +stages: +- build + +before_script: +- if [ -d "/srv/userscripts" ]; then cp -R userscripts/* /srv/userscripts ; fi +- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' +- eval $(ssh-agent -s) +- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null +- mkdir -p ~/.ssh +- chmod 700 ~/.ssh +- echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts +- chmod 644 ~/.ssh/known_hosts +- export GRADLE_USER_HOME=$(pwd)/.gradle +- chmod +x ./gradlew + +cache: + key: ${CI_PROJECT_ID} + paths: + - .gradle/ + +build: + stage: build + script: + - git submodule update --recursive --init + - ./gradlew build + artifacts: + paths: + - app/build/outputs/apk/ -- GitLab From 6f03414ed2442100135b35c79c54058ca7590545 Mon Sep 17 00:00:00 2001 From: Romain Hunault Date: Fri, 24 Aug 2018 16:56:31 +0200 Subject: [PATCH 05/81] Define submodule strategy as variable --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b044ddb95..264d0262b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -22,8 +22,9 @@ cache: build: stage: build + variables: + GIT_SUBMODULE_STRATEGY: recursive script: - - git submodule update --recursive --init - ./gradlew build artifacts: paths: -- GitLab From dcd251460d5c9cfe71ee40e92ec68fc9857207e2 Mon Sep 17 00:00:00 2001 From: Romain Hunault Date: Fri, 24 Aug 2018 16:59:33 +0200 Subject: [PATCH 06/81] Revert "Define submodule strategy as variable" This reverts commit f18460e6a28412df79b5a032562fdbe3657b7703. To apply if we use a docker image with SSH inside --- .gitlab-ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 264d0262b..b044ddb95 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -22,9 +22,8 @@ cache: build: stage: build - variables: - GIT_SUBMODULE_STRATEGY: recursive script: + - git submodule update --recursive --init - ./gradlew build artifacts: paths: -- GitLab From 08552f7f8c764097ae530877d8e2107b9e32e27c Mon Sep 17 00:00:00 2001 From: Romain Hunault Date: Fri, 24 Aug 2018 17:04:11 +0200 Subject: [PATCH 07/81] Revert "Use a sharedUID" This reverts commit 13277541e90bedf58fd74975f1c13de7945d83c6. --- app/src/main/AndroidManifest.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2faf4f510..4a0a35950 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,7 +1,6 @@ + xmlns:tools="http://schemas.android.com/tools"> -- GitLab From 62e91b88895be5cd8336fe049d95ec9a8eeab550 Mon Sep 17 00:00:00 2001 From: Fahim Salam Chowdhury Date: Wed, 18 Jan 2023 21:24:21 +0600 Subject: [PATCH 08/81] Update docker image url --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b044ddb95..6e46d7c11 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: "registry.gitlab.eelo.io:5000/eelo/docker-android-apps-cicd:latest" +image: "registry.gitlab.eelo.io:5000/e/apps/docker-android-apps-cicd:latest" stages: - build -- GitLab From 5eebb7065a131854eb9d78b3c6633390acec8b64 Mon Sep 17 00:00:00 2001 From: Romain Hunault Date: Thu, 30 Aug 2018 11:59:16 +0200 Subject: [PATCH 09/81] Change GitLab registry url --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6e46d7c11..1372a4755 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -image: "registry.gitlab.eelo.io:5000/e/apps/docker-android-apps-cicd:latest" +image: "registry.gitlab.e.foundation:5000/e/apps/docker-android-apps-cicd:latest" stages: - build -- GitLab From 5985aadf3e22d7c8ccd0a4d4c9a89083fd0c24e9 Mon Sep 17 00:00:00 2001 From: Fahim Salam Chowdhury Date: Wed, 18 Jan 2023 21:34:55 +0600 Subject: [PATCH 10/81] Update minimum SDK version --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 27ceced8b..87a2cc865 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,7 +12,7 @@ android { defaultConfig { applicationId "it.niedermann.owncloud.notes" - minSdkVersion 23 + minSdkVersion 24 targetSdkVersion 33 versionCode 3007001 versionName "3.7.1" -- GitLab From e7ceca5755cd96276a57360be01d598dd2d76014 Mon Sep 17 00:00:00 2001 From: Fahim Salam Chowdhury Date: Wed, 18 Jan 2023 21:55:19 +0600 Subject: [PATCH 11/81] Change applicationId --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 87a2cc865..1b8912fdf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -11,7 +11,7 @@ android { } defaultConfig { - applicationId "it.niedermann.owncloud.notes" + applicationId "foundation.e.notes" minSdkVersion 24 targetSdkVersion 33 versionCode 3007001 -- GitLab From f9a9ba79a2cb9ddc1792574b9b8ada3f2fee7787 Mon Sep 17 00:00:00 2001 From: Romain Hunault Date: Sat, 16 Mar 2019 19:58:19 +0000 Subject: [PATCH 12/81] Add /e/ licence --- AUTHORS | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 AUTHORS diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 000000000..bcbdbb13f --- /dev/null +++ b/AUTHORS @@ -0,0 +1,2 @@ +© e Foundation 2018-2019 - Author: Nihar Thakkar +© ECORP SAS 2018-2019 - Author: Romain Hunault \ No newline at end of file -- GitLab From f0e7d4f7973c2b0cf5f9ae7159da15a60edc0da5 Mon Sep 17 00:00:00 2001 From: Fahim Salam Chowdhury Date: Wed, 18 Jan 2023 22:19:21 +0600 Subject: [PATCH 13/81] Remove flaovors --- app/build.gradle | 24 --------------- .../res/drawable/ic_launcher_foreground.xml | 29 ------------------- app/src/dev/res/xml/shortcuts.xml | 17 ----------- .../notes/exception/ExceptionActivity.java | 2 +- .../exception/ExceptionDialogFragment.java | 2 +- 5 files changed, 2 insertions(+), 72 deletions(-) delete mode 100644 app/src/dev/res/drawable/ic_launcher_foreground.xml delete mode 100644 app/src/dev/res/xml/shortcuts.xml diff --git a/app/build.gradle b/app/build.gradle index 1b8912fdf..e38c969ca 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -39,30 +39,6 @@ android { } } - - flavorDimensions "version" - - productFlavors { - fdroid { - dimension "version" - } - dev { - dimension "version" - applicationIdSuffix ".dev" - } - play { - dimension "version" - } - pfungstadt { - dimension "version" - applicationIdSuffix ".pfungstadt" - } - mdm { - dimension "version" - applicationIdSuffix ".mdm" - } - } - testOptions { unitTests { includeAndroidResources true diff --git a/app/src/dev/res/drawable/ic_launcher_foreground.xml b/app/src/dev/res/drawable/ic_launcher_foreground.xml deleted file mode 100644 index 9cb8dccf2..000000000 --- a/app/src/dev/res/drawable/ic_launcher_foreground.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/dev/res/xml/shortcuts.xml b/app/src/dev/res/xml/shortcuts.xml deleted file mode 100644 index 086d61f8c..000000000 --- a/app/src/dev/res/xml/shortcuts.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionActivity.java index 0761b6036..cb51d736b 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionActivity.java @@ -38,7 +38,7 @@ public class ExceptionActivity extends AppCompatActivity { } final var adapter = new TipsAdapter(this::startActivity); - final String debugInfos = ExceptionUtil.INSTANCE.getDebugInfos(this, throwable, BuildConfig.FLAVOR); + final String debugInfos = ExceptionUtil.INSTANCE.getDebugInfos(this, throwable, "PROD"); binding.tips.setAdapter(adapter); binding.tips.setNestedScrollingEnabled(false); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionDialogFragment.java b/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionDialogFragment.java index ca242a7fd..33a65173b 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionDialogFragment.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/exception/ExceptionDialogFragment.java @@ -57,7 +57,7 @@ public class ExceptionDialogFragment extends AppCompatDialogFragment { final var adapter = new TipsAdapter((actionIntent) -> requireActivity().startActivity(actionIntent)); - final String debugInfos = ExceptionUtil.INSTANCE.getDebugInfos(requireContext(), throwables, BuildConfig.FLAVOR); + final String debugInfos = ExceptionUtil.INSTANCE.getDebugInfos(requireContext(), throwables, "PROD"); binding.tips.setAdapter(adapter); binding.stacktrace.setText(debugInfos); -- GitLab From 153bc20e458e77c38b4276cbf79bd3ad1dcd6cf8 Mon Sep 17 00:00:00 2001 From: Fahim Salam Chowdhury Date: Wed, 18 Jan 2023 22:22:56 +0600 Subject: [PATCH 14/81] Change app icon to adaptive icon --- .../res/drawable/ic_launcher_background.xml | 58 ++++++++++++------- .../res/drawable/ic_launcher_foreground.xml | 29 ++++++---- 2 files changed, 55 insertions(+), 32 deletions(-) diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml index 9127e535a..788ff6a73 100644 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -2,26 +2,40 @@ xmlns:aapt="http://schemas.android.com/aapt" android:width="108dp" android:height="108dp" - android:viewportWidth="1344" - android:viewportHeight="1344"> - - - - - - - - + android:viewportWidth="108" + android:viewportHeight="108"> + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index b3eb55f92..96540cd3c 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -2,13 +2,22 @@ - - - - \ No newline at end of file + android:viewportWidth="108" + android:viewportHeight="108"> + + + + + -- GitLab From 3bd73ad100506ff3c06253cc48d0e6a69b42fc6d Mon Sep 17 00:00:00 2001 From: Fahim Salam Chowdhury Date: Wed, 18 Jan 2023 22:32:08 +0600 Subject: [PATCH 15/81] Updated app icon --- app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 4323 -> 1328 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2716 -> 610 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 6070 -> 1700 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 9147 -> 3061 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 13007 -> 3942 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index ba3e251024ad47984447acd1830e1c6828431dc7..61a0df490637b3a55e8c4264c017f898d1aa6ce4 100644 GIT binary patch delta 1310 zcmaE?xPfbeay`p;PZ!6KinzCPqBCSdC64cZf99Rp^ml5d$&(|tT;l$C>CxJK5*H&( zIJRwFaE-lnA4ij2XuuSwO`O-FT3O^pSmL>UCAdoEvi9B(+F<9oRprL9J1h3iSbH;V z@|(2u^z?J;#BR~BO~+lA*C#ignfZQJ^TJ(k zlMF9%t|*}`Q^DQ z{T~Y6$^9ns?)?hJYi*?*YiBZ?mTLL1%h7f%zx#I^q2tGsmT@(no+ZuGdz9tM|B~rG zN9VIEe-@c}t!zUP4YwKms<-DnQJEH4!z{rua{+6+qR20{MHkOsKh(TGQAce$ z^HwE=#~#P)bSsy37yWXZu!K?PZv#KW%~z+n#dSHZ#vOU_>)wfn`ThU29j@HJsKNVK z;BV>6sf$8nj{Xn`I5;=3A>;0ci??R&YL<}p*yT7?^F*Vu`EB->H^n_p1#Db=pYi6$ zdY;zChsVwz^7UQ6Q*kQeraqf5if3Z#IG6BDJ$g@zVT!+KhQsMLf2n)YHCLxfF`VE# z@o=H|(=R^)CsdkT*dx&FY394+tdN3T5j zERn+gHmORCVc{*$wLh;dKm1-s-f{Q2iO$D&E7tzityj1tF=1{`OY6k8!xPix-#c1e zs_UNPKc^+T*qD`+<9`6Rut1l@?odwEpYeWCywTGP>E5M3*!i zX|NGZ+0-;8dYu|`P!@;egj>fYCWP~x+St7^R%iNSg|$4F*qDQ~I~XfjGL_8_PTjI< z(mdaJ=?+>B;p^rlJ7_sXHplwRJX*rGSrz>-|5~5YiCgD5tk=gT*nf zAk7ZOjZIpSU5w{8cdrcp%yZ)KQHcrR3s2}RE8A$vwuEhpPqFNhm^Esb_lPAsh=w>> zoaPETzF?(yx-ZiOt%f(Z7jh)jKfIc)T+igxoxgU?5rd{opCxYf0u9#MGmo!NR=uF< zqto+^zKC2VMttTmZZG-<=@kRNw`pF7CpS(~%jB(tHz>woOmiS;{I zo3aYJyD)q=yOuMzfI(33oKD|6F(Gy@b@8=jQTM;7Yi8sJ$KK|2DUtok!qB<%VxCil zFr!!fr?0(t@3jdu^s&5mlfG5OwfD4Ny{F1CC6NtPj2}~fzhQi@S$ox)eNq3#E4vn5 zT>JSn(%a$9KmNaAiconer8IB4NEG?XT+R-E99I hvs~+sxbVgMGDUxPFIA~3Wnf@n@O1TaS?83{1OOWcYtjG! literal 4323 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 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index 5e6dd7a850d3ccf7d4f4ada78b11a8cb4b10f0ce..94001fef9f43acd12b78a07de914afec7f632f8b 100644 GIT binary patch delta 586 zcmbOu`iNzMay^r#r;B4qhV$E5*51sH0>{g*3A285oN^;WQLCxnuer5p!QN>}svW)k z=lT`Qrge#lDY0z4;wEsZvsdYuy367uao6Oen&)}$dEfOcFN#D}m?v;VZnB;^_x`_h zHTLoYMSCuJAGZCYwWq1`b&<>I6Hmydlrz0~^M z>OGgUX8+=Lf98C@H7hcGdO_iavld*rs}pu4C%ZS)b1dLvd$NGlirIBBx3%8{e}<%8 z*`Y@k?frJLiuV9Z$UQn7?w$;9!zH7;VbR_(6*`|iGfx2u5E(PwtJgg*3402 z`0=NFf~R~F*9=x)c?XH%YQLE z-?IC{zk_1A4cp5faqXGJUZK410C#1>b&a=5b<6lZxX3+dt>Ci#$GoG;^sGYt*BZCo z+!NU=7OZ2aY)~m>J;AIp&o8rF@e{-D>e*XFchsxQbNU$agn=RI&R&Hdci(kXaD2St zX`FoP;ro~!f3^3z-h0x$TuJ5if$%#FLJ!m`W2PV9YP|jYXZ7FGPV2un@XE*c3o;Ke0{PzN5cH%2_EO~7A+2DueUe-XG&Nu%$~n&vcps}OZjgF xdNb~Nn*Z2zTlZSd)Tnt9A4JXNYNv0KpY+B)MwLHz9|HpegQu&X%Q~loCIJ014D$d0 delta 2709 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 BiH-mO diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index b464fdc0e1bcff3d30ca6ee7f612ca17835724b9..0c3b63db803c44a22b77e8af6e02fa214cbe0df2 100644 GIT binary patch delta 3056 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 literal 9147 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 HB{Ts5^+A1I diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index dc1e28661f890b14aef61088acf003e4727192f8..8f6fb6e48c688249d1753f2071a2d4b2398b6dae 100644 GIT binary patch literal 3942 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE69Bd2>3_*8t*cll3bv<1iLn`9l&aEy8`6_z+ z{La}eHf7B%D@0tnX0->cSjMODW5GYg(1ouwx^io8XI`DwryDk>Z%0yT$(FLL)ms;b z$-Z5&LUv+%zTibM8I~3%#Xv?$$wmpMO^Oqq+>3vHZ^OyFP5si}RNg4w|HFE7_w#wb zE%%@QYx_>wr~Tt`9iHh{WtX4cxnpzm&FyL~1d-TTV*OK1D zc4l6}c311FYL1C~*M9s@-;>W!y6mrU+HI5Hz5gx#e%}*P^F(OrMM?Xs-}&<97?qhU znCcuOP_#nh#<7D3eZw~VkmhSM3pDuQm>u}<&!d+QcYQhfYPN387NMQ8vkPu)TKz5F z|Eu--XS;Hj&&=P(a&qJDvILENf~vPoSvnLKJ1}h8b4X1`nq9*nDWqk8@gFHUqc1c6 zoUJ@xU@_;(8TIR8izohaZP>GnXJ#r{V0o#kA%v+!F55l$ ziQ>|-2S-j_4Ley_{JCDJE_mO`iZsPB+2 zZ0K^0Q?!~%J;Y|xf7ge5_PrAQ<-+j$>is*}cJZ~^Z*K)%C^c(l*m(4<;k`cD#rzNC z6s84=G@I6>c>6tFS+BR_*+Kgy*6rWE6$dijivRsL_0Q8;>SwOc?t2xP!@w zd4UU4$)7&W4|hMYtuA_Vo_qbD$J%>yU!2?~E_gtPS3WiW?g-Q43J(5e%x|q6^urp1cpLYePiptE ztej%}^G^R1j81wJu;otqjM1Qx7kvG6b}xYfezs_Yi} z@##a6^hZa!zC=*k@Ndle?Cme|I(X zX&h(5y{Zoq>6fjqK3V&^{I5epUntidu8BDclOA~$=!Z2{@ig+iJI9^K!|E3PX5q=n z+RnlGx1W}KJc(v_f9C(u<6F1brga*dHKtU%@HfaUkgsA0XUJdqrKO9l_}3Go{kDzz zjCTz8Z_d72cI%Sq8%O>Ndt(=~d(>TfJ6}$r>TvvmnltMXj?S1^_l#v9OToNdMSE{< z`BQ!JUEo0h4(A0|ocsQX9yqJI{8i6?*8JM6oLvh8q8RrqJ?9^{->mMBsJs}HLqm@6 zfw#Ox%YA%zyUYq=*qm{W=lSBFpEY-#o4;hKGXuwjUZwy)xu?E!>nc}ur+Ts$LLOLefj_;)a}=%q34QUfi-aQJL??WHnytNl&(QE@84bANM(a^S`~Fh3u@1 z3J%-D-o5VJP#44c%Ikf?WiywZkIzR1n!NsKEW|l0fZ_A6Io@;o<0@2t_U6uD{t_eL zz(1kawjo^o^rAi7`n%VB=-M6kc4ygih3wz@!QU@@J;=bLHzd_C+k^jLm8HB->Eo*YB}BdkLOyTd z`EUie+4+)n)_Fp2Y^uL{ZT|Q7qkzJ* zg^NSdzW?B1N_lIP;gghiv*`HzpPmKR?A1!R9{AQVb4O>sKlem`ZPE5)0vyf?Pn{Ls zZ#pnx@!LlWgFoFlxxt*>p!@xfbCJL9*ay%1tLR`O_k}@@pEtZInOj^p`rj7s_4+d` z-)H(WJpY+JedgBp^LQDpI7+tV@-$A`AM!mR`J$G?yCcPRJpW#8EVf~M(|$g8iL9w2 z2Lof(JcgkAhU-Hc4y>3wtLuGiz?o-vf45n^w+VDFi@x=(-_l|G%@7$wpQf!oO?z$D zGO+5+i#(O~@$LSCY5!h-{IXVl@&gOE8O$r@G4D|SyyxZgf0N#d=T}V()7`_wq!RJq zpv;4gxy(D5p3JlTs#-Sh-_7*2!|ab07+5-lI^tO@jGi;hV_5DVb^P1?Wp5X)&F*hw z5J*_SIU(4t%=|Y0oU2Z|w?A=a;4rwrvZ1a2*7>rEIldFCx_DWJX^tCtZtY#TLQG+O!;N{hF{fr*2G9SxE7rnmiC|psj0an0 zChTanpD1#Ea~N0z+`AfPaX2veUUgdch()2nB8cUR3jmAWbzorn!WhzW#knCm+K}Z^uwIImZv(#rL*}xM zMAxtUM*uz_7_i&{vX?r*VoX&r1X!=027QPdhVCaX2ufvO4eD#8P3u zj`@U;t4Sz}Lc^*e#mG!10f$){k5(!j_|5+yP9ap(dD9{mg$4~jmdkDoOc|>sK8dO_ zFuD{f%`juS(`4DOZI)uZBa?uGfSS`wWd_DCS9v74g&G)|3Jp1WgGu0#U{?mF6KFG3F{>oITYH28cl=_2zVr4ov<0sZ(xvG-8SbaN5PV%Vv`dL=Ws0P zWiWr+%y6r#t>!6*1B2zXjwKTqSOOwUmgu-MFrC=wqSDHu&~RvxVyY#RfJ2|ElBNm+ zqlg%<=4rtPZaU4UF1n~7l9GVKB(#Vr(RnfWtKPMViVCjCkX{z}fg7*TOYv z9^n%h%uTL8*z3^bAm}B|$gyB`+=(z;;l;r8VwLzNL`vPmetN+!t+pIQ4y)glw$s;V z+O{JT^*K^}4oo<_I;{T2nKP}D?9L1V0d5B*Huryb$ubkTsClZ$eV2lQV}i1|OV)G= zqvzf(&O8DaTpBv>7rbYyy&_S(dD)SP+8iDN3D1u2*q8bF?3q6+TpW%tF#59e7;Z19 zef-S$=A);xgxuFDC^#Olc&2kNu}nnF#QmF4V4q9C5e7z8mRr$XP0crbx7h`4Zt7Ii z@RZ4HayZ7qbMe%qgr6?{4f(U}=BIBgPCphX$iOm1prEJp{Dlji#kP#EzFqaHU*x^v0>bk7_j7- zquQ*wPj@QY3Y?hHpjefWvEh%IdBAdp-O{VInQ}tYWn>v06i##AIJVMe*N&p%ISlXW zU(L?CuWn?2=F^{vavUiR4b!K!oI2Ob_Tmkr4db_KF&@(*r#P0>h_Y;&-EjD_7u$4w zKaB=!$#wl#)}$>8-uzo*f-J|Ec@2tD(Ly@wi`4gXvKG`wUXQ4qc=S)y`@@f=6(-ze zkxACm(_I%MFgx{*fW|M!*x3|(CLD=3F1)KHjjJX*rjd*gAaSzHb(G-{FjZlNrYf<%Bc6&fVJcy{48&G4A|Rh4r)^dvU86h4^6p`*z;_5X~S zZ%aIX3mxFylze>Ep*;y1g2E5u7M6s3{F$hn&@pYB+pJ~0@^!!L>^*;o9pK$oU0&M3 z_L0fs0lV(Dm-$S2kNLMej|mDYTJ*bT_xky9oC0q-i<%csmprT(->@<8zkq>@_bnw~ z<3IC$E{^;f#qhoR-JAvMHhx<_L*l!C;l}A#SoUz{7v5a|x98_>cPkafMUG{rVfPaz zeh<=(QFqX`m0{ttNXfHQI~$a~>WGoh0p2%pI-6yx7{hz`-T$(`v%9Okr_VKf*{%~$ z+x?C)?XWJ)pRJLV#T}h;C%vnXd9M7Y8_xnbZ}5F|KD+Qv!KT~NRl*T24KMi0-Buls z?EA{`IPBHED-5@PsU&nvx147D`UXpR=`Ws($;N?A=CMO6#)M>^-pIr>u00&18*h4&8|}rfqs?KUHkHZf9*z;3Vhy zoC33#{5~aGv_`t~tZ2*he9vp|J$kmz<=O8t?Q_bPtE#n?6aFeWd||lL{;u5YT3`Ai zZe642f*1KeguU9Qv%c%bTbC~@o&Ri8jH<~gys2JWy3OBZaXjmbc@5R|fqn)dsXV>O ziws>%W_7v=25JgUb>I`_z2QG8PkDWLzK)s8?LDo|i+Im$S!a7`%dYL=`G4PBcyIQf ZU0=;0+P6OMIRgU&gQu&X%Q~loCIF}v+Fk$v literal 13007 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 )mqtoImy- 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 -- GitLab From a3945fd26edd57b7d2bc6fb6af3936f8ce040b95 Mon Sep 17 00:00:00 2001 From: Mohit Mali Date: Mon, 23 Mar 2020 14:28:45 +0000 Subject: [PATCH 16/81] Updated about content --- README.md | 72 +++------------ .../owncloud/notes/about/AboutActivity.java | 87 +----------------- .../owncloud/notes/about/AboutFragment.java | 24 +++++ .../about/AboutFragmentContributingTab.java | 28 ------ .../notes/about/AboutFragmentCreditsTab.java | 31 ------- .../notes/about/AboutFragmentLicenseTab.java | 42 --------- app/src/main/res/layout/activity_about.xml | 40 +------- .../fragment_about_contribution_tab.xml | 54 ----------- .../res/layout/fragment_about_credits_tab.xml | 92 ------------------- .../res/layout/fragment_about_license_tab.xml | 55 ----------- app/src/main/res/values/strings.xml | 12 +++ app/src/main/res/xml/about_preferences.xml | 55 +++++++++++ 12 files changed, 111 insertions(+), 481 deletions(-) create mode 100644 app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragment.java delete mode 100644 app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentContributingTab.java delete mode 100644 app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentCreditsTab.java delete mode 100644 app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentLicenseTab.java delete mode 100644 app/src/main/res/layout/fragment_about_contribution_tab.xml delete mode 100644 app/src/main/res/layout/fragment_about_credits_tab.xml delete mode 100644 app/src/main/res/layout/fragment_about_license_tab.xml create mode 100644 app/src/main/res/xml/about_preferences.xml diff --git a/README.md b/README.md index c9bcdbd2b..db30ed489 100644 --- a/README.md +++ b/README.md @@ -1,67 +1,21 @@ -# Nextcloud Notes for Android -An android client for [Nextcloud Notes App](https://github.com/nextcloud/notes/). +# Notes +An android client for [Nextcloud Notes App](https://github.com/nextcloud/notes/) +Notes is forked from [Nextcloud Notes](https://github.com/stefan-niedermann/nextcloud-notes) -[![Android CI](https://github.com/stefan-niedermann/nextcloud-notes/workflows/Android%20CI/badge.svg)](https://github.com/stefan-niedermann/nextcloud-notes/actions) -[![Codacy Badge](https://api.codacy.com/project/badge/Grade/9f784826834042e8b512d531cab84711)](https://www.codacy.com/manual/info_147/nextcloud-notes?utm_source=github.com&utm_medium=referral&utm_content=stefan-niedermann/nextcloud-notes&utm_campaign=Badge_Grade) -[![GitHub issues](https://img.shields.io/github/issues/stefan-niedermann/nextcloud-notes.svg)](https://github.com/stefan-niedermann/nextcloud-notes/issues) -[![GitHub stars](https://img.shields.io/github/stars/stefan-niedermann/nextcloud-notes.svg)](https://github.com/stefan-niedermann/nextcloud-notes/stargazers) -[![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) +## Authors -## :arrow_forward: Access +[Authors](https://gitlab.e.foundation/e/apps/Notes/-/blob/master/AUTHORS) -[![Latest Release](https://img.shields.io/github/v/tag/stefan-niedermann/nextcloud-notes?label=latest+release&sort=semver)](https://github.com/stefan-niedermann/nextcloud-notes/tags) -[![F-Droid Release](https://img.shields.io/f-droid/v/it.niedermann.owncloud.notes)](https://f-droid.org/de/packages/it.niedermann.owncloud.notes/) +## Release Notes -[Get it on Play Store](https://play.google.com/store/apps/details?id=it.niedermann.owncloud.notes) -[Get it on F-Droid](https://f-droid.org/repository/browse/?fdid=it.niedermann.owncloud.notes) -[Donate with PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=K7HVLE6J7SXXA) -[Donate using Liberapay](https://liberapay.com/stefan-niedermann/donate) +Check out the [Release Notes](https://gitlab.e.foundation/e/apps/Notes/-/releases) to find out what changed +in each version of Notes. -## :eyes: Screenshots +## Privacy Policy -| _ | _ | _ | -| :--: | :--: | :--: | -| ![Screenshot of list view](/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png) | ![Screenshot of edit mode](/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png) | ![Screenshot of preview](/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png) | +[Privacy Policy](https://e.foundation/legal-notice-privacy) +[Terms of service](https://e.foundation/legal-notice-privacy) -## :rocket: Features - * Multiple accounts - * List, create, edit, share, search and delete notes - * Share text and links as new note into the app - * Toggling checkboxes in view mode - * Mark notes as favorite - * Bulk delete - * In-note search - * Single note widget and note list widget - * Render Markdown (using [Markwon](https://noties.io/Markwon)) - * Translated in many languages on [Transifex](https://www.transifex.com/nextcloud/nextcloud/android-notes/) - * Context based formatting ([#363](https://github.com/stefan-niedermann/nextcloud-notes/issues/363)) - * Password protection ([#354](https://github.com/stefan-niedermann/nextcloud-notes/issues/354)) +## License -## :checkered_flag: Roadmap - * We usually focus on [pinned issues](https://github.com/stefan-niedermann/nextcloud-notes/issues) in our issue tracker - * Since this is an Open Source freetime project, there is no guarantee when and if and how we implement new features - -## :family: Join the team - * Test the app with different devices - * Report issues in the [issue tracker](https://github.com/stefan-niedermann/nextcloud-notes/issues) - * [Pick a good first issue](https://github.com/stefan-niedermann/nextcloud-notes/labels/Good%20first%20issue) :notebook: - * Create a [Pull Request](https://opensource.guide/how-to-contribute/#opening-a-pull-request) - * Help translating this app on [Transifex](https://www.transifex.com/nextcloud/nextcloud/android-notes/) 🌎 - * Buy this app on [Google Play Store](https://play.google.com/store/apps/details?id=it.niedermann.owncloud.notes) - * Send me a bottle of your favorite beer :beers: :wink: - -## :link: Requirements - * [Nextcloud](https://nextcloud.com/) instance running - * [Nextcloud Android](https://github.com/nextcloud/android) app installed (≥ 3.9.0) - * [Nextcloud Notes](https://github.com/nextcloud/notes) app enabled - -## :notebook: License -This project is licensed under the [GNU GENERAL PUBLIC LICENSE](/LICENSE). +Notes is licensed under the [GNU General Public License v3.0](https://gitlab.e.foundation/e/apps/Notes/-/blob/master/LICENSE) \ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java index 5c5bf519f..f321d4aa6 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java @@ -2,94 +2,15 @@ package it.niedermann.owncloud.notes.about; import android.os.Bundle; -import androidx.annotation.ColorInt; -import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentActivity; -import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.appcompat.app.AppCompatActivity; -import com.google.android.material.tabs.TabLayoutMediator; - -import it.niedermann.owncloud.notes.LockedActivity; import it.niedermann.owncloud.notes.R; -import it.niedermann.owncloud.notes.branding.BrandingUtil; -import it.niedermann.owncloud.notes.databinding.ActivityAboutBinding; - -public class AboutActivity extends LockedActivity { - - private ActivityAboutBinding binding; - private final static int POS_CREDITS = 0; - private final static int POS_CONTRIB = 1; - private final static int POS_LICENSE = 2; - private final static int TOTAL_COUNT = 3; +public class AboutActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - - binding = ActivityAboutBinding.inflate(getLayoutInflater()); - setContentView(binding.getRoot()); - - setSupportActionBar(binding.toolbar); - binding.pager.setAdapter(new TabsStateAdapter(this)); - // generate title based on given position - new TabLayoutMediator(binding.tabs, binding.pager, (tab, position) -> { - switch (position) { - default: // Fall-through to credits tab - case POS_CREDITS: - tab.setText(R.string.about_credits_tab_title); - break; - case POS_CONTRIB: - tab.setText(R.string.about_contribution_tab_title); - break; - case POS_LICENSE: - tab.setText(R.string.about_license_tab_title); - break; - } - }).attach(); - } - - @Override - public void applyBrand(int mainColor, int textColor) { - applyBrandToPrimaryToolbar(binding.appBar, binding.toolbar); - @ColorInt int finalMainColor = BrandingUtil.getSecondaryForegroundColorDependingOnTheme(this, mainColor); - binding.tabs.setSelectedTabIndicatorColor(finalMainColor); - } - - private static class TabsStateAdapter extends FragmentStateAdapter { - - TabsStateAdapter(FragmentActivity fa) { - super(fa); - } - - @Override - public int getItemCount() { - return TOTAL_COUNT; - } - - /** - * return the right fragment for the given position - */ - @NonNull - @Override - public Fragment createFragment(int position) { - switch (position) { - default: // Fall-through to credits tab - case POS_CREDITS: - return new AboutFragmentCreditsTab(); - - case POS_CONTRIB: - return new AboutFragmentContributingTab(); - - case POS_LICENSE: - return new AboutFragmentLicenseTab(); - } - } - } - - @Override - public boolean onSupportNavigateUp() { - finish(); // close this activity as oppose to navigating up - return true; + setContentView(R.layout.activity_about); + getFragmentManager().beginTransaction().replace(R.id.container, new AboutFragment()).commit(); } } \ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragment.java b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragment.java new file mode 100644 index 000000000..14ddf19c3 --- /dev/null +++ b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragment.java @@ -0,0 +1,24 @@ +package it.niedermann.owncloud.notes.about; + +import android.os.Bundle; +import android.preference.PreferenceFragment; + +import androidx.annotation.Nullable; + +import it.niedermann.owncloud.notes.BuildConfig; +import it.niedermann.owncloud.notes.R; + +public class AboutFragment extends PreferenceFragment { + + private static final String BUILD_VERSION = "build_version"; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + addPreferencesFromResource(R.xml.about_preferences); + + findPreference(BUILD_VERSION).setSummary(BuildConfig.VERSION_NAME); + + } +} diff --git a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentContributingTab.java b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentContributingTab.java deleted file mode 100644 index 90a9a3bce..000000000 --- a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentContributingTab.java +++ /dev/null @@ -1,28 +0,0 @@ -package it.niedermann.owncloud.notes.about; - -import static it.niedermann.owncloud.notes.shared.util.SupportUtil.setTextWithURL; - -import android.os.Bundle; -import android.text.method.LinkMovementMethod; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; - -import it.niedermann.owncloud.notes.R; -import it.niedermann.owncloud.notes.databinding.FragmentAboutContributionTabBinding; -import it.niedermann.owncloud.notes.shared.util.SupportUtil; - -public class AboutFragmentContributingTab extends Fragment { - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - final var binding = FragmentAboutContributionTabBinding.inflate(inflater, container, false); - setTextWithURL(binding.aboutSource, getResources(), R.string.about_source, R.string.url_source, R.string.url_source); - setTextWithURL(binding.aboutIssues, getResources(), R.string.about_issues, R.string.url_issues, R.string.url_issues); - setTextWithURL(binding.aboutTranslate, getResources(), R.string.about_translate, R.string.url_translations, R.string.url_translations); - return binding.getRoot(); - } -} \ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentCreditsTab.java b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentCreditsTab.java deleted file mode 100644 index 028bfa4e0..000000000 --- a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentCreditsTab.java +++ /dev/null @@ -1,31 +0,0 @@ -package it.niedermann.owncloud.notes.about; - -import static it.niedermann.owncloud.notes.shared.util.SupportUtil.setTextWithURL; -import static it.niedermann.owncloud.notes.shared.util.SupportUtil.strong; -import static it.niedermann.owncloud.notes.shared.util.SupportUtil.url; - -import android.os.Bundle; -import android.text.method.LinkMovementMethod; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; - -import it.niedermann.owncloud.notes.BuildConfig; -import it.niedermann.owncloud.notes.R; -import it.niedermann.owncloud.notes.databinding.FragmentAboutCreditsTabBinding; - -public class AboutFragmentCreditsTab extends Fragment { - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - final var binding = FragmentAboutCreditsTabBinding.inflate(inflater, container, false); - binding.aboutVersion.setText(getString(R.string.about_version, strong(BuildConfig.VERSION_NAME))); - binding.aboutMaintainer.setText(url(getString(R.string.about_maintainer), getString(R.string.url_maintainer))); - binding.aboutMaintainer.setMovementMethod(new LinkMovementMethod()); - setTextWithURL(binding.aboutTranslators, getResources(), R.string.about_translators_transifex, R.string.about_translators_transifex_label, R.string.url_translations); - return binding.getRoot(); - } -} \ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentLicenseTab.java b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentLicenseTab.java deleted file mode 100644 index 10cc02c74..000000000 --- a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutFragmentLicenseTab.java +++ /dev/null @@ -1,42 +0,0 @@ -package it.niedermann.owncloud.notes.about; - -import static it.niedermann.owncloud.notes.shared.util.SupportUtil.setTextWithURL; - -import android.content.Intent; -import android.content.res.ColorStateList; -import android.net.Uri; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.ColorInt; -import androidx.annotation.NonNull; -import androidx.core.graphics.drawable.DrawableCompat; - -import it.niedermann.android.util.ColorUtil; -import it.niedermann.owncloud.notes.R; -import it.niedermann.owncloud.notes.branding.BrandedFragment; -import it.niedermann.owncloud.notes.branding.BrandingUtil; -import it.niedermann.owncloud.notes.databinding.FragmentAboutLicenseTabBinding; - -public class AboutFragmentLicenseTab extends BrandedFragment { - - private FragmentAboutLicenseTabBinding binding; - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - binding = FragmentAboutLicenseTabBinding.inflate(inflater, container, false); - setTextWithURL(binding.aboutIconsDisclaimerAppIcon, getResources(), R.string.about_icons_disclaimer_app_icon, R.string.about_app_icon_author_link_label, R.string.url_about_icon_author); - setTextWithURL(binding.aboutIconsDisclaimerMdiIcons, getResources(), R.string.about_icons_disclaimer_mdi_icons, R.string.about_icons_disclaimer_mdi, R.string.url_about_icons_disclaimer_mdi); - binding.aboutAppLicenseButton.setOnClickListener((v) -> startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.url_license))))); - return binding.getRoot(); - } - - @Override - public void applyBrand(int mainColor, int textColor) { - @ColorInt final int finalMainColor = BrandingUtil.getSecondaryForegroundColorDependingOnTheme(requireContext(), mainColor); - DrawableCompat.setTintList(binding.aboutAppLicenseButton.getBackground(), ColorStateList.valueOf(finalMainColor)); - binding.aboutAppLicenseButton.setTextColor(ColorUtil.INSTANCE.getForegroundColorForBackgroundColor(finalMainColor)); - } -} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml index 89c2aaa66..bdd332131 100644 --- a/app/src/main/res/layout/activity_about.xml +++ b/app/src/main/res/layout/activity_about.xml @@ -1,40 +1,6 @@ - - - - - - - - - - - - \ No newline at end of file + android:orientation="vertical" /> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_about_contribution_tab.xml b/app/src/main/res/layout/fragment_about_contribution_tab.xml deleted file mode 100644 index 8ae857f6d..000000000 --- a/app/src/main/res/layout/fragment_about_contribution_tab.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_about_credits_tab.xml b/app/src/main/res/layout/fragment_about_credits_tab.xml deleted file mode 100644 index fad03f626..000000000 --- a/app/src/main/res/layout/fragment_about_credits_tab.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_about_license_tab.xml b/app/src/main/res/layout/fragment_about_license_tab.xml deleted file mode 100644 index 9e425d4e8..000000000 --- a/app/src/main/res/layout/fragment_about_license_tab.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 961c42f30..0ae7db841 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -355,4 +355,16 @@ Importing notes… Importing note %1$d of %2$d… Account imported. + Notes information + + -List, create, edit, share, search and delete notes\n + -Share text and links as new note into the app\n + -Mark notes as favorite\n + -Bulk delete\n + -Render MarkDown\n + -Translated in many languages + Notes is forked from Nextcloud Notes + Privacy policy + Terms of service + Authors diff --git a/app/src/main/res/xml/about_preferences.xml b/app/src/main/res/xml/about_preferences.xml new file mode 100644 index 000000000..3911a35de --- /dev/null +++ b/app/src/main/res/xml/about_preferences.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- GitLab From b1d9da781b0acaf559860490a3104942f100826c Mon Sep 17 00:00:00 2001 From: Narinder Rana Date: Fri, 4 Sep 2020 15:08:06 +0530 Subject: [PATCH 17/81] get Accent color from OS, set on toolbar and StatusBar --- .../owncloud/notes/main/MainActivity.java | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java index 046f0e7d5..0225bf111 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java @@ -17,19 +17,27 @@ import static it.niedermann.owncloud.notes.shared.util.SSOUtil.askForNewAccount; import android.accounts.NetworkErrorException; import android.animation.AnimatorInflater; import android.app.SearchManager; +import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.graphics.PorterDuff; +import android.graphics.drawable.ColorDrawable; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; +import android.util.TypedValue; import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.view.ActionMode; +import androidx.appcompat.view.ContextThemeWrapper; import androidx.appcompat.widget.SearchView; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.app.ActivityCompat; @@ -136,6 +144,8 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A boolean canMoveNoteToAnotherAccounts = false; + public static int ACCENT_COLOR; + @Override protected void onCreate(Bundle savedInstanceState) { SplashScreen.installSplashScreen(this); @@ -357,6 +367,8 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A menuAdapter.updateAccount(this, nextAccount); } }); + + ACCENT_COLOR= fetchAccentColor(this); } @Override @@ -820,4 +832,40 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A categoryLiveData.observe(this, (next) -> categoryLiveData.removeObservers(this)); tracker.clearSelection(); } + + /* + * get Accent color from OS + * */ + private int fetchAccentColor(Context context) { + + TypedValue typedValue = new TypedValue(); + ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(this, + android.R.style.Theme_DeviceDefault); + contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, + typedValue, true); + int color_accent = typedValue.data; + Log.e("TAG", "accent Colour #"+Integer.toHexString(color_accent)); + + //change toolbar color + getSupportActionBar().setBackgroundDrawable( + new ColorDrawable(color_accent)); + + //change status bar color + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(darkenColor(color_accent)); + } + + return color_accent; + } + + + @ColorInt + int darkenColor(@ColorInt int color) { + float[] hsv = new float[3]; + android.graphics.Color.colorToHSV(color, hsv); + hsv[2] *= 0.8f; + return android.graphics.Color.HSVToColor(hsv); + } } -- GitLab From 8449cfdd4bff05fed766619957001b4c86b5322f Mon Sep 17 00:00:00 2001 From: Narinder Rana Date: Fri, 4 Sep 2020 15:52:02 +0530 Subject: [PATCH 18/81] Manage Accent color all Activity, Feb button, navigation drawer, some Button --- .../owncloud/notes/about/AboutActivity.java | 28 ++++++++++++++++++ .../owncloud/notes/edit/EditNoteActivity.java | 27 +++++++++++++++++ .../owncloud/notes/main/MainActivity.java | 9 ++++++ .../preferences/PreferencesActivity.java | 29 +++++++++++++++++++ .../NoteListWidgetConfigurationActivity.java | 29 +++++++++++++++++++ 5 files changed, 122 insertions(+) diff --git a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java index f321d4aa6..ae42339d5 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java @@ -1,10 +1,16 @@ package it.niedermann.owncloud.notes.about; +import android.graphics.drawable.ColorDrawable; +import android.os.Build; import android.os.Bundle; +import android.view.Window; +import android.view.WindowManager; +import androidx.annotation.ColorInt; import androidx.appcompat.app.AppCompatActivity; import it.niedermann.owncloud.notes.R; +import it.niedermann.owncloud.notes.main.MainActivity; public class AboutActivity extends AppCompatActivity { @Override @@ -12,5 +18,27 @@ public class AboutActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); getFragmentManager().beginTransaction().replace(R.id.container, new AboutFragment()).commit(); + updateAccentColor(); + } + + private void updateAccentColor() { + //change toolbar color + getSupportActionBar().setBackgroundDrawable( + new ColorDrawable(MainActivity.ACCENT_COLOR)); + + //change status bar color + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(darkenColor(MainActivity.ACCENT_COLOR)); + } + } + + @ColorInt + int darkenColor(@ColorInt int color) { + float[] hsv = new float[3]; + android.graphics.Color.colorToHSV(color, hsv); + hsv[2] *= 0.8f; + return android.graphics.Color.HSVToColor(hsv); } } \ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java index 8cb12bad1..c2624ddca 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java @@ -3,14 +3,18 @@ package it.niedermann.owncloud.notes.edit; import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.FAVORITES; import android.content.Intent; +import android.graphics.drawable.ColorDrawable; +import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.Menu; import android.view.MenuItem; +import android.view.Window; import android.view.WindowManager; import android.widget.Toast; +import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; @@ -92,6 +96,8 @@ public class EditNoteActivity extends LockedActivity implements BaseNoteFragment setSupportActionBar(binding.toolbar); binding.toolbar.setOnClickListener((v) -> fragment.showEditTitleDialog()); + + updateAccentColor(); } @Override @@ -316,4 +322,25 @@ public class EditNoteActivity extends LockedActivity implements BaseNoteFragment public void applyBrand(int mainColor, int textColor) { applyBrandToPrimaryToolbar(binding.appBar, binding.toolbar); } + + private void updateAccentColor(){ + //change toolbar color + getSupportActionBar().setBackgroundDrawable( + new ColorDrawable(MainActivity.ACCENT_COLOR)); + + //change status bar color + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(darkenColor(MainActivity.ACCENT_COLOR)); + } + } + + @ColorInt + int darkenColor(@ColorInt int color) { + float[] hsv = new float[3]; + android.graphics.Color.colorToHSV(color, hsv); + hsv[2] *= 0.8f; + return android.graphics.Color.HSVToColor(hsv); + } } \ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java index 0225bf111..8564dd270 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java @@ -19,6 +19,7 @@ import android.animation.AnimatorInflater; import android.app.SearchManager; import android.content.Context; import android.content.Intent; +import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.drawable.ColorDrawable; @@ -369,6 +370,7 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A }); ACCENT_COLOR= fetchAccentColor(this); + fabCreate.setBackgroundTintList(ColorStateList.valueOf(darkenColor20(ACCENT_COLOR))); } @Override @@ -868,4 +870,11 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A hsv[2] *= 0.8f; return android.graphics.Color.HSVToColor(hsv); } + + @ColorInt int darkenColor20(@ColorInt int color) { + float[] hsv = new float[3]; + android.graphics.Color.colorToHSV(color, hsv); + hsv[2] *= 0.6f; + return android.graphics.Color.HSVToColor(hsv); + } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesActivity.java index 2dcd99ec1..a05447ded 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesActivity.java @@ -1,13 +1,19 @@ package it.niedermann.owncloud.notes.preferences; +import android.graphics.drawable.ColorDrawable; +import android.os.Build; import android.os.Bundle; +import android.view.Window; +import android.view.WindowManager; +import androidx.annotation.ColorInt; import androidx.annotation.Nullable; import androidx.lifecycle.ViewModelProvider; import it.niedermann.owncloud.notes.LockedActivity; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.databinding.ActivityPreferencesBinding; +import it.niedermann.owncloud.notes.main.MainActivity; public class PreferencesActivity extends LockedActivity { @@ -28,6 +34,29 @@ public class PreferencesActivity extends LockedActivity { getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_container_view, new PreferencesFragment()) .commit(); + + updateAccentColor(); + } + + private void updateAccentColor(){ + //change toolbar color + getSupportActionBar().setBackgroundDrawable( + new ColorDrawable(MainActivity.ACCENT_COLOR)); + + //change status bar color + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(darkenColor(MainActivity.ACCENT_COLOR)); + } + } + + @ColorInt + int darkenColor(@ColorInt int color) { + float[] hsv = new float[3]; + android.graphics.Color.colorToHSV(color, hsv); + hsv[2] *= 0.8f; + return android.graphics.Color.HSVToColor(hsv); } @Override diff --git a/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetConfigurationActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetConfigurationActivity.java index fb94f7d86..6a97d37ca 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetConfigurationActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetConfigurationActivity.java @@ -3,10 +3,15 @@ package it.niedermann.owncloud.notes.widget.notelist; import android.app.Activity; import android.appwidget.AppWidgetManager; import android.content.Intent; +import android.graphics.drawable.ColorDrawable; +import android.os.Build; import android.os.Bundle; import android.util.Log; +import android.view.Window; +import android.view.WindowManager; import android.widget.Toast; +import androidx.annotation.ColorInt; import androidx.annotation.Nullable; import androidx.lifecycle.ViewModelProvider; @@ -21,6 +26,7 @@ import it.niedermann.owncloud.notes.LockedActivity; import it.niedermann.owncloud.notes.NotesApplication; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.databinding.ActivityNoteListConfigurationBinding; +import it.niedermann.owncloud.notes.main.MainActivity; import it.niedermann.owncloud.notes.main.navigation.NavigationAdapter; import it.niedermann.owncloud.notes.main.navigation.NavigationClickListener; import it.niedermann.owncloud.notes.main.navigation.NavigationItem; @@ -139,9 +145,32 @@ public class NoteListWidgetConfigurationActivity extends LockedActivity { } runOnUiThread(() -> viewModel.getAdapterCategories(localAccount.getId()).observe(this, (navigationItems) -> adapterCategories.setItems(navigationItems))); }); + + updateAccentColor(); } @Override public void applyBrand(int mainColor, int textColor) { } + + private void updateAccentColor(){ + //change toolbar color + getSupportActionBar().setBackgroundDrawable( + new ColorDrawable(MainActivity.ACCENT_COLOR)); + + //change status bar color + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + window.setStatusBarColor(darkenColor(MainActivity.ACCENT_COLOR)); + } + } + + @ColorInt + int darkenColor(@ColorInt int color) { + float[] hsv = new float[3]; + android.graphics.Color.colorToHSV(color, hsv); + hsv[2] *= 0.8f; + return android.graphics.Color.HSVToColor(hsv); + } } -- GitLab From c2e7fd47452fe1108f42fb4ad416f63c0f5d3793 Mon Sep 17 00:00:00 2001 From: Mohit Mali Date: Tue, 27 Oct 2020 14:49:45 +0000 Subject: [PATCH 19/81] Setup /e/ colors --- app/build.gradle | 5 ++ .../owncloud/notes/about/AboutActivity.java | 28 --------- .../owncloud/notes/edit/BaseNoteFragment.java | 2 +- .../owncloud/notes/edit/EditNoteActivity.java | 27 --------- .../owncloud/notes/main/MainActivity.java | 57 ------------------ .../notes/main/items/NoteViewHolder.java | 2 +- .../notes/persistence/NotesRepository.java | 2 +- .../preferences/PreferencesActivity.java | 29 --------- .../NoteListWidgetConfigurationActivity.java | 42 +++---------- .../notelist/NoteListWidgetFactory.java | 2 +- .../drawable/ic_star_border_white_24dp.xml | 10 +-- .../main/res/drawable/ic_star_white_24dp.xml | 2 +- .../main/res/drawable/ic_star_yellow_24dp.xml | 2 +- .../main/res/layout/activity_exception.xml | 6 ++ .../res/layout/activity_notes_list_view.xml | 3 +- app/src/main/res/layout/drawer_layout.xml | 3 +- app/src/main/res/menu/menu_note_fragment.xml | 3 + app/src/main/res/values-night/colors.xml | 4 +- app/src/main/res/values-night/styles.xml | 20 ++++++ app/src/main/res/values/colors.xml | 10 +-- e-ui-sdk.jar | Bin 0 -> 118347 bytes 21 files changed, 64 insertions(+), 195 deletions(-) create mode 100644 app/src/main/res/values-night/styles.xml create mode 100644 e-ui-sdk.jar diff --git a/app/build.gradle b/app/build.gradle index e38c969ca..57ccd4bc8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -49,10 +49,15 @@ android { disable 'MissingTranslation' } namespace 'it.niedermann.owncloud.notes' + + aaptOptions { + additionalParameters '-I', 'e-ui-sdk.jar' + } } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.6' + compileOnly files("../e-ui-sdk.jar") // Nextcloud SSO implementation 'com.github.nextcloud:Android-SingleSignOn:0.6.1' diff --git a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java index ae42339d5..f321d4aa6 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java @@ -1,16 +1,10 @@ package it.niedermann.owncloud.notes.about; -import android.graphics.drawable.ColorDrawable; -import android.os.Build; import android.os.Bundle; -import android.view.Window; -import android.view.WindowManager; -import androidx.annotation.ColorInt; import androidx.appcompat.app.AppCompatActivity; import it.niedermann.owncloud.notes.R; -import it.niedermann.owncloud.notes.main.MainActivity; public class AboutActivity extends AppCompatActivity { @Override @@ -18,27 +12,5 @@ public class AboutActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_about); getFragmentManager().beginTransaction().replace(R.id.container, new AboutFragment()).commit(); - updateAccentColor(); - } - - private void updateAccentColor() { - //change toolbar color - getSupportActionBar().setBackgroundDrawable( - new ColorDrawable(MainActivity.ACCENT_COLOR)); - - //change status bar color - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - Window window = getWindow(); - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - window.setStatusBarColor(darkenColor(MainActivity.ACCENT_COLOR)); - } - } - - @ColorInt - int darkenColor(@ColorInt int color) { - float[] hsv = new float[3]; - android.graphics.Color.colorToHSV(color, hsv); - hsv[2] *= 0.8f; - return android.graphics.Color.HSVToColor(hsv); } } \ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/edit/BaseNoteFragment.java b/app/src/main/java/it/niedermann/owncloud/notes/edit/BaseNoteFragment.java index b524e2fb2..d743868d1 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/edit/BaseNoteFragment.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/edit/BaseNoteFragment.java @@ -252,7 +252,7 @@ public abstract class BaseNoteFragment extends BrandedFragment implements Catego if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)) { final var pinShortcutInfo = new ShortcutInfoCompat.Builder(context, String.valueOf(note.getId())) .setShortLabel(note.getTitle()) - .setIcon(IconCompat.createWithResource(context.getApplicationContext(), TRUE.equals(note.getFavorite()) ? R.drawable.ic_star_yellow_24dp : R.drawable.ic_star_grey_ccc_24dp)) + .setIcon(IconCompat.createWithResource(context.getApplicationContext(), TRUE.equals(note.getFavorite()) ? R.drawable.ic_star_yellow_24dp : R.drawable.ic_star_border_white_24dp)) .setIntent(new Intent(getActivity(), EditNoteActivity.class).putExtra(EditNoteActivity.PARAM_NOTE_ID, note.getId()).setAction(ACTION_SHORTCUT)) .build(); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java index c2624ddca..8cb12bad1 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java @@ -3,18 +3,14 @@ package it.niedermann.owncloud.notes.edit; import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.FAVORITES; import android.content.Intent; -import android.graphics.drawable.ColorDrawable; -import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.Menu; import android.view.MenuItem; -import android.view.Window; import android.view.WindowManager; import android.widget.Toast; -import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; @@ -96,8 +92,6 @@ public class EditNoteActivity extends LockedActivity implements BaseNoteFragment setSupportActionBar(binding.toolbar); binding.toolbar.setOnClickListener((v) -> fragment.showEditTitleDialog()); - - updateAccentColor(); } @Override @@ -322,25 +316,4 @@ public class EditNoteActivity extends LockedActivity implements BaseNoteFragment public void applyBrand(int mainColor, int textColor) { applyBrandToPrimaryToolbar(binding.appBar, binding.toolbar); } - - private void updateAccentColor(){ - //change toolbar color - getSupportActionBar().setBackgroundDrawable( - new ColorDrawable(MainActivity.ACCENT_COLOR)); - - //change status bar color - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - Window window = getWindow(); - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - window.setStatusBarColor(darkenColor(MainActivity.ACCENT_COLOR)); - } - } - - @ColorInt - int darkenColor(@ColorInt int color) { - float[] hsv = new float[3]; - android.graphics.Color.colorToHSV(color, hsv); - hsv[2] *= 0.8f; - return android.graphics.Color.HSVToColor(hsv); - } } \ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java index 8564dd270..046f0e7d5 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java @@ -17,28 +17,19 @@ import static it.niedermann.owncloud.notes.shared.util.SSOUtil.askForNewAccount; import android.accounts.NetworkErrorException; import android.animation.AnimatorInflater; import android.app.SearchManager; -import android.content.Context; import android.content.Intent; -import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.PorterDuff; -import android.graphics.drawable.ColorDrawable; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; -import android.util.TypedValue; import android.view.View; -import android.view.Window; -import android.view.WindowManager; -import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.view.ActionMode; -import androidx.appcompat.view.ContextThemeWrapper; import androidx.appcompat.widget.SearchView; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.core.app.ActivityCompat; @@ -145,8 +136,6 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A boolean canMoveNoteToAnotherAccounts = false; - public static int ACCENT_COLOR; - @Override protected void onCreate(Bundle savedInstanceState) { SplashScreen.installSplashScreen(this); @@ -368,9 +357,6 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A menuAdapter.updateAccount(this, nextAccount); } }); - - ACCENT_COLOR= fetchAccentColor(this); - fabCreate.setBackgroundTintList(ColorStateList.valueOf(darkenColor20(ACCENT_COLOR))); } @Override @@ -834,47 +820,4 @@ public class MainActivity extends LockedActivity implements NoteClickListener, A categoryLiveData.observe(this, (next) -> categoryLiveData.removeObservers(this)); tracker.clearSelection(); } - - /* - * get Accent color from OS - * */ - private int fetchAccentColor(Context context) { - - TypedValue typedValue = new TypedValue(); - ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(this, - android.R.style.Theme_DeviceDefault); - contextThemeWrapper.getTheme().resolveAttribute(android.R.attr.colorAccent, - typedValue, true); - int color_accent = typedValue.data; - Log.e("TAG", "accent Colour #"+Integer.toHexString(color_accent)); - - //change toolbar color - getSupportActionBar().setBackgroundDrawable( - new ColorDrawable(color_accent)); - - //change status bar color - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - Window window = getWindow(); - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - window.setStatusBarColor(darkenColor(color_accent)); - } - - return color_accent; - } - - - @ColorInt - int darkenColor(@ColorInt int color) { - float[] hsv = new float[3]; - android.graphics.Color.colorToHSV(color, hsv); - hsv[2] *= 0.8f; - return android.graphics.Color.HSVToColor(hsv); - } - - @ColorInt int darkenColor20(@ColorInt int color) { - float[] hsv = new float[3]; - android.graphics.Color.colorToHSV(color, hsv); - hsv[2] *= 0.6f; - return android.graphics.Color.HSVToColor(hsv); - } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java index 609d1aeff..c3e46c587 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java @@ -104,7 +104,7 @@ public abstract class NoteViewHolder extends RecyclerView.ViewHolder { } protected void bindFavorite(@NonNull ImageView noteFavorite, boolean isFavorite) { - noteFavorite.setImageResource(isFavorite ? R.drawable.ic_star_yellow_24dp : R.drawable.ic_star_grey_ccc_24dp); + noteFavorite.setImageResource(isFavorite ? R.drawable.ic_star_yellow_24dp : R.drawable.ic_star_border_white_24dp); noteFavorite.setOnClickListener(view -> noteClickListener.onNoteFavoriteClick(getLayoutPosition(), view)); } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java index 6eff34f06..014ab190c 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/persistence/NotesRepository.java @@ -595,7 +595,7 @@ public class NotesRepository { newShortcuts.add(new ShortcutInfo.Builder(this.context, note.getId() + "") .setShortLabel(note.getTitle() + "") - .setIcon(Icon.createWithResource(this.context, note.getFavorite() ? R.drawable.ic_star_yellow_24dp : R.drawable.ic_star_grey_ccc_24dp)) + .setIcon(Icon.createWithResource(this.context, note.getFavorite() ? R.drawable.ic_star_yellow_24dp : R.drawable.ic_star_border_white_24dp)) .setIntent(intent) .build()); } else { diff --git a/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesActivity.java index a05447ded..2dcd99ec1 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesActivity.java @@ -1,19 +1,13 @@ package it.niedermann.owncloud.notes.preferences; -import android.graphics.drawable.ColorDrawable; -import android.os.Build; import android.os.Bundle; -import android.view.Window; -import android.view.WindowManager; -import androidx.annotation.ColorInt; import androidx.annotation.Nullable; import androidx.lifecycle.ViewModelProvider; import it.niedermann.owncloud.notes.LockedActivity; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.databinding.ActivityPreferencesBinding; -import it.niedermann.owncloud.notes.main.MainActivity; public class PreferencesActivity extends LockedActivity { @@ -34,29 +28,6 @@ public class PreferencesActivity extends LockedActivity { getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_container_view, new PreferencesFragment()) .commit(); - - updateAccentColor(); - } - - private void updateAccentColor(){ - //change toolbar color - getSupportActionBar().setBackgroundDrawable( - new ColorDrawable(MainActivity.ACCENT_COLOR)); - - //change status bar color - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - Window window = getWindow(); - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - window.setStatusBarColor(darkenColor(MainActivity.ACCENT_COLOR)); - } - } - - @ColorInt - int darkenColor(@ColorInt int color) { - float[] hsv = new float[3]; - android.graphics.Color.colorToHSV(color, hsv); - hsv[2] *= 0.8f; - return android.graphics.Color.HSVToColor(hsv); } @Override diff --git a/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetConfigurationActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetConfigurationActivity.java index 6a97d37ca..a488288dc 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetConfigurationActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetConfigurationActivity.java @@ -1,17 +1,17 @@ package it.niedermann.owncloud.notes.widget.notelist; +import static it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData.MODE_DISPLAY_ALL; +import static it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData.MODE_DISPLAY_CATEGORY; +import static it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData.MODE_DISPLAY_STARRED; +import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.RECENT; + import android.app.Activity; import android.appwidget.AppWidgetManager; import android.content.Intent; -import android.graphics.drawable.ColorDrawable; -import android.os.Build; import android.os.Bundle; import android.util.Log; -import android.view.Window; -import android.view.WindowManager; import android.widget.Toast; -import androidx.annotation.ColorInt; import androidx.annotation.Nullable; import androidx.lifecycle.ViewModelProvider; @@ -26,7 +26,6 @@ import it.niedermann.owncloud.notes.LockedActivity; import it.niedermann.owncloud.notes.NotesApplication; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.databinding.ActivityNoteListConfigurationBinding; -import it.niedermann.owncloud.notes.main.MainActivity; import it.niedermann.owncloud.notes.main.navigation.NavigationAdapter; import it.niedermann.owncloud.notes.main.navigation.NavigationClickListener; import it.niedermann.owncloud.notes.main.navigation.NavigationItem; @@ -34,11 +33,6 @@ import it.niedermann.owncloud.notes.persistence.NotesRepository; import it.niedermann.owncloud.notes.persistence.entity.Account; import it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData; -import static it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData.MODE_DISPLAY_ALL; -import static it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData.MODE_DISPLAY_CATEGORY; -import static it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData.MODE_DISPLAY_STARRED; -import static it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType.RECENT; - public class NoteListWidgetConfigurationActivity extends LockedActivity { private static final String TAG = Activity.class.getSimpleName(); @@ -136,7 +130,8 @@ public class NoteListWidgetConfigurationActivity extends LockedActivity { executor.submit(() -> { try { this.localAccount = repo.getAccountByName(SingleAccountHelper.getCurrentSingleSignOnAccount(this).name); - } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) { + } catch (NextcloudFilesAppAccountNotFoundException | + NoCurrentAccountSelectedException e) { e.printStackTrace(); Toast.makeText(this, R.string.widget_not_logged_in, Toast.LENGTH_LONG).show(); // TODO Present user with app login screen @@ -145,32 +140,9 @@ public class NoteListWidgetConfigurationActivity extends LockedActivity { } runOnUiThread(() -> viewModel.getAdapterCategories(localAccount.getId()).observe(this, (navigationItems) -> adapterCategories.setItems(navigationItems))); }); - - updateAccentColor(); } @Override public void applyBrand(int mainColor, int textColor) { } - - private void updateAccentColor(){ - //change toolbar color - getSupportActionBar().setBackgroundDrawable( - new ColorDrawable(MainActivity.ACCENT_COLOR)); - - //change status bar color - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - Window window = getWindow(); - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - window.setStatusBarColor(darkenColor(MainActivity.ACCENT_COLOR)); - } - } - - @ColorInt - int darkenColor(@ColorInt int color) { - float[] hsv = new float[3]; - android.graphics.Color.colorToHSV(color, hsv); - hsv[2] *= 0.8f; - return android.graphics.Color.HSVToColor(hsv); - } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetFactory.java b/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetFactory.java index 94548e982..81290f46d 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetFactory.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetFactory.java @@ -135,7 +135,7 @@ public class NoteListWidgetFactory implements RemoteViewsService.RemoteViewsFact note_content.setTextViewText(R.id.widget_entry_content_tv, note.getTitle()); note_content.setImageViewResource(R.id.widget_entry_fav_icon, note.getFavorite() ? R.drawable.ic_star_yellow_24dp - : R.drawable.ic_star_grey_ccc_24dp); + : R.drawable.ic_star_border_white_24dp); } return note_content; diff --git a/app/src/main/res/drawable/ic_star_border_white_24dp.xml b/app/src/main/res/drawable/ic_star_border_white_24dp.xml index 66887c8de..274314f93 100644 --- a/app/src/main/res/drawable/ic_star_border_white_24dp.xml +++ b/app/src/main/res/drawable/ic_star_border_white_24dp.xml @@ -1,10 +1,10 @@ - + android:viewportHeight="24.0"> diff --git a/app/src/main/res/drawable/ic_star_white_24dp.xml b/app/src/main/res/drawable/ic_star_white_24dp.xml index b7fb611c0..a17b54a02 100644 --- a/app/src/main/res/drawable/ic_star_white_24dp.xml +++ b/app/src/main/res/drawable/ic_star_white_24dp.xml @@ -1,6 +1,6 @@