Skip to content

Commit 1301732

Browse files
authored
Merge pull request #9 from bakad3v/dev1
v 1.5.0
2 parents a567e31 + 1cf2fe6 commit 1301732

File tree

130 files changed

+4908
-2612
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

130 files changed

+4908
-2612
lines changed

README.md

Lines changed: 41 additions & 73 deletions
Large diffs are not rendered by default.

README_RU.md

Lines changed: 39 additions & 77 deletions
Large diffs are not rendered by default.

app/build.gradle.kts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@ android {
1616
applicationId = "com.android.aftools"
1717
minSdk = 26
1818
targetSdk = 35
19-
versionCode = 6
20-
versionName = "1.4.1"
19+
versionCode = 7
20+
versionName = "1.5.0"
2121
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2222
}
2323

2424
buildTypes {
2525
release {
26-
isMinifyEnabled = false
26+
isMinifyEnabled = true
27+
isShrinkResources = true
2728
proguardFiles(
2829
getDefaultProguardFile("proguard-android-optimize.txt"),
2930
"proguard-rules.pro"
@@ -67,6 +68,7 @@ android {
6768
}
6869

6970
buildFeatures {
71+
buildConfig = true
7072
viewBinding = true
7173
}
7274

@@ -100,8 +102,6 @@ dependencies {
100102
implementation(libs.navigation.fragment.ktx)
101103
implementation(libs.navigation.ui.ktx)
102104

103-
implementation(libs.security.crypto.ktx)
104-
105105
coreLibraryDesugaring(libs.desugar.jdk.libs)
106106

107107
//Better Encrypted DataStore
@@ -128,11 +128,16 @@ dependencies {
128128
implementation(libs.core)
129129
implementation(libs.storage)
130130

131+
//Network
132+
implementation(libs.retrofit)
133+
implementation(libs.converter.scalars)
134+
131135
//Project modules dependencies
132136
implementation(project(":core:validators"))
133137
implementation(project(":core:passwordStrength"))
134138
implementation(project(":core:resources"))
135139
implementation(project(":core:utils"))
140+
implementation(project(":core:network"))
136141
implementation(project(":features:passwordSetup"))
137142
implementation(project(":features:profiles"))
138143
implementation(project(":features:files"))
@@ -155,4 +160,5 @@ dependencies {
155160
implementation(project(":data:files"))
156161
implementation(project(":data:logs"))
157162
implementation(project(":data:profiles"))
163+
implementation(project(":data:appUpdater"))
158164
}

app/proguard-rules.pro

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,18 @@
1818

1919
# If you keep the line number information, uncomment this to
2020
# hide the original source file name.
21-
#-renamesourcefileattribute SourceFile
21+
#-renamesourcefileattribute SourceFile
22+
-dontwarn org.joda.convert.FromString
23+
-dontwarn org.joda.convert.ToString
24+
-keep class androidx.datastore.*.** { *; }
25+
-keepclassmembers class * extends com.google.protobuf.GeneratedMessageLite* {
26+
<fields>;
27+
}
28+
-dontwarn retrofit2.**
29+
-keep class retrofit2.** { *; }
30+
-keepclasseswithmembers class * {
31+
@retrofit2.http.* <methods>;
32+
}
33+
-keepattributes Signature,Exceptions,*Annotation*
34+
-dontnote retrofit2.Platform
35+
-dontwarn retrofit2.Platform$Java8

app/src/main/AndroidManifest.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@
1111
android:name="android.permission.READ_EXTERNAL_STORAGE"
1212
android:maxSdkVersion="32" />
1313
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
14-
<application
14+
<uses-permission android:name="android.permission.INTERNET"/>
15+
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
16+
<application
1517
android:name=".AndroidAntiForensicTools"
1618
android:allowBackup="true"
1719
android:dataExtractionRules="@xml/data_extraction_rules"

app/src/main/java/com/android/aftools/adapters/ReceiversAdapter.kt

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ import com.sonozaki.data.settings.repositories.DeviceProtectionSettingsRepositor
99
import com.sonozaki.data.settings.repositories.PermissionsRepository
1010
import com.sonozaki.data.settings.repositories.SettingsRepository
1111
import com.sonozaki.data.settings.repositories.UsbSettingsRepository
12+
import com.sonozaki.entities.ButtonSelected
1213
import com.sonozaki.entities.DeviceProtectionSettings
1314
import com.sonozaki.entities.Settings
1415
import com.sonozaki.entities.UsbSettings
1516
import com.sonozaki.password.repository.PasswordManager
1617
import com.sonozaki.triggerreceivers.services.domain.repository.ReceiversRepository
1718
import kotlinx.coroutines.flow.first
1819
import com.sonozaki.entities.Permissions
20+
import kotlinx.coroutines.flow.Flow
1921
import javax.inject.Inject
2022

2123
class ReceiversAdapter @Inject constructor(
@@ -52,8 +54,16 @@ class ReceiversAdapter @Inject constructor(
5254
return buttonSettingsRepository.buttonSettings.first()
5355
}
5456

55-
override suspend fun getButtonClicksData(): ButtonClicksData {
56-
return buttonSettingsRepository.getButtonClicksData()
57+
override suspend fun getButtonClicksData(buttonSelected: ButtonSelected): ButtonClicksData {
58+
return buttonSettingsRepository.getButtonClicksData(buttonSelected)
59+
}
60+
61+
override fun getButtonSettingsFlow(): Flow<ButtonSettings> {
62+
return buttonSettingsRepository.buttonSettings
63+
}
64+
65+
override fun getPermissionsFlow(): Flow<Permissions> {
66+
return permissionsRepository.permissions
5767
}
5868

5969
override suspend fun onRightPassword() {
@@ -80,12 +90,12 @@ class ReceiversAdapter @Inject constructor(
8090
settingsRepository.setRunOnBoot(status)
8191
}
8292

83-
override suspend fun setClicksInRow(clicks: Int) {
84-
buttonSettingsRepository.setClicksInRow(clicks)
93+
override suspend fun setClicksInRow(clicks: Int, buttonSelected: ButtonSelected) {
94+
buttonSettingsRepository.setClicksInRow(clicks, buttonSelected)
8595
}
8696

87-
override suspend fun setLastTimestamp(timestamp: Long) {
88-
buttonSettingsRepository.setLastTimestamp(timestamp)
97+
override suspend fun setLastTimestamp(timestamp: Long, buttonSelected: ButtonSelected) {
98+
buttonSettingsRepository.setLastTimestamp(timestamp, buttonSelected)
8999
}
90100

91101
override suspend fun writeToLogs(text: String) {

app/src/main/java/com/android/aftools/adapters/SettingsAdapter.kt

Lines changed: 32 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,26 @@
11
package com.android.aftools.adapters
22

3-
import com.sonozaki.entities.ButtonSettings
3+
import com.bakasoft.appupdater.repository.AppUpdateRepository
4+
import com.bakasoft.network.RequestResult
45
import com.sonozaki.data.settings.repositories.BruteforceRepository
56
import com.sonozaki.data.settings.repositories.ButtonSettingsRepository
67
import com.sonozaki.data.settings.repositories.DeviceProtectionSettingsRepository
78
import com.sonozaki.data.settings.repositories.PermissionsRepository
89
import com.sonozaki.data.settings.repositories.SettingsRepository
910
import com.sonozaki.data.settings.repositories.UsbSettingsRepository
1011
import com.sonozaki.entities.BruteforceSettings
12+
import com.sonozaki.entities.ButtonSettings
1113
import com.sonozaki.entities.DeviceProtectionSettings
1214
import com.sonozaki.entities.MultiuserUIProtection
1315
import com.sonozaki.entities.Permissions
16+
import com.sonozaki.entities.PowerButtonTriggerOptions
1417
import com.sonozaki.entities.Settings
1518
import com.sonozaki.entities.Theme
1619
import com.sonozaki.entities.UsbSettings
20+
import com.sonozaki.entities.VolumeButtonTriggerOptions
1721
import com.sonozaki.settings.domain.repository.SettingsScreenRepository
1822
import kotlinx.coroutines.flow.Flow
23+
import okhttp3.ResponseBody
1924
import javax.inject.Inject
2025

2126
class SettingsAdapter @Inject constructor(
@@ -24,7 +29,8 @@ class SettingsAdapter @Inject constructor(
2429
private val buttonSettingsRepository: ButtonSettingsRepository,
2530
private val bruteforceRepository: BruteforceRepository,
2631
private val permissionsRepository: PermissionsRepository,
27-
private val deviceProtectionSettingsRepository: DeviceProtectionSettingsRepository
32+
private val deviceProtectionSettingsRepository: DeviceProtectionSettingsRepository,
33+
private val appUpdateRepository: AppUpdateRepository
2834
): SettingsScreenRepository {
2935
override val settings: Flow<Settings>
3036
get() = settingsRepository.settings
@@ -38,6 +44,8 @@ class SettingsAdapter @Inject constructor(
3844
get() = buttonSettingsRepository.buttonSettings
3945
override val deviceProtectionSettings: Flow<DeviceProtectionSettings>
4046
get() = deviceProtectionSettingsRepository.deviceProtectionSettings
47+
override val showUpdatePopup: Flow<Boolean>
48+
get() = appUpdateRepository.showUpdatePopupStatus
4149

4250
override suspend fun setTheme(theme: Theme) {
4351
settingsRepository.setTheme(theme)
@@ -111,60 +119,36 @@ class SettingsAdapter @Inject constructor(
111119
settingsRepository.setClearItself(status)
112120
}
113121

114-
override suspend fun setUserLimit(limit: Int) {
115-
settingsRepository.setUserLimit(limit)
116-
}
117-
118-
override suspend fun getUserLimit(): Int? {
119-
return settingsRepository.getUserLimit()
120-
}
121-
122122
override suspend fun setRunOnDuressPassword(status: Boolean) {
123123
settingsRepository.setRunOnDuressPassword(status)
124124
}
125125

126-
override suspend fun setMultiuserUIStatus(status: Boolean) {
127-
settingsRepository.setMultiuserUIStatus(status)
128-
}
129-
130-
override suspend fun setSafeBootStatus(status: Boolean) {
131-
settingsRepository.setSafeBootStatus(status)
132-
}
133-
134-
override suspend fun getSafeBootStatus(): Boolean {
135-
return settingsRepository.getSafeBootStatus()
136-
}
137-
138-
override suspend fun setSwitchUserRestriction(status: Boolean) {
139-
settingsRepository.setSwitchUserRestriction(status)
140-
}
141-
142-
override suspend fun getSwitchUserRestriction(): Boolean {
143-
return settingsRepository.getSwitchUserRestriction()
126+
override suspend fun updateLatency(latency: Int) {
127+
buttonSettingsRepository.updateLatency(latency)
144128
}
145129

146-
override suspend fun getUserSwitcherStatus(): Boolean {
147-
return settingsRepository.getUserSwitcherStatus()
130+
override suspend fun updateRootLatency(latency: Int) {
131+
buttonSettingsRepository.updateRootLatency(latency)
148132
}
149133

150-
override suspend fun setUserSwitcherStatus(status: Boolean) {
151-
settingsRepository.setUserSwitcherStatus(status)
134+
override suspend fun updateAllowedClicks(allowedClicks: Int) {
135+
buttonSettingsRepository.updateAllowedClicks(allowedClicks)
152136
}
153137

154-
override suspend fun getMultiuserUIStatus(): Boolean {
155-
return settingsRepository.getMultiuserUIStatus()
138+
override suspend fun setTriggerOnButtonStatus(status: PowerButtonTriggerOptions) {
139+
buttonSettingsRepository.setTriggerOnButtonStatus(status)
156140
}
157141

158-
override suspend fun updateLatency(latency: Int) {
159-
buttonSettingsRepository.updateLatency(latency)
142+
override suspend fun setTriggerOnVolumeButtonStatus(status: VolumeButtonTriggerOptions) {
143+
buttonSettingsRepository.setTriggerOnVolumeButtonStatus(status)
160144
}
161145

162-
override suspend fun updateAllowedClicks(allowedClicks: Int) {
163-
buttonSettingsRepository.updateAllowedClicks(allowedClicks)
146+
override suspend fun setTriggerOnVolumeButtonLatency(latency: Int) {
147+
buttonSettingsRepository.updateVolumeLatency(latency)
164148
}
165149

166-
override suspend fun setTriggerOnButtonStatus(status: Boolean) {
167-
buttonSettingsRepository.setTriggerOnButtonStatus(status)
150+
override suspend fun setVolumeButtonAllowedClicks(clicks: Int) {
151+
buttonSettingsRepository.updateAllowedVolumeButtonClicks(clicks)
168152
}
169153

170154
override suspend fun changeRebootDelay(delay: Int) {
@@ -182,4 +166,12 @@ class SettingsAdapter @Inject constructor(
182166
override suspend fun setScreenshotsStatus(status: Boolean) {
183167
settingsRepository.setScreenshotsStatus(status)
184168
}
169+
170+
override suspend fun disableUpdatePopup() {
171+
appUpdateRepository.disableUpdatePopup()
172+
}
173+
174+
override suspend fun downloadUpdate(): RequestResult<ResponseBody> {
175+
return appUpdateRepository.downloadUpdate()
176+
}
185177
}

app/src/main/java/com/android/aftools/di/RepositoriesModule.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.android.aftools.di
22

3+
import com.bakasoft.appupdater.repository.AppUpdateRepository
4+
import com.bakasoft.appupdater.repository.AppUpdateRepositoryImpl
35
import com.sonozaki.data.files.repository.FilesRepository
46
import com.sonozaki.data.files.repository.FilesRepositoryImpl
57
import com.sonozaki.data.logs.repository.LogsRepositoryImpl
@@ -29,6 +31,10 @@ import javax.inject.Singleton
2931
@InstallIn(SingletonComponent::class)
3032
@Module
3133
abstract class RepositoriesModule {
34+
35+
@Binds
36+
@Singleton
37+
abstract fun bindAppUpdateRepository(impl: AppUpdateRepositoryImpl): AppUpdateRepository
3238
@Binds
3339
@Singleton
3440
abstract fun bindFilesRepository(filesRepositoryImpl: FilesRepositoryImpl): FilesRepository

app/src/main/java/com/android/aftools/di/SerializersModule.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.sonozaki.entities.ButtonSettings
44
import com.sonozaki.data.files.entities.FilesList
55
import com.sonozaki.data.logs.entities.LogList
66
import com.sonozaki.data.profiles.entities.IntList
7+
import com.sonozaki.data.settings.entities.ButtonSettingsV1
78
import com.sonozaki.data.settings.entities.SettingsV1
89
import com.sonozaki.data.settings.entities.UsbSettingsV1
910
import com.sonozaki.encrypteddatastore.BaseSerializer
@@ -108,4 +109,10 @@ class SerializersModule {
108109
fun bindUSBV1BaseSerializer(@Named(IO_DISPATCHER) ioDispatcher: CoroutineDispatcher) =
109110
BaseSerializer<UsbSettingsV1>(ioDispatcher, UsbSettingsV1.serializer(),
110111
UsbSettingsV1())
112+
113+
@Provides
114+
@Singleton
115+
fun bindButtonSettingsV1BaseSerializer(@Named(IO_DISPATCHER) ioDispatcher: CoroutineDispatcher) =
116+
BaseSerializer<ButtonSettingsV1>(ioDispatcher, ButtonSettingsV1.serializer(),
117+
ButtonSettingsV1())
111118
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.android.aftools.di
2+
3+
import com.android.aftools.BuildConfig
4+
import com.bakasoft.appupdater.network.DownloadAppTestVersionService
5+
import com.sonozaki.resources.APP_UPDATE_URL
6+
import dagger.Module
7+
import dagger.Provides
8+
import dagger.hilt.InstallIn
9+
import dagger.hilt.components.SingletonComponent
10+
import retrofit2.Retrofit
11+
import retrofit2.converter.scalars.ScalarsConverterFactory
12+
import javax.inject.Named
13+
import javax.inject.Singleton
14+
15+
@Module
16+
@InstallIn(SingletonComponent::class)
17+
class UpdateModule {
18+
19+
@Provides
20+
@Singleton
21+
@Named(APP_UPDATE_URL)
22+
fun getUrl(): String {
23+
val version = when (BuildConfig.FLAVOR_name) {
24+
"island" -> "AFTools_island_TESTONLY.apk"
25+
"shelter" -> "AFTools_shelter_TESTONLY.apk"
26+
else -> return ""
27+
}
28+
return "bakad3v/Android-AntiForensic-Tools/releases/download/v${BuildConfig.VERSION_NAME}/$version"
29+
}
30+
31+
32+
@Provides
33+
@Singleton
34+
fun provideRetrofit(): Retrofit {
35+
return Retrofit.Builder().baseUrl(GITHUB).addConverterFactory(
36+
ScalarsConverterFactory.create()).build()
37+
}
38+
39+
@Provides
40+
@Singleton
41+
fun provideUpdateService(retrofit: Retrofit): DownloadAppTestVersionService {
42+
return retrofit.create(DownloadAppTestVersionService::class.java)
43+
}
44+
45+
companion object {
46+
const val GITHUB = "https://github.com/"
47+
}
48+
}

0 commit comments

Comments
 (0)