@ -0,0 +1,69 @@ |
|||||||
|
name: Enterprise APK Build |
||||||
|
|
||||||
|
on: |
||||||
|
workflow_dispatch: |
||||||
|
pull_request: |
||||||
|
merge_group: |
||||||
|
push: |
||||||
|
branches: [ develop ] |
||||||
|
|
||||||
|
# Enrich gradle.properties for CI/CD |
||||||
|
env: |
||||||
|
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx7g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC |
||||||
|
CI_GRADLE_ARG_PROPERTIES: --stacktrace -Dsonar.gradle.skipCompile=true |
||||||
|
|
||||||
|
jobs: |
||||||
|
build: |
||||||
|
name: Build Enterprise APKs |
||||||
|
runs-on: ubuntu-latest |
||||||
|
# Skip in forks |
||||||
|
if: github.repository == 'element-hq/element-x-android' |
||||||
|
strategy: |
||||||
|
matrix: |
||||||
|
variant: [debug, release, nightly] |
||||||
|
fail-fast: false |
||||||
|
# Allow all jobs on develop. Just one per PR. |
||||||
|
concurrency: |
||||||
|
group: ${{ github.ref == 'refs/heads/develop' && format('build-develop-enterprise-{0}-{1}', matrix.variant, github.sha) || format('build-enterprise-{0}-{1}', matrix.variant, github.ref) }} |
||||||
|
cancel-in-progress: true |
||||||
|
steps: |
||||||
|
- uses: actions/checkout@v4 |
||||||
|
with: |
||||||
|
# Ensure we are building the branch and not the branch after being merged on develop |
||||||
|
# https://github.com/actions/checkout/issues/881 |
||||||
|
ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.ref }} |
||||||
|
- name: Add SSH private keys for submodule repositories |
||||||
|
uses: webfactory/ssh-agent@v0.9.0 |
||||||
|
with: |
||||||
|
ssh-private-key: ${{ secrets.ELEMENT_ENTERPRISE_DEPLOY_KEY }} |
||||||
|
- name: Clone submodules |
||||||
|
run: git submodule update --init --recursive |
||||||
|
- name: Use JDK 17 |
||||||
|
uses: actions/setup-java@v4 |
||||||
|
with: |
||||||
|
distribution: 'temurin' # See 'Supported distributions' for available options |
||||||
|
java-version: '17' |
||||||
|
- name: Configure gradle |
||||||
|
uses: gradle/actions/setup-gradle@v3 |
||||||
|
with: |
||||||
|
cache-read-only: ${{ github.ref != 'refs/heads/develop' }} |
||||||
|
- name: Assemble debug Gplay Enterprise APK |
||||||
|
if: ${{ matrix.variant == 'debug' }} |
||||||
|
env: |
||||||
|
ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }} |
||||||
|
ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }} |
||||||
|
ELEMENT_ANDROID_MAPTILER_DARK_MAP_ID: ${{ secrets.MAPTILER_DARK_MAP_ID }} |
||||||
|
run: ./gradlew :app:assembleGplayDebug -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES |
||||||
|
- name: Upload debug Enterprise APKs |
||||||
|
if: ${{ matrix.variant == 'debug' }} |
||||||
|
uses: actions/upload-artifact@v4 |
||||||
|
with: |
||||||
|
name: elementx-enterprise-debug |
||||||
|
path: | |
||||||
|
app/build/outputs/apk/gplay/debug/*-universal-debug.apk |
||||||
|
- name: Compile release sources |
||||||
|
if: ${{ matrix.variant == 'release' }} |
||||||
|
run: ./gradlew compileReleaseSources -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES |
||||||
|
- name: Compile nightly sources |
||||||
|
if: ${{ matrix.variant == 'nightly' }} |
||||||
|
run: ./gradlew compileGplayNightlySources -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES |
@ -0,0 +1,48 @@ |
|||||||
|
name: Build and release Enterprise nightly application |
||||||
|
|
||||||
|
on: |
||||||
|
workflow_dispatch: |
||||||
|
schedule: |
||||||
|
# Every nights at 4 |
||||||
|
- cron: "0 4 * * *" |
||||||
|
|
||||||
|
env: |
||||||
|
GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx6g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.incremental=false -XX:+UseG1GC |
||||||
|
CI_GRADLE_ARG_PROPERTIES: --stacktrace --no-daemon -Dsonar.gradle.skipCompile=true |
||||||
|
|
||||||
|
jobs: |
||||||
|
nightly: |
||||||
|
name: Build and publish Enterprise nightly bundle to Firebase |
||||||
|
runs-on: ubuntu-latest |
||||||
|
if: ${{ github.repository == 'element-hq/element-x-android' }} |
||||||
|
steps: |
||||||
|
- uses: actions/checkout@v4 |
||||||
|
- name: Add SSH private keys for submodule repositories |
||||||
|
uses: webfactory/ssh-agent@v0.9.0 |
||||||
|
with: |
||||||
|
ssh-private-key: ${{ secrets.ELEMENT_ENTERPRISE_DEPLOY_KEY }} |
||||||
|
- name: Clone submodules |
||||||
|
run: git submodule update --init --recursive |
||||||
|
- name: Use JDK 17 |
||||||
|
uses: actions/setup-java@v4 |
||||||
|
with: |
||||||
|
distribution: 'temurin' # See 'Supported distributions' for available options |
||||||
|
java-version: '17' |
||||||
|
- name: Build and upload Nightly application |
||||||
|
run: | |
||||||
|
./gradlew assembleGplayNightly appDistributionUploadGplayNightly $CI_GRADLE_ARG_PROPERTIES |
||||||
|
env: |
||||||
|
ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }} |
||||||
|
ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }} |
||||||
|
ELEMENT_ANDROID_MAPTILER_DARK_MAP_ID: ${{ secrets.MAPTILER_DARK_MAP_ID }} |
||||||
|
ELEMENT_ANDROID_NIGHTLY_KEYID: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYID }} |
||||||
|
ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD }} |
||||||
|
ELEMENT_ANDROID_NIGHTLY_STOREPASSWORD: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_STOREPASSWORD }} |
||||||
|
FIREBASE_TOKEN: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_FIREBASE_TOKEN }} |
||||||
|
- name: Additionally upload Nightly APK to browserstack for testing |
||||||
|
continue-on-error: true # don't block anything by this upload failing (for now) |
||||||
|
run: | |
||||||
|
curl -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_PASSWORD" -X POST "https://api-cloud.browserstack.com/app-automate/upload" -F "file=@app/build/outputs/apk/gplay/nightly/app-gplay-universal-nightly.apk" -F "custom_id=element-x-android-nightly" |
||||||
|
env: |
||||||
|
BROWSERSTACK_USERNAME: ${{ secrets.ELEMENT_ANDROID_BROWSERSTACK_USERNAME }} |
||||||
|
BROWSERSTACK_PASSWORD: ${{ secrets.ELEMENT_ANDROID_BROWSERSTACK_ACCESS_KEY }} |
@ -0,0 +1,3 @@ |
|||||||
|
[submodule "enterprise"] |
||||||
|
path = enterprise |
||||||
|
url = git@github.com:element-hq/element-android-enterprise.git |
@ -0,0 +1,6 @@ |
|||||||
|
<component name="CopyrightManager"> |
||||||
|
<copyright> |
||||||
|
<option name="notice" value="© &#36;today.year New Vector Limited, Element Software SARL, Element Software Inc., and Element Software GmbH (the "Element Group") only make this file available under a proprietary license model. Without a proprietary license with us, you cannot use this file. The terms of the proprietary license agreement between you and any member of the Element Group shall always apply to your use of this file. Unauthorised use, copying, distribution, or modification of this file, via any medium, is strictly prohibited. For details about the licensing terms, you must either visit our website or contact a member of our sales team." /> |
||||||
|
<option name="myName" value="Element Enterprise" /> |
||||||
|
</copyright> |
||||||
|
</component> |
@ -0,0 +1,6 @@ |
|||||||
|
<component name="CopyrightManager"> |
||||||
|
<copyright> |
||||||
|
<option name="notice" value="Copyright (c) &#36;today.year New Vector Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License." /> |
||||||
|
<option name="myName" value="Element FOSS" /> |
||||||
|
</copyright> |
||||||
|
</component> |
@ -1,6 +0,0 @@ |
|||||||
<component name="CopyrightManager"> |
|
||||||
<copyright> |
|
||||||
<option name="notice" value="Copyright (c) &#36;today.year New Vector Ltd Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License." /> |
|
||||||
<option name="myName" value="NewVector" /> |
|
||||||
</copyright> |
|
||||||
</component> |
|
@ -1,3 +1,7 @@ |
|||||||
<component name="CopyrightManager"> |
<component name="CopyrightManager"> |
||||||
<settings default="NewVector" /> |
<settings default="Element FOSS"> |
||||||
|
<module2copyright> |
||||||
|
<element module="Enterprise" copyright="Element Enterprise" /> |
||||||
|
</module2copyright> |
||||||
|
</settings> |
||||||
</component> |
</component> |
@ -0,0 +1,3 @@ |
|||||||
|
<component name="DependencyValidationManager"> |
||||||
|
<scope name="Enterprise" pattern="file://*||file[ElementX.enterprise*]:*//*" /> |
||||||
|
</component> |
@ -1,70 +0,0 @@ |
|||||||
/* |
|
||||||
* Copyright (c) 2023 New Vector Ltd |
|
||||||
* |
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
||||||
* you may not use this file except in compliance with the License. |
|
||||||
* You may obtain a copy of the License at |
|
||||||
* |
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0 |
|
||||||
* |
|
||||||
* Unless required by applicable law or agreed to in writing, software |
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS, |
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
||||||
* See the License for the specific language governing permissions and |
|
||||||
* limitations under the License. |
|
||||||
*/ |
|
||||||
|
|
||||||
package io.element.android.x.icon |
|
||||||
|
|
||||||
import androidx.compose.foundation.Image |
|
||||||
import androidx.compose.foundation.background |
|
||||||
import androidx.compose.foundation.layout.Box |
|
||||||
import androidx.compose.foundation.layout.size |
|
||||||
import androidx.compose.foundation.shape.CircleShape |
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape |
|
||||||
import androidx.compose.runtime.Composable |
|
||||||
import androidx.compose.ui.Alignment |
|
||||||
import androidx.compose.ui.Modifier |
|
||||||
import androidx.compose.ui.draw.clip |
|
||||||
import androidx.compose.ui.graphics.Color |
|
||||||
import androidx.compose.ui.graphics.ColorFilter |
|
||||||
import androidx.compose.ui.res.painterResource |
|
||||||
import androidx.compose.ui.tooling.preview.Preview |
|
||||||
import androidx.compose.ui.unit.dp |
|
||||||
import io.element.android.x.R |
|
||||||
|
|
||||||
@Preview |
|
||||||
@Composable |
|
||||||
internal fun IconPreview() { |
|
||||||
Box { |
|
||||||
Image(painter = painterResource(id = R.mipmap.ic_launcher_background), contentDescription = null) |
|
||||||
Image(painter = painterResource(id = R.mipmap.ic_launcher_foreground), contentDescription = null) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@Preview |
|
||||||
@Composable |
|
||||||
internal fun RoundIconPreview() { |
|
||||||
Box(modifier = Modifier.clip(shape = CircleShape)) { |
|
||||||
Image(painter = painterResource(id = R.mipmap.ic_launcher_background), contentDescription = null) |
|
||||||
Image(painter = painterResource(id = R.mipmap.ic_launcher_foreground), contentDescription = null) |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
@Preview |
|
||||||
@Composable |
|
||||||
internal fun MonochromeIconPreview() { |
|
||||||
Box( |
|
||||||
modifier = Modifier |
|
||||||
.size(108.dp) |
|
||||||
.background(Color(0xFF2F3133)) |
|
||||||
.clip(shape = RoundedCornerShape(32.dp)), |
|
||||||
contentAlignment = Alignment.Center |
|
||||||
) { |
|
||||||
Image( |
|
||||||
painter = painterResource(id = R.mipmap.ic_launcher_monochrome), |
|
||||||
colorFilter = ColorFilter.tint(Color(0xFFC3E0F6)), |
|
||||||
contentDescription = null |
|
||||||
) |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,26 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2024 New Vector Ltd |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
plugins { |
||||||
|
id("io.element.android-compose-library") |
||||||
|
} |
||||||
|
|
||||||
|
android { |
||||||
|
namespace = "io.element.android.appicon.element" |
||||||
|
|
||||||
|
buildTypes { |
||||||
|
register("nightly") |
||||||
|
} |
||||||
|
} |
Before Width: | Height: | Size: 263 KiB After Width: | Height: | Size: 263 KiB |
@ -0,0 +1,69 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2023 New Vector Ltd |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package io.element.android.appicon.element |
||||||
|
|
||||||
|
import androidx.compose.foundation.Image |
||||||
|
import androidx.compose.foundation.background |
||||||
|
import androidx.compose.foundation.layout.Box |
||||||
|
import androidx.compose.foundation.layout.size |
||||||
|
import androidx.compose.foundation.shape.CircleShape |
||||||
|
import androidx.compose.foundation.shape.RoundedCornerShape |
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import androidx.compose.ui.Alignment |
||||||
|
import androidx.compose.ui.Modifier |
||||||
|
import androidx.compose.ui.draw.clip |
||||||
|
import androidx.compose.ui.graphics.Color |
||||||
|
import androidx.compose.ui.graphics.ColorFilter |
||||||
|
import androidx.compose.ui.res.painterResource |
||||||
|
import androidx.compose.ui.tooling.preview.Preview |
||||||
|
import androidx.compose.ui.unit.dp |
||||||
|
|
||||||
|
@Preview |
||||||
|
@Composable |
||||||
|
internal fun IconPreview() { |
||||||
|
Box { |
||||||
|
Image(painter = painterResource(id = R.mipmap.ic_launcher_background), contentDescription = null) |
||||||
|
Image(painter = painterResource(id = R.mipmap.ic_launcher_foreground), contentDescription = null) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Preview |
||||||
|
@Composable |
||||||
|
internal fun RoundIconPreview() { |
||||||
|
Box(modifier = Modifier.clip(shape = CircleShape)) { |
||||||
|
Image(painter = painterResource(id = R.mipmap.ic_launcher_background), contentDescription = null) |
||||||
|
Image(painter = painterResource(id = R.mipmap.ic_launcher_foreground), contentDescription = null) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Preview |
||||||
|
@Composable |
||||||
|
internal fun MonochromeIconPreview() { |
||||||
|
Box( |
||||||
|
modifier = Modifier |
||||||
|
.size(108.dp) |
||||||
|
.background(Color(0xFF2F3133)) |
||||||
|
.clip(shape = RoundedCornerShape(32.dp)), |
||||||
|
contentAlignment = Alignment.Center |
||||||
|
) { |
||||||
|
Image( |
||||||
|
painter = painterResource(id = R.mipmap.ic_launcher_monochrome), |
||||||
|
colorFilter = ColorFilter.tint(Color(0xFFC3E0F6)), |
||||||
|
contentDescription = null |
||||||
|
) |
||||||
|
} |
||||||
|
} |
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 946 B After Width: | Height: | Size: 946 B |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.0 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.3 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
@ -0,0 +1,26 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2024 New Vector Ltd |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
plugins { |
||||||
|
id("io.element.android-compose-library") |
||||||
|
} |
||||||
|
|
||||||
|
android { |
||||||
|
namespace = "io.element.android.appicon.enterprise" |
||||||
|
|
||||||
|
buildTypes { |
||||||
|
register("nightly") |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,10 @@ |
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
android:width="108dp" |
||||||
|
android:height="108dp" |
||||||
|
android:viewportWidth="108" |
||||||
|
android:viewportHeight="108"> |
||||||
|
<path |
||||||
|
android:fillColor="#F7F07E" |
||||||
|
android:fillType="evenOdd" |
||||||
|
android:pathData="m0,0h108v108h-108z" /> |
||||||
|
</vector> |
@ -0,0 +1,53 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2024 New Vector Ltd |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package io.element.android.appicon.enterprise |
||||||
|
|
||||||
|
import androidx.compose.foundation.Image |
||||||
|
import androidx.compose.foundation.layout.Box |
||||||
|
import androidx.compose.foundation.shape.CircleShape |
||||||
|
import androidx.compose.runtime.Composable |
||||||
|
import androidx.compose.ui.Alignment |
||||||
|
import androidx.compose.ui.Modifier |
||||||
|
import androidx.compose.ui.draw.clip |
||||||
|
import androidx.compose.ui.res.painterResource |
||||||
|
import androidx.compose.ui.tooling.preview.Preview |
||||||
|
|
||||||
|
@Preview |
||||||
|
@Composable |
||||||
|
internal fun IconPreview() { |
||||||
|
Box { |
||||||
|
Image(painter = painterResource(id = R.mipmap.ic_launcher_background_enterprise), contentDescription = null) |
||||||
|
Image( |
||||||
|
modifier = Modifier.align(Alignment.Center), |
||||||
|
painter = painterResource(id = R.mipmap.ic_launcher_foreground_enterprise), |
||||||
|
contentDescription = null, |
||||||
|
) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Preview |
||||||
|
@Composable |
||||||
|
internal fun RoundIconPreview() { |
||||||
|
Box(modifier = Modifier.clip(shape = CircleShape)) { |
||||||
|
Image(painter = painterResource(id = R.mipmap.ic_launcher_background_enterprise), contentDescription = null) |
||||||
|
Image( |
||||||
|
modifier = Modifier.align(Alignment.Center), |
||||||
|
painter = painterResource(id = R.mipmap.ic_launcher_foreground_enterprise), |
||||||
|
contentDescription = null, |
||||||
|
) |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<!-- |
||||||
|
~ Copyright (c) 2024 New Vector Ltd |
||||||
|
~ |
||||||
|
~ Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
~ you may not use this file except in compliance with the License. |
||||||
|
~ You may obtain a copy of the License at |
||||||
|
~ |
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
~ |
||||||
|
~ Unless required by applicable law or agreed to in writing, software |
||||||
|
~ distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
~ See the License for the specific language governing permissions and |
||||||
|
~ limitations under the License. |
||||||
|
--> |
||||||
|
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> |
||||||
|
<background android:drawable="@drawable/ic_launcher_background_enterprise"/> |
||||||
|
<foreground android:drawable="@mipmap/ic_launcher_foreground_enterprise"/> |
||||||
|
</adaptive-icon> |
@ -0,0 +1,21 @@ |
|||||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||||
|
<!-- |
||||||
|
~ Copyright (c) 2024 New Vector Ltd |
||||||
|
~ |
||||||
|
~ Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
~ you may not use this file except in compliance with the License. |
||||||
|
~ You may obtain a copy of the License at |
||||||
|
~ |
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
~ |
||||||
|
~ Unless required by applicable law or agreed to in writing, software |
||||||
|
~ distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
~ See the License for the specific language governing permissions and |
||||||
|
~ limitations under the License. |
||||||
|
--> |
||||||
|
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> |
||||||
|
<background android:drawable="@drawable/ic_launcher_background_enterprise" /> |
||||||
|
<foreground android:drawable="@mipmap/ic_launcher_foreground_enterprise" /> |
||||||
|
</adaptive-icon> |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 4.7 KiB |
After Width: | Height: | Size: 19 KiB |
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 84 KiB |
@ -0,0 +1,10 @@ |
|||||||
|
<vector xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
android:width="108dp" |
||||||
|
android:height="108dp" |
||||||
|
android:viewportWidth="108" |
||||||
|
android:viewportHeight="108"> |
||||||
|
<path |
||||||
|
android:fillColor="#07007E" |
||||||
|
android:fillType="evenOdd" |
||||||
|
android:pathData="m0,0h108v108h-108z" /> |
||||||
|
</vector> |
@ -0,0 +1,2 @@ |
|||||||
|
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" |
||||||
|
android:src="@mipmap/ic_launcher_background_enterprise" /> |
@ -0,0 +1 @@ |
|||||||
|
Use a more natural date format for day dividers in the timeline. Also improve the time format for last messages in the room list. |
@ -0,0 +1 @@ |
|||||||
|
Resolve display names in mentions in real time, also send mentions with user ids as the fallback text for the link representation of the mentions. |
@ -0,0 +1 @@ |
|||||||
|
Alert for incoming call even if notifications are disabled |
@ -0,0 +1 @@ |
|||||||
|
Updated Rust SDK to `v0.2.28`. Fixed incompatibilities. |
@ -0,0 +1 @@ |
|||||||
|
Fix feature flags not being able to be toggle in developer settings in release builds. |
@ -0,0 +1 @@ |
|||||||
|
Let roles and permissions screens work for invited room members too. |
@ -0,0 +1 @@ |
|||||||
|
Make sure we replace the 'answer call' pending intent on ringing call notifications. |
@ -0,0 +1 @@ |
|||||||
|
Make sure we don't use the main dispatcher while closing the bug report request, as it can lead to crashes in strict mode. |
@ -0,0 +1,2 @@ |
|||||||
|
Main changes in this version: Composer draft support and bug fixes. |
||||||
|
Full changelog: https://github.com/element-hq/element-x-android/releases |