From d37b1b4dc30773a18815fd6564d5a48350a2a691 Mon Sep 17 00:00:00 2001 From: oluiscabral Date: Mon, 30 Jun 2025 18:07:17 -0300 Subject: [PATCH 01/91] PoC version --- .github/workflows/build.yml | 74 ---- .github/workflows/build_apk.yml | 51 +++ .gitignore | 18 +- LICENSE | 21 - app/build.gradle.kts | 91 ++-- .../drop/app/ExampleInstrumentedTest.kt | 22 + app/src/main/AndroidManifest.xml | 27 +- .../dev/arkbuilders/arkdrop/MainActivity.kt | 79 ---- .../feature/editprofile/EditProfileScreen.kt | 128 ------ .../filestransfers/FilesTransferScreen.kt | 147 ------- .../composables/UserWelcomeHeader.kt | 53 --- .../feature/qrcodescanner/QRCodeDrawable.kt | 71 --- .../qrcodescanner/QRCodeScannerActivity.kt | 129 ------ .../qrcodescanner/QRCodeScannerViewModel.kt | 38 -- .../feature/settings/SettingsScreen.kt | 101 ----- .../settings/composables/SettingsHeader.kt | 86 ---- .../TransferConfirmationScreen.kt | 233 ---------- .../TransferProgressScreen.kt | 143 ------ .../transferprogress/composables/FileItem.kt | 77 ---- .../composables/FileTransferAlertDialog.kt | 109 ----- .../composables/TransferParticipantHeader.kt | 79 ---- .../presentation/navigation/BottomTabBar.kt | 59 --- .../presentation/navigation/Destination.kt | 56 --- .../navigation/NavControllerExt.kt | 9 - .../presentation/navigation/NavRegister.kt | 28 -- .../permission/PermissionManager.kt | 76 ---- .../dev/arkbuilders/drop/app/MainActivity.kt | 84 ++++ .../dev/arkbuilders/drop/app/ui/home/Home.kt | 187 ++++++++ .../drop/app/ui/receive/Receive.kt | 409 ++++++++++++++++++ .../dev/arkbuilders/drop/app/ui/send/Send.kt | 385 +++++++++++++++++ .../{arkdrop => drop/app}/ui/theme/Color.kt | 8 +- .../{arkdrop => drop/app}/ui/theme/Theme.kt | 17 +- .../arkbuilders/drop/app/ui/theme/TopBar.kt | 61 +++ .../{arkdrop => drop/app}/ui/theme/Type.kt | 2 +- app/src/main/res/drawable/avatar_mock.png | Bin 193755 -> 0 bytes .../main/res/drawable/avatar_placeholder.png | Bin 0 -> 11030 bytes .../{transfer_background.xml => banner.xml} | 10 +- app/src/main/res/drawable/border_radius.xml | 12 - app/src/main/res/drawable/corner_borders.xml | 67 --- app/src/main/res/drawable/ic_back_new.xml | 5 - app/src/main/res/drawable/ic_document.xml | 27 ++ app/src/main/res/drawable/ic_image.xml | 27 ++ app/src/main/res/drawable/ic_link.xml | 13 + app/src/main/res/drawable/ic_music.xml | 27 ++ app/src/main/res/drawable/ic_pdf.xml | 19 + app/src/main/res/drawable/ic_video.xml | 27 ++ .../res/layout/activity_qrcode_scanner.xml | 63 --- .../ic_launcher.xml | 0 .../ic_launcher_round.xml | 0 app/src/main/res/values/colors.xml | 2 - app/src/main/res/values/strings.xml | 14 +- app/src/main/res/values/themes.xml | 2 +- app/src/main/res/xml/backup_rules.xml | 2 +- .../arkbuilders/drop/app/ExampleUnitTest.kt | 16 + build.gradle.kts | 8 +- gradle/libs.versions.toml | 79 ++-- gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew.bat | 178 ++++---- settings.gradle.kts | 22 +- 59 files changed, 1615 insertions(+), 2167 deletions(-) delete mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/build_apk.yml delete mode 100644 LICENSE create mode 100644 app/src/androidTest/java/dev/arkbuilders/drop/app/ExampleInstrumentedTest.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/MainActivity.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/editprofile/EditProfileScreen.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/filestransfers/FilesTransferScreen.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/filestransfers/composables/UserWelcomeHeader.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/qrcodescanner/QRCodeDrawable.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/qrcodescanner/QRCodeScannerActivity.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/qrcodescanner/QRCodeScannerViewModel.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/settings/SettingsScreen.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/settings/composables/SettingsHeader.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferconfirmation/TransferConfirmationScreen.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/TransferProgressScreen.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/composables/FileItem.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/composables/FileTransferAlertDialog.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/composables/TransferParticipantHeader.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/BottomTabBar.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/Destination.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/NavControllerExt.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/NavRegister.kt delete mode 100644 app/src/main/java/dev/arkbuilders/arkdrop/presentation/permission/PermissionManager.kt create mode 100644 app/src/main/java/dev/arkbuilders/drop/app/MainActivity.kt create mode 100644 app/src/main/java/dev/arkbuilders/drop/app/ui/home/Home.kt create mode 100644 app/src/main/java/dev/arkbuilders/drop/app/ui/receive/Receive.kt create mode 100644 app/src/main/java/dev/arkbuilders/drop/app/ui/send/Send.kt rename app/src/main/java/dev/arkbuilders/{arkdrop => drop/app}/ui/theme/Color.kt (50%) rename app/src/main/java/dev/arkbuilders/{arkdrop => drop/app}/ui/theme/Theme.kt (73%) create mode 100644 app/src/main/java/dev/arkbuilders/drop/app/ui/theme/TopBar.kt rename app/src/main/java/dev/arkbuilders/{arkdrop => drop/app}/ui/theme/Type.kt (95%) delete mode 100644 app/src/main/res/drawable/avatar_mock.png create mode 100644 app/src/main/res/drawable/avatar_placeholder.png rename app/src/main/res/drawable/{transfer_background.xml => banner.xml} (91%) delete mode 100644 app/src/main/res/drawable/border_radius.xml delete mode 100644 app/src/main/res/drawable/corner_borders.xml delete mode 100644 app/src/main/res/drawable/ic_back_new.xml create mode 100644 app/src/main/res/drawable/ic_document.xml create mode 100644 app/src/main/res/drawable/ic_image.xml create mode 100644 app/src/main/res/drawable/ic_link.xml create mode 100644 app/src/main/res/drawable/ic_music.xml create mode 100644 app/src/main/res/drawable/ic_pdf.xml create mode 100644 app/src/main/res/drawable/ic_video.xml delete mode 100644 app/src/main/res/layout/activity_qrcode_scanner.xml rename app/src/main/res/{mipmap-anydpi => mipmap-anydpi-v26}/ic_launcher.xml (100%) rename app/src/main/res/{mipmap-anydpi => mipmap-anydpi-v26}/ic_launcher_round.xml (100%) create mode 100644 app/src/test/java/dev/arkbuilders/drop/app/ExampleUnitTest.kt diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 3328b6a..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,74 +0,0 @@ -name: Build the app - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - check: - if: ${{ startsWith(github.actor, 'dependabot') }} - environment: Development - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'adopt' - cache: gradle - - - name: Validate Gradle wrapper - uses: gradle/wrapper-validation-action@v1.0.5 - - - name: Build debug APK - run: ./gradlew assembleDebug - - build: - if: ${{ ! startsWith(github.actor, 'dependabot') }} - environment: Development - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'adopt' - cache: gradle - - - name: Validate Gradle wrapper - uses: gradle/wrapper-validation-action@v1.0.5 - - - name: Build debug APK - run: ./gradlew assembleDebug - - - name: Upload debug arm64-v8a APK - uses: actions/upload-artifact@v3 - with: - name: ark-drop-debug-apk - path: ./app/build/outputs/apk/debug/app-debug.apk - - lint: - environment: Development - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - java-version: '17' - distribution: 'adopt' - - - name: Run linter - run: ./gradlew lint - - - uses: actions/upload-artifact@v3 - with: - name: lint-results - path: ./app/build/reports/lint-results-debug.html \ No newline at end of file diff --git a/.github/workflows/build_apk.yml b/.github/workflows/build_apk.yml new file mode 100644 index 0000000..3a7505e --- /dev/null +++ b/.github/workflows/build_apk.yml @@ -0,0 +1,51 @@ +name: Build APK + +on: + push: + branches: + - releases/v* + +jobs: + build: + runs-on: ubuntu-latest + env: + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + steps: + - uses: actions/checkout@v4 + + - name: Set RELEASE_VERSION + run: echo RELEASE_VERSION=$(echo $GITHUB_REF_NAME | cut -c11-) >> $GITHUB_ENV + + - name: Install JDK + uses: actions/setup-java@v4.7.1 + with: + distribution: "temurin" + java-version: "22" + + - name: Set up Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Set up Android SDK + uses: android-actions/setup-android@v3 + + - name: Decode keystore + run: | + echo -n "${{ secrets.KEYSTORE_BASE64 }}" | tr -d '\r\n' | base64 -d > keystore.jks + + - name: Build signed APK + run: ./gradlew assembleRelease + env: + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + KEYSTORE_PATH: ../keystore.jks + RELEASE_VERSION: ${{ env.RELEASE_VERSION }} + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + + - name: Upload APKs + uses: actions/upload-artifact@4.6.2 + with: + name: apks_${{ env.RELEASE_VERSION }} + path: app/build/outputs/apk/release/*.apk diff --git a/.gitignore b/.gitignore index d4ce834..259e370 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,14 @@ -*.iml -.gradle -/local.properties -.DS_Store +# JNILibs +/app/src/main/jniLibs + +# Development Setup /build +/.idea +/.kotlin +/.gradle /captures -.externalNativeBuild -.cxx local.properties -/.idea/ \ No newline at end of file +.cxx +.DS_Store +.externalNativeBuild + diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 5d67f89..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 ARK Builders - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b7fc253..7893a4f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,56 +1,62 @@ plugins { - alias(libs.plugins.androidApplication) - alias(libs.plugins.jetbrainsKotlinAndroid) + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.compose) } android { - namespace = "dev.arkbuilders.arkdrop" - compileSdk = 34 + namespace = "dev.arkbuilders.drop.app" + compileSdk = 36 + + signingConfigs { + create("release") { + keyAlias = System.getenv("KEY_ALIAS") + keyPassword = System.getenv("KEY_PASSWORD") + storePassword = System.getenv("KEYSTORE_PASSWORD") + storeFile = file(System.getenv("KEYSTORE_PATH")) + } + } defaultConfig { - applicationId = "dev.arkbuilders.arkdrop" - minSdk = 31 - targetSdk = 34 + applicationId = "dev.arkbuilders.drop.app" + minSdk = 29 + targetSdk = 36 versionCode = 1 - versionName = "1.0" + versionName = System.getenv("RELEASE_VERSION") ?: "dev" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - vectorDrawables { - useSupportLibrary = true - } } buildTypes { release { isMinifyEnabled = false + signingConfig = signingConfigs.getByName("release") proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" + getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" ) } } + compileOptions { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 } + kotlinOptions { - jvmTarget = "17" + jvmTarget = "11" } + buildFeatures { compose = true } - composeOptions { - kotlinCompilerExtensionVersion = "1.5.3" - } + packaging { - resources { - excludes += "/META-INF/{AL2.0,LGPL2.1}" - } + jniLibs.excludes.add("META-INF/AL2.0") + jniLibs.excludes.add("META-INF/LGPL2.1") } } dependencies { - implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) @@ -59,27 +65,48 @@ dependencies { implementation(libs.androidx.ui.graphics) implementation(libs.androidx.ui.tooling.preview) implementation(libs.androidx.material3) + + // NAVIGATION implementation(libs.androidx.navigation.compose) - implementation(libs.androidx.material.icons.extended) - implementation(libs.androidx.appcompat) - implementation(libs.material) - implementation(libs.androidx.activity) - implementation(libs.androidx.constraintlayout) + // Bindings setup + implementation(libs.jna) { + artifact { + extension = "aar" + type = "aar" + } + } + //noinspection Aligned16KB + implementation("dev.arkbuilders:drop:1.1.4") { + artifact { + extension = "aar" + type = "aar" + } + } + + // QR CODE create setup + implementation(libs.google.zxing.core) + implementation(libs.google.zxing.javase) + implementation(libs.github.yuriy.budiyev.code.scanner) + + // QR CODE SCAN implementation(libs.androidx.camera.core) implementation(libs.androidx.camera.camera2) implementation(libs.androidx.camera.lifecycle) implementation(libs.androidx.camera.view) - implementation (libs.androidx.camera.mlkit.vision) - implementation(libs.barcode.scanning) + implementation(libs.mlkit.barcode.scanning) + implementation(libs.accompanist.permissions) + // DEVELOPMENT SETUP testImplementation(libs.junit) - androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) androidTestImplementation(platform(libs.androidx.compose.bom)) androidTestImplementation(libs.androidx.ui.test.junit4) - debugImplementation(libs.androidx.ui.tooling) debugImplementation(libs.androidx.ui.test.manifest) } + +tasks.named("clean") { + delete(fileTree("$projectDir/src/main/jniLibs")) +} diff --git a/app/src/androidTest/java/dev/arkbuilders/drop/app/ExampleInstrumentedTest.kt b/app/src/androidTest/java/dev/arkbuilders/drop/app/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..12b1c32 --- /dev/null +++ b/app/src/androidTest/java/dev/arkbuilders/drop/app/ExampleInstrumentedTest.kt @@ -0,0 +1,22 @@ +package dev.arkbuilders.drop.app + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import org.junit.Assert +import org.junit.Test +import org.junit.runner.RunWith + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + Assert.assertEquals("dev.arkbuilders.drop", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5f49a69..d0074db 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,17 +1,18 @@ - + - - - + + - + + + + + - + android:theme="@style/Theme.Drop" + tools:targetApi="31"> + android:label="@string/app_name" + android:theme="@style/Theme.Drop"> diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/MainActivity.kt b/app/src/main/java/dev/arkbuilders/arkdrop/MainActivity.kt deleted file mode 100644 index 22b47ff..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/MainActivity.kt +++ /dev/null @@ -1,79 +0,0 @@ -package dev.arkbuilders.arkdrop - -import android.os.Bundle -import androidx.activity.ComponentActivity -import androidx.activity.compose.setContent -import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.ui.Modifier -import androidx.compose.ui.tooling.preview.Preview -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.currentBackStackEntryAsState -import androidx.navigation.compose.rememberNavController -import dev.arkbuilders.arkdrop.presentation.navigation.BottomTab -import dev.arkbuilders.arkdrop.presentation.navigation.TransfersDestination -import dev.arkbuilders.arkdrop.presentation.navigation.navRegistration -import dev.arkbuilders.arkdrop.presentation.permission.PermissionManager -import dev.arkbuilders.arkdrop.ui.theme.ARKDropTheme - -class MainActivity : ComponentActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - // Register ActivityResult handler - val requestPermissions = - registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { results -> - // Handle permission requests results - // See the permission example in the Android platform samples: https://github.com/android/platform-samples - } - - PermissionManager.initialize(requestPermissions) - PermissionManager.requestPermission(baseContext) - setContent { - ARKDropTheme { - // A surface container using the 'background' color from the theme - val navController = rememberNavController() - val currentBackStack by navController.currentBackStackEntryAsState() - val currentDestination = currentBackStack?.destination - val scope = rememberCoroutineScope() - - Scaffold( - bottomBar = { - BottomTab( - navController = navController, - currentDestination = currentDestination - ) - }) { innerPadding -> - NavHost( - navController, - startDestination = TransfersDestination.route, - Modifier.padding(innerPadding) - ) { - navRegistration(navController) - } - } - - } - } - } -} - -@Composable -fun Greeting(name: String, modifier: Modifier = Modifier) { - Text( - text = "Hello $name!", - modifier = modifier - ) -} - -@Preview(showBackground = true) -@Composable -fun GreetingPreview() { - ARKDropTheme { - Greeting("Android") - } -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/editprofile/EditProfileScreen.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/editprofile/EditProfileScreen.kt deleted file mode 100644 index 19f65a2..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/editprofile/EditProfileScreen.kt +++ /dev/null @@ -1,128 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.feature.editprofile - -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowForwardIos -import androidx.compose.material.icons.filled.ArrowBackIosNew -import androidx.compose.material.icons.filled.Close -import androidx.compose.material3.Button -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.OutlinedTextField -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.material3.TextButton -import androidx.compose.material3.TextFieldDefaults -import androidx.compose.material3.TopAppBar -import androidx.compose.material3.TopAppBarDefaults -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.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import dev.arkbuilders.arkdrop.R -import dev.arkbuilders.arkdrop.ui.theme.BlueDark600 - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun EditProfileScreen(modifier: Modifier = Modifier) { - Scaffold( - topBar = { - TopAppBar( - colors = TopAppBarDefaults.topAppBarColors( - containerColor = Color.White - ), - title = { Text(stringResource(R.string.edit_profile_title)) }, - navigationIcon = { - IconButton( - onClick = { - }, - ) { - Icon( - imageVector = Icons.Filled.ArrowBackIosNew, - contentDescription = null - ) - Spacer(modifier = modifier.width(ButtonDefaults.IconSpacing)) - } - }) - } - ) { padding -> - Column( - modifier = modifier - .fillMaxSize() - .padding(padding) - .padding(horizontal = 20.dp), horizontalAlignment = Alignment.CenterHorizontally - ) { - Spacer(modifier = modifier.height(24.dp)) - - Image( - painter = painterResource(id = R.drawable.avatar_mock), - contentDescription = null, - modifier = modifier - .size(128.dp) - .clip(CircleShape) - ) - Spacer(modifier = modifier.height(12.dp)) - TextButton( - onClick = { - // Open gallery picker - }, - colors = ButtonDefaults.textButtonColors( - contentColor = Color.Black - ) - ) { - Text("Change Avatar") - Spacer(modifier = modifier.width(ButtonDefaults.IconSpacing)) - Icon( - imageVector = Icons.AutoMirrored.Filled.ArrowForwardIos, - contentDescription = null - ) - } - Spacer(modifier = modifier.height(24.dp)) - OutlinedTextField( - modifier = modifier - .fillMaxWidth(), - value = "", onValueChange = {}, - trailingIcon = { - Icon(imageVector = Icons.Filled.Close, contentDescription = null) - }, - shape = RoundedCornerShape(24.dp), - colors = TextFieldDefaults.colors() - ) - Spacer(modifier = modifier.height(24.dp)) - Button( - modifier = modifier - .fillMaxWidth(), - onClick = { - }, - colors = ButtonDefaults.buttonColors( - containerColor = BlueDark600, - ), - ) { - Text("Save") - } - } - } -} - -@Preview -@Composable -fun PreviewEditProfileScreen() { - EditProfileScreen() -} diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/filestransfers/FilesTransferScreen.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/filestransfers/FilesTransferScreen.kt deleted file mode 100644 index 76d1a30..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/filestransfers/FilesTransferScreen.kt +++ /dev/null @@ -1,147 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.feature.filestransfers - -import android.content.Intent -import android.net.Uri -import androidx.activity.compose.rememberLauncherForActivityResult -import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.foundation.Image -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowCircleDown -import androidx.compose.material.icons.filled.ArrowCircleUp -import androidx.compose.material3.Button -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.HorizontalDivider -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.navigation.NavController -import androidx.navigation.compose.rememberNavController -import dev.arkbuilders.arkdrop.R -import dev.arkbuilders.arkdrop.presentation.navigation.TransferConfirmationDestination -import dev.arkbuilders.arkdrop.presentation.feature.filestransfers.composables.UserWelcomeHeader -import dev.arkbuilders.arkdrop.presentation.feature.qrcodescanner.QRCodeScannerActivity -import dev.arkbuilders.arkdrop.presentation.permission.PermissionManager -import dev.arkbuilders.arkdrop.ui.theme.Background -import dev.arkbuilders.arkdrop.ui.theme.BlueDark600 - -@Composable -fun FilesTransferScreen( - modifier: Modifier = Modifier, - navController: NavController -) { - val result = remember { mutableStateOf(null) } - val launcher = rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { -// result.value = it - navController.navigate(TransferConfirmationDestination.route) - } - Column( - modifier = modifier - .fillMaxSize() - .background(Background) - ) { - UserWelcomeHeader(modifier = modifier) - HorizontalDivider( - color = Color.LightGray, - modifier = modifier - .height(1.dp) - .fillMaxWidth() - ) - Spacer(modifier = modifier.height(64.dp)) - Image( - modifier = modifier - .fillMaxWidth() - .height(256.dp), - painter = painterResource(id = R.drawable.transfer_background), - contentDescription = null, - ) - Text( - modifier = modifier - .fillMaxWidth() - .padding(horizontal = 20.dp), - text = stringResource(R.string.files_transfer_seamless_to_transfer_your_files), - style = MaterialTheme.typography.titleLarge, - textAlign = TextAlign.Center, - ) - Spacer(modifier = modifier.height(8.dp)) - Text( - modifier = modifier - .fillMaxWidth() - .padding(horizontal = 20.dp), - textAlign = TextAlign.Center, - text = stringResource(R.string.files_transfer_simple_fast_and_limitless_start_sharing_your_files_now), - ) - Row( - modifier = modifier - .fillMaxWidth() - .align(Alignment.CenterHorizontally) - .padding(20.dp), - horizontalArrangement = Arrangement.SpaceBetween - ) { - Button( - modifier = modifier - .weight(1.0f) - .padding(8.dp), - onClick = { - launcher.launch("*/*") - }, - colors = ButtonDefaults.buttonColors( - containerColor = BlueDark600, - ), - ) { - Icon(imageVector = Icons.Filled.ArrowCircleUp, contentDescription = null) - Spacer(modifier = modifier.width(ButtonDefaults.IconSpacing)) - Text(stringResource(R.string.files_transfer_send)) - } - val context = LocalContext.current - Button( - modifier = modifier - .weight(1.0f) - .padding(8.dp), - onClick = { - if (PermissionManager.isCameraPermissionGranted(context)) { - Intent(context, QRCodeScannerActivity::class.java).run { - context.startActivity(this) - } - } else { - PermissionManager.requestCameraPermission() - } - }, - colors = ButtonDefaults.buttonColors( - containerColor = BlueDark600, - ), - ) { - Icon(imageVector = Icons.Filled.ArrowCircleDown, contentDescription = null) - Spacer(modifier = modifier.width(ButtonDefaults.IconSpacing)) - Text(stringResource(R.string.files_transfer_receive)) - } - } - } -} - -@Preview -@Composable -fun PreviewFilesTransferScreen() { - FilesTransferScreen(navController = rememberNavController()) -} diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/filestransfers/composables/UserWelcomeHeader.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/filestransfers/composables/UserWelcomeHeader.kt deleted file mode 100644 index 5b3199d..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/filestransfers/composables/UserWelcomeHeader.kt +++ /dev/null @@ -1,53 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.feature.filestransfers.composables - -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -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.res.stringResource -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import dev.arkbuilders.arkdrop.R - -@Composable -fun UserWelcomeHeader(modifier: Modifier = Modifier) { - Row( - modifier = modifier - .fillMaxWidth() - .padding(20.dp), - horizontalArrangement = Arrangement.SpaceBetween, - verticalAlignment = Alignment.CenterVertically - ) { - Column { - Text(stringResource(R.string.files_transfer_hi_user)) - Text( - stringResource(R.string.files_transfer_welcome_back), - style = MaterialTheme.typography.titleMedium - ) - } - Image( - painter = painterResource(id = R.drawable.avatar_mock), - contentDescription = null, - modifier = modifier - .size(64.dp) - .clip(CircleShape) - ) - } -} - -@Preview -@Composable -fun PreviewUserWelcomeHeader() { - UserWelcomeHeader() -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/qrcodescanner/QRCodeDrawable.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/qrcodescanner/QRCodeDrawable.kt deleted file mode 100644 index f405d3b..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/qrcodescanner/QRCodeDrawable.kt +++ /dev/null @@ -1,71 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.feature.qrcodescanner - -import android.graphics.Canvas -import android.graphics.Color -import android.graphics.ColorFilter -import android.graphics.Paint -import android.graphics.PixelFormat -import android.graphics.Rect -import android.graphics.drawable.Drawable - -class QRCodeDrawable(private val qrCodeViewModel: QRCodeScannerViewModel) : Drawable() { - private val boundingRectPaint = Paint().apply { - style = Paint.Style.STROKE - color = Color.YELLOW - strokeWidth = 5F - alpha = 200 - } - - private val contentRectPaint = Paint().apply { - style = Paint.Style.FILL - color = Color.YELLOW - alpha = 255 - } - - private val contentTextPaint = Paint().apply { - color = Color.DKGRAY - alpha = 255 - textSize = 36F - } - - private val contentPadding = 25 - private var textWidth = contentTextPaint.measureText(qrCodeViewModel.qrContent).toInt() - - override fun draw(canvas: Canvas) { - qrCodeViewModel.boundingRect?.let { rect -> - canvas.apply { - drawRect(rect, boundingRectPaint) - drawRect( - Rect( - rect.left, - rect.bottom + contentPadding / 2, - rect.left + textWidth + contentPadding * 2, - rect.bottom + contentTextPaint.textSize.toInt() + contentPadding - ), - contentRectPaint - ) - drawText( - qrCodeViewModel.qrContent, - (rect.left + contentPadding).toFloat(), - (rect.bottom + contentPadding * 2).toFloat(), - contentTextPaint - ) - } - } - } - - override fun setAlpha(alpha: Int) { - boundingRectPaint.alpha = alpha - contentRectPaint.alpha = alpha - contentTextPaint.alpha = alpha - } - - override fun setColorFilter(colorFiter: ColorFilter?) { - boundingRectPaint.colorFilter = colorFilter - contentRectPaint.colorFilter = colorFilter - contentTextPaint.colorFilter = colorFilter - } - - @Deprecated("Deprecated in Java") - override fun getOpacity(): Int = PixelFormat.TRANSLUCENT -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/qrcodescanner/QRCodeScannerActivity.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/qrcodescanner/QRCodeScannerActivity.kt deleted file mode 100644 index e51c468..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/qrcodescanner/QRCodeScannerActivity.kt +++ /dev/null @@ -1,129 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.feature.qrcodescanner - -import android.Manifest -import android.content.pm.PackageManager -import android.os.Bundle -import android.widget.Button -import android.widget.Toast -import androidx.activity.enableEdgeToEdge -import androidx.appcompat.app.AppCompatActivity -import androidx.camera.core.ImageAnalysis -import androidx.camera.mlkit.vision.MlKitAnalyzer -import androidx.camera.view.LifecycleCameraController -import androidx.camera.view.PreviewView -import androidx.core.app.ActivityCompat -import androidx.core.content.ContextCompat -import androidx.core.view.ViewCompat -import androidx.core.view.WindowInsetsCompat -import dev.arkbuilders.arkdrop.R -import com.google.mlkit.vision.barcode.BarcodeScanner -import com.google.mlkit.vision.barcode.BarcodeScannerOptions -import com.google.mlkit.vision.barcode.BarcodeScanning -import com.google.mlkit.vision.barcode.common.Barcode - - -class QRCodeScannerActivity : AppCompatActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - enableEdgeToEdge() - setContentView(R.layout.activity_qrcode_scanner) - val button: Button = findViewById(R.id.backButton) - button.setOnClickListener { - finish() - } - supportActionBar?.hide() - ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> - val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) - v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) - insets - } - // Request camera permissions - if (allPermissionsGranted()) { - startCamera() - } else { - ActivityCompat.requestPermissions( - this, REQUIRED_PERMISSIONS, REQUEST_CODE_PERMISSIONS - ) - } - } - - private lateinit var barcodeScanner: BarcodeScanner - - private fun startCamera() { - val cameraController = LifecycleCameraController(baseContext) - val previewView: PreviewView = findViewById(R.id.viewFinder) - - val options = BarcodeScannerOptions.Builder() - .setBarcodeFormats(Barcode.FORMAT_QR_CODE) - .build() - barcodeScanner = BarcodeScanning.getClient(options) - - cameraController.setImageAnalysisAnalyzer( - ContextCompat.getMainExecutor(this), - MlKitAnalyzer( - listOf(barcodeScanner), - ImageAnalysis.COORDINATE_SYSTEM_VIEW_REFERENCED , - ContextCompat.getMainExecutor(this) - ) { result: MlKitAnalyzer.Result? -> - val barcodeResults = result?.getValue(barcodeScanner) - if (barcodeResults.isNullOrEmpty()) { - previewView.overlay.clear() - previewView.setOnTouchListener { _, _ -> false } //no-op - return@MlKitAnalyzer - } - - val qrCodeViewModel = QRCodeScannerViewModel(barcodeResults[0]) - val qrCodeDrawable = QRCodeDrawable(qrCodeViewModel) - previewView.apply { - setOnTouchListener(qrCodeViewModel.qrCodeTouchCallback) - overlay.apply { - clear() - add(qrCodeDrawable) - } - } - } - ) - - cameraController.bindToLifecycle(this) - previewView.controller = cameraController - } - - private fun allPermissionsGranted() = REQUIRED_PERMISSIONS.all { - ContextCompat.checkSelfPermission( - baseContext, it - ) == PackageManager.PERMISSION_GRANTED - } - - override fun onDestroy() { - super.onDestroy() - barcodeScanner.close() - } - - companion object { - private const val REQUEST_CODE_PERMISSIONS = 10 - private val REQUIRED_PERMISSIONS = - mutableListOf( - Manifest.permission.CAMERA - ).toTypedArray() - } - - override fun onRequestPermissionsResult( - requestCode: Int, permissions: Array, grantResults: - IntArray - ) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults) - if (requestCode == REQUEST_CODE_PERMISSIONS) { - if (allPermissionsGranted()) { - startCamera() - } else { - Toast.makeText( - this, - "Permissions not granted by the user.", - Toast.LENGTH_SHORT - ).show() - finish() - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/qrcodescanner/QRCodeScannerViewModel.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/qrcodescanner/QRCodeScannerViewModel.kt deleted file mode 100644 index ad26929..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/qrcodescanner/QRCodeScannerViewModel.kt +++ /dev/null @@ -1,38 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.feature.qrcodescanner - -import android.content.Intent -import android.graphics.Rect -import android.net.Uri -import android.view.MotionEvent -import android.view.View -import com.google.mlkit.vision.barcode.common.Barcode - -class QRCodeScannerViewModel(barcode: Barcode) { - - var boundingRect: Rect? = barcode.boundingBox - var qrContent: String = "" - var qrCodeTouchCallback = { v: View, e: MotionEvent -> false } //no-op - - init { - when (barcode.valueType) { - Barcode.TYPE_URL -> { - qrContent = barcode.url?.url ?: "" - qrCodeTouchCallback = { v: View, e: MotionEvent -> - if (e.action == MotionEvent.ACTION_DOWN - && boundingRect?.contains(e.x.toInt(), e.y.toInt()) == true - ) { - val openBrowserIntent = Intent(Intent.ACTION_VIEW) - openBrowserIntent.data = Uri.parse(qrContent) - v.context.startActivity(openBrowserIntent) - } - true // return true from the callback to signify the event was handled - } - } - // Add other QR Code types here to handle other types of data, - // like Wifi credentials. - else -> { - qrContent = "Unsupported data type: ${barcode.rawValue.toString()}" - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/settings/SettingsScreen.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/settings/SettingsScreen.kt deleted file mode 100644 index e775e2d..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/settings/SettingsScreen.kt +++ /dev/null @@ -1,101 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.feature.settings - -import androidx.compose.foundation.background -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.outlined.TextSnippet -import androidx.compose.material.icons.outlined.PrivacyTip -import androidx.compose.material.icons.outlined.Quiz -import androidx.compose.material.icons.outlined.Star -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.vector.ImageVector -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import dev.arkbuilders.arkdrop.presentation.feature.settings.composables.SettingsHeader -import dev.arkbuilders.arkdrop.ui.theme.Background -import dev.arkbuilders.arkdrop.ui.theme.LightBlack - -@Composable -fun SettingsScreen(modifier: Modifier = Modifier) { - Column( - modifier = modifier - .fillMaxSize() - .background(Background), - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - SettingsHeader() - settingsItemList.map { item -> - Row( - modifier = modifier - .fillMaxWidth() - .padding( - horizontal = 20.dp, - vertical = 8.dp - ) - .clickable { - - }, - verticalAlignment = Alignment.CenterVertically - ) { - Icon( - imageVector = item.icon, - contentDescription = null, - tint = LightBlack, - ) - Spacer(modifier = modifier.width(ButtonDefaults.IconSpacing)) - Text( - text = item.text, - color = LightBlack, - style = MaterialTheme.typography.bodyMedium, - fontWeight = FontWeight.SemiBold - ) - } - } - } -} - -private data class SettingsItem( - val icon: ImageVector, - val text: String -) - -private val settingsItemList = listOf( - SettingsItem( - icon = Icons.AutoMirrored.Outlined.TextSnippet, - text = "Terms of service" - ), - SettingsItem( - icon = Icons.Outlined.PrivacyTip, - text = "Terms of service" - ), - SettingsItem( - icon = Icons.Outlined.Star, - text = "Rate Us" - ), - SettingsItem( - icon = Icons.Outlined.Quiz, - text = "Feedback" - ) -) - -@Preview -@Composable -fun PreviewSettingsScreen() { - SettingsScreen() -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/settings/composables/SettingsHeader.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/settings/composables/SettingsHeader.kt deleted file mode 100644 index 0764315..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/settings/composables/SettingsHeader.kt +++ /dev/null @@ -1,86 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.feature.settings.composables - -import androidx.compose.foundation.Image -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Edit -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -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.res.painterResource -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import dev.arkbuilders.arkdrop.R -import dev.arkbuilders.arkdrop.ui.theme.Background -import dev.arkbuilders.arkdrop.ui.theme.BlueDark600 - -@Composable -fun SettingsHeader(modifier: Modifier = Modifier) { - Column( - modifier = modifier - .background( - BlueDark600 - ) - .fillMaxWidth() - .padding(16.dp) - ) { - Text( - "Settings", - style = MaterialTheme.typography.titleLarge, - color = Color.White - ) - Spacer(modifier = modifier.height(24.dp)) - Row( - modifier = modifier - .fillMaxWidth() - .clip(RoundedCornerShape(16.dp)) - .background(Background.copy(alpha = 0.2f)) - .padding(16.dp), - verticalAlignment = Alignment.CenterVertically - ) { - Image( - painter = painterResource(id = R.drawable.avatar_mock), - contentDescription = null, - modifier = modifier - .size(64.dp) - .clip(CircleShape) - ) - Spacer(modifier = modifier.width(12.dp)) - Text( - text = "Gillbert", - modifier = modifier.weight(1.0f), - color = Color.White, - style = MaterialTheme.typography.titleLarge - ) - Icon( - modifier = modifier - .clip(RoundedCornerShape(6.dp)) - .background(Color.White) - .padding(4.dp), - imageVector = Icons.Filled.Edit, - contentDescription = null - ) - } - } -} - -@Preview -@Composable -fun PreviewSettingsHeader() { - SettingsHeader() -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferconfirmation/TransferConfirmationScreen.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferconfirmation/TransferConfirmationScreen.kt deleted file mode 100644 index 97646bd..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferconfirmation/TransferConfirmationScreen.kt +++ /dev/null @@ -1,233 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.feature.transferconfirmation - -import android.content.Intent -import androidx.compose.foundation.background -import androidx.compose.foundation.border -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.rememberScrollState -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.ArrowBackIosNew -import androidx.compose.material.icons.outlined.Link -import androidx.compose.material.icons.outlined.Lock -import androidx.compose.material.icons.outlined.QrCode2 -import androidx.compose.material.icons.outlined.QrCodeScanner -import androidx.compose.material.icons.outlined.Visibility -import androidx.compose.material.icons.outlined.VisibilityOff -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.material3.TextButton -import androidx.compose.material3.TopAppBar -import androidx.compose.material3.TopAppBarDefaults -import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -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.vector.ImageVector -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.navigation.NavController -import androidx.navigation.compose.rememberNavController -import dev.arkbuilders.arkdrop.R -import dev.arkbuilders.arkdrop.presentation.feature.qrcodescanner.QRCodeScannerActivity -import dev.arkbuilders.arkdrop.presentation.navigation.TransferProgressDestination -import dev.arkbuilders.arkdrop.presentation.permission.PermissionManager -import dev.arkbuilders.arkdrop.ui.theme.Background -import dev.arkbuilders.arkdrop.ui.theme.BlueDark600 - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun TransferConfirmationScreen( - modifier: Modifier = Modifier, - navController: NavController -) { - Scaffold( - topBar = { - TopAppBar( - colors = TopAppBarDefaults.topAppBarColors( - containerColor = Color.White - ), - title = {}, - navigationIcon = { - TextButton( - onClick = { - navController.navigateUp() - }, - colors = ButtonDefaults.textButtonColors( - contentColor = Color.Black - ) - ) { - Icon( - imageVector = Icons.Filled.ArrowBackIosNew, - contentDescription = null - ) - Spacer(modifier = modifier.width(ButtonDefaults.IconSpacing)) - Text(stringResource(R.string.back)) - } - }, - actions = { - val context = LocalContext.current - TextButton( - onClick = { - // Launch camera for QR scanning - if (PermissionManager.isCameraPermissionGranted(context)) { - context.startActivity( - Intent( - context, - QRCodeScannerActivity::class.java - ) - ) - } else { - PermissionManager.requestCameraPermission() - } - }, - colors = ButtonDefaults.textButtonColors( - contentColor = BlueDark600 - ) - ) { - Icon( - imageVector = Icons.Outlined.QrCodeScanner, - contentDescription = null - ) - Spacer(modifier = modifier.width(ButtonDefaults.IconSpacing)) - Text(stringResource(R.string.scan)) - } - } - ) - } - ) { padding -> - val isConfirmationCodeShown = remember { - mutableStateOf(false) - } - Column( - modifier = modifier - .fillMaxSize() - .verticalScroll(rememberScrollState()) - .background(Background) - .padding(padding) - .padding(horizontal = 16.dp), - horizontalAlignment = Alignment.CenterHorizontally - ) { - Row( - modifier = modifier - .fillMaxWidth(), - horizontalArrangement = Arrangement.Center, - verticalAlignment = Alignment.CenterVertically - ) { - Icon(imageVector = Icons.Outlined.Lock, contentDescription = null) - Spacer(modifier = modifier.width(12.dp)) - Text( - stringResource(R.string.transfer_confirmation_confirmation_code), - style = MaterialTheme.typography.bodyLarge - ) - } - Spacer(modifier = modifier.height(12.dp)) - Text( - modifier = modifier - .clip(RoundedCornerShape(100 / 2)) - .background(Color.Gray.copy(0.2f)) - .padding(12.dp), - text = maskedText(isConfirmationCodeShown.value), - style = MaterialTheme.typography.titleMedium, - fontWeight = FontWeight.Bold - ) - - Spacer(modifier = modifier.height(8.dp)) - TextButton( - onClick = { - isConfirmationCodeShown.value = !isConfirmationCodeShown.value - }, - colors = ButtonDefaults.textButtonColors( - contentColor = BlueDark600 - ) - ) { - Icon( - imageVector = extractIcon(isConfirmationCodeShown.value), - contentDescription = null - ) - Spacer(modifier = modifier.width(ButtonDefaults.IconSpacing)) - Text(extractText(isConfirmationCodeShown.value)) - } - Spacer(modifier = modifier.height(64.dp)) - Icon( - imageVector = Icons.Outlined.QrCode2, - modifier = modifier.size(320.dp), - contentDescription = null - ) - Spacer(modifier = modifier.height(24.dp)) - Text( - modifier = modifier - .fillMaxWidth() - .clickable { - navController.navigate(TransferProgressDestination.route) - }, - text = stringResource(id = R.string.waiting_for_connect), - textAlign = TextAlign.Center, - style = MaterialTheme.typography.titleMedium - ) - Spacer(modifier = modifier.height(12.dp)) - Row( - modifier = modifier - .border( - width = 1.dp, color = Color.LightGray, - shape = RoundedCornerShape(4.dp) - ) - .fillMaxWidth() - .padding(8.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.Center - ) { - Icon( - imageVector = Icons.Outlined.Link, contentDescription = null, - modifier = modifier.size(24.dp) - ) - Text("Hash Code:", modifier = modifier.padding(horizontal = 6.dp)) - Text( - "3910-LKA9-28HS-HAXX-72LA", - fontWeight = FontWeight.SemiBold - ) - } - } - } -} - -private fun extractIcon(isShown: Boolean): ImageVector { - return if (isShown) Icons.Outlined.VisibilityOff else Icons.Outlined.Visibility -} - -private fun extractText(isShown: Boolean): String { - return if (isShown) "Hide" else "Show" -} - -private fun maskedText(isShown: Boolean): String { - return if (isShown) "23" else "• •" -} - - -@Preview -@Composable -private fun PreviewTransferConfirmation() { - TransferConfirmationScreen(navController = rememberNavController()) -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/TransferProgressScreen.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/TransferProgressScreen.kt deleted file mode 100644 index ee108d2..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/TransferProgressScreen.kt +++ /dev/null @@ -1,143 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.feature.transferprogress - -import androidx.compose.foundation.BorderStroke -import androidx.compose.foundation.background -import androidx.compose.foundation.border -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.outlined.AddCircleOutline -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.OutlinedButton -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBar -import androidx.compose.material3.TopAppBarDefaults -import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.navigation.NavController -import androidx.navigation.compose.rememberNavController -import dev.arkbuilders.arkdrop.presentation.feature.transferprogress.composables.FileItem -import dev.arkbuilders.arkdrop.presentation.feature.transferprogress.composables.FileTransferAlertDialog -import dev.arkbuilders.arkdrop.presentation.feature.transferprogress.composables.TransferParticipantHeader -import dev.arkbuilders.arkdrop.ui.theme.Background -import dev.arkbuilders.arkdrop.ui.theme.BlueDark600 - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun TransferProgressScreen( - modifier: Modifier = Modifier, - navController: NavController -) { - val openAlertDialog = remember { mutableStateOf(false) } - - Scaffold( - topBar = { - TopAppBar( - colors = TopAppBarDefaults.topAppBarColors( - containerColor = Color.White - ), - title = { Text("Transferring Files") }, - navigationIcon = { - IconButton( - onClick = { - navController.navigateUp() - }, - ) { - Icon( - imageVector = Icons.Filled.Close, - contentDescription = null - ) - } - }) - } - ) { padding -> - Column( - modifier = modifier - .background(Background) - .fillMaxSize() - .padding(padding), - horizontalAlignment = Alignment.CenterHorizontally - ) { - TransferParticipantHeader() - LazyColumn( - contentPadding = PaddingValues(16.dp), - verticalArrangement = Arrangement.spacedBy(8.dp), - ) { - items(listOf(1, 2, 3)) { item -> - Box( - modifier = modifier - .fillMaxWidth() - .border( - width = 0.5.dp, color = Color.LightGray, - shape = RoundedCornerShape(25) - ) - .padding(16.dp) - ) { - FileItem(modifier = modifier, - onCloseIconClick = { - openAlertDialog.value = true - } - ) - } - } - } - OutlinedButton( - onClick = { - - }, - colors = ButtonDefaults.outlinedButtonColors( - contentColor = BlueDark600 - ), - border = BorderStroke( - width = 1.dp, - color = BlueDark600, - )) { - Icon( - imageVector = Icons.Outlined.AddCircleOutline, - contentDescription = null - ) - Text("Send more") - } - - if (openAlertDialog.value) { - FileTransferAlertDialog( - onDismissRequest = { openAlertDialog.value = false }, - onConfirmation = { /*TODO*/ }, - dialogTitle = "Cancel this file", - dialogText = "When you remove this file it cannot be undone.", - ) { - FileItem(modifier = modifier) - } - } else { - - } - } - } - - -} - -@Preview -@Composable -fun PreviewTransferProgressScreen() { - TransferProgressScreen(navController = rememberNavController()) -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/composables/FileItem.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/composables/FileItem.kt deleted file mode 100644 index c7f96b3..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/composables/FileItem.kt +++ /dev/null @@ -1,77 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.feature.transferprogress.composables - -import androidx.compose.foundation.border -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Close -import androidx.compose.material.icons.filled.FileCopy -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import dev.arkbuilders.arkdrop.ui.theme.BlueDark600 - -@Composable -fun FileItem( - modifier: Modifier = Modifier, - onCloseIconClick: (() -> Unit)? = null -) { - Row( - modifier = modifier.fillMaxWidth(), - verticalAlignment = Alignment.CenterVertically - ) { - Icon( - imageVector = Icons.Filled.FileCopy, contentDescription = null, - tint = Color.Red, - modifier = modifier - .size(48.dp) - .border( - width = 0.5.dp, - color = Color.LightGray, - shape = RoundedCornerShape(50) - ) - .padding(8.dp) - ) - Column( - modifier = modifier - .padding(horizontal = 12.dp) - .weight(1.0f) - ) { - Text( - text = "Img 2718.JPG", - style = MaterialTheme.typography.titleMedium - ) - Spacer(modifier = modifier.height(4.dp)) - Text(text = "1.5 MB of 4.7 MB • 4 secs left") - } - - if (onCloseIconClick != null) { - Icon( - modifier = modifier - .clickable { onCloseIconClick.invoke() }, - imageVector = Icons.Filled.Close, - contentDescription = null, - tint = BlueDark600 - ) - } - } -} - -@Preview -@Composable -fun PreviewFileItem() { - FileItem(onCloseIconClick = {}) -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/composables/FileTransferAlertDialog.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/composables/FileTransferAlertDialog.kt deleted file mode 100644 index 3d4e142..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/composables/FileTransferAlertDialog.kt +++ /dev/null @@ -1,109 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.feature.transferprogress.composables - -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.ColumnScope -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.Button -import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.Card -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.OutlinedButton -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Dialog -import dev.arkbuilders.arkdrop.ui.theme.Background -import dev.arkbuilders.arkdrop.ui.theme.DarkRed - -@Composable -fun FileTransferAlertDialog( - modifier: Modifier = Modifier, - onDismissRequest: () -> Unit, - onConfirmation: () -> Unit, - dialogTitle: String, - dialogText: String, - content: @Composable ColumnScope.() -> Unit -) { - - Dialog( - onDismissRequest = onDismissRequest - ) { - Card( - modifier = Modifier - .fillMaxWidth() - .padding(16.dp) - , shape = RoundedCornerShape(16.dp) - ) { - Column( - modifier = Modifier - .fillMaxWidth() - .background( - Background - ) - .padding(16.dp) - ) { - Text( - text = dialogTitle, - style = MaterialTheme.typography.titleMedium - ) - Spacer(modifier = modifier.height(8.dp)) - Text(text = dialogText) - Spacer(modifier = modifier.height(12.dp)) - content() - Spacer(modifier = modifier.height(12.dp)) - Row( - modifier = modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.End - ) { - OutlinedButton( - onClick = { - onDismissRequest() - }, - colors = ButtonDefaults.textButtonColors( - contentColor = Color.DarkGray - ) - ) { - Text("Cancel") - } - Spacer(modifier = modifier.width(8.dp)) - Button( - onClick = { - onConfirmation() - }, - colors = ButtonDefaults.buttonColors( - containerColor = DarkRed - ) - ) { - Text("Remove") - } - } - } - } - } -} - -@Preview -@Composable -fun PreviewFileTransferAlertDialog() { - FileTransferAlertDialog( - onConfirmation = {}, - onDismissRequest = {}, - dialogTitle = "Cancel this file", - dialogText = "When you remove this file it cannot be undone.", - ) { - FileItem { - - } - } -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/composables/TransferParticipantHeader.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/composables/TransferParticipantHeader.kt deleted file mode 100644 index ad781b7..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/feature/transferprogress/composables/TransferParticipantHeader.kt +++ /dev/null @@ -1,79 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.feature.transferprogress.composables - -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.lazy.LazyRow -import androidx.compose.foundation.lazy.items -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Text -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.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import dev.arkbuilders.arkdrop.R -import dev.arkbuilders.arkdrop.ui.theme.BlueDark600 - -@Composable -fun TransferParticipantHeader(modifier: Modifier = Modifier) { - Column { - Spacer(modifier = modifier.height(24.dp)) - LazyRow( - modifier = modifier - .fillMaxWidth() - .align(Alignment.CenterHorizontally), - horizontalArrangement = Arrangement.spacedBy( - space = (-24).dp, - alignment = Alignment.CenterHorizontally - ), - ) { - items(listOf(0, 1)) { avatarItem -> - Image( - painter = painterResource(id = R.drawable.avatar_mock), - contentDescription = null, - modifier = modifier - .size(64.dp) - .clip(CircleShape) - ) - } - } - Spacer(modifier = modifier.height(24.dp)) - Text( - text = "Wait a moment while transferring...", - style = MaterialTheme.typography.titleMedium, - textAlign = TextAlign.Center, - modifier = modifier.fillMaxWidth() - ) - Row( - modifier = modifier - .fillMaxWidth(), - horizontalArrangement = Arrangement.Center, - verticalAlignment = Alignment.CenterVertically - ) { - Text(text = "Sending to") - Spacer(modifier = modifier.width(6.dp)) - Text( - text = "Bob", - color = BlueDark600, - style = MaterialTheme.typography.titleMedium - ) - } - } -} - -@Preview -@Composable -fun PreviewTransferParticipantHeader() { - TransferParticipantHeader() -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/BottomTabBar.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/BottomTabBar.kt deleted file mode 100644 index 9f14198..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/BottomTabBar.kt +++ /dev/null @@ -1,59 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.navigation - -import androidx.compose.animation.animateColorAsState -import androidx.compose.material3.Icon -import androidx.compose.material3.NavigationBar -import androidx.compose.material3.NavigationBarItem -import androidx.compose.material3.NavigationBarItemDefaults -import androidx.compose.material3.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.tooling.preview.Preview -import androidx.navigation.NavController -import androidx.navigation.NavDestination -import androidx.navigation.compose.rememberNavController -import dev.arkbuilders.arkdrop.ui.theme.BlueDark600 -import com.hieuwu.gofocus.presentation.navigation.navigateSingleTopTo - -@Composable -fun BottomTab(currentDestination: NavDestination?, navController: NavController) { - NavigationBar( - containerColor = Color.White, - ) { - bottomTabRowScreens.forEach { screen -> - val isSelected = currentDestination?.route == screen.route - val tabTintColor by animateColorAsState( - targetValue = if (isSelected) BlueDark600 else - Color.LightGray - ) - val bottomTabIcon = if (isSelected) screen.activeIcon else screen.inActiveIcon - NavigationBarItem( - colors = NavigationBarItemDefaults.colors( - indicatorColor = Color.Transparent, - selectedIconColor = tabTintColor, - selectedTextColor = tabTintColor, - ), - selected = isSelected, - onClick = { navController.navigateSingleTopTo(screen.route) }, - label = { - Text( - text = screen.title, - ) - }, - icon = { - Icon( - imageVector = bottomTabIcon, - contentDescription = null, - ) - }, - ) - } - } -} - -@Preview -@Composable -fun BottomTabPreview() { - BottomTab(currentDestination = null, navController = rememberNavController()) -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/Destination.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/Destination.kt deleted file mode 100644 index 79b4538..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/Destination.kt +++ /dev/null @@ -1,56 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.navigation - -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.History -import androidx.compose.material.icons.filled.Person -import androidx.compose.material.icons.filled.SwapVert -import androidx.compose.material.icons.outlined.History -import androidx.compose.material.icons.outlined.Person -import androidx.compose.material.icons.outlined.SwapVert -import androidx.compose.ui.graphics.vector.ImageVector - - -interface Destination { - val route: String - val title: String -} - -interface BottomTabDestination : Destination { - val activeIcon: ImageVector - val inActiveIcon: ImageVector -} - -object TransfersDestination : BottomTabDestination { - // Put information needed to navigate here - override val route = "transfer" - override val activeIcon = Icons.Filled.SwapVert - override val inActiveIcon: ImageVector = Icons.Outlined.SwapVert - override val title = "Transfer" -} - -object HistoryDestination : BottomTabDestination { - override val route = "history" - override val activeIcon = Icons.Filled.History - override val inActiveIcon: ImageVector = Icons.Outlined.History - override val title = "History" -} - -object SettingsDestination : BottomTabDestination { - override val route = "settings" - override val activeIcon = Icons.Filled.Person - override val inActiveIcon: ImageVector = Icons.Outlined.Person - override val title = "Settings" -} - -object TransferConfirmationDestination : Destination { - override val route: String = "transfer_confirmation" - override val title: String = "Transfer confirmation" -} - -object TransferProgressDestination : Destination { - override val route: String = "transfer_progress_destination" - override val title: String = "Transfer progress destination" -} - - -val bottomTabRowScreens = listOf(TransfersDestination, HistoryDestination, SettingsDestination) \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/NavControllerExt.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/NavControllerExt.kt deleted file mode 100644 index b6ee1b5..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/NavControllerExt.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.hieuwu.gofocus.presentation.navigation - -import androidx.navigation.NavController - -fun NavController.navigateSingleTopTo(route: String) { - this.navigate(route) { - launchSingleTop = true - } -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/NavRegister.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/NavRegister.kt deleted file mode 100644 index fcc8e77..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/navigation/NavRegister.kt +++ /dev/null @@ -1,28 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.navigation - -import androidx.navigation.NavController -import androidx.navigation.NavGraphBuilder -import androidx.navigation.compose.composable -import dev.arkbuilders.arkdrop.Greeting -import dev.arkbuilders.arkdrop.presentation.feature.filestransfers.FilesTransferScreen -import dev.arkbuilders.arkdrop.presentation.feature.settings.SettingsScreen -import dev.arkbuilders.arkdrop.presentation.feature.transferconfirmation.TransferConfirmationScreen -import dev.arkbuilders.arkdrop.presentation.feature.transferprogress.TransferProgressScreen - -fun NavGraphBuilder.navRegistration(navController: NavController) { - composable(TransfersDestination.route) { - FilesTransferScreen(navController = navController) - } - composable(HistoryDestination.route) { - Greeting(name = "HistoryDestination") - } - composable(SettingsDestination.route) { - SettingsScreen() - } - composable(TransferConfirmationDestination.route) { - TransferConfirmationScreen(navController = navController) - } - composable(TransferProgressDestination.route) { - TransferProgressScreen(navController = navController) - } -} diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/permission/PermissionManager.kt b/app/src/main/java/dev/arkbuilders/arkdrop/presentation/permission/PermissionManager.kt deleted file mode 100644 index ad7484b..0000000 --- a/app/src/main/java/dev/arkbuilders/arkdrop/presentation/permission/PermissionManager.kt +++ /dev/null @@ -1,76 +0,0 @@ -package dev.arkbuilders.arkdrop.presentation.permission - -import android.Manifest -import android.content.Context -import android.content.pm.PackageManager -import android.os.Build -import androidx.activity.result.ActivityResultLauncher -import androidx.annotation.RequiresApi -import androidx.core.content.ContextCompat - -object PermissionManager { - - private lateinit var requestPermissionLauncher: ActivityResultLauncher> - - fun initialize(requestPermissions: ActivityResultLauncher>) { - requestPermissionLauncher = requestPermissions - } - - @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) - private val requiredPermissionApi34 = arrayOf( - Manifest.permission.READ_MEDIA_IMAGES, - Manifest.permission.READ_MEDIA_VIDEO, - Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED, - Manifest.permission.CAMERA, - ) - - @RequiresApi(Build.VERSION_CODES.TIRAMISU) - private val requiredPermissionApi33 = arrayOf( - Manifest.permission.READ_MEDIA_IMAGES, - Manifest.permission.READ_MEDIA_VIDEO, - Manifest.permission.CAMERA, - ) - - fun requestPermission(context: Context) { - if (allPermissionGranted(context)) { - return - } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { - requestPermissionLauncher.launch(requiredPermissionApi34) - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - requestPermissionLauncher.launch(requiredPermissionApi33) - } - } - - fun isCameraPermissionGranted(context: Context) = run { - ContextCompat.checkSelfPermission( - context, Manifest.permission.CAMERA - ) == PackageManager.PERMISSION_GRANTED - } - - fun requestCameraPermission() { - requestPermissionLauncher.launch( - arrayOf( - Manifest.permission.CAMERA, - ) - ) - } - - private fun allPermissionGranted(context: Context): Boolean { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { - return requiredPermissionApi34.all { - ContextCompat.checkSelfPermission( - context, it - ) == PackageManager.PERMISSION_GRANTED - } - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { - return requiredPermissionApi33.all { - ContextCompat.checkSelfPermission( - context, it - ) == PackageManager.PERMISSION_GRANTED - } - } - return false - } - -} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/drop/app/MainActivity.kt b/app/src/main/java/dev/arkbuilders/drop/app/MainActivity.kt new file mode 100644 index 0000000..69fee5e --- /dev/null +++ b/app/src/main/java/dev/arkbuilders/drop/app/MainActivity.kt @@ -0,0 +1,84 @@ +package dev.arkbuilders.drop.app + +import android.os.Bundle +import android.os.Environment +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.activity.enableEdgeToEdge +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Scaffold +import androidx.compose.ui.Modifier +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import androidx.navigation.navDeepLink +import dev.arkbuilders.drop.app.ui.home.Home +import dev.arkbuilders.drop.app.ui.receive.Receive +import dev.arkbuilders.drop.app.ui.send.Send +import dev.arkbuilders.drop.app.ui.theme.DropTheme +import java.util.UUID + +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContent { + val navController = rememberNavController() + DropTheme { + Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> + val innerModifier = Modifier.padding(innerPadding) + NavHost( + modifier = innerModifier, + navController = navController, + startDestination = "home", + ) { + composable("home") { + Home(navController = navController) + } + composable("send?uris={uris}") { + Send(navController = navController) + } + composable( + route = "receive?ticket={ticket}&confirmations={confirmations}", + deepLinks = listOf( + navDeepLink { + uriPattern = + "drop://receive?ticket={ticket}&confirmations={confirmations}" + }) + ) { + val args = it.arguments + val ticket = args?.getString("ticket") + val confirmations = + args?.getString("confirmations")?.split(",")?.map { it.toUByte() } + ?: emptyList() + val downloadDir = + navController.context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)!! + val receiveDir = downloadDir.resolve(UUID.randomUUID().toString()) + Receive( + ticket = ticket, + confirmations = confirmations, + onBack = { navController.popBackStack() }, + onReceive = { chunks -> + println("Received chunks: $chunks") + if (!receiveDir.exists()) { + receiveDir.mkdirs() + } + chunks.forEach { chunk -> + val file = receiveDir.resolve(chunk.name) + println("Appending chunk to file: ${file.absolutePath}") + file.appendBytes(chunk.data.map { it.toByte() } + .toByteArray()) + } + }, + onScanQRCode = { deepLink -> + navController.navigate(deepLink) + }, + ) + } + } + } + } + } + } +} diff --git a/app/src/main/java/dev/arkbuilders/drop/app/ui/home/Home.kt b/app/src/main/java/dev/arkbuilders/drop/app/ui/home/Home.kt new file mode 100644 index 0000000..fa5f8f0 --- /dev/null +++ b/app/src/main/java/dev/arkbuilders/drop/app/ui/home/Home.kt @@ -0,0 +1,187 @@ +package dev.arkbuilders.drop.app.ui.home + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.absoluteOffset +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Button +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +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.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.navigation.NavController +import dev.arkbuilders.drop.app.R +import dev.arkbuilders.drop.app.ui.theme.Typography + +@Composable +fun Home(modifier: Modifier = Modifier, navController: NavController) { + Column( + modifier = modifier + .fillMaxSize() + .background(Color.White), + horizontalAlignment = Alignment.CenterHorizontally + ) { + val innerModifier = Modifier.padding(horizontal = 24.dp) + Spacer(modifier = Modifier.height(24.dp)) + TopBar(modifier = innerModifier) + HorizontalDivider(modifier = Modifier.padding(vertical = 24.dp)) +// Spacer(modifier = innerModifier.height(48.dp)) + Hero(modifier = innerModifier.padding(0.dp, 30.dp)) + CTA(modifier = innerModifier, navController = navController) + } +} + +@Composable +fun TopBar(modifier: Modifier = Modifier) { + Row( + modifier = modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Column { + Text("Hi John,", fontSize = 16.sp, color = Color.Black) + Text( + "Welcome back!", + fontSize = 22.sp, + fontWeight = FontWeight.Bold, + color = Color.Black + ) + } + Image( + painter = painterResource(R.drawable.avatar_placeholder), + contentDescription = null, + modifier = Modifier + .size(48.dp) + .clip(CircleShape) + ) + } +} + +@Composable +fun Hero(modifier: Modifier = Modifier) { + Box(modifier = modifier, contentAlignment = Alignment.Center) { + repeat(3) { + Box( + modifier = Modifier + .size((200 + it * 60).dp) + .clip(CircleShape) + .background(Color.Transparent) + .border(width = 1.dp, color = Color.LightGray, shape = CircleShape) + ) + } + Icon( + painter = painterResource(R.drawable.ic_link), // center icon + contentDescription = null, + tint = Color.DarkGray, + modifier = Modifier.size(36.dp) + ) + Image( + painter = painterResource(R.drawable.ic_pdf), + contentDescription = null, + modifier = Modifier + .size(30.dp) + .absoluteOffset(y = (-100).dp) + .background(Color.White, CircleShape) + ) + Image( + painter = painterResource(R.drawable.ic_music), + contentDescription = null, + modifier = Modifier + .size(30.dp) + .absoluteOffset(x = (126).dp, y = (-30).dp) + .background(Color.White, CircleShape) + ) + Image( + painter = painterResource(R.drawable.ic_document), + contentDescription = null, + modifier = Modifier + .size(30.dp) + .absoluteOffset(x = (70).dp, y = (70).dp) + .background(Color.White, CircleShape) + ) + Image( + painter = painterResource(R.drawable.ic_image), + contentDescription = null, + modifier = Modifier + .size(30.dp) + .absoluteOffset(x = (-70).dp, y = (70).dp) + + .background(Color.White, CircleShape) + ) + Image( + painter = painterResource(R.drawable.ic_video), + contentDescription = null, + modifier = Modifier + .size(30.dp) + .absoluteOffset(x = (-126).dp, y = (-30).dp) + .background(Color.White, CircleShape) + ) + } +} + +@Composable +fun CTA(modifier: Modifier = Modifier, navController: NavController) { + Column(modifier) { + val innerModifier = Modifier.fillMaxWidth() + CTAHeading(innerModifier) + Actions(innerModifier, navController) + } +} + +@Composable +fun CTAHeading(modifier: Modifier = Modifier) { + Column(modifier) { + val innerModifier = Modifier.fillMaxWidth() + Text( + modifier = innerModifier, + text = "Seamless to transfer your files", + style = Typography.titleMedium, + textAlign = TextAlign.Center + ) + Text( + modifier = innerModifier, + text = "Simple, fast, and limitless start sharing your files now.", + style = Typography.bodyMedium, + textAlign = TextAlign.Center, + color = Color.Gray + ) + } +} + +@Composable +fun Actions( + modifier: Modifier = Modifier, navController: NavController +) { + Row(modifier, horizontalArrangement = Arrangement.Center) { + Button(modifier = Modifier.padding(0.dp, 0.dp, 10.dp, 0.dp), onClick = { + navController.navigate("send") + }) { + Text(text = "Send") + } + Button(onClick = { + navController.navigate("receive") + }) { + Text(text = "Receive") + } + } +} diff --git a/app/src/main/java/dev/arkbuilders/drop/app/ui/receive/Receive.kt b/app/src/main/java/dev/arkbuilders/drop/app/ui/receive/Receive.kt new file mode 100644 index 0000000..85549bb --- /dev/null +++ b/app/src/main/java/dev/arkbuilders/drop/app/ui/receive/Receive.kt @@ -0,0 +1,409 @@ +package dev.arkbuilders.drop.app.ui.receive + +import android.Manifest +import android.content.pm.PackageManager +import android.net.Uri +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.camera.core.CameraSelector +import androidx.camera.core.ExperimentalGetImage +import androidx.camera.core.ImageAnalysis +import androidx.camera.core.ImageProxy +import androidx.camera.core.Preview +import androidx.camera.lifecycle.ProcessCameraProvider +import androidx.camera.view.PreviewView +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material.icons.filled.Person +import androidx.compose.material.icons.outlined.Person +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LinearProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +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.platform.LocalContext +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.compose.ui.viewinterop.AndroidView +import androidx.core.content.ContextCompat +import androidx.core.net.toUri +import androidx.lifecycle.compose.LocalLifecycleOwner +import com.google.mlkit.vision.barcode.BarcodeScanner +import com.google.mlkit.vision.barcode.BarcodeScannerOptions +import com.google.mlkit.vision.barcode.BarcodeScanning +import com.google.mlkit.vision.barcode.common.Barcode +import com.google.mlkit.vision.common.InputImage +import dev.arkbuilders.drop.ReceiveFilesBubble +import dev.arkbuilders.drop.ReceiveFilesConnectingEvent +import dev.arkbuilders.drop.ReceiveFilesReceivingEvent +import dev.arkbuilders.drop.ReceiveFilesRequest +import dev.arkbuilders.drop.ReceiveFilesSubscriber +import dev.arkbuilders.drop.ReceiverProfile +import dev.arkbuilders.drop.receiveFiles +import kotlinx.coroutines.delay +import java.util.UUID +import java.util.concurrent.Executors + + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun Receive( + ticket: String?, + confirmations: List, + onBack: () -> Unit = {}, + onReceive: (List) -> Unit = {}, + onScanQRCode: (Uri) -> Unit = {}, +) { + var selectedConfirmation by remember { mutableStateOf(null) } + + if (ticket != null && selectedConfirmation != null) { + ReceiveFiles(ticket, selectedConfirmation!!, onBack, onReceive) + } else if (confirmations.isEmpty()) { + ScanQRCode(onScanQRCode) + } else { + SelectConfirmation( + confirmations, + onBack, + onSelectConfirmation = { confirmation -> + selectedConfirmation = confirmation + }, + ) + } +} + +class ReceiveFilesSubscriberImpl : ReceiveFilesSubscriber { + private val id: UUID = UUID.randomUUID() + val connectingEvent = mutableStateOf(null) + val receivingEvents = mutableListOf() + + override fun getId(): String { + return this.id.toString() + } + + override fun notifyConnecting(event: ReceiveFilesConnectingEvent) { + this.connectingEvent.value = event + } + + override fun notifyReceiving(event: ReceiveFilesReceivingEvent) { + this.receivingEvents.add(event) + } +} + +data class FileState( + val id: String, + val name: String, + var received: ULong, + val total: ULong, +) + +data class ReceiverChunk( + val id: String, + val name: String, + val data: List, +) + +@Composable +fun ReceiveFiles( + ticket: String, + confirmation: UByte, + onBack: () -> Unit = {}, + onReceive: (List) -> Unit = {} +) { + val subscriber = remember { ReceiveFilesSubscriberImpl() } + val request = remember { + ReceiveFilesRequest( + ticket, confirmation, profile = ReceiverProfile("John Doe") + ) + } + val fileStates = remember { mutableStateOf>(emptyList()) } + var isCancelled by remember { mutableStateOf(false) } + var bubble by remember { mutableStateOf(null) } + var bytesPerSecond by remember { mutableStateOf(0u) } + + LaunchedEffect(request) { + println("LaunchedEffect called with request: $request") + try { + bubble = receiveFiles(request) + bubble!!.subscribe(subscriber) + bubble!!.start() + } catch (e: Exception) { + isCancelled = true + e.printStackTrace() + } + } + LaunchedEffect(isCancelled) { + println("LaunchedEffect called with isCancelled: $isCancelled") + if (isCancelled) { + bubble?.cancel() + onBack() + } + } + LaunchedEffect(subscriber.connectingEvent.value) { + println("LaunchedEffect called with subscriber.connectingEvent.value: ${subscriber.connectingEvent.value}") + if (subscriber.connectingEvent.value == null) return@LaunchedEffect + fileStates.value = subscriber.connectingEvent.value!!.files.map { + FileState(it.id, it.name, 0u, it.len) + } + var emptyReceivingEventsCounter = 0 + while (!isCancelled) { + var receivedBytes: ULong = 0u + val receivingEvents = subscriber.receivingEvents.toList() + subscriber.receivingEvents.clear() + if (receivingEvents.isEmpty()) { + emptyReceivingEventsCounter++ + } else { + emptyReceivingEventsCounter = 0 + } + if (emptyReceivingEventsCounter > 10) { + bytesPerSecond = 0u + break; + } + val chunks: List = + receivingEvents.groupBy { it.id }.map { (id, events) -> + val fileState = fileStates.value.find { it.id == id }!! + val accumulatedData = events.flatMap { it.data } + ReceiverChunk(id, fileState.name, accumulatedData) + } + onReceive(chunks) + chunks.forEach { chunk -> + fileStates.value = fileStates.value.map { fileState -> + if (fileState.id == chunk.id) { + receivedBytes += chunk.data.size.toULong() + fileState.received += chunk.data.size.toULong() + } + fileState + } + } + bytesPerSecond = receivedBytes + delay(1000L) + } + } + + Column( + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 24.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Spacer(Modifier.height(24.dp)) + Row( + horizontalArrangement = Arrangement.spacedBy((-12).dp), + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + Icons.Default.Person, + contentDescription = null, + modifier = Modifier + .size(64.dp) + .clip(CircleShape) + .background(MaterialTheme.colorScheme.primary.copy(alpha = 0.1f)) + ) + Icon( + Icons.Outlined.Person, + contentDescription = null, + modifier = Modifier + .size(64.dp) + .clip(CircleShape) + .background(MaterialTheme.colorScheme.secondary.copy(alpha = 0.1f)) + ) + } + Spacer(Modifier.height(16.dp)) + Text("Wait a moment while transferring…", fontSize = 18.sp) + Text("Receiving from Jane Doe", color = MaterialTheme.colorScheme.primary) + Spacer(Modifier.height(24.dp)) + Column( + verticalArrangement = Arrangement.spacedBy(16.dp), modifier = Modifier.fillMaxWidth() + ) { + fileStates.value.forEach { fileState -> + Column( + modifier = Modifier + .fillMaxWidth() + .border( + 1.dp, MaterialTheme.colorScheme.outline, RoundedCornerShape(8.dp) + ) + .padding(12.dp) + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + modifier = Modifier.fillMaxWidth() + ) { + Text(fileState.name, fontSize = 16.sp) + } + Spacer(Modifier.height(4.dp)) + Text( + "${fileState.received} of ${fileState.total} • ${ + (fileState.total - fileState.received).div( + bytesPerSecond + 1u + ) + } seconds left", fontSize = 14.sp + ) + Spacer(Modifier.height(8.dp)) + LinearProgressIndicator( + modifier = Modifier + .fillMaxWidth() + .height(4.dp), progress = { + fileState.received.toFloat().div(fileState.total.toFloat()) + }) + } + } + } + } +} + +@Composable +fun ScanQRCode(onScanQRCode: (Uri) -> Unit = {}) { + val context = LocalContext.current + val lifecycleOwner = LocalLifecycleOwner.current + val cameraPermissionLauncher = rememberLauncherForActivityResult( + ActivityResultContracts.RequestPermission() + ) { /* TODO: handle denial */ } + + LaunchedEffect(Unit) { + cameraPermissionLauncher.launch(Manifest.permission.CAMERA) + } + + if (ContextCompat.checkSelfPermission( + context, Manifest.permission.CAMERA + ) == PackageManager.PERMISSION_GRANTED + ) { + val cameraProviderFuture = remember { ProcessCameraProvider.getInstance(context) } + AndroidView(factory = { ctx -> + PreviewView(ctx).apply { + implementationMode = PreviewView.ImplementationMode.COMPATIBLE + } + }, modifier = Modifier.fillMaxSize()) { previewView -> + cameraProviderFuture.addListener({ + val cameraProvider = cameraProviderFuture.get() + val previewUseCase = Preview.Builder().build().also { + it.setSurfaceProvider(previewView.surfaceProvider) + } + val options = + BarcodeScannerOptions.Builder().setBarcodeFormats(Barcode.FORMAT_QR_CODE) + .build() + val scanner = BarcodeScanning.getClient(options) + val analysis = ImageAnalysis.Builder() + .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST).build() + .also { aa -> + val executor = Executors.newSingleThreadExecutor() + aa.setAnalyzer(executor) { proxy -> + processImageProxy(scanner, proxy) { qr -> + val data = qr.toUri() + onScanQRCode(data).also { proxy.close() } + } + } + } + cameraProvider.unbindAll() + cameraProvider.bindToLifecycle( + lifecycleOwner, CameraSelector.DEFAULT_BACK_CAMERA, previewUseCase, analysis + ) + }, ContextCompat.getMainExecutor(context)) + } + } else { + Text("Camera permission required") + } +} + +@androidx.annotation.OptIn(ExperimentalGetImage::class) +private fun processImageProxy( + barcodeScanner: BarcodeScanner, imageProxy: ImageProxy, onQrCodeScanned: (String) -> Unit +) { + imageProxy.image?.let { image -> + val inputImage = InputImage.fromMediaImage( + image, imageProxy.imageInfo.rotationDegrees + ) + + barcodeScanner.process(inputImage).addOnSuccessListener { barcodes -> + barcodes.firstOrNull()?.rawValue?.let { qrValue -> + if (qrValue.startsWith("drop://receive")) { + onQrCodeScanned(qrValue) + } + } + }.addOnCompleteListener { + imageProxy.close() + } + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun SelectConfirmation( + confirmations: List, onBack: () -> Unit, onSelectConfirmation: (UByte) -> Unit +) { + Scaffold( + topBar = { + TopAppBar(navigationIcon = { + IconButton(onClick = onBack) { + Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null) + } + }, title = { Text("Back") }) + }) { padding -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(padding) + .padding(horizontal = 24.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Top + ) { + Spacer(Modifier.height(32.dp)) + Text("Choose the confirmation Code", style = MaterialTheme.typography.headlineSmall) + Spacer(Modifier.height(8.dp)) + Text("Make sure code confirmation are matched", fontSize = 14.sp, color = Color.Gray) + Spacer(Modifier.height(32.dp)) + Row( + horizontalArrangement = Arrangement.spacedBy(24.dp), + verticalAlignment = Alignment.CenterVertically + ) { + confirmations.forEach { confirmation -> + Surface( + shape = CircleShape, + color = Color(0xFFF0F3F5), + modifier = Modifier + .size(64.dp) + .clickable { + onSelectConfirmation(confirmation) + }, + tonalElevation = 0.dp + ) { + Box(contentAlignment = Alignment.Center) { + Text( + confirmation.toULong().toString().padStart(2, '0'), + style = MaterialTheme.typography.titleMedium + ) + } + } + } + } + } + } +} diff --git a/app/src/main/java/dev/arkbuilders/drop/app/ui/send/Send.kt b/app/src/main/java/dev/arkbuilders/drop/app/ui/send/Send.kt new file mode 100644 index 0000000..74d3a60 --- /dev/null +++ b/app/src/main/java/dev/arkbuilders/drop/app/ui/send/Send.kt @@ -0,0 +1,385 @@ +@file:OptIn(ExperimentalUnsignedTypes::class) + +package dev.arkbuilders.drop.app.ui.send + +import android.content.ContentResolver +import android.graphics.Bitmap +import android.graphics.Color +import android.net.Uri +import android.provider.OpenableColumns +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Person +import androidx.compose.material.icons.outlined.Lock +import androidx.compose.material.icons.outlined.Person +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.LinearProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.asImageBitmap +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.core.graphics.createBitmap +import androidx.core.graphics.set +import androidx.navigation.NavController +import com.google.zxing.BarcodeFormat +import com.google.zxing.EncodeHintType +import com.google.zxing.qrcode.QRCodeWriter +import dev.arkbuilders.drop.SendFilesBubble +import dev.arkbuilders.drop.SendFilesConnectingEvent +import dev.arkbuilders.drop.SendFilesRequest +import dev.arkbuilders.drop.SendFilesSendingEvent +import dev.arkbuilders.drop.SendFilesSubscriber +import dev.arkbuilders.drop.SenderFile +import dev.arkbuilders.drop.SenderFileData +import dev.arkbuilders.drop.SenderProfile +import dev.arkbuilders.drop.sendFiles +import kotlinx.coroutines.delay +import java.io.InputStream +import java.util.UUID +import kotlin.random.Random + +class SenderFileDataFS : SenderFileData { + private val len: ULong + private val inputStream: InputStream + + private var isFinished: Boolean = false + + constructor(resolver: ContentResolver, contentURI: Uri) { + this.len = getLen(resolver, contentURI) + this.inputStream = resolver.openInputStream(contentURI)!! + } + + fun getLen(resolver: ContentResolver, contentURI: Uri): ULong { + return resolver.query(contentURI, null, null, null, null)?.use { cursor -> + val sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE) + cursor.moveToFirst() + cursor.getLong(sizeIndex).toULong() + } ?: 0u + } + + override fun len(): ULong { + return len + } + + override fun read(): UByte? { + if (isFinished) { + return null + } + var b: UByte? = null + try { + val readB = inputStream.read() + if (readB == -1) { + isFinished = true + inputStream.close() + } else { + b = readB.toUByte() + } + } catch (e: Exception) { + e.printStackTrace() + } + return b + } +} + +class SendFilesSubscriberImpl : SendFilesSubscriber { + private val id: UUID = UUID.randomUUID() + var connectingEvent: SendFilesConnectingEvent? = null + val sendingEvents = mutableListOf() + + override fun getId(): String { + return this.id.toString() + } + + override fun notifyConnecting(event: SendFilesConnectingEvent) { + this.connectingEvent = event + } + + override fun notifySending(event: SendFilesSendingEvent) { + this.sendingEvents.add(event) + } +} + +data class FileState( + val name: String, + var sent: ULong, + val total: ULong, +) + +@Composable +fun Send(modifier: Modifier = Modifier, navController: NavController) {/* TODO: + * - Handle upload of files with same name. + * - Update file progress handling. + */ + var isSending by remember { mutableStateOf(false) } + var isCancelled by remember { mutableStateOf(false) } + var visibleConfirmation by remember { mutableStateOf(false) } + var bytesPerSecond by remember { mutableStateOf(0u) } + val bubble = remember { mutableStateOf(null) } + val bitmap = remember { mutableStateOf(null) } + val request = remember { mutableStateOf(null) } + val subscriber = remember { SendFilesSubscriberImpl() } + val fileStates = remember { mutableStateOf>(emptyList()) } + val filePickerLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.GetMultipleContents() + ) { uris -> + if (uris.isEmpty()) { + navController.popBackStack() + return@rememberLauncherForActivityResult + } + val files = uris.map { + SenderFile( + name = it.lastPathSegment ?: "Unknown", + data = SenderFileDataFS(navController.context.contentResolver, it) + ) + } + fileStates.value = files.map { FileState(it.name, 0u, it.data.len()) } + request.value = SendFilesRequest( + profile = SenderProfile( + name = "John Doe" + ), files = files + ) + } + LaunchedEffect(filePickerLauncher) { + filePickerLauncher.launch("*/*") + } + LaunchedEffect(request.value) { + if (request.value == null) return@LaunchedEffect + bubble.value = sendFiles(request.value!!) + bubble.value!!.subscribe(subscriber) + val ticket = bubble.value!!.getTicket() + val actualConfirmation = bubble.value!!.getConfirmation() + val confirmations = createConfirmations(actualConfirmation) + println("ticket: $ticket") + println("confirmation: $actualConfirmation") + bitmap.value = createQRCodeBitmap( + data = "drop://receive?ticket=${Uri.encode(ticket)}&confirmations=${ + confirmations.map { it.toUByte() }.joinToString(",") + }" + ) + } + LaunchedEffect(isCancelled) { + if (isCancelled) { + bubble.value?.cancel() + navController.popBackStack() + } + } + LaunchedEffect(Unit) { + while (!isCancelled) { + if (!isSending && subscriber.connectingEvent != null) { + isSending = true + } + var sentBytes: ULong = 0u + val sendingEvents = subscriber.sendingEvents.toList() + subscriber.sendingEvents.clear() + fileStates.value = fileStates.value.map { fileState -> + val event = sendingEvents.findLast { event -> + event.name == fileState.name + } + if (event != null) { + sentBytes += event.sent - fileState.sent + fileState.sent = event.sent + } + fileState + } + bytesPerSecond = sentBytes + delay(1000L) + } + } + + if (bitmap.value == null || bubble.value == null) { + Box( + modifier = modifier.fillMaxSize(), contentAlignment = Alignment.Center + ) { + CircularProgressIndicator() + } + } else if (isSending) { + Column( + modifier = modifier + .fillMaxSize() + .padding(horizontal = 24.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Spacer(Modifier.height(24.dp)) + Row( + horizontalArrangement = Arrangement.spacedBy((-12).dp), + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + Icons.Default.Person, + contentDescription = null, + modifier = Modifier + .size(64.dp) + .clip(CircleShape) + .background(MaterialTheme.colorScheme.primary.copy(alpha = 0.1f)) + ) + Icon( + Icons.Outlined.Person, + contentDescription = null, + modifier = Modifier + .size(64.dp) + .clip(CircleShape) + .background(MaterialTheme.colorScheme.secondary.copy(alpha = 0.1f)) + ) + } + Spacer(Modifier.height(16.dp)) + Text("Wait a moment while transferring…", fontSize = 18.sp) + Text("Sending to Jane Doe", color = MaterialTheme.colorScheme.primary) + Spacer(Modifier.height(24.dp)) + Column( + verticalArrangement = Arrangement.spacedBy(16.dp), + modifier = Modifier.fillMaxWidth() + ) { + fileStates.value.forEach { fileState -> + Column( + modifier = Modifier + .fillMaxWidth() + .border( + 1.dp, + MaterialTheme.colorScheme.outline, + RoundedCornerShape(8.dp) + ) + .padding(12.dp) + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + modifier = Modifier.fillMaxWidth() + ) { + Text(fileState.name, fontSize = 16.sp) + } + Spacer(Modifier.height(4.dp)) + Text( + "${fileState.sent} of ${fileState.total} • ${ + (fileState.total - fileState.sent).div( + bytesPerSecond + 1u + ) + } seconds left", + fontSize = 14.sp + ) + Spacer(Modifier.height(8.dp)) + LinearProgressIndicator( + modifier = Modifier + .fillMaxWidth() + .height(4.dp), + progress = { + fileState.sent.toFloat().div(fileState.total.toFloat()) + }) + } + } + } + } + } else { + Column( + modifier = modifier + .fillMaxSize() + .padding(horizontal = 24.dp), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Spacer(Modifier.height(32.dp)) + Row(verticalAlignment = Alignment.CenterVertically) { + Icon( + Icons.Outlined.Lock, + contentDescription = null, + tint = MaterialTheme.colorScheme.onBackground + ) + Spacer(Modifier.width(8.dp)) + Text("Confirmation code", fontSize = 18.sp) + } + Spacer(Modifier.height(16.dp)) + Row(horizontalArrangement = Arrangement.spacedBy(12.dp)) { + bubble.value!!.getConfirmation().toUInt().toString().padStart(2, '0').toCharArray() + .forEach { char -> + Box( + modifier = Modifier + .size(48.dp) + .clip(RoundedCornerShape(8.dp)) + .background(MaterialTheme.colorScheme.surfaceVariant), + contentAlignment = Alignment.Center + ) { + if (visibleConfirmation) { + Text(char.toString(), fontSize = 24.sp) + } else { + Text("·", fontSize = 24.sp, fontWeight = FontWeight.Bold) + } + } + } + } + Spacer(Modifier.height(8.dp)) + TextButton(onClick = { + visibleConfirmation = !visibleConfirmation + }) { + Text(if (visibleConfirmation) "Hide" else "Show") + } + Spacer(Modifier.height(32.dp)) + Box( + modifier = Modifier + .fillMaxWidth() + .aspectRatio(1f) + .padding(16.dp) + .border(2.dp, MaterialTheme.colorScheme.primary, RoundedCornerShape(12.dp)), + contentAlignment = Alignment.Center, + ) { + Image( + modifier = Modifier.padding(16.dp), + bitmap = bitmap.value!!.asImageBitmap(), + contentDescription = "Send Files QR Code" + ) + } + Spacer(Modifier.height(16.dp)) + Text("Waiting for connection…", fontSize = 16.sp) + } + } + +} + +private fun createConfirmations(actualConfirmation: UByte): List { + val confirmations = mutableListOf() + confirmations.add(Random.nextInt(100).toUByte()) + confirmations.add(Random.nextInt(100).toUByte()) + confirmations.add(actualConfirmation) + confirmations.shuffle() + return confirmations +} + +private fun createQRCodeBitmap(data: String, size: Int = 920): Bitmap { + val hints = mapOf(EncodeHintType.MARGIN to 1) + val matrix = QRCodeWriter().encode(data, BarcodeFormat.QR_CODE, size, size, hints) + return createBitmap(size, size, Bitmap.Config.RGB_565).apply { + for (x in 0 until size) { + for (y in 0 until size) { + set(x, y, if (matrix[x, y]) Color.BLACK else Color.WHITE) + } + } + } +} diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/ui/theme/Color.kt b/app/src/main/java/dev/arkbuilders/drop/app/ui/theme/Color.kt similarity index 50% rename from app/src/main/java/dev/arkbuilders/arkdrop/ui/theme/Color.kt rename to app/src/main/java/dev/arkbuilders/drop/app/ui/theme/Color.kt index bb69521..75f5ba9 100644 --- a/app/src/main/java/dev/arkbuilders/arkdrop/ui/theme/Color.kt +++ b/app/src/main/java/dev/arkbuilders/drop/app/ui/theme/Color.kt @@ -1,4 +1,4 @@ -package dev.arkbuilders.arkdrop.ui.theme +package dev.arkbuilders.drop.app.ui.theme import androidx.compose.ui.graphics.Color @@ -8,8 +8,4 @@ val Pink80 = Color(0xFFEFB8C8) val Purple40 = Color(0xFF6650a4) val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFF7D5260) -val BlueDark600 = Color(0xFF155EEF) -val Background = Color(0xFFFCFCFD) -val DarkRed = Color(0xFFD92D20) -val LightBlack = Color(0xFF344054) \ No newline at end of file +val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/ui/theme/Theme.kt b/app/src/main/java/dev/arkbuilders/drop/app/ui/theme/Theme.kt similarity index 73% rename from app/src/main/java/dev/arkbuilders/arkdrop/ui/theme/Theme.kt rename to app/src/main/java/dev/arkbuilders/drop/app/ui/theme/Theme.kt index cc6fac9..2820bf8 100644 --- a/app/src/main/java/dev/arkbuilders/arkdrop/ui/theme/Theme.kt +++ b/app/src/main/java/dev/arkbuilders/drop/app/ui/theme/Theme.kt @@ -1,6 +1,5 @@ -package dev.arkbuilders.arkdrop.ui.theme +package dev.arkbuilders.drop.app.ui.theme -import android.app.Activity import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.MaterialTheme @@ -9,11 +8,7 @@ import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable -import androidx.compose.runtime.SideEffect -import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalView -import androidx.core.view.WindowCompat private val DarkColorScheme = darkColorScheme( primary = Purple80, @@ -38,7 +33,7 @@ private val LightColorScheme = lightColorScheme( ) @Composable -fun ARKDropTheme( +fun DropTheme( darkTheme: Boolean = isSystemInDarkTheme(), // Dynamic color is available on Android 12+ dynamicColor: Boolean = true, @@ -53,14 +48,6 @@ fun ARKDropTheme( darkTheme -> DarkColorScheme else -> LightColorScheme } - val view = LocalView.current - if (!view.isInEditMode) { - SideEffect { - val window = (view.context as Activity).window - window.statusBarColor = BlueDark600.toArgb() - WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme - } - } MaterialTheme( colorScheme = colorScheme, diff --git a/app/src/main/java/dev/arkbuilders/drop/app/ui/theme/TopBar.kt b/app/src/main/java/dev/arkbuilders/drop/app/ui/theme/TopBar.kt new file mode 100644 index 0000000..0690a17 --- /dev/null +++ b/app/src/main/java/dev/arkbuilders/drop/app/ui/theme/TopBar.kt @@ -0,0 +1,61 @@ +package dev.arkbuilders.drop.app.ui.theme + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.rounded.Person +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.IconButtonColors +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp + +@Composable +fun TopBar(modifier: Modifier = Modifier) { + Column(modifier) { + val innerModifier = Modifier.fillMaxWidth() + Row( + modifier = innerModifier, + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + val innerModifier = Modifier.padding(horizontal = 20.dp, vertical = 5.dp) + Column(modifier = innerModifier) { + Text( + text = "Hi, stranger!", + style = Typography.bodySmall, + ) + Text( + text = "Welcome back!", + style = Typography.titleSmall, + ) + } + IconButton( + modifier = innerModifier, onClick = {}, enabled = false, colors = IconButtonColors( + containerColor = Color.LightGray, + disabledContainerColor = Color.LightGray, + contentColor = Color.Gray, + disabledContentColor = Color.Gray, + ) + ) { + Icon(imageVector = Icons.Rounded.Person, contentDescription = null) + } + } + HorizontalDivider(modifier = innerModifier, thickness = 0.3.dp) + } +} + +@Preview +@Composable +fun AppBarPreview() { + TopBar() +} \ No newline at end of file diff --git a/app/src/main/java/dev/arkbuilders/arkdrop/ui/theme/Type.kt b/app/src/main/java/dev/arkbuilders/drop/app/ui/theme/Type.kt similarity index 95% rename from app/src/main/java/dev/arkbuilders/arkdrop/ui/theme/Type.kt rename to app/src/main/java/dev/arkbuilders/drop/app/ui/theme/Type.kt index f5ef4f5..0ed7aa9 100644 --- a/app/src/main/java/dev/arkbuilders/arkdrop/ui/theme/Type.kt +++ b/app/src/main/java/dev/arkbuilders/drop/app/ui/theme/Type.kt @@ -1,4 +1,4 @@ -package dev.arkbuilders.arkdrop.ui.theme +package dev.arkbuilders.drop.app.ui.theme import androidx.compose.material3.Typography import androidx.compose.ui.text.TextStyle diff --git a/app/src/main/res/drawable/avatar_mock.png b/app/src/main/res/drawable/avatar_mock.png deleted file mode 100644 index 52248b932e2cb04507220ebe52f08448610afdac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193755 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 diff --git a/app/src/main/res/drawable/avatar_placeholder.png b/app/src/main/res/drawable/avatar_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..89b9e3135681448b88ef278aa082c893004bb38d GIT binary patch literal 11030 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 @@ -131,7 +131,7 @@ android:fillColor="#00000000" android:strokeColor="#E3E8EF"/> @@ -171,7 +171,7 @@ android:fillColor="#00000000" android:strokeColor="#E3E8EF"/> @@ -211,7 +211,7 @@ android:fillColor="#00000000" android:strokeColor="#E3E8EF"/> @@ -243,7 +243,7 @@ android:fillColor="#00000000" android:strokeColor="#E3E8EF"/> diff --git a/app/src/main/res/drawable/border_radius.xml b/app/src/main/res/drawable/border_radius.xml deleted file mode 100644 index ca2c1c2..0000000 --- a/app/src/main/res/drawable/border_radius.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/corner_borders.xml b/app/src/main/res/drawable/corner_borders.xml deleted file mode 100644 index 1b870d0..0000000 --- a/app/src/main/res/drawable/corner_borders.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_back_new.xml b/app/src/main/res/drawable/ic_back_new.xml deleted file mode 100644 index a3f2097..0000000 --- a/app/src/main/res/drawable/ic_back_new.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_document.xml b/app/src/main/res/drawable/ic_document.xml new file mode 100644 index 0000000..705c9b3 --- /dev/null +++ b/app/src/main/res/drawable/ic_document.xml @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/ic_image.xml b/app/src/main/res/drawable/ic_image.xml new file mode 100644 index 0000000..827d974 --- /dev/null +++ b/app/src/main/res/drawable/ic_image.xml @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/ic_link.xml b/app/src/main/res/drawable/ic_link.xml new file mode 100644 index 0000000..9b4dac7 --- /dev/null +++ b/app/src/main/res/drawable/ic_link.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/ic_music.xml b/app/src/main/res/drawable/ic_music.xml new file mode 100644 index 0000000..7d7912c --- /dev/null +++ b/app/src/main/res/drawable/ic_music.xml @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/ic_pdf.xml b/app/src/main/res/drawable/ic_pdf.xml new file mode 100644 index 0000000..9e7e936 --- /dev/null +++ b/app/src/main/res/drawable/ic_pdf.xml @@ -0,0 +1,19 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_video.xml b/app/src/main/res/drawable/ic_video.xml new file mode 100644 index 0000000..1db746d --- /dev/null +++ b/app/src/main/res/drawable/ic_video.xml @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/app/src/main/res/layout/activity_qrcode_scanner.xml b/app/src/main/res/layout/activity_qrcode_scanner.xml deleted file mode 100644 index 21d3678..0000000 --- a/app/src/main/res/layout/activity_qrcode_scanner.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - -