mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-21 04:29:45 +01:00
Merge pull request #1215 from nextcloud/bugfix/noid/add-server-version-warning
Add a warning when the server version is (almost) EOL
This commit is contained in:
commit
067af733c3
@ -270,6 +270,11 @@ public class ConversationsListController extends BaseController implements Searc
|
||||
currentUser = userUtils.getCurrentUser();
|
||||
|
||||
if (currentUser != null) {
|
||||
if (currentUser.isServerEOL()) {
|
||||
showServerEOLDialog();
|
||||
return;
|
||||
}
|
||||
|
||||
credentials = ApiUtils.getCredentials(currentUser.getUsername(), currentUser.getToken());
|
||||
shouldUseLastMessageLayout = currentUser.hasSpreedFeatureCapability("last-room-activity");
|
||||
if (getActivity() != null && getActivity() instanceof MainActivity) {
|
||||
@ -863,6 +868,50 @@ public class ConversationsListController extends BaseController implements Searc
|
||||
}
|
||||
}
|
||||
|
||||
private void showServerEOLDialog() {
|
||||
new LovelyStandardDialog(getActivity(), LovelyStandardDialog.ButtonLayout.HORIZONTAL)
|
||||
.setTopColorRes(R.color.nc_darkRed)
|
||||
.setIcon(DisplayUtils.getTintedDrawable(context.getResources(),
|
||||
R.drawable.ic_warning_white,
|
||||
R.color.bg_default))
|
||||
.setPositiveButtonColor(context.getResources().getColor(R.color.nc_darkRed))
|
||||
.setCancelable(false)
|
||||
.setTitle(R.string.nc_settings_server_eol_title)
|
||||
.setMessage(R.string.nc_settings_server_eol)
|
||||
.setPositiveButton(R.string.nc_settings_remove_account, new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
boolean otherUserExists = userUtils.scheduleUserForDeletionWithId(currentUser.getId());
|
||||
|
||||
OneTimeWorkRequest accountRemovalWork = new OneTimeWorkRequest.Builder(AccountRemovalWorker.class).build();
|
||||
WorkManager.getInstance().enqueue(accountRemovalWork);
|
||||
|
||||
if (otherUserExists && getView() != null) {
|
||||
onViewBound(getView());
|
||||
onAttach(getView());
|
||||
} else if (!otherUserExists) {
|
||||
getRouter().setRoot(RouterTransaction.with(
|
||||
new ServerSelectionController())
|
||||
.pushChangeHandler(new VerticalChangeHandler())
|
||||
.popChangeHandler(new VerticalChangeHandler()));
|
||||
}
|
||||
}
|
||||
})
|
||||
.setNegativeButton(R.string.nc_cancel, new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (userUtils.hasMultipleUsers()) {
|
||||
getRouter().pushController(RouterTransaction.with(new SwitchAccountController()));
|
||||
} else {
|
||||
getActivity().finishAffinity();
|
||||
getActivity().finish();
|
||||
}
|
||||
}
|
||||
})
|
||||
.setInstanceStateHandler(ID_DELETE_CONVERSATION_DIALOG, saveStateHandler)
|
||||
.show();
|
||||
}
|
||||
|
||||
private void deleteConversation(Data data) {
|
||||
OneTimeWorkRequest deleteConversationWorker =
|
||||
new OneTimeWorkRequest.Builder(DeleteConversationWorker.class).setInputData(data).build();
|
||||
|
@ -29,6 +29,7 @@ import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.ColorStateList;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
@ -45,6 +46,7 @@ import android.view.WindowManager;
|
||||
import android.widget.Button;
|
||||
import android.widget.Checkable;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
@ -56,6 +58,7 @@ import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler;
|
||||
import com.bluelinelabs.conductor.changehandler.VerticalChangeHandler;
|
||||
import com.bluelinelabs.logansquare.LoganSquare;
|
||||
import com.facebook.drawee.view.SimpleDraweeView;
|
||||
import com.google.android.material.card.MaterialCardView;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
import com.nextcloud.talk.BuildConfig;
|
||||
import com.nextcloud.talk.R;
|
||||
@ -103,6 +106,7 @@ import javax.inject.Inject;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.emoji.widget.EmojiTextView;
|
||||
import androidx.work.OneTimeWorkRequest;
|
||||
@ -144,6 +148,12 @@ public class SettingsController extends BaseController {
|
||||
EmojiTextView displayNameTextView;
|
||||
@BindView(R.id.base_url_text)
|
||||
TextView baseUrlTextView;
|
||||
@BindView(R.id.server_age_warning_text_card)
|
||||
MaterialCardView serverAgeCardView;
|
||||
@BindView(R.id.server_age_warning_text)
|
||||
TextView serverAgeTextView;
|
||||
@BindView(R.id.server_age_warning_icon)
|
||||
ImageView serverAgeIcon;
|
||||
@BindView(R.id.settings_call_sound)
|
||||
MaterialStandardPreference settingsCallSound;
|
||||
@BindView(R.id.settings_message_sound)
|
||||
@ -551,6 +561,20 @@ public class SettingsController extends BaseController {
|
||||
|
||||
baseUrlTextView.setText(Uri.parse(currentUser.getBaseUrl()).getHost());
|
||||
|
||||
if (currentUser.isServerEOL()) {
|
||||
serverAgeTextView.setTextColor(ContextCompat.getColor(context, R.color.nc_darkRed));
|
||||
serverAgeTextView.setText(R.string.nc_settings_server_eol);
|
||||
serverAgeIcon.setColorFilter(ContextCompat.getColor(context, R.color.nc_darkRed),
|
||||
PorterDuff.Mode.SRC_IN);
|
||||
} else if (currentUser.isServerAlmostEOL()) {
|
||||
serverAgeTextView.setTextColor(ContextCompat.getColor(context, R.color.nc_darkYellow));
|
||||
serverAgeTextView.setText(R.string.nc_settings_server_almost_eol);
|
||||
serverAgeIcon.setColorFilter(ContextCompat.getColor(context, R.color.nc_darkYellow),
|
||||
PorterDuff.Mode.SRC_IN);
|
||||
} else {
|
||||
serverAgeCardView.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
reauthorizeButton.addPreferenceClickListener(view14 -> {
|
||||
getRouter().pushController(RouterTransaction.with(
|
||||
new WebViewLoginController(currentUser.getBaseUrl(), true))
|
||||
|
@ -92,6 +92,16 @@ public interface User extends Parcelable, Persistable, Serializable {
|
||||
return false;
|
||||
}
|
||||
|
||||
default boolean isServerEOL() {
|
||||
// Capability is available since Talk 4 => Nextcloud 14 => Autmn 2018
|
||||
return !hasSpreedFeatureCapability("no-ping");
|
||||
}
|
||||
|
||||
default boolean isServerAlmostEOL() {
|
||||
// Capability is available since Talk 8 => Nextcloud 18 => January 2020
|
||||
return !hasSpreedFeatureCapability("chat-replies");
|
||||
}
|
||||
|
||||
default boolean hasSpreedFeatureCapability(String capabilityName) {
|
||||
if (getCapabilities() != null) {
|
||||
try {
|
||||
|
@ -48,6 +48,11 @@ public class UserUtils {
|
||||
.limit(1).get().value() > 0);
|
||||
}
|
||||
|
||||
public boolean hasMultipleUsers() {
|
||||
return (dataStore.count(User.class).where(UserEntity.SCHEDULED_FOR_DELETION.notEqual(Boolean.TRUE))
|
||||
.get().value() > 1);
|
||||
}
|
||||
|
||||
public List getUsers() {
|
||||
Result findUsersQueryResult = dataStore.select(User.class).where
|
||||
(UserEntity.SCHEDULED_FOR_DELETION.notEqual(true)).get();
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
<com.yarolegovich.mp.MaterialPreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:apc="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/settings_screen"
|
||||
android:layout_width="match_parent"
|
||||
@ -71,7 +72,46 @@
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_margin="4dp"
|
||||
android:textColor="@color/medium_emphasis_text"
|
||||
tools:text="jane@nextcloud.com" />
|
||||
tools:text="nextcloud.com" />
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:id="@+id/server_age_warning_text_card"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/base_url_text"
|
||||
android:layout_margin="@dimen/standard_margin"
|
||||
app:cardCornerRadius="8dp"
|
||||
app:cardElevation="2dp"
|
||||
app:strokeWidth="0dp">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="@dimen/standard_padding">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/server_age_warning_icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_warning_white"
|
||||
android:layout_centerVertical="true"
|
||||
app:tint="@color/nc_darkRed"
|
||||
android:contentDescription="@string/nc_settings_warning" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/server_age_warning_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_toEndOf="@id/server_age_warning_icon"
|
||||
android:paddingStart="@dimen/standard_padding"
|
||||
android:paddingEnd="0dp"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:textColor="@color/nc_darkRed"
|
||||
tools:text="@string/nc_settings_server_almost_eol" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<com.facebook.drawee.view.SimpleDraweeView
|
||||
android:id="@+id/avatar_image"
|
||||
@ -82,12 +122,11 @@
|
||||
apc:roundAsCircle="true"
|
||||
tools:src="@tools:sample/avatars[0]" />
|
||||
|
||||
|
||||
<com.yarolegovich.mp.MaterialStandardPreference
|
||||
android:id="@+id/settings_switch"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/base_url_text"
|
||||
android:layout_below="@id/server_age_warning_text_card"
|
||||
android:tag="switchAccountButton"
|
||||
apc:mp_title="@string/nc_settings_switch_account" />
|
||||
|
||||
|
@ -50,6 +50,7 @@
|
||||
<color name="conversation_unread_bubble_text">#222222</color>
|
||||
|
||||
<color name="nc_darkRed">#D32F2F</color>
|
||||
<color name="nc_darkYellow">#FF9800</color>
|
||||
<color name="nc_darkGreen">#006400</color>
|
||||
<color name="controller_chat_separator">#E8E8E8</color>
|
||||
<color name="grey_600">#757575</color>
|
||||
|
@ -85,6 +85,10 @@
|
||||
<string name="nc_settings_remove_confirmation">Please confirm your intent to remove the current account.</string>
|
||||
<string name="nc_settings_remove_account">Remove account</string>
|
||||
<string name="nc_settings_add_account">Add a new account</string>
|
||||
<string name="nc_settings_server_eol_title">Unsupported server</string>
|
||||
<string name="nc_settings_server_eol">The server version is too old and not supported by this version of the Android app</string>
|
||||
<string name="nc_settings_server_almost_eol">The server version is very old and will not be supported in the next release!</string>
|
||||
<string name="nc_settings_warning">Warning</string>
|
||||
<string name="nc_add">Add</string>
|
||||
<string name="nc_settings_wrong_account">Only current account can be reauthorized</string>
|
||||
<string name="nc_settings_no_talk_installed">Talk app is not installed on the server you tried to authenticate against</string>
|
||||
|
@ -1,2 +1,2 @@
|
||||
DO NOT TOUCH; GENERATED BY DRONE
|
||||
<span class="mdl-layout-title">Lint Report: 3 errors and 346 warnings</span>
|
||||
<span class="mdl-layout-title">Lint Report: 3 errors and 348 warnings</span>
|
||||
|
Loading…
Reference in New Issue
Block a user