From 5ed6e2bea846532d6ac291508f27ce3beba102c1 Mon Sep 17 00:00:00 2001
From: hyb1996 <946994919@qq.com>
Date: Sun, 31 Dec 2017 17:56:35 +0800
Subject: [PATCH] add: logout button on drawer menu
---
app/release/output.json | 2 +-
app/src/main/AndroidManifest.xml | 5 -
.../stardust/scriptdroid/network/NodeBB.java | 11 +-
.../scriptdroid/network/UserService.java | 92 +-
.../scriptdroid/network/api/UserApi.java | 2 +
.../scriptdroid/network/entity/user/User.java | 1170 +++++++++--------
.../ui/main/drawer/CommunityDrawerMenu.java | 86 +-
.../ui/main/drawer/DrawerFragment.java | 12 +-
.../ui/main/drawer/DrawerMenuGroup.java | 2 +-
.../ui/main/drawer/DrawerMenuItem.java | 15 +
.../ic_exit_to_app_black_24dp.png | Bin 0 -> 251 bytes
.../ic_exit_to_app_black_24dp.png | Bin 0 -> 171 bytes
.../ic_exit_to_app_black_24dp.png | Bin 0 -> 246 bytes
.../ic_exit_to_app_black_24dp.png | Bin 0 -> 354 bytes
.../ic_exit_to_app_black_24dp.png | Bin 0 -> 432 bytes
app/src/main/res/values/strings.xml | 2 +
autojs/src/main/AndroidManifest.xml | 6 +
.../autojs/core/image/ImageWrapper.java | 3 +
.../stardust/autojs/runtime/api/Images.java | 1 +
autojs/src/main/res/values/styles.xml | 10 +
.../main/java/com/stardust/util/Objects.java | 27 +
21 files changed, 839 insertions(+), 607 deletions(-)
create mode 100644 app/src/main/res/drawable-hdpi/ic_exit_to_app_black_24dp.png
create mode 100644 app/src/main/res/drawable-mdpi/ic_exit_to_app_black_24dp.png
create mode 100644 app/src/main/res/drawable-xhdpi/ic_exit_to_app_black_24dp.png
create mode 100644 app/src/main/res/drawable-xxhdpi/ic_exit_to_app_black_24dp.png
create mode 100644 app/src/main/res/drawable-xxxhdpi/ic_exit_to_app_black_24dp.png
create mode 100644 common/src/main/java/com/stardust/util/Objects.java
diff --git a/app/release/output.json b/app/release/output.json
index aaa06e73..07c41bed 100644
--- a/app/release/output.json
+++ b/app/release/output.json
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":34},"path":"inrt-release.apk","properties":{"packageId":"com.stardust.auojs.inrt","split":"","minSdkVersion":"17"}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":239},"path":"release-3.0.0 Alpha39.apk","properties":{"packageId":"com.stardust.scriptdroid","split":"","minSdkVersion":"17"}}]
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 5d7514d1..aff48fd8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -95,11 +95,6 @@
-
login(String userName, final String password) {
return NodeBB.getInstance()
.getConfig()
- .flatMap(config -> {
- return mRetrofit.create(UserApi.class)
- .login(Collections.singletonMap("x-csrf-token", config.getCsrfToken()),
- userName, password);
- });
+ .flatMap(config ->
+ mRetrofit.create(UserApi.class)
+ .login(Collections.singletonMap("x-csrf-token", config.getCsrfToken()),
+ userName, password)
+ .doOnError(error -> {
+ if (error instanceof HttpException && ((HttpException) error).code() == 403) {
+ NodeBB.getInstance().invalidateConfig();
+ }
+ }))
+ .doOnComplete(this::refreshOnlineStatus);
}
+
public Observable register(String email, String userName, String password) {
return NodeBB.getInstance()
.getConfig()
@@ -46,4 +71,55 @@ public class UserService {
.register(Collections.singletonMap("x-csrf-token", config.getCsrfToken()),
email, userName, password, password));
}
+
+ public boolean isOnline() {
+ return mUser != null;
+ }
+
+ private void setUser(User user) {
+ User old = mUser;
+ mUser = user;
+ if (!Objects.equals(old, mUser)) {
+ if (user == null) {
+ NodeBB.getInstance().invalidateConfig();
+ }
+ EventBus.getDefault().post(new LoginStateChange(user != null));
+ }
+ }
+
+ public Observable refreshOnlineStatus() {
+ PublishSubject online = PublishSubject.create();
+ mRetrofit.create(UserApi.class)
+ .me()
+ .subscribeOn(Schedulers.io())
+ .subscribe(user -> {
+ setUser(user);
+ online.onNext(true);
+ online.onComplete();
+ }, error -> {
+ setUser(null);
+ online.onNext(false);
+ online.onComplete();
+ });
+ return online;
+ }
+
+ public Observable logout() {
+ return NodeBB.getInstance()
+ .getConfig()
+ .flatMap(config ->
+ mRetrofit.create(UserApi.class)
+ .logout(Collections.singletonMap("x-csrf-token", config.getCsrfToken()))
+ )
+ .doOnError(Throwable::printStackTrace)
+ .doOnComplete(this::refreshOnlineStatus);
+ }
+
+ public Observable me() {
+ return NodeBB.getInstance().getRetrofit()
+ .create(UserApi.class)
+ .me()
+ .doOnNext(this::setUser)
+ .doOnError(error -> setUser(null));
+ }
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/api/UserApi.java b/app/src/main/java/com/stardust/scriptdroid/network/api/UserApi.java
index 042e8e23..4c55c16e 100644
--- a/app/src/main/java/com/stardust/scriptdroid/network/api/UserApi.java
+++ b/app/src/main/java/com/stardust/scriptdroid/network/api/UserApi.java
@@ -31,4 +31,6 @@ public interface UserApi {
@Field("username") String userName, @Field("password") String password, @Field("password-confirm") String repeatPassword);
+ @POST("/logout")
+ Observable logout(@HeaderMap Map csrfToken);
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/entity/user/User.java b/app/src/main/java/com/stardust/scriptdroid/network/entity/user/User.java
index 30d433b4..c6bb1063 100644
--- a/app/src/main/java/com/stardust/scriptdroid/network/entity/user/User.java
+++ b/app/src/main/java/com/stardust/scriptdroid/network/entity/user/User.java
@@ -1,746 +1,756 @@
package com.stardust.scriptdroid.network.entity.user;
import java.util.List;
+
import com.google.gson.annotations.SerializedName;
+import com.stardust.util.Objects;
-public class User{
+public class User {
- @SerializedName("websiteLink")
- private String websiteLink;
+ @SerializedName("websiteLink")
+ private String websiteLink;
- @SerializedName("reputation")
- private String reputation;
+ @SerializedName("reputation")
+ private String reputation;
- @SerializedName("sso")
- private List