diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..bfc06e0d6c267607f464634c2cd14a05348a5066 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,28 @@ +image: "registry.gitlab.e.foundation:5000/e/apps/docker-android-apps-cicd:latest" + +stages: + - build + +before_script: + - export GRADLE_USER_HOME=$(pwd)/.gradle + - chmod +x ./gradlew + - ./gradlew clean + +cache: + key: ${CI_PROJECT_ID} + paths: + - .gradle/ + +build: + stage: build + script: + - | + ./gradlew build + retval=$? + if [$retval -ne 0]; then + echo "error on building, exit code: "$retval + exit $retval + fi + artifacts: + paths: + - presentation/build/outputs/apk diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000000000000000000000000000000000000..dd989c927924805486ff14271ffe1d32d1978670 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,3 @@ +© Moez Bhatti 2014-2019 +© ECORP SAS 2019 - Author: Romain Hunault +© eFoundation 2019 - Author: Amit Kumar \ No newline at end of file diff --git a/android-smsmms/build.gradle b/android-smsmms/build.gradle index 0012ed8d7f88859da3870456f30b5f76a46c47cd..43ebe5fe8f18606df8681e985ba17f266efc5dc7 100644 --- a/android-smsmms/build.gradle +++ b/android-smsmms/build.gradle @@ -37,7 +37,6 @@ android { } dependencies { - implementation "androidx.core:core-ktx:$androidx_core_version" implementation "com.jakewharton.timber:timber:$timber_version" implementation 'com.klinkerapps:logger:1.0.3' implementation 'com.squareup.okhttp:okhttp:2.5.0' diff --git a/android-smsmms/src/main/java/com/klinker/android/send_message/Transaction.kt b/android-smsmms/src/main/java/com/klinker/android/send_message/Transaction.kt index ccc3b8c33db1da41d78e67ddf7ad56b99355ac6c..2a24249b0ab02037b75dac4ae6f0e94d9cfad51a 100755 --- a/android-smsmms/src/main/java/com/klinker/android/send_message/Transaction.kt +++ b/android-smsmms/src/main/java/com/klinker/android/send_message/Transaction.kt @@ -21,8 +21,8 @@ import android.content.ContentResolver import android.content.Context import android.content.Intent import android.net.Uri +import android.os.Bundle import android.telephony.SmsManager -import androidx.core.os.bundleOf import com.android.mms.MmsConfig import com.android.mms.dom.smil.parser.SmilXmlSerializer import com.android.mms.util.DownloadManager @@ -122,9 +122,12 @@ class Transaction @JvmOverloads constructor(private val context: Context, settin null } - val configOverrides = bundleOf( - Pair(SmsManager.MMS_CONFIG_GROUP_MMS_ENABLED, true), - Pair(SmsManager.MMS_CONFIG_MAX_MESSAGE_SIZE, MmsConfig.getMaxMessageSize())) + + // Removed android-ktx bundleOf() function because android-ktx cause build failure with sdk 25 + // TODO: Either use android-ktx or write own bundleOf() function. + val configOverrides = Bundle() + configOverrides.putBoolean(SmsManager.MMS_CONFIG_GROUP_MMS_ENABLED, true) + configOverrides.putInt(SmsManager.MMS_CONFIG_MAX_MESSAGE_SIZE, MmsConfig.getMaxMessageSize()) MmsConfig.getHttpParams() ?.takeIf { it.isNotEmpty() } diff --git a/build.gradle b/build.gradle index dd44e1e26e960a58dd3b043a3139063159739ce9..a794ac3081cc3f2462684b494415c7cb567fb8ca 100644 --- a/build.gradle +++ b/build.gradle @@ -58,6 +58,14 @@ allprojects { } } +subprojects { + tasks.whenTaskAdded { task -> + if (task.name.equals("lint")) { + task.enabled = false + } + } +} + task clean(type: Delete) { delete rootProject.buildDir } diff --git a/data/src/main/java/com/moez/QKSMS/manager/WidgetManagerImpl.kt b/data/src/main/java/com/moez/QKSMS/manager/WidgetManagerImpl.kt index a8f3b26b3eb92c9d386ad66b681fdb5f41eda0d2..9568748e940db66de5b568d6e3ef8c9941402e7b 100644 --- a/data/src/main/java/com/moez/QKSMS/manager/WidgetManagerImpl.kt +++ b/data/src/main/java/com/moez/QKSMS/manager/WidgetManagerImpl.kt @@ -33,7 +33,7 @@ class WidgetManagerImpl @Inject constructor(private val context: Context) : Widg override fun updateTheme() { val ids = AppWidgetManager.getInstance(context) - .getAppWidgetIds(ComponentName("com.moez.QKSMS", "com.moez.QKSMS.feature.widget.WidgetProvider")) + .getAppWidgetIds(ComponentName(context, "com.moez.QKSMS.feature.widget.WidgetProvider")) val intent = Intent().putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids) diff --git a/presentation/build.gradle b/presentation/build.gradle index 8decc86bc5c525542ce1e7a85a7b397d61fafb59..1c958fabd867ed7690dabf5f8b63a0c40e1be1d8 100644 --- a/presentation/build.gradle +++ b/presentation/build.gradle @@ -28,7 +28,7 @@ android { flavorDimensions "analytics" defaultConfig { - applicationId "com.moez.QKSMS" + applicationId "foundation.e.message" minSdkVersion 21 targetSdkVersion 28 versionCode 194 @@ -38,16 +38,11 @@ android { buildConfigField "String", "BUGSNAG_API_KEY", "\"${System.getenv("BUGSNAG_API_KEY")}\"" } - signingConfigs { - release - } - buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - signingConfig signingConfigs.release } } @@ -73,13 +68,6 @@ android { universalApk true } } - - if (System.getenv("CI") == "true") { - signingConfigs.release.storeFile = file("../keystore") - signingConfigs.release.storePassword = System.getenv("keystore_password") - signingConfigs.release.keyAlias = System.getenv("key_alias") - signingConfigs.release.keyPassword = System.getenv("key_password") - } } androidExtensions { diff --git a/presentation/src/main/ic_launcher-web.png b/presentation/src/main/ic_launcher-web.png new file mode 100644 index 0000000000000000000000000000000000000000..51035d17c5aac985b2c04a4d256f2cb478dd1575 Binary files /dev/null and b/presentation/src/main/ic_launcher-web.png differ diff --git a/presentation/src/main/java/com/moez/QKSMS/common/Navigator.kt b/presentation/src/main/java/com/moez/QKSMS/common/Navigator.kt index ddb0d037a480f2c04dbeaccba8e0df2a3397febc..30892d4f79c7ad3991842aa685341e5c2d3779b1 100644 --- a/presentation/src/main/java/com/moez/QKSMS/common/Navigator.kt +++ b/presentation/src/main/java/com/moez/QKSMS/common/Navigator.kt @@ -34,7 +34,6 @@ import com.moez.QKSMS.feature.compose.ComposeActivity import com.moez.QKSMS.feature.conversationinfo.ConversationInfoActivity import com.moez.QKSMS.feature.gallery.GalleryActivity import com.moez.QKSMS.feature.notificationprefs.NotificationPrefsActivity -import com.moez.QKSMS.feature.plus.PlusActivity import com.moez.QKSMS.feature.scheduled.ScheduledActivity import com.moez.QKSMS.feature.settings.SettingsActivity import com.moez.QKSMS.manager.AnalyticsManager @@ -66,16 +65,6 @@ class Navigator @Inject constructor( } } - /** - * @param source String to indicate where this QKSMS+ screen was launched from. This should be - * one of [main_menu, compose_schedule, settings_night, settings_theme] - */ - fun showQksmsPlusActivity(source: String) { - analyticsManager.track("Viewed QKSMS+", Pair("source", source)) - val intent = Intent(context, PlusActivity::class.java) - startActivity(intent) - } - fun showDefaultSmsDialog() { val intent = Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT) if (Telephony.Sms.getDefaultSmsPackage(context) != context.packageName) { @@ -130,23 +119,23 @@ class Navigator @Inject constructor( startActivity(intent) } - fun showDeveloper() { - val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/moezbhatti")) + fun showSourceCode() { + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://gitlab.e.foundation/e/apps/message")) startActivity(intent) } - fun showSourceCode() { - val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/moezbhatti/qksms")) + fun showLicense() { + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://gitlab.e.foundation/e/apps/message/blob/e-features/LICENSE")) startActivity(intent) } - fun showChangelog() { - val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/moezbhatti/qksms/releases")) + fun showFork() { + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/moezbhatti/qksms")) startActivity(intent) } - fun showLicense() { - val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/moezbhatti/qksms/blob/master/LICENSE")) + fun showCopyright() { + val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://gitlab.e.foundation/e/apps/message/blob/e-features/AUTHORS")) startActivity(intent) } @@ -189,33 +178,6 @@ class Navigator @Inject constructor( startActivity(intent) } - fun showSupport() { - val intent = Intent(Intent.ACTION_SENDTO) - intent.data = Uri.parse("mailto:") - intent.putExtra(Intent.EXTRA_EMAIL, arrayOf("moez@qklabs.com")) - intent.putExtra(Intent.EXTRA_SUBJECT, "QKSMS Support") - intent.putExtra(Intent.EXTRA_TEXT, StringBuilder("\n\n") - .append("\n\n--- Please write your message above this line ---\n\n") - .append("Package: ${context.packageName}\n") - .append("Version: ${BuildConfig.VERSION_NAME}\n") - .append("Device: ${Build.BRAND} ${Build.MODEL}\n") - .append("SDK: ${Build.VERSION.SDK_INT}\n") - .append("Upgraded" - .takeIf { BuildConfig.FLAVOR != "noAnalytics" } - .takeIf { billingManager.upgradeStatus.blockingFirst() } ?: "") - .toString()) - startActivityExternal(intent) - } - - fun showInvite() { - analyticsManager.track("Clicked Invite") - Intent(Intent.ACTION_SEND) - .setType("text/plain") - .putExtra(Intent.EXTRA_TEXT, "http://qklabs.com/download") - .let { Intent.createChooser(it, null) } - .let(this::startActivityExternal) - } - fun addContact(address: String) { val uri = Uri.parse("tel: $address") var intent = Intent(ContactsContract.Intents.SHOW_OR_CREATE_CONTACT, uri) @@ -256,4 +218,6 @@ class Navigator @Inject constructor( } } + + } \ No newline at end of file diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/backup/BackupPresenter.kt b/presentation/src/main/java/com/moez/QKSMS/feature/backup/BackupPresenter.kt index efa479783e3076cef74133f7790c7c56f7ccdea3..17aca14bfc23342f5af1f8b22fb50714754e55c9 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/backup/BackupPresenter.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/backup/BackupPresenter.kt @@ -119,16 +119,6 @@ class BackupPresenter @Inject constructor( .autoDisposable(view.scope()) .subscribe { backupRepo.stopRestore() } - view.fabClicks() - .withLatestFrom(billingManager.upgradeStatus) { _, upgraded -> upgraded } - .autoDisposable(view.scope()) - .subscribe { upgraded -> - when { - !upgraded -> navigator.showQksmsPlusActivity("backup_fab") - !permissionManager.hasStorage() -> view.requestStoragePermission() - upgraded -> performBackup.execute(Unit) - } - } } } \ No newline at end of file diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeViewModel.kt b/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeViewModel.kt index 074c8dd813b58e537a20e9719bb41f58b700e7c9..fed1803f39aa149bcff19684e21cc3acc293720f 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeViewModel.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeViewModel.kt @@ -678,11 +678,6 @@ class ComposeViewModel @Inject constructor( .autoDisposable(view.scope()) .subscribe() - // View QKSMS+ - view.viewQksmsPlusIntent - .autoDisposable(view.scope()) - .subscribe { navigator.showQksmsPlusActivity("compose_schedule") } - // Navigate back view.optionsItemIntent .filter { it == android.R.id.home } diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/main/MainActivity.kt b/presentation/src/main/java/com/moez/QKSMS/feature/main/MainActivity.kt index 5bf9728b58959ddfe363b3e2d53c91d8b223ccd1..cd523fa9ee418d6611f9e6aa752b1aec874bb39d 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/main/MainActivity.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/main/MainActivity.kt @@ -93,13 +93,9 @@ class MainActivity : QkThemedActivity(), MainView { backup.clicks().map { DrawerItem.BACKUP }, scheduled.clicks().map { DrawerItem.SCHEDULED }, blocking.clicks().map { DrawerItem.BLOCKING }, - settings.clicks().map { DrawerItem.SETTINGS }, - plus.clicks().map { DrawerItem.PLUS }, - help.clicks().map { DrawerItem.HELP }, - invite.clicks().map { DrawerItem.INVITE })) + settings.clicks().map { DrawerItem.SETTINGS })) } override val optionsItemIntent: Subject = PublishSubject.create() - override val plusBannerIntent by lazy { plusBanner.clicks() } override val dismissRatingIntent by lazy { rateDismiss.clicks() } override val rateIntent by lazy { rateOkay.clicks() } override val conversationsSelectedIntent by lazy { conversationsAdapter.selectionChanges } @@ -220,7 +216,6 @@ class MainActivity : QkThemedActivity(), MainView { listOf(plusBadge1, plusBadge2).forEach { badge -> badge.isVisible = drawerBadgesExperiment.variant && !state.upgraded } - plus.isVisible = state.upgraded plusBanner.isVisible = !state.upgraded rateLayout.setVisible(state.showRating) diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/main/MainView.kt b/presentation/src/main/java/com/moez/QKSMS/feature/main/MainView.kt index f14d9f5b03a7ed22239c9516626555f6ea5d4db4..4841727851ac2675673541351094276e311215f6 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/main/MainView.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/main/MainView.kt @@ -30,7 +30,6 @@ interface MainView : QkView { val homeIntent: Observable<*> val drawerItemIntent: Observable val optionsItemIntent: Observable - val plusBannerIntent: Observable<*> val dismissRatingIntent: Observable<*> val rateIntent: Observable<*> val conversationsSelectedIntent: Observable> @@ -48,4 +47,4 @@ interface MainView : QkView { } -enum class DrawerItem { INBOX, ARCHIVED, BACKUP, SCHEDULED, BLOCKING, SETTINGS, PLUS, HELP, INVITE } \ No newline at end of file +enum class DrawerItem { INBOX, ARCHIVED, BACKUP, SCHEDULED, BLOCKING, SETTINGS, PLUS } \ No newline at end of file diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/main/MainViewModel.kt b/presentation/src/main/java/com/moez/QKSMS/feature/main/MainViewModel.kt index 2d5e1b007fcf91a949a090c6c535435f61a023ed..8205ccf6b94531bd9e3972697d5f0f5e2f4e2ae7 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/main/MainViewModel.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/main/MainViewModel.kt @@ -190,9 +190,6 @@ class MainViewModel @Inject constructor( .doOnNext { if (it == DrawerItem.SCHEDULED) navigator.showScheduled() } .doOnNext { if (it == DrawerItem.BLOCKING) navigator.showBlockedConversations() } .doOnNext { if (it == DrawerItem.SETTINGS) navigator.showSettings() } - .doOnNext { if (it == DrawerItem.PLUS) navigator.showQksmsPlusActivity("main_menu") } - .doOnNext { if (it == DrawerItem.HELP) navigator.showSupport() } - .doOnNext { if (it == DrawerItem.INVITE) navigator.showInvite() } .distinctUntilChanged() .doOnNext { when (it) { @@ -249,13 +246,6 @@ class MainViewModel @Inject constructor( .autoDisposable(view.scope()) .subscribe() - view.plusBannerIntent - .autoDisposable(view.scope()) - .subscribe { - newState { copy(drawerOpen = false) } - navigator.showQksmsPlusActivity("main_banner") - } - view.rateIntent .autoDisposable(view.scope()) .subscribe { diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusActivity.kt b/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusActivity.kt deleted file mode 100644 index 316e51037d8532a69e0f4950341ac5b565db8665..0000000000000000000000000000000000000000 --- a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusActivity.kt +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2017 Moez Bhatti - * - * This file is part of QKSMS. - * - * QKSMS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * QKSMS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with QKSMS. If not, see . - */ -package com.moez.QKSMS.feature.plus - -import android.graphics.Typeface -import android.os.Bundle -import androidx.core.view.children -import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.ViewModelProviders -import com.jakewharton.rxbinding2.view.clicks -import com.moez.QKSMS.BuildConfig -import com.moez.QKSMS.R -import com.moez.QKSMS.common.base.QkThemedActivity -import com.moez.QKSMS.common.util.BillingManager -import com.moez.QKSMS.common.util.FontProvider -import com.moez.QKSMS.common.util.extensions.resolveThemeColor -import com.moez.QKSMS.common.util.extensions.setBackgroundTint -import com.moez.QKSMS.common.util.extensions.setTint -import com.moez.QKSMS.common.util.extensions.setVisible -import com.moez.QKSMS.common.widget.PreferenceView -import com.moez.QKSMS.feature.plus.experiment.UpgradeButtonExperiment -import dagger.android.AndroidInjection -import kotlinx.android.synthetic.main.collapsing_toolbar.* -import kotlinx.android.synthetic.main.preference_view.view.* -import kotlinx.android.synthetic.main.qksms_plus_activity.* -import javax.inject.Inject - -class PlusActivity : QkThemedActivity(), PlusView { - - @Inject lateinit var fontProvider: FontProvider - @Inject lateinit var upgradeButtonExperiment: UpgradeButtonExperiment - @Inject lateinit var viewModelFactory: ViewModelProvider.Factory - - private val viewModel by lazy { ViewModelProviders.of(this, viewModelFactory)[PlusViewModel::class.java] } - - override val upgradeIntent by lazy { upgrade.clicks() } - override val upgradeDonateIntent by lazy { upgradeDonate.clicks() } - override val donateIntent by lazy { donate.clicks() } - - override fun onCreate(savedInstanceState: Bundle?) { - AndroidInjection.inject(this) - super.onCreate(savedInstanceState) - setContentView(R.layout.qksms_plus_activity) - setTitle(R.string.title_qksms_plus) - showBackButton(true) - viewModel.bindView(this) - - free.setVisible(false) - - if (!prefs.systemFont.get()) { - fontProvider.getLato { lato -> - val typeface = Typeface.create(lato, Typeface.BOLD) - collapsingToolbar.setCollapsedTitleTypeface(typeface) - collapsingToolbar.setExpandedTitleTypeface(typeface) - } - } - - // Make the list titles bold - linearLayout.children - .mapNotNull { it as? PreferenceView } - .map { it.titleView } - .forEach { it.setTypeface(it.typeface, Typeface.BOLD) } - - val textPrimary = resolveThemeColor(android.R.attr.textColorPrimary) - collapsingToolbar.setCollapsedTitleTextColor(textPrimary) - collapsingToolbar.setExpandedTitleColor(textPrimary) - - val theme = colors.theme().theme - donate.setBackgroundTint(theme) - upgrade.setBackgroundTint(theme) - thanksIcon.setTint(theme) - } - - override fun render(state: PlusState) { - description.text = getString(R.string.qksms_plus_description_summary, state.upgradePrice) - upgrade.text = getString(upgradeButtonExperiment.variant, state.upgradePrice, state.currency) - upgradeDonate.text = getString(R.string.qksms_plus_upgrade_donate, state.upgradeDonatePrice, state.currency) - - val fdroid = BuildConfig.FLAVOR == "noAnalytics" - - free.setVisible(fdroid) - toUpgrade.setVisible(!fdroid && !state.upgraded) - upgraded.setVisible(!fdroid && state.upgraded) - } - - override fun initiatePurchaseFlow(billingManager: BillingManager, sku: String) { - billingManager.initiatePurchaseFlow(this, sku) - } - -} \ No newline at end of file diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusActivityModule.kt b/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusActivityModule.kt deleted file mode 100644 index 26a3fe3d2b7cc0b1e160b180015764e828f86ab1..0000000000000000000000000000000000000000 --- a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusActivityModule.kt +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2017 Moez Bhatti - * - * This file is part of QKSMS. - * - * QKSMS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * QKSMS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with QKSMS. If not, see . - */ -package com.moez.QKSMS.feature.plus - -import androidx.lifecycle.ViewModel -import com.moez.QKSMS.injection.ViewModelKey -import dagger.Module -import dagger.Provides -import dagger.multibindings.IntoMap - -@Module -class PlusActivityModule { - - @Provides - @IntoMap - @ViewModelKey(PlusViewModel::class) - fun providePlusViewModel(viewModel: PlusViewModel): ViewModel = viewModel - -} \ No newline at end of file diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusState.kt b/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusState.kt deleted file mode 100644 index b3d3276064664c76a8f70c0e019c367bec0be992..0000000000000000000000000000000000000000 --- a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusState.kt +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2017 Moez Bhatti - * - * This file is part of QKSMS. - * - * QKSMS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * QKSMS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with QKSMS. If not, see . - */ -package com.moez.QKSMS.feature.plus - -data class PlusState( - val upgraded: Boolean = false, - val upgradePrice: String = "", - val upgradeDonatePrice: String = "", - val currency: String = "" -) \ No newline at end of file diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusView.kt b/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusView.kt deleted file mode 100644 index a10403289ea388b1b31763b31e997ae5668fb374..0000000000000000000000000000000000000000 --- a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusView.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2017 Moez Bhatti - * - * This file is part of QKSMS. - * - * QKSMS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * QKSMS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with QKSMS. If not, see . - */ -package com.moez.QKSMS.feature.plus - -import com.moez.QKSMS.common.base.QkView -import com.moez.QKSMS.common.util.BillingManager -import io.reactivex.Observable - -interface PlusView : QkView { - - val upgradeIntent: Observable - val upgradeDonateIntent: Observable - val donateIntent: Observable<*> - - fun initiatePurchaseFlow(billingManager: BillingManager, sku: String) - -} \ No newline at end of file diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusViewModel.kt b/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusViewModel.kt deleted file mode 100644 index e7131bc5668d9e61a65acf5a73d71300e6f15caf..0000000000000000000000000000000000000000 --- a/presentation/src/main/java/com/moez/QKSMS/feature/plus/PlusViewModel.kt +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2017 Moez Bhatti - * - * This file is part of QKSMS. - * - * QKSMS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * QKSMS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with QKSMS. If not, see . - */ -package com.moez.QKSMS.feature.plus - -import com.moez.QKSMS.common.Navigator -import com.moez.QKSMS.common.androidxcompat.scope -import com.moez.QKSMS.common.base.QkViewModel -import com.moez.QKSMS.common.util.BillingManager -import com.moez.QKSMS.manager.AnalyticsManager -import com.uber.autodispose.kotlin.autoDisposable -import io.reactivex.Observable -import io.reactivex.rxkotlin.plusAssign -import javax.inject.Inject - -class PlusViewModel @Inject constructor( - private val analyticsManager: AnalyticsManager, - private val billingManager: BillingManager, - private val navigator: Navigator -) : QkViewModel(PlusState()) { - - init { - disposables += billingManager.upgradeStatus - .subscribe { upgraded -> newState { copy(upgraded = upgraded) } } - - disposables += billingManager.products - .subscribe { products -> - newState { - val upgrade = products.firstOrNull { it.sku == BillingManager.SKU_PLUS } - val upgradeDonate = products.firstOrNull { it.sku == BillingManager.SKU_PLUS_DONATE } - copy(upgradePrice = upgrade?.price ?: "", upgradeDonatePrice = upgradeDonate?.price ?: "", - currency = upgrade?.priceCurrencyCode ?: upgradeDonate?.priceCurrencyCode ?: "") - } - } - } - - override fun bindView(view: PlusView) { - super.bindView(view) - - Observable.merge( - view.upgradeIntent.map { BillingManager.SKU_PLUS }, - view.upgradeDonateIntent.map { BillingManager.SKU_PLUS_DONATE }) - .doOnNext { sku -> analyticsManager.track("Clicked Upgrade", Pair("sku", sku)) } - .autoDisposable(view.scope()) - .subscribe { sku -> view.initiatePurchaseFlow(billingManager, sku) } - - view.donateIntent - .autoDisposable(view.scope()) - .subscribe { navigator.showDonation() } - } - -} \ No newline at end of file diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/plus/experiment/UpgradeButtonExperiment.kt b/presentation/src/main/java/com/moez/QKSMS/feature/plus/experiment/UpgradeButtonExperiment.kt deleted file mode 100644 index c954a5592e9002dc061cdf362cf4c14acaf87182..0000000000000000000000000000000000000000 --- a/presentation/src/main/java/com/moez/QKSMS/feature/plus/experiment/UpgradeButtonExperiment.kt +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2017 Moez Bhatti - * - * This file is part of QKSMS. - * - * QKSMS is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * QKSMS is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with QKSMS. If not, see . - */ -package com.moez.QKSMS.feature.plus.experiment - -import android.content.Context -import androidx.annotation.StringRes -import com.moez.QKSMS.R -import com.moez.QKSMS.experiment.Experiment -import com.moez.QKSMS.experiment.Variant -import com.moez.QKSMS.manager.AnalyticsManager -import javax.inject.Inject - -class UpgradeButtonExperiment @Inject constructor( - context: Context, - analytics: AnalyticsManager -) : Experiment<@StringRes Int>(context, analytics) { - - override val key: String = "Upgrade Button" - - override val variants: List> = listOf( - Variant("variant_a", R.string.qksms_plus_upgrade), - Variant("variant_b", R.string.qksms_plus_upgrade_b), - Variant("variant_c", R.string.qksms_plus_upgrade_c), - Variant("variant_d", R.string.qksms_plus_upgrade_d)) - - override val default: Int = R.string.qksms_plus_upgrade - -} \ No newline at end of file diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/scheduled/ScheduledViewModel.kt b/presentation/src/main/java/com/moez/QKSMS/feature/scheduled/ScheduledViewModel.kt index 92bf7dfb9f0b7a5e91bc71fd153a7015e352f068..0f59ecc43c2b56a41b0e3d3fcc7457cb74ba4baf 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/scheduled/ScheduledViewModel.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/scheduled/ScheduledViewModel.kt @@ -64,9 +64,6 @@ class ScheduledViewModel @Inject constructor( .autoDisposable(view.scope()) .subscribe { navigator.showCompose() } - view.upgradeIntent - .autoDisposable(view.scope()) - .subscribe { navigator.showQksmsPlusActivity("schedule_fab") } } } \ No newline at end of file diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/settings/SettingsController.kt b/presentation/src/main/java/com/moez/QKSMS/feature/settings/SettingsController.kt index d90ae0163b3915c19d9ab2c56df30001d2f30148..edfc0362a6a5dd45e4fdaf6e38a3867dca9f9570 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/settings/SettingsController.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/settings/SettingsController.kt @@ -89,7 +89,6 @@ class SettingsController : QkController newState { copy(theme = color) } } + val nightModeLabels = context.resources.getStringArray(R.array.night_modes) disposables += prefs.nightMode.asObservable() .subscribe { nightMode -> @@ -191,10 +194,6 @@ class SettingsPresenter @Inject constructor( .autoDisposable(view.scope()) .subscribe() - view.viewQksmsPlusClicks() - .autoDisposable(view.scope()) - .subscribe { navigator.showQksmsPlusActivity("settings_night") } - view.nightStartSelected() .autoDisposable(view.scope()) .subscribe { nightModeManager.setNightStart(it.first, it.second) } diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/settings/about/AboutController.kt b/presentation/src/main/java/com/moez/QKSMS/feature/settings/about/AboutController.kt index 7385a29c91db11d1b3997a925a8419ca859dc21c..b286a434f8f4cb3d598a27e95f6f4674cdf5fee2 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/settings/about/AboutController.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/settings/about/AboutController.kt @@ -39,7 +39,6 @@ class AboutController : QkController(), AboutVi } override fun onViewCreated() { - version.summary = BuildConfig.VERSION_NAME } override fun onAttach(view: View) { diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/settings/about/AboutPresenter.kt b/presentation/src/main/java/com/moez/QKSMS/feature/settings/about/AboutPresenter.kt index ab231f71f8bc957084b81f161650e9330c7371c6..b20cb4f5ad8d63ae3ac42f7c867a7068c11044e9 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/settings/about/AboutPresenter.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/settings/about/AboutPresenter.kt @@ -35,13 +35,11 @@ class AboutPresenter @Inject constructor( .autoDisposable(view.scope()) .subscribe { preference -> when (preference.id) { - R.id.developer -> navigator.showDeveloper() + R.id.fork -> navigator.showFork() R.id.source -> navigator.showSourceCode() - R.id.changelog -> navigator.showChangelog() - - R.id.contact -> navigator.showSupport() + R.id.copyright -> navigator.showCopyright() R.id.license -> navigator.showLicense() } diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/themepicker/ThemePickerPresenter.kt b/presentation/src/main/java/com/moez/QKSMS/feature/themepicker/ThemePickerPresenter.kt index 66ad9b6eb41255e5886575d14d9cf30caaeaf165..6dd24da2a60a600c7482d11e2415737147809fbd 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/themepicker/ThemePickerPresenter.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/themepicker/ThemePickerPresenter.kt @@ -88,11 +88,6 @@ class ThemePickerPresenter @Inject constructor( .autoDisposable(view.scope()) .subscribe() - // Show QKSMS+ activity - view.viewQksmsPlusClicks() - .autoDisposable(view.scope()) - .subscribe { navigator.showQksmsPlusActivity("settings_theme") } - // Reset the theme view.clearHsvThemeClicks() .withLatestFrom(theme.asObservable()) { _, color -> color } diff --git a/presentation/src/main/java/com/moez/QKSMS/injection/android/ActivityBuilderModule.kt b/presentation/src/main/java/com/moez/QKSMS/injection/android/ActivityBuilderModule.kt index 926b3cdc946e52f4fc296f824c0457e13f66a12f..c415b02e5c679c05494e790ea4953141bc3768b6 100644 --- a/presentation/src/main/java/com/moez/QKSMS/injection/android/ActivityBuilderModule.kt +++ b/presentation/src/main/java/com/moez/QKSMS/injection/android/ActivityBuilderModule.kt @@ -30,8 +30,6 @@ import com.moez.QKSMS.feature.main.MainActivity import com.moez.QKSMS.feature.main.MainActivityModule import com.moez.QKSMS.feature.notificationprefs.NotificationPrefsActivity import com.moez.QKSMS.feature.notificationprefs.NotificationPrefsActivityModule -import com.moez.QKSMS.feature.plus.PlusActivity -import com.moez.QKSMS.feature.plus.PlusActivityModule import com.moez.QKSMS.feature.qkreply.QkReplyActivity import com.moez.QKSMS.feature.qkreply.QkReplyActivityModule import com.moez.QKSMS.feature.scheduled.ScheduledActivity @@ -48,10 +46,6 @@ abstract class ActivityBuilderModule { @ContributesAndroidInjector(modules = [MainActivityModule::class]) abstract fun bindMainActivity(): MainActivity - @ActivityScope - @ContributesAndroidInjector(modules = [PlusActivityModule::class]) - abstract fun bindPlusActivity(): PlusActivity - @ActivityScope @ContributesAndroidInjector(modules = []) abstract fun bindBackupActivity(): BackupActivity diff --git a/presentation/src/main/res/layout/about_controller.xml b/presentation/src/main/res/layout/about_controller.xml index 1c15ce29f1d90f160990cb0d0ff8f032ae6834e6..e3bc14a41e6bc3bf713ad983136f44e096ec82ef 100644 --- a/presentation/src/main/res/layout/about_controller.xml +++ b/presentation/src/main/res/layout/about_controller.xml @@ -33,18 +33,10 @@ android:paddingTop="8dp"> - - + app:title="@string/about_fork_title" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - + app:title="@string/settings_about_title"/> diff --git a/presentation/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/presentation/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000000000000000000000000000000000000..036d09bc5fd523323794379703c4a111d1e28a04 --- /dev/null +++ b/presentation/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/presentation/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000000000000000000000000000000000000..036d09bc5fd523323794379703c4a111d1e28a04 --- /dev/null +++ b/presentation/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/presentation/src/main/res/mipmap-hdpi/ic_launcher.png b/presentation/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cebdd44e7e8da7376b5dc8c3001f2b95033ec47b Binary files /dev/null and b/presentation/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/presentation/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/presentation/src/main/res/mipmap-hdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..335174882bf5be8544950cb56080f8bb0d0440a4 Binary files /dev/null and b/presentation/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/presentation/src/main/res/mipmap-hdpi/ic_launcher_round.png b/presentation/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..0c891d52a02cb93309b43733e6b6bdc7b3f7af7b Binary files /dev/null and b/presentation/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/presentation/src/main/res/mipmap-mdpi/ic_launcher.png b/presentation/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..fc5e82f3d5958e148d35bc8380099d6a678eb7dd Binary files /dev/null and b/presentation/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/presentation/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/presentation/src/main/res/mipmap-mdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..a9c0f992ef7f149b55bd4ef7795e4c1c9685c092 Binary files /dev/null and b/presentation/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/presentation/src/main/res/mipmap-mdpi/ic_launcher_round.png b/presentation/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..37076746e9ffb118bb21871e056139e769f91c47 Binary files /dev/null and b/presentation/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/presentation/src/main/res/mipmap-xhdpi/ic_launcher.png b/presentation/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..91163977247726e4b439272c19f145a7481ba0ba Binary files /dev/null and b/presentation/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/presentation/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/presentation/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..04ad8a0c967a9e8ce4ae9ea83d5bf84da5d4458b Binary files /dev/null and b/presentation/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/presentation/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/presentation/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..7be6216f60e2f57f968cffdb114c748cbb67c5ca Binary files /dev/null and b/presentation/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/presentation/src/main/res/mipmap-xxhdpi/ic_launcher.png b/presentation/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..784bdbdc94d7467fb6599b095b3a98ab630c6ab6 Binary files /dev/null and b/presentation/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/presentation/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/presentation/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png new file mode 100644 index 0000000000000000000000000000000000000000..3ec3f305d7020f351d491630b417fc8c7b3ac335 Binary files /dev/null and b/presentation/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/presentation/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/presentation/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..ef3d0488836001456a19b1c8c6d8f9bce2d5234d Binary files /dev/null and b/presentation/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 3cae4497e8050892bf3353dcbdca7e6c24021ba5..730b95e13fe199d1e6bc5be3a0dd3a3b46253ad4 100644 Binary files a/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png index 186d36b09cddc6710ec45ed827d22525f7f4fc2a..1e0415b52b0b009576588f34bec43f28afab8678 100644 Binary files a/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and b/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000000000000000000000000000000000000..b20b1e05ecefd098fe73881857d100c7878f3ce9 Binary files /dev/null and b/presentation/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/presentation/src/main/res/values-cs/strings.xml b/presentation/src/main/res/values-cs/strings.xml index 7126480ec512c80d882d1f79b93b79ce27866dd1..f85f10e5b863d880e81de685886438288ed9a2f5 100644 --- a/presentation/src/main/res/values-cs/strings.xml +++ b/presentation/src/main/res/values-cs/strings.xml @@ -231,7 +231,7 @@ Automaticky komprimovat MMS přílohy Synchronizovat zprávy Opětovná synchronizace zpráv s nativní Android SMS databází - O aplikaci QKSMS + O aplikaci Message Verze %s Ladící protokolování zapnuto Ladící protokolování vypnuto diff --git a/presentation/src/main/res/values-zh-rCN/strings.xml b/presentation/src/main/res/values-zh-rCN/strings.xml index 6adc9074b97833d31eb6bce5f73b7d00414b31bf..bcbb9e23f14e625868d7be61c39b3b2e34731217 100644 --- a/presentation/src/main/res/values-zh-rCN/strings.xml +++ b/presentation/src/main/res/values-zh-rCN/strings.xml @@ -225,7 +225,7 @@ 自动压缩彩信附件 同步消息 重新与安卓原生短信数据库进行同步 - 关于 QKSMS + 关于 Message 版本 %s 启用了调试日志记录 调试日志记录已禁用 diff --git a/presentation/src/main/res/values-zh/strings.xml b/presentation/src/main/res/values-zh/strings.xml index 39783ccc66c978683ca75af70b4a1c512603b466..51ef6f67e06dfd6305e7a2a815794884f7861c4e 100644 --- a/presentation/src/main/res/values-zh/strings.xml +++ b/presentation/src/main/res/values-zh/strings.xml @@ -225,7 +225,7 @@ 自動壓縮MMS附件 同步消息 重新與安卓原生訊息數據庫進行同步 - 關於QKSMS + 關於Message 版本 %s Debug logging enabled Debug logging disabled diff --git a/presentation/src/main/res/values/donottranslate.xml b/presentation/src/main/res/values/donottranslate.xml index 6b164ce2e4d45fd9bfed2c8ff839d4f6eac661c0..0bbc7099017a374be8c76d2d1b569261ff45dafc 100644 --- a/presentation/src/main/res/values/donottranslate.xml +++ b/presentation/src/main/res/values/donottranslate.xml @@ -19,15 +19,8 @@ --> - Unlock for %1$s %2$s - Unlock forever for %1$s %2$s - One-time purchase of %1$s %2$s - - Moez Bhatti - https://github.com/moezbhatti/qksms - https://github.com/moezbhatti/qksms/releases - team@qklabs.com + https://gitlab.e.foundation/e/apps/message GNU General Public License v3.0 - © 2014–2018 + © 2014–2019 \ No newline at end of file diff --git a/presentation/src/main/res/values/ic_launcher_background.xml b/presentation/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000000000000000000000000000000000000..86058528be19890ac07820437a3e7679c6b14115 --- /dev/null +++ b/presentation/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #20CE69 + \ No newline at end of file diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml index b98631fe6fcce45e0b56deea19238cbcf2b231ae..fcf067ff581f40d92f7129e4fb975ac667519942 100644 --- a/presentation/src/main/res/values/strings.xml +++ b/presentation/src/main/res/values/strings.xml @@ -18,7 +18,7 @@ --> - QKSMS + Message New conversation Compose @@ -247,7 +247,7 @@ Auto-compress MMS attachments Sync messages Re-sync your messages with the native Android SMS database - About QKSMS + About Message Version %s Debug logging enabled Debug logging disabled @@ -261,10 +261,8 @@ About Version - Developer + Message is forked from QKSMS Source code - Changelog - Contact License Copyright