xiongzhu 2 rokov pred
rodič
commit
45d7660f0f

+ 23 - 4
app/src/main/java/com/dar/nbook/BLoginActivity.kt

@@ -5,10 +5,13 @@ import android.view.MenuItem
 import com.dar.nbook.api.HttpCallback
 import com.dar.nbook.api.HttpClient
 import com.dar.nbook.api.HttpError
+import com.dar.nbook.api.components.NUser
 import com.dar.nbook.api.request.UserLogin
 import com.dar.nbook.api.response.LoginResponse
 import com.dar.nbook.components.activities.GeneralActivity
 import com.dar.nbook.databinding.ActivityBloginBinding
+import com.dar.nbook.settings.Global
+import com.dar.nbook.settings.Login
 import com.dar.nbook.utility.snackError
 import com.dar.nbook.utility.snackSuccess
 import splitties.activities.start
@@ -64,10 +67,26 @@ class BLoginActivity : GeneralActivity() {
             HttpClient.getApiService().login(UserLogin(username, password)),
             object : HttpCallback<LoginResponse> {
                 override fun onSuccess(data: LoginResponse) {
-                    binding.login.visibility = android.view.View.VISIBLE
-                    binding.progress.visibility = android.view.View.GONE
-                    binding.root.snackSuccess(R.string.login_success)
-                    finish()
+
+
+                    HttpClient.request(HttpClient.getApiService()
+                        .getMyUser("Bearer " + data.access_token),
+                        object : HttpCallback<NUser> {
+                            override fun onSuccess(nuser: NUser?) {
+                                Global.setNUser(nuser)
+                                Login.updateNUser(nuser, data.access_token)
+                                binding.login.visibility = android.view.View.VISIBLE
+                                binding.progress.visibility = android.view.View.GONE
+                                setResult(RESULT_OK)
+                                finish()
+                            }
+
+                            override fun onFailure(error: HttpError<NUser>) {
+                                binding.login.visibility = android.view.View.VISIBLE
+                                binding.progress.visibility = android.view.View.GONE
+                                binding.root.snackError(error.message)
+                            }
+                        })
                 }
 
                 override fun onFailure(error: HttpError<LoginResponse>) {

+ 18 - 30
app/src/main/java/com/dar/nbook/MainActivity.java

@@ -26,6 +26,7 @@ import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.app.ActionBarDrawerToggle;
 import androidx.appcompat.widget.SearchView;
 import androidx.appcompat.widget.Toolbar;
+import androidx.core.app.ActivityCompat;
 import androidx.core.view.GravityCompat;
 import androidx.drawerlayout.widget.DrawerLayout;
 import androidx.recyclerview.widget.RecyclerView;
@@ -86,6 +87,8 @@ public class MainActivity extends BaseActivity
 
     private static final int CHANGE_LANGUAGE_DELAY = 1000;
     private static boolean firstTime = true;//true only when app starting
+    private static final int LOGIN_REQUEST_CODE = 1;
+
     private final InspectorV3.InspectorResponse startGallery = new MainInspectorResponse() {
         @Override
         public void onSuccess(List<GenericGallery> galleries) {
@@ -197,31 +200,6 @@ public class MainActivity extends BaseActivity
             .centerCrop()
             .placeholder(R.drawable.ic_logo)
             .into(ivAd);
-
-        HttpClient.request(HttpClient.getApiService().register(new UserRegister("asdf1", "123456", null)), new HttpCallback<NUser>() {
-            @Override
-            public void onSuccess(NUser data) {
-                LogUtility.d("Register success");
-                HttpClient.request(HttpClient.getApiService().login(new UserLogin("asdf1", "123456")), new HttpCallback<LoginResponse>() {
-                    @Override
-                    public void onSuccess(LoginResponse data) {
-                        LogUtility.d("Login success");
-                    }
-
-                    @Override
-                    public void onFailure(HttpError<LoginResponse> error) {
-                        LogUtility.e("Login failed");
-                    }
-                });
-            }
-
-            @Override
-            public void onFailure(HttpError<NUser> error) {
-                LogUtility.e("Register failed");
-            }
-        });
-
-
     }
 
     private void manageDrawer() {
@@ -311,6 +289,7 @@ public class MainActivity extends BaseActivity
         toolbar.setNavigationOnClickListener(v -> finish());
         navigationView.setNavigationItemSelectedListener(this);
         onlineFavoriteManager.setVisible(com.dar.nbook.settings.Login.isLogged());
+        com.dar.nbook.settings.Login.isNLogged(this);
     }
 
     public void setIdOpenedGallery(int idOpenedGallery) {
@@ -331,10 +310,10 @@ public class MainActivity extends BaseActivity
 
     private void loadStringLogin() {
         if (loginItem == null) return;
-        if (com.dar.nbook.settings.Login.getUser() != null)
-            loginItem.setTitle(getString(R.string.login_formatted, com.dar.nbook.settings.Login.getUser().getUsername()));
+        if (com.dar.nbook.settings.Login.getNUser() != null)
+            loginItem.setTitle(getString(R.string.login_formatted, com.dar.nbook.settings.Login.getNUser().getUsername()));
         else
-            loginItem.setTitle(com.dar.nbook.settings.Login.isLogged() ? R.string.logout : R.string.login);
+            loginItem.setTitle(com.dar.nbook.settings.Login.isNLogged(this) ? R.string.logout : R.string.login);
 
     }
 
@@ -802,11 +781,11 @@ public class MainActivity extends BaseActivity
             intent.putExtra(getPackageName() + ".FAVORITE", true);
             startActivity(intent);
         } else if (item.getItemId() == R.id.action_login) {
-            if (Login.isLogged())
+            if (Login.isNLogged(this))
                 showLogoutForm();
             else {
                 intent = new Intent(this, BLoginActivity.class);
-                startActivity(intent);
+                ActivityCompat.startActivityForResult(this, intent, LOGIN_REQUEST_CODE, null);
             }
         } else if (item.getItemId() == R.id.random) {
             intent = new Intent(this, RandomActivity.class);
@@ -901,4 +880,13 @@ public class MainActivity extends BaseActivity
             this.locale = Global.initLanguage(MainActivity.this);
         }
     }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (requestCode == LOGIN_REQUEST_CODE && resultCode == RESULT_OK) {
+            drawerLayout.close();
+            snackbar = showSuccess(R.string.login_success);
+        }
+    }
 }

+ 42 - 12
app/src/main/java/com/dar/nbook/PINActivity.java

@@ -3,22 +3,31 @@ package com.dar.nbook;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.graphics.Color;
+import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.view.View;
 import android.view.Window;
-import android.view.WindowManager;
 import android.widget.Button;
 import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.core.view.WindowCompat;
 
+import com.bumptech.glide.load.DataSource;
+import com.bumptech.glide.load.engine.GlideException;
+import com.bumptech.glide.request.RequestListener;
+import com.bumptech.glide.request.target.Target;
+import com.dar.nbook.api.HttpCallback;
+import com.dar.nbook.api.HttpClient;
+import com.dar.nbook.api.HttpError;
+import com.dar.nbook.api.response.AppConfig;
+import com.dar.nbook.api.response.SysConfigResponse;
 import com.dar.nbook.components.GlideX;
 import com.dar.nbook.components.activities.GeneralActivity;
 import com.dar.nbook.settings.Global;
@@ -125,18 +134,39 @@ public class PINActivity extends GeneralActivity {
             }
         });
 
