1
0
mirror of https://github.com/vector-im/riotX-android synced 2025-10-06 08:12:46 +02:00

Compare commits

...

1 Commits

Author SHA1 Message Date
Benoit Marty
3bfe604dbb Kill RiotX (#1727)
- Restore RiotX appId and App name
- Prevent share to RiotX
- Show the warning popup each time the app is launch
- Prevent any new login and propose to uninstall the app
2020-08-05 13:32:36 +02:00
11 changed files with 81 additions and 158 deletions

View File

@@ -1,28 +1,17 @@
Changes in Riot.imX 0.91.6 (2020-XX-XX) Changes in RiotX 0.23.0 (2020-08-05)
=================================================== ===================================================
Features ✨: This is the very last version of RiotX, published on the PlayStore.
-
Improvements 🙌: This branch will never be merged on develop.
-
Features ✨:
- Inform user that the app will not be updated anymore (#1727)
Bugfix 🐛: Bugfix 🐛:
- Video calls are shown as a voice ones in the timeline (#1676) - Video calls are shown as a voice ones in the timeline (#1676)
- Fix regression: not able to create a room without IS configured (#1679) - Fix regression: not able to create a room without IS configured (#1679)
Translations 🗣:
-
SDK API changes ⚠️:
-
Build 🧱:
-
Other changes:
-
Changes in Riot.imX 0.91.5 (2020-07-11) Changes in Riot.imX 0.91.5 (2020-07-11)
=================================================== ===================================================

View File

@@ -16,8 +16,8 @@ androidExtensions {
// Note: 2 digits max for each value // Note: 2 digits max for each value
ext.versionMajor = 0 ext.versionMajor = 0
ext.versionMinor = 91 ext.versionMinor = 23
ext.versionPatch = 6 ext.versionPatch = 0
static def getGitTimestamp() { static def getGitTimestamp() {
def cmd = 'git show -s --format=%ct' def cmd = 'git show -s --format=%ct'
@@ -72,7 +72,7 @@ static def getGplayVersionSuffix() {
if (gitBranchName() == "master") { if (gitBranchName() == "master") {
return "" return ""
} else { } else {
return "-dev" return "" // "-dev"
} }
} }
@@ -112,7 +112,7 @@ android {
ndkVersion "21.3.6528147" ndkVersion "21.3.6528147"
defaultConfig { defaultConfig {
applicationId "im.vector.app" applicationId "im.vector.riotx"
// Set to API 21: see #405 // Set to API 21: see #405
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 29 targetSdkVersion 29
@@ -183,7 +183,7 @@ android {
buildTypes { buildTypes {
debug { debug {
applicationIdSuffix ".debug" applicationIdSuffix ".debug"
resValue "string", "app_name", "Riot.imX dbg" resValue "string", "app_name", "RiotX dbg"
resValue "bool", "debug_mode", "true" resValue "bool", "debug_mode", "true"
buildConfigField "boolean", "LOW_PRIVACY_LOG_ENABLE", "false" buildConfigField "boolean", "LOW_PRIVACY_LOG_ENABLE", "false"
@@ -192,7 +192,7 @@ android {
} }
release { release {
resValue "string", "app_name", "Riot.imX" resValue "string", "app_name", "RiotX"
resValue "bool", "debug_mode", "false" resValue "bool", "debug_mode", "false"
buildConfigField "boolean", "LOW_PRIVACY_LOG_ENABLE", "false" buildConfigField "boolean", "LOW_PRIVACY_LOG_ENABLE", "false"

View File

@@ -10,7 +10,7 @@
"client_info": { "client_info": {
"mobilesdk_app_id": "1:912726360885:android:4ef8f3a0021e774d", "mobilesdk_app_id": "1:912726360885:android:4ef8f3a0021e774d",
"android_client_info": { "android_client_info": {
"package_name": "im.vector.app.debug" "package_name": "im.vector.riotx.debug"
} }
}, },
"oauth_client": [ "oauth_client": [

View File

@@ -10,7 +10,7 @@
"client_info": { "client_info": {
"mobilesdk_app_id": "1:912726360885:android:4ef8f3a0021e774d", "mobilesdk_app_id": "1:912726360885:android:4ef8f3a0021e774d",
"android_client_info": { "android_client_info": {
"package_name": "im.vector.app" "package_name": "im.vector.riotx"
} }
}, },
"oauth_client": [ "oauth_client": [

View File

@@ -13,6 +13,9 @@
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- To be able to delete RiotX -->
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
<!-- Call feature --> <!-- Call feature -->
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" /> <uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
<!-- Commented because Google PlayStore does not like we add permission if we are not requiring it. And it was added for future use --> <!-- Commented because Google PlayStore does not like we add permission if we are not requiring it. And it was added for future use -->
@@ -140,8 +143,10 @@
</intent-filter> </intent-filter>
</activity> </activity>
<!-- Disable incoming share -->
<activity <activity
android:name=".features.share.IncomingShareActivity" android:name=".features.share.IncomingShareActivity"
android:enabled="false"
android:parentActivityName=".features.home.HomeActivity"> android:parentActivityName=".features.home.HomeActivity">
<meta-data <meta-data
android:name="android.support.PARENT_ACTIVITY" android:name="android.support.PARENT_ACTIVITY"

View File

@@ -17,47 +17,19 @@
package im.vector.riotx.features.disclaimer package im.vector.riotx.features.disclaimer
import android.app.Activity import android.app.Activity
import androidx.preference.PreferenceManager
import android.view.ViewGroup
import android.widget.TextView
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.core.content.edit
import im.vector.riotx.BuildConfig
import im.vector.riotx.R import im.vector.riotx.R
import im.vector.riotx.core.extensions.setTextWithColoredPart
import im.vector.riotx.core.utils.openPlayStore import im.vector.riotx.core.utils.openPlayStore
// Increase this value to show again the disclaimer dialog after an upgrade of the application
private const val CURRENT_DISCLAIMER_VALUE = 1
private const val SHARED_PREF_KEY = "LAST_DISCLAIMER_VERSION_VALUE"
fun showDisclaimerDialog(activity: Activity) { fun showDisclaimerDialog(activity: Activity) {
val sharedPrefs = PreferenceManager.getDefaultSharedPreferences(activity) val dialogLayout = activity.layoutInflater.inflate(R.layout.dialog_disclaimer_content, null)
if (sharedPrefs.getInt(SHARED_PREF_KEY, 0) < CURRENT_DISCLAIMER_VALUE) { AlertDialog.Builder(activity)
sharedPrefs.edit { .setView(dialogLayout)
putInt(SHARED_PREF_KEY, CURRENT_DISCLAIMER_VALUE) .setCancelable(false)
} .setPositiveButton(R.string.the_beta_is_over_get_element) { _, _ ->
openPlayStore(activity, "im.vector.app")
val dialogLayout = activity.layoutInflater.inflate(R.layout.dialog_disclaimer_content, null)
val textView = (dialogLayout as ViewGroup).findViewById<TextView>(R.id.dialogDisclaimerContentLine2)
@Suppress("ConstantConditionIf")
if (BuildConfig.FLAVOR == "gplay") {
textView.setTextWithColoredPart(R.string.alpha_disclaimer_content_line_2_gplay, R.string.alpha_disclaimer_content_line_2_gplay_colored_part)
textView.setOnClickListener {
openPlayStore(activity)
} }
} else { .setNegativeButton(R.string.later, null)
textView.setText(R.string.alpha_disclaimer_content_line_2_fdroid) .show()
}
AlertDialog.Builder(activity)
.setView(dialogLayout)
.setCancelable(false)
.setPositiveButton(R.string._continue, null)
.show()
}
} }

View File

@@ -69,7 +69,7 @@ class HomeActivity : VectorBaseActivity(), ToolbarConfigurable, UnknownDeviceDet
@Inject lateinit var viewModelFactory: HomeActivityViewModel.Factory @Inject lateinit var viewModelFactory: HomeActivityViewModel.Factory
private val serverBackupStatusViewModel: ServerBackupStatusViewModel by viewModel() private val serverBackupStatusViewModel: ServerBackupStatusViewModel by viewModel()
@Inject lateinit var serverBackupviewModelFactory: ServerBackupStatusViewModel.Factory @Inject lateinit var serverBackupviewModelFactory: ServerBackupStatusViewModel.Factory
@Inject lateinit var activeSessionHolder: ActiveSessionHolder @Inject lateinit var activeSessionHolder: ActiveSessionHolder
@Inject lateinit var vectorUncaughtExceptionHandler: VectorUncaughtExceptionHandler @Inject lateinit var vectorUncaughtExceptionHandler: VectorUncaughtExceptionHandler
@@ -225,6 +225,8 @@ class HomeActivity : VectorBaseActivity(), ToolbarConfigurable, UnknownDeviceDet
super.onDestroy() super.onDestroy()
} }
private var disclaimerShown = false
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
@@ -238,7 +240,10 @@ class HomeActivity : VectorBaseActivity(), ToolbarConfigurable, UnknownDeviceDet
.setNegativeButton(R.string.no) { _, _ -> bugReporter.deleteCrashFile(this) } .setNegativeButton(R.string.no) { _, _ -> bugReporter.deleteCrashFile(this) }
.show() .show()
} else { } else {
showDisclaimerDialog(this) if (!disclaimerShown) {
disclaimerShown = true
showDisclaimerDialog(this)
}
} }
// Force remote backup state update to update the banner if needed // Force remote backup state update to update the banner if needed

View File

@@ -16,8 +16,14 @@
package im.vector.riotx.features.login package im.vector.riotx.features.login
import android.content.ActivityNotFoundException
import android.content.Intent
import android.net.Uri
import butterknife.OnClick import butterknife.OnClick
import im.vector.riotx.BuildConfig
import im.vector.riotx.R import im.vector.riotx.R
import im.vector.riotx.core.utils.openPlayStore
import im.vector.riotx.core.utils.toast
import javax.inject.Inject import javax.inject.Inject
/** /**
@@ -29,7 +35,19 @@ class LoginSplashFragment @Inject constructor() : AbstractLoginFragment() {
@OnClick(R.id.loginSplashSubmit) @OnClick(R.id.loginSplashSubmit)
fun getStarted() { fun getStarted() {
loginViewModel.handle(LoginAction.PostViewEvent(LoginViewEvents.OpenServerSelection)) openPlayStore(requireActivity(), "im.vector.app")
}
@OnClick(R.id.loginSplashUninstall)
fun uninstall() {
@Suppress("DEPRECATION")
val intent = Intent(Intent.ACTION_UNINSTALL_PACKAGE)
intent.data = Uri.parse("package:" + BuildConfig.APPLICATION_ID)
try {
startActivity(intent)
} catch (anfe: ActivityNotFoundException) {
requireActivity().toast(R.string.error_no_external_application_found)
}
} }
override fun resetViewModel() { override fun resetViewModel() {

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
@@ -26,7 +25,7 @@
android:layout_marginTop="92dp" android:layout_marginTop="92dp"
android:fontFamily="sans-serif" android:fontFamily="sans-serif"
android:lineSpacingExtra="8sp" android:lineSpacingExtra="8sp"
android:text="@string/alpha_disclaimer_title" android:text="@string/the_beta_is_over_title"
android:textColor="@color/white" android:textColor="@color/white"
android:textSize="24sp" android:textSize="24sp"
android:textStyle="normal" /> android:textStyle="normal" />
@@ -39,20 +38,8 @@
android:layout_marginStart="24dp" android:layout_marginStart="24dp"
android:layout_marginTop="21dp" android:layout_marginTop="21dp"
android:layout_marginEnd="24dp" android:layout_marginEnd="24dp"
android:text="@string/alpha_disclaimer_content_line_1" android:text="@string/the_beta_is_over_content"
android:textColor="?riotx_text_primary" android:textColor="?riotx_text_primary"
android:textSize="16sp" /> android:textSize="16sp" />
<TextView
android:id="@+id/dialogDisclaimerContentLine2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="21dp"
android:layout_marginEnd="24dp"
android:layout_marginBottom="21dp"
android:textColor="?riotx_text_primary"
android:textSize="16sp"
tools:text="@string/alpha_disclaimer_content_line_2_gplay" />
</LinearLayout> </LinearLayout>

View File

@@ -35,101 +35,41 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="48dp" android:layout_marginTop="48dp"
android:text="@string/login_splash_title" android:gravity="center_horizontal"
android:text="@string/the_beta_is_over_login_screen_content"
android:textAppearance="@style/TextAppearance.Vector.Login.Title" android:textAppearance="@style/TextAppearance.Vector.Login.Title"
android:transitionName="loginTitleTransition" android:transitionName="loginTitleTransition"
app:layout_constraintBottom_toTopOf="@+id/loginSplashText1" app:layout_constraintBottom_toTopOf="@+id/loginSplashSubmit"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/loginSplashLogo" /> app:layout_constraintTop_toBottomOf="@+id/loginSplashLogo" />
<!-- TODO check relative dimension -->
<ImageView
android:id="@+id/loginSplashPicto1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="2dp"
android:importantForAccessibility="no"
android:src="@drawable/ic_login_splash_message_circle"
android:tint="?vctr_notice_secondary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/loginSplashText1" />
<TextView
android:id="@+id/loginSplashText1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="36dp"
android:layout_marginTop="32dp"
android:gravity="start"
android:text="@string/login_splash_text1"
android:textAppearance="@style/TextAppearance.Vector.Login.Text"
app:layout_constraintBottom_toTopOf="@+id/loginSplashText2"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/loginSplashTitle" />
<ImageView
android:id="@+id/loginSplashPicto2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="2dp"
android:importantForAccessibility="no"
android:src="@drawable/ic_login_splash_lock"
android:tint="?vctr_notice_secondary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/loginSplashText2" />
<TextView
android:id="@+id/loginSplashText2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="36dp"
android:layout_marginTop="16dp"
android:gravity="start"
android:text="@string/login_splash_text2"
android:textAppearance="@style/TextAppearance.Vector.Login.Text"
app:layout_constraintBottom_toTopOf="@id/loginSplashText3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/loginSplashText1" />
<ImageView
android:id="@+id/loginSplashPicto3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:importantForAccessibility="no"
android:src="@drawable/ic_login_splash_sliders"
android:tint="?vctr_notice_secondary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/loginSplashText3" />
<TextView
android:id="@+id/loginSplashText3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="36dp"
android:layout_marginTop="16dp"
android:gravity="start"
android:text="@string/login_splash_text3"
android:textAppearance="@style/TextAppearance.Vector.Login.Text"
app:layout_constraintBottom_toTopOf="@+id/loginSplashSubmit"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/loginSplashText2" />
<com.google.android.material.button.MaterialButton <com.google.android.material.button.MaterialButton
android:id="@+id/loginSplashSubmit" android:id="@+id/loginSplashSubmit"
style="@style/Style.Vector.Login.Button" style="@style/Style.Vector.Login.Button"
android:layout_width="0dp" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="48dp" android:layout_marginTop="48dp"
android:text="@string/login_splash_submit" android:text="@string/the_beta_is_over_get_element"
android:transitionName="loginSubmitTransition" android:transitionName="loginSubmitTransition"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/loginSplashText3" /> app:layout_constraintTop_toBottomOf="@+id/loginSplashTitle" />
<com.google.android.material.button.MaterialButton
android:id="@+id/loginSplashUninstall"
style="@style/Style.Vector.Login.Button.Text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="@string/the_beta_is_over_uninstall"
android:transitionName="loginSubmitTransition"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/loginSplashSubmit" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -2552,4 +2552,11 @@ Not all features in Riot are implemented in RiotX yet. Main missing (and coming
<string name="three_pid_revoke_invite_dialog_title">Revoke invite</string> <string name="three_pid_revoke_invite_dialog_title">Revoke invite</string>
<string name="three_pid_revoke_invite_dialog_content">Revoke invite to %1$s?</string> <string name="three_pid_revoke_invite_dialog_content">Revoke invite to %1$s?</string>
<string name="the_beta_is_over_title">The beta is over!</string>
<string name="the_beta_is_over_content">Thank you for your contribution to test RiotX.\n\nRiotX will not be updated anymore from the PlayStore, you should properly sign out and then uninstall it.\n\nPlease install the new application Element!</string>
<string name="the_beta_is_over_get_element">Get Element</string>
<string name="the_beta_is_over_uninstall">Uninstall RiotX</string>
<string name="the_beta_is_over_login_screen_content">RiotX is deprecated\n\nPlease install Element!</string>
</resources> </resources>