Loading .gitignore +1 −0 Original line number Diff line number Diff line Loading @@ -36,3 +36,4 @@ tests/test_cases/local.properties fastlane/report.xml /gradle/verification-keyring.gpg /app/keystore/murena-test.jks .gitlab-ci.yml 0 → 100644 +83 −0 Original line number Diff line number Diff line image: "registry.gitlab.e.foundation/e/os/docker-android-apps-cicd:latest" stages: - build - rebase-on-upstream variables: UPSTREAM_URL: https://github.com/nextcloud/notes-android.git UPSTREAM_DEFAULT_BRANCH: main NG_BRANCH: main-ng GRADLE_BUILD_TASKS: ":app:assembleDevDebug" JAVA_HOME: /usr/lib/jvm/java-21-openjdk-amd64 before_script: - export PATH="$JAVA_HOME/bin:$PATH" - export GRADLE_USER_HOME=$(pwd)/.gradle - chmod +x ./gradlew - java -version cache: key: ${CI_PROJECT_ID} paths: - .gradle/ build: stage: build rules: - if: '$CI_PIPELINE_SOURCE != "schedule"' script: - ./gradlew $GRADLE_BUILD_TASKS --no-daemon rebase-on-upstream: stage: rebase-on-upstream rules: - if: '$CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_REF_NAME == $NG_BRANCH' variables: CI_PROJECT_SSH_URL: git@gitlab.e.foundation:$CI_PROJECT_PATH GIT_STRATEGY: none before_script: - eval $(ssh-agent -s) - echo "${SSH_E_ROBOT_PRIVATE_KEY}" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo "${SSH_KNOWN_HOSTS}" > ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts - git config --global user.email $GITLAB_USER_EMAIL - git config --global user.name "$GITLAB_USER_NAME" - cd $CI_BUILDS_DIR - rm -rf $CI_PROJECT_DIR - git clone $CI_PROJECT_SSH_URL $CI_PROJECT_DIR - cd $CI_PROJECT_DIR - export PATH="$JAVA_HOME/bin:$PATH" - export GRADLE_USER_HOME=$(pwd)/.gradle - chmod +x ./gradlew - java -version script: - git checkout $NG_BRANCH - PRE_REBASE_SHA="$(git rev-parse HEAD)" - git remote add upstream $UPSTREAM_URL - git fetch upstream $UPSTREAM_DEFAULT_BRANCH - UPSTREAM_SHA="$(git rev-parse upstream/$UPSTREAM_DEFAULT_BRANCH)" - | if ! git rebase upstream/$UPSTREAM_DEFAULT_BRANCH; then git rebase --abort echo "Rebase onto $UPSTREAM_SHA failed; main-ng untouched." exit 1 fi - | if ! ./gradlew $GRADLE_BUILD_TASKS --no-daemon; then echo "Build failed after rebase; not force-pushing main-ng." exit 1 fi - POST_REBASE_SHA="$(git rev-parse HEAD)" - git push --force-with-lease origin "$NG_BRANCH" - | if [ "$POST_REBASE_SHA" != "$PRE_REBASE_SHA" ]; then SNAPSHOT_TAG="main-ng-snapshots/$(date -u +%Y-%m-%d_%H%M%S)" git tag -a "$SNAPSHOT_TAG" -m "main-ng after rebase onto upstream/$UPSTREAM_DEFAULT_BRANCH @ $UPSTREAM_SHA" git push origin "$SNAPSHOT_TAG" else echo "main-ng unchanged after rebase (upstream had no new commits); no snapshot tag created." fi - git remote remove upstream app/build.gradle +24 −5 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ android { namespace = 'it.niedermann.owncloud.notes' defaultConfig { applicationId "it.niedermann.owncloud.notes" applicationId "foundation.e.notes.ng" minSdk 24 compileSdk = 36 targetSdk 36 Loading @@ -30,12 +30,12 @@ android { compileOptions { coreLibraryDesugaringEnabled = true sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 sourceCompatibility JavaVersion.VERSION_21 targetCompatibility JavaVersion.VERSION_21 } kotlinOptions { jvmTarget = '17' jvmTarget = '21' } buildFeatures { Loading @@ -43,6 +43,17 @@ android { buildConfig = true } signingConfigs { if (rootProject.file("../murena-test.jks").exists()) { murenaTest { storeFile rootProject.file("../murena-test.jks") storePassword "murena" keyAlias "murena" keyPassword "murena" } } } buildTypes { release { Loading @@ -52,6 +63,9 @@ android { debug { enableUnitTestCoverage true enableAndroidTestCoverage true if (signingConfigs.findByName("murenaTest") != null) { signingConfig signingConfigs.murenaTest } } } Loading @@ -65,7 +79,6 @@ android { } dev { dimension "version" applicationIdSuffix ".dev" } play { dimension "version" Loading Loading @@ -100,6 +113,10 @@ android { abortOnError false disable 'MissingTranslation' } applicationVariants.all { variant -> variant.resValue "string", "notes_sync_authority", "${variant.applicationId}.sync" } } ext { Loading @@ -110,6 +127,8 @@ ext { dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5' implementation 'foundation.e:elib:0.0.1-alpha11' implementation 'com.google.guava:guava:33.6.0-jre' implementation ('commons-httpclient:commons-httpclient:3.1') { exclude group: 'commons-logging', module: 'commons-logging' Loading app/src/main/AndroidManifest.xml +31 −0 Original line number Diff line number Diff line Loading @@ -13,10 +13,15 @@ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="com.owncloud.android.providers.PERMISSION" /> <uses-permission android:name="foundation.e.accountmanager.ng.permission.ACCOUNT_EVENTS" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" /> <uses-permission android:name="android.permission.READ_SYNC_STATS" /> <queries> <package android:name="com.nextcloud.talk2" /> <package android:name="com.nextcloud.client" /> <package android:name="com.nextcloud.android.beta" /> <package android:name="foundation.e.accountmanager.ng" /> </queries> <application Loading Loading @@ -209,5 +214,31 @@ </intent-filter> </service> <receiver android:name=".importaccount.MurenaAccountRemovalReceiver" android:exported="true"> <intent-filter> <action android:name="foundation.e.accountmanager.action.ACCOUNT_REMOVED" /> </intent-filter> </receiver> <provider android:name=".importaccount.MurenaSyncStubProvider" android:authorities="@string/notes_sync_authority" android:exported="false" android:label="@string/app_name" android:syncable="true" /> <service android:name=".importaccount.MurenaNotesSyncService" android:exported="true"> <intent-filter> <action android:name="android.content.SyncAdapter" /> </intent-filter> <meta-data android:name="android.content.SyncAdapter" android:resource="@xml/murena_notes_sync_adapter" /> </service> </application> </manifest> app/src/main/java/it/niedermann/owncloud/notes/NotesApplication.java +2 −2 Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ public class NotesApplication extends Application { private static boolean isLocked = true; private static long lastInteraction = 0; private static String PREF_KEY_THEME; private static boolean isGridViewEnabled = false; private static boolean isGridViewEnabled = true; private static boolean isSwipeEnabled = true; private static BrandingUtil brandingUtil; Loading @@ -45,7 +45,7 @@ public class NotesApplication extends Application { setAppTheme(getAppTheme(getApplicationContext())); final var prefs = getDefaultSharedPreferences(getApplicationContext()); lockedPreference = prefs.getBoolean(getString(R.string.pref_key_lock), false); isGridViewEnabled = getDefaultSharedPreferences(this).getBoolean(getString(R.string.pref_key_gridview), false); isGridViewEnabled = getDefaultSharedPreferences(this).getBoolean(getString(R.string.pref_key_gridview), true); isSwipeEnabled = getDefaultSharedPreferences(this).getBoolean(getString(R.string.pref_key_swipe_actions), true); super.onCreate(); brandingUtil = BrandingUtil.getInstance(this); Loading Loading
.gitignore +1 −0 Original line number Diff line number Diff line Loading @@ -36,3 +36,4 @@ tests/test_cases/local.properties fastlane/report.xml /gradle/verification-keyring.gpg /app/keystore/murena-test.jks
.gitlab-ci.yml 0 → 100644 +83 −0 Original line number Diff line number Diff line image: "registry.gitlab.e.foundation/e/os/docker-android-apps-cicd:latest" stages: - build - rebase-on-upstream variables: UPSTREAM_URL: https://github.com/nextcloud/notes-android.git UPSTREAM_DEFAULT_BRANCH: main NG_BRANCH: main-ng GRADLE_BUILD_TASKS: ":app:assembleDevDebug" JAVA_HOME: /usr/lib/jvm/java-21-openjdk-amd64 before_script: - export PATH="$JAVA_HOME/bin:$PATH" - export GRADLE_USER_HOME=$(pwd)/.gradle - chmod +x ./gradlew - java -version cache: key: ${CI_PROJECT_ID} paths: - .gradle/ build: stage: build rules: - if: '$CI_PIPELINE_SOURCE != "schedule"' script: - ./gradlew $GRADLE_BUILD_TASKS --no-daemon rebase-on-upstream: stage: rebase-on-upstream rules: - if: '$CI_PIPELINE_SOURCE == "schedule" && $CI_COMMIT_REF_NAME == $NG_BRANCH' variables: CI_PROJECT_SSH_URL: git@gitlab.e.foundation:$CI_PROJECT_PATH GIT_STRATEGY: none before_script: - eval $(ssh-agent -s) - echo "${SSH_E_ROBOT_PRIVATE_KEY}" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo "${SSH_KNOWN_HOSTS}" > ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts - git config --global user.email $GITLAB_USER_EMAIL - git config --global user.name "$GITLAB_USER_NAME" - cd $CI_BUILDS_DIR - rm -rf $CI_PROJECT_DIR - git clone $CI_PROJECT_SSH_URL $CI_PROJECT_DIR - cd $CI_PROJECT_DIR - export PATH="$JAVA_HOME/bin:$PATH" - export GRADLE_USER_HOME=$(pwd)/.gradle - chmod +x ./gradlew - java -version script: - git checkout $NG_BRANCH - PRE_REBASE_SHA="$(git rev-parse HEAD)" - git remote add upstream $UPSTREAM_URL - git fetch upstream $UPSTREAM_DEFAULT_BRANCH - UPSTREAM_SHA="$(git rev-parse upstream/$UPSTREAM_DEFAULT_BRANCH)" - | if ! git rebase upstream/$UPSTREAM_DEFAULT_BRANCH; then git rebase --abort echo "Rebase onto $UPSTREAM_SHA failed; main-ng untouched." exit 1 fi - | if ! ./gradlew $GRADLE_BUILD_TASKS --no-daemon; then echo "Build failed after rebase; not force-pushing main-ng." exit 1 fi - POST_REBASE_SHA="$(git rev-parse HEAD)" - git push --force-with-lease origin "$NG_BRANCH" - | if [ "$POST_REBASE_SHA" != "$PRE_REBASE_SHA" ]; then SNAPSHOT_TAG="main-ng-snapshots/$(date -u +%Y-%m-%d_%H%M%S)" git tag -a "$SNAPSHOT_TAG" -m "main-ng after rebase onto upstream/$UPSTREAM_DEFAULT_BRANCH @ $UPSTREAM_SHA" git push origin "$SNAPSHOT_TAG" else echo "main-ng unchanged after rebase (upstream had no new commits); no snapshot tag created." fi - git remote remove upstream
app/build.gradle +24 −5 Original line number Diff line number Diff line Loading @@ -14,7 +14,7 @@ android { namespace = 'it.niedermann.owncloud.notes' defaultConfig { applicationId "it.niedermann.owncloud.notes" applicationId "foundation.e.notes.ng" minSdk 24 compileSdk = 36 targetSdk 36 Loading @@ -30,12 +30,12 @@ android { compileOptions { coreLibraryDesugaringEnabled = true sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 sourceCompatibility JavaVersion.VERSION_21 targetCompatibility JavaVersion.VERSION_21 } kotlinOptions { jvmTarget = '17' jvmTarget = '21' } buildFeatures { Loading @@ -43,6 +43,17 @@ android { buildConfig = true } signingConfigs { if (rootProject.file("../murena-test.jks").exists()) { murenaTest { storeFile rootProject.file("../murena-test.jks") storePassword "murena" keyAlias "murena" keyPassword "murena" } } } buildTypes { release { Loading @@ -52,6 +63,9 @@ android { debug { enableUnitTestCoverage true enableAndroidTestCoverage true if (signingConfigs.findByName("murenaTest") != null) { signingConfig signingConfigs.murenaTest } } } Loading @@ -65,7 +79,6 @@ android { } dev { dimension "version" applicationIdSuffix ".dev" } play { dimension "version" Loading Loading @@ -100,6 +113,10 @@ android { abortOnError false disable 'MissingTranslation' } applicationVariants.all { variant -> variant.resValue "string", "notes_sync_authority", "${variant.applicationId}.sync" } } ext { Loading @@ -110,6 +127,8 @@ ext { dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5' implementation 'foundation.e:elib:0.0.1-alpha11' implementation 'com.google.guava:guava:33.6.0-jre' implementation ('commons-httpclient:commons-httpclient:3.1') { exclude group: 'commons-logging', module: 'commons-logging' Loading
app/src/main/AndroidManifest.xml +31 −0 Original line number Diff line number Diff line Loading @@ -13,10 +13,15 @@ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="com.owncloud.android.providers.PERMISSION" /> <uses-permission android:name="foundation.e.accountmanager.ng.permission.ACCOUNT_EVENTS" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" /> <uses-permission android:name="android.permission.READ_SYNC_STATS" /> <queries> <package android:name="com.nextcloud.talk2" /> <package android:name="com.nextcloud.client" /> <package android:name="com.nextcloud.android.beta" /> <package android:name="foundation.e.accountmanager.ng" /> </queries> <application Loading Loading @@ -209,5 +214,31 @@ </intent-filter> </service> <receiver android:name=".importaccount.MurenaAccountRemovalReceiver" android:exported="true"> <intent-filter> <action android:name="foundation.e.accountmanager.action.ACCOUNT_REMOVED" /> </intent-filter> </receiver> <provider android:name=".importaccount.MurenaSyncStubProvider" android:authorities="@string/notes_sync_authority" android:exported="false" android:label="@string/app_name" android:syncable="true" /> <service android:name=".importaccount.MurenaNotesSyncService" android:exported="true"> <intent-filter> <action android:name="android.content.SyncAdapter" /> </intent-filter> <meta-data android:name="android.content.SyncAdapter" android:resource="@xml/murena_notes_sync_adapter" /> </service> </application> </manifest>
app/src/main/java/it/niedermann/owncloud/notes/NotesApplication.java +2 −2 Original line number Diff line number Diff line Loading @@ -35,7 +35,7 @@ public class NotesApplication extends Application { private static boolean isLocked = true; private static long lastInteraction = 0; private static String PREF_KEY_THEME; private static boolean isGridViewEnabled = false; private static boolean isGridViewEnabled = true; private static boolean isSwipeEnabled = true; private static BrandingUtil brandingUtil; Loading @@ -45,7 +45,7 @@ public class NotesApplication extends Application { setAppTheme(getAppTheme(getApplicationContext())); final var prefs = getDefaultSharedPreferences(getApplicationContext()); lockedPreference = prefs.getBoolean(getString(R.string.pref_key_lock), false); isGridViewEnabled = getDefaultSharedPreferences(this).getBoolean(getString(R.string.pref_key_gridview), false); isGridViewEnabled = getDefaultSharedPreferences(this).getBoolean(getString(R.string.pref_key_gridview), true); isSwipeEnabled = getDefaultSharedPreferences(this).getBoolean(getString(R.string.pref_key_swipe_actions), true); super.onCreate(); brandingUtil = BrandingUtil.getInstance(this); Loading