-        GlideX
-            .with(this)
-            .load("https://paimaide.s3.ap-northeast-1.amazonaws.com/image/2023-03-29-11-25-40mVDVAMUg.png")
-            .centerCrop()
-            .placeholder(R.drawable.ic_logo)
-            .into(ivSplash);
-        ivSplash.setOnClickListener(v -> {
-            Message message = Message.obtain(handler, MSG_OPEN_URL, "https://www.google.com/");
-            handler.sendMessage(message);
-        });
         Message message = Message.obtain(handler, MSG_HIDE_SPLASH);
         handler.sendMessageDelayed(message, 3000);
+
+        HttpClient.request(HttpClient.getApiService().getAppConfig(), new HttpCallback<>() {
+            @Override
+            public void onSuccess(SysConfigResponse<AppConfig> data) {
+                GlideX
+                    .with(PINActivity.this)
+                    .load(data.getValue().getSplash().getImageUrl())
+                    .centerCrop()
+                    .addListener(new RequestListener<>() {
+                        @Override
+                        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
+                            return false;
+                        }
+
+                        @Override
+                        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
+                            return false;
+                        }
+                    })
+                    .into(ivSplash);
+                ivSplash.setOnClickListener(v -> {
+                    Message message = Message.obtain(handler, MSG_OPEN_URL, data.getValue().getSplash().getUrl());
+                    handler.sendMessage(message);
+                });
+            }
+
+            @Override
+            public void onFailure(HttpError<SysConfigResponse<AppConfig>> error) {
+
+            }
+        });
     }
 
     private boolean isConfirming() {

+ 10 - 0
app/src/main/java/com/dar/nbook/api/ApiService.java

@@ -3,10 +3,14 @@ package com.dar.nbook.api;
 import com.dar.nbook.api.components.NUser;
 import com.dar.nbook.api.request.UserLogin;
 import com.dar.nbook.api.request.UserRegister;
+import com.dar.nbook.api.response.AppConfig;
 import com.dar.nbook.api.response.LoginResponse;
+import com.dar.nbook.api.response.SysConfigResponse;
 
 import retrofit2.Call;
 import retrofit2.http.Body;
+import retrofit2.http.GET;
+import retrofit2.http.Header;
 import retrofit2.http.POST;
 
 public interface ApiService {
@@ -16,4 +20,10 @@ public interface ApiService {
 
     @POST("auth/register")
     Call<NUser> register(@Body UserRegister userRegister);
+
+    @GET("sys-config/app")
+    Call<SysConfigResponse<AppConfig>> getAppConfig();
+
+    @GET("users/my")
+    Call<NUser> getMyUser(@Header("Authorization") String token);
 }

+ 92 - 0
app/src/main/java/com/dar/nbook/api/response/AppConfig.java

@@ -0,0 +1,92 @@
+package com.dar.nbook.api.response;
+
+public class AppConfig {
+    public class AppInfo {
+        private String packageName;
+        private String versionName;
+        private int versionCode;
+        private String url;
+
+        public String getPackageName() {
+            return packageName;
+        }
+
+        public void setPackageName(String packageName) {
+            this.packageName = packageName;
+        }
+
+        public String getVersionName() {
+            return versionName;
+        }
+
+        public void setVersionName(String versionName) {
+            this.versionName = versionName;
+        }
+
+        public int getVersionCode() {
+            return versionCode;
+        }
+
+        public void setVersionCode(int versionCode) {
+            this.versionCode = versionCode;
+        }
+
+        public String getUrl() {
+            return url;
+        }
+
+        public void setUrl(String url) {
+            this.url = url;
+        }
+    }
+
+    public class AdInfo {
+        private String imageUrl;
+        private String url;
+
+        public String getImageUrl() {
+            return imageUrl;
+        }
+
+        public void setImageUrl(String imageUrl) {
+            this.imageUrl = imageUrl;
+        }
+
+        public String getUrl() {
+            return url;
+        }
+
+        public void setUrl(String url) {
+            this.url = url;
+        }
+    }
+
+    private AppInfo appInfo;
+    private AdInfo splash;
+    private AdInfo banner;
+
+    public AppInfo getAppInfo() {
+        return appInfo;
+    }
+
+    public void setAppInfo(AppInfo appInfo) {
+        this.appInfo = appInfo;
+    }
+
+    public AdInfo getSplash() {
+        return splash;
+    }
+
+    public void setSplash(AdInfo splash) {
+        this.splash = splash;
+    }
+
+    public AdInfo getBanner() {
+        return banner;
+    }
+
+    public void setBanner(AdInfo banner) {
+        this.banner = banner;
+    }
+}
+

+ 33 - 0
app/src/main/java/com/dar/nbook/api/response/SysConfigResponse.java

@@ -0,0 +1,33 @@
+package com.dar.nbook.api.response;
+
+public class SysConfigResponse<T> {
+    private String name;
+
+    private String type;
+
+    private T value;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public T getValue() {
+        return value;
+    }
+
+    public void setValue(T value) {
+        this.value = value;
+    }
+}

+ 29 - 0
app/src/main/java/com/dar/nbook/components/activities/BaseActivity.java

@@ -4,10 +4,15 @@ import android.content.res.Configuration;
 import android.view.ViewGroup;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.StringRes;
+import androidx.core.app.ActivityCompat;
 import androidx.recyclerview.widget.RecyclerView;
 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 
+import com.dar.nbook.R;
 import com.dar.nbook.components.widgets.CustomGridLayoutManager;
+import com.dar.nbook.settings.Global;
+import com.google.android.material.snackbar.Snackbar;
 
 public abstract class BaseActivity extends GeneralActivity {
     protected RecyclerView recycler;
@@ -54,4 +59,28 @@ public abstract class BaseActivity extends GeneralActivity {
         recycler.setAdapter(adapter);
         recycler.scrollToPosition(position);
     }
+
+    public Snackbar showError(CharSequence text) {
+        Snackbar snackbar = Snackbar.make(masterLayout, text, Snackbar.LENGTH_SHORT)
+            .setBackgroundTint(ActivityCompat.getColor(this, Global.ThemeScheme.DARK == Global.getTheme() ? R.color.red_400 : R.color.red_700))
+            .setTextColor(ActivityCompat.getColor(this, android.R.color.white));
+        snackbar.show();
+        return snackbar;
+    }
+
+    public Snackbar showError(@StringRes int id) {
+        return showError(getString(id));
+    }
+
+    public Snackbar showSuccess(CharSequence text) {
+        Snackbar snackbar = Snackbar.make(masterLayout, text, Snackbar.LENGTH_SHORT)
+            .setBackgroundTint(ActivityCompat.getColor(this, Global.ThemeScheme.DARK == Global.getTheme() ? R.color.green_400 : R.color.green_700))
+            .setTextColor(ActivityCompat.getColor(this, android.R.color.white));
+        snackbar.show();
+        return snackbar;
+    }
+
+    public Snackbar showSuccess(@StringRes int id) {
+        return showSuccess(getString(id));
+    }
 }

+ 12 - 1
app/src/main/java/com/dar/nbook/settings/Global.java

@@ -25,6 +25,7 @@ import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.appcompat.app.AppCompatDelegate;
 import androidx.core.content.ContextCompat;
+import androidx.core.content.PackageManagerCompat;
 import androidx.core.content.res.ResourcesCompat;
 import androidx.core.graphics.drawable.DrawableCompat;
 import androidx.recyclerview.widget.RecyclerView;
@@ -339,7 +340,6 @@ public class Global {
             x = Language.ALL.ordinal();
         }
         onlyLanguage = Language.values()[x];
-
     }
 
     public static boolean isButtonChangePage() {
@@ -401,6 +401,7 @@ public class Global {
             LogUtility.d("Cookie: " + cookie);
         }
         Login.isLogged(context);
+        Login.isNLogged(context);
     }
 
     private static void initHttpClient(@NonNull Context context) {
@@ -771,6 +772,16 @@ public class Global {
         return "0.0.0";
     }
 
+    public static int getVersionCode(Context context) {
+        try {
+            PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
+            return pInfo.versionCode;
+        } catch (PackageManager.NameNotFoundException e) {
+            e.printStackTrace();
+        }
+        return 0;
+    }
+
     public static boolean isExternalStorageManager() {
         return Build.VERSION.SDK_INT < Build.VERSION_CODES.R || Environment.isExternalStorageManager();
     }

+ 50 - 1
app/src/main/java/com/dar/nbook/settings/Login.java

@@ -12,6 +12,7 @@ import androidx.annotation.Nullable;
 
 import com.dar.nbook.MainActivity;
 import com.dar.nbook.R;
+import com.dar.nbook.api.components.NUser;
 import com.dar.nbook.api.components.Tag;
 import com.dar.nbook.async.database.Queries;
 import com.dar.nbook.components.CustomCookieJar;
@@ -19,6 +20,7 @@ import com.dar.nbook.loginapi.LoadTags;
 import com.dar.nbook.loginapi.User;
 import com.dar.nbook.utility.LogUtility;
 import com.dar.nbook.utility.Utility;
+import com.google.gson.Gson;
 
 import java.util.List;
 
@@ -31,9 +33,14 @@ public class Login {
     private static User user;
     private static boolean accountTag;
     private static SharedPreferences loginShared;
+    private static SharedPreferences nLoginShared;
+
+    private static NUser nUser;
+    private static String accessToken;
 
     public static void initLogin(@NonNull Context context) {
         SharedPreferences preferences = context.getSharedPreferences("Settings", 0);
+        nLoginShared = context.getSharedPreferences("nlogin", 0);
         accountTag = preferences.getBoolean(context.getString(R.string.key_use_account_tag), false);
         BASE_HTTP_URL = HttpUrl.get(Utility.getBaseUrl());
     }
@@ -70,6 +77,9 @@ public class Login {
         updateUser(null);//remove user
         clearOnlineTags();//remove online tags
         clearWebViewCookies(context);//clear webView cookies
+
+        updateNUser(null, null);
+
     }
 
     public static void clearWebViewCookies(Context context) {
@@ -94,7 +104,7 @@ public class Login {
         Queries.TagTable.removeAllBlacklisted();
     }
 
-    public static void clearCookies(){
+    public static void clearCookies() {
         CustomCookieJar cookieJar = (CustomCookieJar) Global.getClient().cookieJar();
         cookieJar.clear();
         cookieJar.clearSession();
@@ -138,6 +148,21 @@ public class Login {
         //return sessionId!=null;
     }
 
+    public static boolean isNLogged(@Nullable Context context) {
+        if (nLoginShared.contains("nuser") && nLoginShared.contains("token")) {
+            Gson gson = new Gson();
+            nUser = gson.fromJson(nLoginShared.getString("nuser", null), NUser.class);
+            accessToken = nLoginShared.getString("token", null);
+            if (context instanceof MainActivity) {
+                ((MainActivity) context).runOnUiThread(() -> ((MainActivity) context).loginItem.setTitle(context.getString(R.string.login_formatted, nUser.getUsername())));
+            }
+            return true;
+        }
+        if (context != null) logout(context);
+        return false;
+        //return sessionId!=null;
+    }
+
     public static boolean isLogged() {
         return isLogged(null);
     }
@@ -151,6 +176,30 @@ public class Login {
         Login.user = user;
     }
 
+    public static void updateNUser(NUser nUser, String token) {
+        Login.nUser = nUser;
+        Login.accessToken = token;
+        if (nUser == null) {
+            nLoginShared.edit()
+                .remove("nuser")
+                .remove("token")
+                .apply();
+        } else {
+            Gson gson = new Gson();
+            nLoginShared.edit()
+                .putString("nuser", gson.toJson(nUser))
+                .putString("token", token)
+                .apply();
+        }
+    }
+
+    public static NUser getNUser() {
+        return nUser;
+    }
+
+    public static String getAccessToken() {
+        return accessToken;
+    }
 
     public static boolean isOnlineTags(Tag tag) {
         return Queries.TagTable.isBlackListed(tag);

+ 1 - 0
app/src/main/res/layout/content_main.xml

@@ -12,6 +12,7 @@
         android:id="@+id/iv_ad"
         android:layout_width="match_parent"
         android:layout_height="160dp"
+        android:visibility="gone"
         app:layout_constraintTop_toTopOf="parent" />
 
     <androidx.swiperefreshlayout.widget.SwipeRefreshLayout

+ 1 - 1
app/src/main/res/values-ar-rSA/strings.xml

@@ -97,7 +97,7 @@
     <string name="no_updates_found">لا يوجد تحديث مُتوفِّر</string>
     <string name="error_retrieving">طرأ خطأٌ أثناء استرجاع الإصدار الأخير</string>
     <string name="new_version_found">وُجد إصدار جديد</string>
-    <string name="update_version_format" formatted="true">أتود التحديث من الإصدار %s إلى الإصدار %s ؟\n\n سِجل التغييرات: \n%s</string>
+    <string name="update_version_format" formatted="true">أتود التحديث من الإصدار %s إلى الإصدار %s ؟</string>
     <string name="clear_this_list">أتود محو هذه القائمة؟</string>
     <string name="set_minimum_count">عيِّن حدًّا أدنى للعدِّ</string>
     <string name="sort_by_title">ِاِفرِز حسب العنوان</string>

+ 1 - 1
app/src/main/res/values-de-rDE/strings.xml

@@ -97,7 +97,7 @@
     <string name="no_updates_found">Keine Updates gefunden</string>
     <string name="error_retrieving">Fehler beim Update suchen</string>
     <string name="new_version_found">Neue Version gefunden</string>
-    <string name="update_version_format" formatted="true">Von Version %s auf Version %s updaten?\n\nÄnderungsprotokoll:\n%s</string>
+    <string name="update_version_format" formatted="true">Von Version %s auf Version %s updaten?</string>
     <string name="clear_this_list">Diese Liste leeren?</string>
     <string name="set_minimum_count">Setze Minimumanzahl</string>
     <string name="sort_by_title">Ordne nach Titeln</string>

+ 1 - 1
app/src/main/res/values-es-rES/strings.xml

@@ -97,7 +97,7 @@
     <string name="no_updates_found">No se han encontrado actualizaciones</string>
     <string name="error_retrieving">Error al obtener la última versión</string>
     <string name="new_version_found">Nueva versión encontrada</string>
-    <string name="update_version_format" formatted="true">¿Actualizar de versión %s a la versión %s?  Registro de cambios: %s</string>
+    <string name="update_version_format" formatted="true">¿Actualizar de versión %s a la versión %s?</string>
     <string name="clear_this_list">¿Limpiar esta lista?</string>
     <string name="set_minimum_count">Establecer número mínimo</string>
     <string name="sort_by_title">Ordenar por título</string>

+ 1 - 1
app/src/main/res/values-fr-rFR/strings.xml

@@ -97,7 +97,7 @@
     <string name="no_updates_found">Pas de mise à jour trouvée</string>
     <string name="error_retrieving">Erreur lors de la récupération de la dernière version</string>
     <string name="new_version_found">Nouvelle version trouvée</string>
-    <string name="update_version_format" formatted="true">Mettre à jour depuis la version %s vers la version %s ?\n\nJournal des modifications :\n%s</string>
+    <string name="update_version_format" formatted="true">Mettre à jour depuis la version %s vers la version %s ?</string>
     <string name="clear_this_list">Effacer cette liste ?</string>
     <string name="set_minimum_count">Définir le nombre minimum</string>
     <string name="sort_by_title">Trier par titre</string>

+ 1 - 1
app/src/main/res/values-it-rIT/strings.xml

@@ -97,7 +97,7 @@
     <string name="no_updates_found">Nessun aggiornamento trovato</string>
     <string name="error_retrieving">Errore nel prelievo dell\'ultima versione</string>
     <string name="new_version_found">Nuova versione trovata</string>
-    <string name="update_version_format" formatted="true">Aggiorna dalla versione %s alla versione %s?\n\nModifiche:\n%s</string>
+    <string name="update_version_format" formatted="true">Aggiorna dalla versione %s alla versione %s?</string>
     <string name="clear_this_list">Pulisci la lista?</string>
     <string name="set_minimum_count">Imposta minimo</string>
     <string name="sort_by_title">Ordina per titolo</string>

+ 1 - 1
app/src/main/res/values-ja-rJP/strings.xml

@@ -97,7 +97,7 @@
     <string name="no_updates_found">お使いのバージョンは最新です。</string>
     <string name="error_retrieving">最新バージョンの取得中にエラーが発生しました</string>
     <string name="new_version_found">新しい更新が利用可能です</string>
-    <string name="update_version_format" formatted="true">バージョン%sからバージョン%sに更新しますか?\ n \ n変更ログ:\ n%s</string>
+    <string name="update_version_format" formatted="true">バージョン%sからバージョン%sに更新しますか?</string>
     <string name="clear_this_list">このリストを削除</string>
     <string name="set_minimum_count">最小カウントを設定</string>
     <string name="sort_by_title">タイトルで並べ替え</string>

+ 1 - 1
app/src/main/res/values-ru-rRU/strings.xml

@@ -97,7 +97,7 @@
     <string name="no_updates_found">Не было найдено обновлений</string>
     <string name="error_retrieving">Ошибка при получении последней версии</string>
     <string name="new_version_found">Была найдена новая версия</string>
-    <string name="update_version_format" formatted="true">Обновлено с версии %s до версии %s?\n\nChangelog:\n%s</string>
+    <string name="update_version_format" formatted="true">Обновлено с версии %s до версии %s?</string>
     <string name="clear_this_list">Очистить этот список?</string>
     <string name="set_minimum_count">Установить минимальный счёт</string>
     <string name="sort_by_title">Сортировать по названию</string>

+ 1 - 1
app/src/main/res/values-tr-rTR/strings.xml

@@ -97,7 +97,7 @@
     <string name="no_updates_found">Zaten en son sürümü kullanıyorsunuz!</string>
     <string name="error_retrieving">Güncelleme bilgileri alınırken bir sorun oluştu</string>
     <string name="new_version_found">Yeni sürüm bulundu</string>
-    <string name="update_version_format" formatted="true">%s bu sürümden %s bu sürüme güncellensin mi?  Değişim kaydı: %s</string>
+    <string name="update_version_format" formatted="true">%s bu sürümden %s bu sürüme güncellensin mi?</string>
     <string name="clear_this_list">Bu listeyi temizle?</string>
     <string name="set_minimum_count">Minimum sayıyı ayarla</string>
     <string name="sort_by_title">Başlığa göre sırala</string>

+ 1 - 1
app/src/main/res/values-uk-rUA/strings.xml

@@ -97,7 +97,7 @@
     <string name="no_updates_found">Оновлення не знайдені</string>
     <string name="error_retrieving">Помилка під час отримання останньої версії</string>
     <string name="new_version_found">Знайдена нова версія</string>
-    <string name="update_version_format" formatted="true">Оновити з версії %s до версії %s?\n\nЖурнал змін:\n%s</string>
+    <string name="update_version_format" formatted="true">Оновити з версії %s до версії %s?</string>
     <string name="clear_this_list">Очистити цей список?</string>
     <string name="set_minimum_count">Встановити мінімальну кількість</string>
     <string name="sort_by_title">Впорядковувати за назвою</string>

+ 1 - 1
app/src/main/res/values-zh-rCN/strings.xml

@@ -97,7 +97,7 @@
     <string name="no_updates_found">未发现更新</string>
     <string name="error_retrieving">检索最新版本出错</string>
     <string name="new_version_found">发现新版本</string>
-    <string name="update_version_format" formatted="true">从 V %s 更新至 V %s?\n\nChangelog:\n%s</string>
+    <string name="update_version_format" formatted="true">从 V %s 更新至 V %s?</string>
     <string name="clear_this_list">清空此列表?</string>
     <string name="set_minimum_count">设置最小值</string>
     <string name="sort_by_title">按标题排列</string>

+ 1 - 1
app/src/main/res/values-zh-rTW/strings.xml

@@ -97,7 +97,7 @@
     <string name="no_updates_found">未發現更新</string>
     <string name="error_retrieving">檢索最新版本出錯</string>
     <string name="new_version_found">發現新版本</string>
-    <string name="update_version_format" formatted="true">從V %s 更新至V %s?\n\nChangelog:\n%s</string>
+    <string name="update_version_format" formatted="true">從V %s 更新至V %s?</string>
     <string name="clear_this_list">清空此列表?</string>
     <string name="set_minimum_count">設定最小值</string>
     <string name="sort_by_title">按標題排列</string>

+ 1 - 1
app/src/main/res/values/strings.xml

@@ -160,7 +160,7 @@
     <string name="no_updates_found">No updates found</string>
     <string name="error_retrieving">Error in retrieving latest version</string>
     <string name="new_version_found">New version found</string>
-    <string name="update_version_format" formatted="true">Update from version %s to version %s?\n\nChangelog:\n%s</string>
+    <string name="update_version_format" formatted="true">Update from version %s to version %s?</string>
     <string name="clear_this_list">Clear this list?</string>
     <string name="set_minimum_count">Set minimum count</string>
     <string name="sort_by_title">Sort by title</string>