diff --git a/.gitignore b/.gitignore
index 6b04ae92..1bed7cda 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@
/.idea/libraries
.DS_Store
/build
+/release
/captures
.externalNativeBuild
*.apk
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 715986fb..3c7d3487 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -39,17 +39,7 @@
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/app/build.gradle b/app/build.gradle
index c2f56685..c5f62dc3 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,17 +1,16 @@
apply plugin: 'com.android.application'
apply plugin: 'com.getkeepsafe.dexcount'
-apply plugin: 'me.tatarka.retrolambda'
def AAVersion = '4.2.0'
android {
compileSdkVersion 25
- buildToolsVersion "25.0.2"
+ buildToolsVersion '26.0.2'
defaultConfig {
applicationId "com.stardust.scriptdroid"
minSdkVersion 17
targetSdkVersion 23
- versionCode 213
- versionName "3.0.0 Alpha14"
+ versionCode 214
+ versionName "3.0.0 Alpha15"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
ndk {
@@ -40,9 +39,8 @@ android {
disable 'ExtraTranslation'
}
android.applicationVariants.all { variant ->
- variant.outputs.each { output ->
- def file = output.outputFile
- output.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk"))
+ variant.outputs.all {
+ outputFileName = "${variant.name}-${variant.versionName}.apk"
}
}
@@ -55,6 +53,7 @@ repositories {
flatDir {
dirs 'libs'
}
+ google()
}
dependencies {
@@ -75,10 +74,10 @@ dependencies {
})
annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
// Android supports
- compile 'com.android.support:appcompat-v7:25.3.1'
- compile 'com.android.support:cardview-v7:25.3.1'
- compile 'com.android.support:design:25.3.1'
- compile 'com.android.support:multidex:1.0.1'
+ compile 'com.android.support:appcompat-v7:25.4.0'
+ compile 'com.android.support:cardview-v7:25.4.0'
+ compile 'com.android.support:design:25.4.0'
+ compile 'com.android.support:multidex:1.0.2'
// Personal libraries
compile 'com.github.hyb1996:MutableTheme:0.2.2'
// Material Dialogs
@@ -102,12 +101,12 @@ dependencies {
compile 'com.bignerdranch.android:expandablerecyclerview:3.0.0-RC1'
compile 'com.yqritc:recyclerview-flexibledivider:1.4.0'
compile 'com.wang.avi:library:2.1.3'
- compile 'org.apache.commons:commons-lang3:3.5'
+ compile 'org.apache.commons:commons-lang3:3.6'
compile 'com.github.hyb1996:FloatingCircularActionMenu:0.0.2'
compile(name: 'apkbuilder-release', ext: 'aar')
// RxJava
- compile "io.reactivex.rxjava2:rxjava:2.1.0"
+ compile "io.reactivex.rxjava2:rxjava:2.1.2"
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
// RxDownload
compile('zlc.season:rxdownload3:1.0.8', {
@@ -120,15 +119,18 @@ dependencies {
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
//JDeferred
compile 'org.jdeferred:jdeferred-android-aar:1.2.6'
- //Picasso
- compile 'com.squareup.picasso:picasso:2.5.2'
+ //Glide
+ compile('com.github.bumptech.glide:glide:4.2.0', {
+ exclude group: 'com.android.support'
+ })
+ annotationProcessor 'com.github.bumptech.glide:compiler:4.2.0'
// Tasker Plugin
- compile 'com.twofortyfouram:android-plugin-client-sdk-for-locale:[4.0.2, 5.0['
+ compile 'com.twofortyfouram:android-plugin-client-sdk-for-locale:4.0.3'
compile 'com.flurry.android:analytics:7.0.0@aar'
compile('com.afollestad.material-dialogs:commons:0.9.2.3', {
exclude group: 'com.android.support'
})
- compile 'com.makeramen:roundedimageview:2.2.1'
+ compile 'com.makeramen:roundedimageview:2.3.0'
compile 'com.rengwuxian.materialedittext:library:2.0.3'
compile 'org.msgpack:msgpack-core:0.8.11'
compile project(':automator')
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e96d6fe1..7616cb72 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -78,7 +78,13 @@
-
+
+
+
diff --git a/app/src/main/java/com/stardust/scriptdroid/external/open/RunIntentActivity.java b/app/src/main/java/com/stardust/scriptdroid/external/open/RunIntentActivity.java
index 24f8dc1d..105ffb4f 100644
--- a/app/src/main/java/com/stardust/scriptdroid/external/open/RunIntentActivity.java
+++ b/app/src/main/java/com/stardust/scriptdroid/external/open/RunIntentActivity.java
@@ -44,10 +44,7 @@ public class RunIntentActivity extends Activity {
InputStream stream = getContentResolver().openInputStream(uri);
Scripts.run(new StringScriptSource(PFiles.read(stream)));
} else {
- final String path = intent.getData().getPath();
- if (!TextUtils.isEmpty(path)) {
- Scripts.run(new ScriptFile(path));
- }
+ CommonUtils.handleIntent(this, intent);
}
}
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/Glides.java b/app/src/main/java/com/stardust/scriptdroid/network/Glides.java
new file mode 100644
index 00000000..21365e35
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/network/Glides.java
@@ -0,0 +1,11 @@
+package com.stardust.scriptdroid.network;
+
+import com.bumptech.glide.annotation.GlideModule;
+import com.bumptech.glide.module.AppGlideModule;
+
+/**
+ * Created by Stardust on 2017/10/26.
+ */
+@GlideModule
+public class Glides extends AppGlideModule {
+}
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/NodeBB.java b/app/src/main/java/com/stardust/scriptdroid/network/NodeBB.java
index 254e6078..df49ac47 100644
--- a/app/src/main/java/com/stardust/scriptdroid/network/NodeBB.java
+++ b/app/src/main/java/com/stardust/scriptdroid/network/NodeBB.java
@@ -2,8 +2,12 @@ package com.stardust.scriptdroid.network;
import com.google.gson.GsonBuilder;
import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+import com.stardust.scriptdroid.network.api.ConfigApi;
+import com.stardust.scriptdroid.network.entity.config.Config;
import com.stardust.scriptdroid.network.util.WebkitCookieManagerProxy;
+import io.reactivex.Observable;
+import io.reactivex.Scheduler;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
@@ -14,13 +18,16 @@ import retrofit2.converter.gson.GsonConverterFactory;
public class NodeBB {
+ public static final String BASE_URL = "http://www.autojs.org/";
private static final NodeBB sInstance = new NodeBB();
+ private Config mConfig;
+
private Retrofit mRetrofit;
NodeBB() {
mRetrofit = new Retrofit.Builder()
- .baseUrl("http://www.autojs.org/")
+ .baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(new GsonBuilder()
.setLenient()
.create()))
@@ -38,4 +45,18 @@ public class NodeBB {
public Retrofit getRetrofit() {
return mRetrofit;
}
+
+ public Observable getConfig() {
+ if (mConfig == null) {
+ return mRetrofit.create(ConfigApi.class)
+ .getConfig()
+ .doOnNext(config -> mConfig = config);
+ }
+ return Observable.just(mConfig);
+
+ }
+
+ public static String url(String relativePath) {
+ return BASE_URL + relativePath;
+ }
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/UserService.java b/app/src/main/java/com/stardust/scriptdroid/network/UserService.java
index d499f7f3..ccf3c262 100644
--- a/app/src/main/java/com/stardust/scriptdroid/network/UserService.java
+++ b/app/src/main/java/com/stardust/scriptdroid/network/UserService.java
@@ -1,19 +1,15 @@
package com.stardust.scriptdroid.network;
-import com.google.gson.GsonBuilder;
-import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+import android.util.Log;
+
+import com.stardust.scriptdroid.network.api.ConfigApi;
import com.stardust.scriptdroid.network.api.UserApi;
-import com.stardust.scriptdroid.network.entity.TokenResponse;
-import com.stardust.scriptdroid.network.entity.VerifyResponse;
+
+import java.util.Collections;
import io.reactivex.Observable;
-import io.reactivex.ObservableSource;
-import io.reactivex.annotations.NonNull;
-import io.reactivex.functions.Consumer;
-import io.reactivex.functions.Function;
-import io.reactivex.schedulers.Schedulers;
+import okhttp3.ResponseBody;
import retrofit2.Retrofit;
-import retrofit2.converter.gson.GsonConverterFactory;
/**
* Created by Stardust on 2017/9/20.
@@ -28,20 +24,30 @@ public class UserService {
mRetrofit = NodeBB.getInstance().getRetrofit();
}
+ public static UserService getInstance() {
+ return sInstance;
+ }
- public Observable login(String userName, final String password) {
- final UserApi userApi = mRetrofit.create(UserApi.class);
- return userApi.verify(userName, password)
- .subscribeOn(Schedulers.io())
- .flatMap(new Function>() {
- @Override
- public ObservableSource apply(@NonNull VerifyResponse verifyResponse) throws Exception {
- if (verifyResponse.isSuccessful()) {
- return userApi.generateToken(verifyResponse.getUid(), password);
- } else {
- return Observable.error(new Exception(verifyResponse.getMessage()));
- }
- }
+ public Observable login(String userName, final String password) {
+ return NodeBB.getInstance()
+ .getConfig()
+ .flatMap(config -> {
+ Log.d("login", config.toString());
+ return mRetrofit.create(UserApi.class)
+ .login(Collections.singletonMap("x-csrf-token", config.getCsrfToken()),
+ userName, password);
+ });
+
+ }
+
+ public Observable register(String email, String userName, String password) {
+ return NodeBB.getInstance()
+ .getConfig()
+ .flatMap(config -> {
+ Log.d("login", config.toString());
+ return mRetrofit.create(UserApi.class)
+ .register(Collections.singletonMap("x-csrf-token", config.getCsrfToken()),
+ email, userName, password);
});
}
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/api/ConfigApi.java b/app/src/main/java/com/stardust/scriptdroid/network/api/ConfigApi.java
new file mode 100644
index 00000000..1dbd7752
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/network/api/ConfigApi.java
@@ -0,0 +1,17 @@
+package com.stardust.scriptdroid.network.api;
+
+import com.stardust.scriptdroid.network.entity.config.Config;
+
+import io.reactivex.Observable;
+import retrofit2.http.GET;
+
+/**
+ * Created by Stardust on 2017/10/26.
+ */
+
+public interface ConfigApi {
+
+ @GET("/api/config")
+ Observable getConfig();
+
+}
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 b7f64159..0b956522 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
@@ -1,15 +1,16 @@
package com.stardust.scriptdroid.network.api;
-import com.stardust.scriptdroid.network.entity.VerifyResponse;
-import com.stardust.scriptdroid.network.entity.TokenResponse;
-import com.stardust.scriptdroid.network.entity.User;
+import com.stardust.scriptdroid.network.entity.user.User;
+
+import java.util.Map;
import io.reactivex.Observable;
+import okhttp3.ResponseBody;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
+import retrofit2.http.HeaderMap;
import retrofit2.http.POST;
-import retrofit2.http.Path;
/**
* Created by Stardust on 2017/9/20.
@@ -21,14 +22,13 @@ public interface UserApi {
Observable me();
@FormUrlEncoded
- @POST("/api/ns/login")
- Observable verify(@Field("username") String userName, @Field("password") String password);
-
+ @POST("/login")
+ Observable login(@HeaderMap Map csrfToken, @Field("username") String userName, @Field("password") String password);
@FormUrlEncoded
- @POST("/api/v2/{uid}/tokens")
- Observable generateToken(@Path("uid") String uid, @Field("password") String password);
-
+ @POST("/register")
+ Observable register(@HeaderMap Map csrfToken, @Field("email") String email,
+ @Field("username") String userName, @Field("password") String password);
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/entity/TokenResponse.java b/app/src/main/java/com/stardust/scriptdroid/network/entity/TokenResponse.java
deleted file mode 100644
index e87ad11e..00000000
--- a/app/src/main/java/com/stardust/scriptdroid/network/entity/TokenResponse.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.stardust.scriptdroid.network.entity;
-
-/**
- * Created by Stardust on 2017/9/21.
- */
-
-public class TokenResponse {
-
- public String code;
-
- public static class Payload {
-
- public String token;
- }
-
-
-}
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/entity/VerifyResponse.java b/app/src/main/java/com/stardust/scriptdroid/network/entity/VerifyResponse.java
deleted file mode 100644
index 56cefbff..00000000
--- a/app/src/main/java/com/stardust/scriptdroid/network/entity/VerifyResponse.java
+++ /dev/null
@@ -1,376 +0,0 @@
-package com.stardust.scriptdroid.network.entity;
-
-import com.google.gson.annotations.SerializedName;
-
-public class VerifyResponse {
-
- @SerializedName("message")
- private String message;
-
- @SerializedName("birthday")
- private String birthday;
-
- @SerializedName("lastposttime")
- private String lastposttime;
-
- @SerializedName("signature")
- private String signature;
-
- @SerializedName("icon:bgColor")
- private String iconBgColor;
-
- @SerializedName("groupTitle")
- private String groupTitle;
-
- @SerializedName("reputation")
- private String reputation;
-
- @SerializedName("followingCount")
- private String followingCount;
-
- @SerializedName("lastonlineISO")
- private String lastonlineISO;
-
- @SerializedName("uid")
- private String uid;
-
- @SerializedName("profileviews")
- private String profileviews;
-
- @SerializedName("icon:text")
- private String iconText;
-
- @SerializedName("banned")
- private String banned;
-
- @SerializedName("userslug")
- private String userslug;
-
- @SerializedName("followerCount")
- private String followerCount;
-
- @SerializedName("email")
- private String email;
-
- @SerializedName("joindate")
- private String joindate;
-
- @SerializedName("website")
- private String website;
-
- @SerializedName("uploadedpicture")
- private String uploadedpicture;
-
- @SerializedName("passwordExpiry")
- private String passwordExpiry;
-
- @SerializedName("lastonline")
- private String lastonline;
-
- @SerializedName("picture")
- private String picture;
-
- @SerializedName("joindateISO")
- private String joindateISO;
-
- @SerializedName("email:confirmed")
- private Object emailConfirmed;
-
- @SerializedName("postcount")
- private String postcount;
-
- @SerializedName("location")
- private String location;
-
- @SerializedName("fullname")
- private String fullname;
-
- @SerializedName("topiccount")
- private String topiccount;
-
- @SerializedName("username")
- private String username;
-
- @SerializedName("status")
- private String status;
-
- public boolean isSuccessful() {
- return message == null;
- }
-
- public String getMessage() {
- return message;
- }
-
- public void setMessage(String message) {
- this.message = message;
- }
-
- public void setBirthday(String birthday) {
- this.birthday = birthday;
- }
-
- public String getBirthday() {
- return birthday;
- }
-
- public void setLastposttime(String lastposttime) {
- this.lastposttime = lastposttime;
- }
-
- public String getLastposttime() {
- return lastposttime;
- }
-
- public void setSignature(String signature) {
- this.signature = signature;
- }
-
- public String getSignature() {
- return signature;
- }
-
- public void setIconBgColor(String iconBgColor) {
- this.iconBgColor = iconBgColor;
- }
-
- public String getIconBgColor() {
- return iconBgColor;
- }
-
- public void setGroupTitle(String groupTitle) {
- this.groupTitle = groupTitle;
- }
-
- public String getGroupTitle() {
- return groupTitle;
- }
-
- public void setReputation(String reputation) {
- this.reputation = reputation;
- }
-
- public String getReputation() {
- return reputation;
- }
-
- public void setFollowingCount(String followingCount) {
- this.followingCount = followingCount;
- }
-
- public String getFollowingCount() {
- return followingCount;
- }
-
- public void setLastonlineISO(String lastonlineISO) {
- this.lastonlineISO = lastonlineISO;
- }
-
- public String getLastonlineISO() {
- return lastonlineISO;
- }
-
- public void setUid(String uid) {
- this.uid = uid;
- }
-
- public String getUid() {
- return uid;
- }
-
- public void setProfileviews(String profileviews) {
- this.profileviews = profileviews;
- }
-
- public String getProfileviews() {
- return profileviews;
- }
-
- public void setIconText(String iconText) {
- this.iconText = iconText;
- }
-
- public String getIconText() {
- return iconText;
- }
-
- public void setBanned(String banned) {
- this.banned = banned;
- }
-
- public String getBanned() {
- return banned;
- }
-
- public void setUserslug(String userslug) {
- this.userslug = userslug;
- }
-
- public String getUserslug() {
- return userslug;
- }
-
- public void setFollowerCount(String followerCount) {
- this.followerCount = followerCount;
- }
-
- public String getFollowerCount() {
- return followerCount;
- }
-
- public void setEmail(String email) {
- this.email = email;
- }
-
- public String getEmail() {
- return email;
- }
-
- public void setJoindate(String joindate) {
- this.joindate = joindate;
- }
-
- public String getJoindate() {
- return joindate;
- }
-
- public void setWebsite(String website) {
- this.website = website;
- }
-
- public String getWebsite() {
- return website;
- }
-
- public void setUploadedpicture(String uploadedpicture) {
- this.uploadedpicture = uploadedpicture;
- }
-
- public String getUploadedpicture() {
- return uploadedpicture;
- }
-
- public void setPasswordExpiry(String passwordExpiry) {
- this.passwordExpiry = passwordExpiry;
- }
-
- public String getPasswordExpiry() {
- return passwordExpiry;
- }
-
- public void setLastonline(String lastonline) {
- this.lastonline = lastonline;
- }
-
- public String getLastonline() {
- return lastonline;
- }
-
- public void setPicture(String picture) {
- this.picture = picture;
- }
-
- public String getPicture() {
- return picture;
- }
-
- public void setJoindateISO(String joindateISO) {
- this.joindateISO = joindateISO;
- }
-
- public String getJoindateISO() {
- return joindateISO;
- }
-
- public void setEmailConfirmed(Object emailConfirmed) {
- this.emailConfirmed = emailConfirmed;
- }
-
- public Object getEmailConfirmed() {
- return emailConfirmed;
- }
-
- public void setPostcount(String postcount) {
- this.postcount = postcount;
- }
-
- public String getPostcount() {
- return postcount;
- }
-
- public void setLocation(String location) {
- this.location = location;
- }
-
- public String getLocation() {
- return location;
- }
-
- public void setFullname(String fullname) {
- this.fullname = fullname;
- }
-
- public String getFullname() {
- return fullname;
- }
-
- public void setTopiccount(String topiccount) {
- this.topiccount = topiccount;
- }
-
- public String getTopiccount() {
- return topiccount;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public String getUsername() {
- return username;
- }
-
- public void setStatus(String status) {
- this.status = status;
- }
-
- public String getStatus() {
- return status;
- }
-
- @Override
- public String toString() {
- return
- "VerifyResponse{" +
- "birthday = '" + birthday + '\'' +
- ",lastposttime = '" + lastposttime + '\'' +
- ",signature = '" + signature + '\'' +
- ",icon:bgColor = '" + iconBgColor + '\'' +
- ",groupTitle = '" + groupTitle + '\'' +
- ",reputation = '" + reputation + '\'' +
- ",followingCount = '" + followingCount + '\'' +
- ",lastonlineISO = '" + lastonlineISO + '\'' +
- ",uid = '" + uid + '\'' +
- ",profileviews = '" + profileviews + '\'' +
- ",icon:text = '" + iconText + '\'' +
- ",banned = '" + banned + '\'' +
- ",userslug = '" + userslug + '\'' +
- ",followerCount = '" + followerCount + '\'' +
- ",email = '" + email + '\'' +
- ",joindate = '" + joindate + '\'' +
- ",website = '" + website + '\'' +
- ",uploadedpicture = '" + uploadedpicture + '\'' +
- ",passwordExpiry = '" + passwordExpiry + '\'' +
- ",lastonline = '" + lastonline + '\'' +
- ",picture = '" + picture + '\'' +
- ",joindateISO = '" + joindateISO + '\'' +
- ",email:confirmed = '" + emailConfirmed + '\'' +
- ",postcount = '" + postcount + '\'' +
- ",location = '" + location + '\'' +
- ",fullname = '" + fullname + '\'' +
- ",topiccount = '" + topiccount + '\'' +
- ",username = '" + username + '\'' +
- ",status = '" + status + '\'' +
- "}";
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/entity/config/Config.java b/app/src/main/java/com/stardust/scriptdroid/network/entity/config/Config.java
new file mode 100644
index 00000000..13c75416
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/network/entity/config/Config.java
@@ -0,0 +1,617 @@
+package com.stardust.scriptdroid.network.entity.config;
+
+import java.util.List;
+import com.google.gson.annotations.SerializedName;
+
+public class Config{
+
+
+ @SerializedName("socketioTransports")
+ private List socketioTransports;
+
+ @SerializedName("allowGuestSearching")
+ private boolean allowGuestSearching;
+
+ @SerializedName("hasImageUploadPlugin")
+ private boolean hasImageUploadPlugin;
+
+ @SerializedName("showSiteTitle")
+ private boolean showSiteTitle;
+
+ @SerializedName("websocketAddress")
+ private String websocketAddress;
+
+ @SerializedName("maximumFileSize")
+ private String maximumFileSize;
+
+ @SerializedName("usePagination")
+ private boolean usePagination;
+
+ @SerializedName("minimumPostLength")
+ private String minimumPostLength;
+
+ @SerializedName("allowGuestUserSearching")
+ private boolean allowGuestUserSearching;
+
+ @SerializedName("allowTopicsThumbnail")
+ private boolean allowTopicsThumbnail;
+
+ @SerializedName("allowGuestHandles")
+ private boolean allowGuestHandles;
+
+ @SerializedName("disableChatMessageEditing")
+ private boolean disableChatMessageEditing;
+
+ @SerializedName("version")
+ private String version;
+
+ @SerializedName("minimumTitleLength")
+ private String minimumTitleLength;
+
+ @SerializedName("maximumTagsPerTopic")
+ private int maximumTagsPerTopic;
+
+ @SerializedName("topicPostSort")
+ private String topicPostSort;
+
+ @SerializedName("defaultBootswatchSkin")
+ private String defaultBootswatchSkin;
+
+ @SerializedName("allowFileUploads")
+ private boolean allowFileUploads;
+
+ @SerializedName("maximumPostLength")
+ private String maximumPostLength;
+
+ @SerializedName("loggedIn")
+ private boolean loggedIn;
+
+ @SerializedName("postsPerPage")
+ private String postsPerPage;
+
+
+ @SerializedName("relative_path")
+ private String relativePath;
+
+ @SerializedName("requireEmailConfirmation")
+ private boolean requireEmailConfirmation;
+
+ @SerializedName("defaultLang")
+ private String defaultLang;
+
+ @SerializedName("disableChat")
+ private boolean disableChat;
+
+ @SerializedName("userLang")
+ private String userLang;
+
+ @SerializedName("maxReconnectionAttempts")
+ private int maxReconnectionAttempts;
+
+ @SerializedName("timeagoCutoff")
+ private String timeagoCutoff;
+
+ @SerializedName("browserTitle")
+ private String browserTitle;
+
+ @SerializedName("siteTitle")
+ private String siteTitle;
+
+ @SerializedName("csrf_token")
+ private String csrfToken;
+
+ @SerializedName("categoryTopicSort")
+ private String categoryTopicSort;
+
+ @SerializedName("disableMasonry")
+ private boolean disableMasonry;
+
+ @SerializedName("theme:src")
+ private String themeSrc;
+
+ @SerializedName("cookies")
+ private Cookies cookies;
+
+ @SerializedName("markdown")
+ private Markdown markdown;
+
+ @SerializedName("minimumTagLength")
+ private String minimumTagLength;
+
+ @SerializedName("maximumTagLength")
+ private String maximumTagLength;
+
+ @SerializedName("maximumTitleLength")
+ private String maximumTitleLength;
+
+ @SerializedName("topicsPerPage")
+ private String topicsPerPage;
+
+ @SerializedName("useOutgoingLinksPage")
+ private boolean useOutgoingLinksPage;
+
+ @SerializedName("bootswatchSkin")
+ private String bootswatchSkin;
+
+ @SerializedName("minimumTagsPerTopic")
+ private int minimumTagsPerTopic;
+
+ @SerializedName("delayImageLoading")
+ private boolean delayImageLoading;
+
+ @SerializedName("cache-buster")
+ private String cacheBuster;
+
+ @SerializedName("titleLayout")
+ private String titleLayout;
+
+ @SerializedName("theme:id")
+ private String themeId;
+
+ @SerializedName("topicSearchEnabled")
+ private boolean topicSearchEnabled;
+
+ @SerializedName("searchEnabled")
+ private boolean searchEnabled;
+
+ @SerializedName("reconnectionDelay")
+ private int reconnectionDelay;
+
+
+ public void setSocketioTransports(List socketioTransports){
+ this.socketioTransports = socketioTransports;
+ }
+
+ public List getSocketioTransports(){
+ return socketioTransports;
+ }
+
+ public void setAllowGuestSearching(boolean allowGuestSearching){
+ this.allowGuestSearching = allowGuestSearching;
+ }
+
+ public boolean isAllowGuestSearching(){
+ return allowGuestSearching;
+ }
+
+ public void setHasImageUploadPlugin(boolean hasImageUploadPlugin){
+ this.hasImageUploadPlugin = hasImageUploadPlugin;
+ }
+
+ public boolean isHasImageUploadPlugin(){
+ return hasImageUploadPlugin;
+ }
+
+ public void setShowSiteTitle(boolean showSiteTitle){
+ this.showSiteTitle = showSiteTitle;
+ }
+
+ public boolean isShowSiteTitle(){
+ return showSiteTitle;
+ }
+
+ public void setWebsocketAddress(String websocketAddress){
+ this.websocketAddress = websocketAddress;
+ }
+
+ public String getWebsocketAddress(){
+ return websocketAddress;
+ }
+
+ public void setMaximumFileSize(String maximumFileSize){
+ this.maximumFileSize = maximumFileSize;
+ }
+
+ public String getMaximumFileSize(){
+ return maximumFileSize;
+ }
+
+ public void setUsePagination(boolean usePagination){
+ this.usePagination = usePagination;
+ }
+
+ public boolean isUsePagination(){
+ return usePagination;
+ }
+
+ public void setMinimumPostLength(String minimumPostLength){
+ this.minimumPostLength = minimumPostLength;
+ }
+
+ public String getMinimumPostLength(){
+ return minimumPostLength;
+ }
+
+ public void setAllowGuestUserSearching(boolean allowGuestUserSearching){
+ this.allowGuestUserSearching = allowGuestUserSearching;
+ }
+
+ public boolean isAllowGuestUserSearching(){
+ return allowGuestUserSearching;
+ }
+
+ public void setAllowTopicsThumbnail(boolean allowTopicsThumbnail){
+ this.allowTopicsThumbnail = allowTopicsThumbnail;
+ }
+
+ public boolean isAllowTopicsThumbnail(){
+ return allowTopicsThumbnail;
+ }
+
+ public void setAllowGuestHandles(boolean allowGuestHandles){
+ this.allowGuestHandles = allowGuestHandles;
+ }
+
+ public boolean isAllowGuestHandles(){
+ return allowGuestHandles;
+ }
+
+ public void setDisableChatMessageEditing(boolean disableChatMessageEditing){
+ this.disableChatMessageEditing = disableChatMessageEditing;
+ }
+
+ public boolean isDisableChatMessageEditing(){
+ return disableChatMessageEditing;
+ }
+
+ public void setVersion(String version){
+ this.version = version;
+ }
+
+ public String getVersion(){
+ return version;
+ }
+
+ public void setMinimumTitleLength(String minimumTitleLength){
+ this.minimumTitleLength = minimumTitleLength;
+ }
+
+ public String getMinimumTitleLength(){
+ return minimumTitleLength;
+ }
+
+ public void setMaximumTagsPerTopic(int maximumTagsPerTopic){
+ this.maximumTagsPerTopic = maximumTagsPerTopic;
+ }
+
+ public int getMaximumTagsPerTopic(){
+ return maximumTagsPerTopic;
+ }
+
+ public void setTopicPostSort(String topicPostSort){
+ this.topicPostSort = topicPostSort;
+ }
+
+ public String getTopicPostSort(){
+ return topicPostSort;
+ }
+
+ public void setDefaultBootswatchSkin(String defaultBootswatchSkin){
+ this.defaultBootswatchSkin = defaultBootswatchSkin;
+ }
+
+ public String getDefaultBootswatchSkin(){
+ return defaultBootswatchSkin;
+ }
+
+ public void setAllowFileUploads(boolean allowFileUploads){
+ this.allowFileUploads = allowFileUploads;
+ }
+
+ public boolean isAllowFileUploads(){
+ return allowFileUploads;
+ }
+
+ public void setMaximumPostLength(String maximumPostLength){
+ this.maximumPostLength = maximumPostLength;
+ }
+
+ public String getMaximumPostLength(){
+ return maximumPostLength;
+ }
+
+ public void setLoggedIn(boolean loggedIn){
+ this.loggedIn = loggedIn;
+ }
+
+ public boolean isLoggedIn(){
+ return loggedIn;
+ }
+
+ public void setPostsPerPage(String postsPerPage){
+ this.postsPerPage = postsPerPage;
+ }
+
+ public String getPostsPerPage(){
+ return postsPerPage;
+ }
+
+ public void setRelativePath(String relativePath){
+ this.relativePath = relativePath;
+ }
+
+ public String getRelativePath(){
+ return relativePath;
+ }
+
+ public void setRequireEmailConfirmation(boolean requireEmailConfirmation){
+ this.requireEmailConfirmation = requireEmailConfirmation;
+ }
+
+ public boolean isRequireEmailConfirmation(){
+ return requireEmailConfirmation;
+ }
+
+ public void setDefaultLang(String defaultLang){
+ this.defaultLang = defaultLang;
+ }
+
+ public String getDefaultLang(){
+ return defaultLang;
+ }
+
+ public void setDisableChat(boolean disableChat){
+ this.disableChat = disableChat;
+ }
+
+ public boolean isDisableChat(){
+ return disableChat;
+ }
+
+ public void setUserLang(String userLang){
+ this.userLang = userLang;
+ }
+
+ public String getUserLang(){
+ return userLang;
+ }
+
+ public void setMaxReconnectionAttempts(int maxReconnectionAttempts){
+ this.maxReconnectionAttempts = maxReconnectionAttempts;
+ }
+
+ public int getMaxReconnectionAttempts(){
+ return maxReconnectionAttempts;
+ }
+
+ public void setTimeagoCutoff(String timeagoCutoff){
+ this.timeagoCutoff = timeagoCutoff;
+ }
+
+ public String getTimeagoCutoff(){
+ return timeagoCutoff;
+ }
+
+ public void setBrowserTitle(String browserTitle){
+ this.browserTitle = browserTitle;
+ }
+
+ public String getBrowserTitle(){
+ return browserTitle;
+ }
+
+ public void setSiteTitle(String siteTitle){
+ this.siteTitle = siteTitle;
+ }
+
+ public String getSiteTitle(){
+ return siteTitle;
+ }
+
+ public void setCsrfToken(String csrfToken){
+ this.csrfToken = csrfToken;
+ }
+
+ public String getCsrfToken(){
+ return csrfToken;
+ }
+
+ public void setCategoryTopicSort(String categoryTopicSort){
+ this.categoryTopicSort = categoryTopicSort;
+ }
+
+ public String getCategoryTopicSort(){
+ return categoryTopicSort;
+ }
+
+ public void setDisableMasonry(boolean disableMasonry){
+ this.disableMasonry = disableMasonry;
+ }
+
+ public boolean isDisableMasonry(){
+ return disableMasonry;
+ }
+
+ public void setThemeSrc(String themeSrc){
+ this.themeSrc = themeSrc;
+ }
+
+ public String getThemeSrc(){
+ return themeSrc;
+ }
+
+ public void setCookies(Cookies cookies){
+ this.cookies = cookies;
+ }
+
+ public Cookies getCookies(){
+ return cookies;
+ }
+
+ public void setMarkdown(Markdown markdown){
+ this.markdown = markdown;
+ }
+
+ public Markdown getMarkdown(){
+ return markdown;
+ }
+
+ public void setMinimumTagLength(String minimumTagLength){
+ this.minimumTagLength = minimumTagLength;
+ }
+
+ public String getMinimumTagLength(){
+ return minimumTagLength;
+ }
+
+ public void setMaximumTagLength(String maximumTagLength){
+ this.maximumTagLength = maximumTagLength;
+ }
+
+ public String getMaximumTagLength(){
+ return maximumTagLength;
+ }
+
+ public void setMaximumTitleLength(String maximumTitleLength){
+ this.maximumTitleLength = maximumTitleLength;
+ }
+
+ public String getMaximumTitleLength(){
+ return maximumTitleLength;
+ }
+
+ public void setTopicsPerPage(String topicsPerPage){
+ this.topicsPerPage = topicsPerPage;
+ }
+
+ public String getTopicsPerPage(){
+ return topicsPerPage;
+ }
+
+ public void setUseOutgoingLinksPage(boolean useOutgoingLinksPage){
+ this.useOutgoingLinksPage = useOutgoingLinksPage;
+ }
+
+ public boolean isUseOutgoingLinksPage(){
+ return useOutgoingLinksPage;
+ }
+
+ public void setBootswatchSkin(String bootswatchSkin){
+ this.bootswatchSkin = bootswatchSkin;
+ }
+
+ public String getBootswatchSkin(){
+ return bootswatchSkin;
+ }
+
+ public void setMinimumTagsPerTopic(int minimumTagsPerTopic){
+ this.minimumTagsPerTopic = minimumTagsPerTopic;
+ }
+
+ public int getMinimumTagsPerTopic(){
+ return minimumTagsPerTopic;
+ }
+
+ public void setDelayImageLoading(boolean delayImageLoading){
+ this.delayImageLoading = delayImageLoading;
+ }
+
+ public boolean isDelayImageLoading(){
+ return delayImageLoading;
+ }
+
+ public void setCacheBuster(String cacheBuster){
+ this.cacheBuster = cacheBuster;
+ }
+
+ public String getCacheBuster(){
+ return cacheBuster;
+ }
+
+ public void setTitleLayout(String titleLayout){
+ this.titleLayout = titleLayout;
+ }
+
+ public String getTitleLayout(){
+ return titleLayout;
+ }
+
+ public void setThemeId(String themeId){
+ this.themeId = themeId;
+ }
+
+ public String getThemeId(){
+ return themeId;
+ }
+
+ public void setTopicSearchEnabled(boolean topicSearchEnabled){
+ this.topicSearchEnabled = topicSearchEnabled;
+ }
+
+ public boolean isTopicSearchEnabled(){
+ return topicSearchEnabled;
+ }
+
+ public void setSearchEnabled(boolean searchEnabled){
+ this.searchEnabled = searchEnabled;
+ }
+
+ public boolean isSearchEnabled(){
+ return searchEnabled;
+ }
+
+ public void setReconnectionDelay(int reconnectionDelay){
+ this.reconnectionDelay = reconnectionDelay;
+ }
+
+ public int getReconnectionDelay(){
+ return reconnectionDelay;
+ }
+
+ @Override
+ public String toString(){
+ return
+ "Config{" +
+ ",socketioTransports = '" + socketioTransports + '\'' +
+ ",allowGuestSearching = '" + allowGuestSearching + '\'' +
+ ",hasImageUploadPlugin = '" + hasImageUploadPlugin + '\'' +
+ ",showSiteTitle = '" + showSiteTitle + '\'' +
+ ",websocketAddress = '" + websocketAddress + '\'' +
+ ",maximumFileSize = '" + maximumFileSize + '\'' +
+ ",usePagination = '" + usePagination + '\'' +
+ ",minimumPostLength = '" + minimumPostLength + '\'' +
+ ",allowGuestUserSearching = '" + allowGuestUserSearching + '\'' +
+ ",allowTopicsThumbnail = '" + allowTopicsThumbnail + '\'' +
+ ",allowGuestHandles = '" + allowGuestHandles + '\'' +
+ ",disableChatMessageEditing = '" + disableChatMessageEditing + '\'' +
+ ",version = '" + version + '\'' +
+ ",minimumTitleLength = '" + minimumTitleLength + '\'' +
+ ",maximumTagsPerTopic = '" + maximumTagsPerTopic + '\'' +
+ ",topicPostSort = '" + topicPostSort + '\'' +
+ ",defaultBootswatchSkin = '" + defaultBootswatchSkin + '\'' +
+ ",allowFileUploads = '" + allowFileUploads + '\'' +
+ ",maximumPostLength = '" + maximumPostLength + '\'' +
+ ",loggedIn = '" + loggedIn + '\'' +
+ ",postsPerPage = '" + postsPerPage + '\'' +
+ ",relative_path = '" + relativePath + '\'' +
+ ",requireEmailConfirmation = '" + requireEmailConfirmation + '\'' +
+ ",defaultLang = '" + defaultLang + '\'' +
+ ",disableChat = '" + disableChat + '\'' +
+ ",userLang = '" + userLang + '\'' +
+ ",maxReconnectionAttempts = '" + maxReconnectionAttempts + '\'' +
+ ",timeagoCutoff = '" + timeagoCutoff + '\'' +
+ ",browserTitle = '" + browserTitle + '\'' +
+ ",siteTitle = '" + siteTitle + '\'' +
+ ",csrf_token = '" + csrfToken + '\'' +
+ ",categoryTopicSort = '" + categoryTopicSort + '\'' +
+ ",disableMasonry = '" + disableMasonry + '\'' +
+ ",theme:src = '" + themeSrc + '\'' +
+ ",cookies = '" + cookies + '\'' +
+ ",markdown = '" + markdown + '\'' +
+ ",minimumTagLength = '" + minimumTagLength + '\'' +
+ ",maximumTagLength = '" + maximumTagLength + '\'' +
+ ",maximumTitleLength = '" + maximumTitleLength + '\'' +
+ ",topicsPerPage = '" + topicsPerPage + '\'' +
+ ",useOutgoingLinksPage = '" + useOutgoingLinksPage + '\'' +
+ ",bootswatchSkin = '" + bootswatchSkin + '\'' +
+ ",minimumTagsPerTopic = '" + minimumTagsPerTopic + '\'' +
+ ",delayImageLoading = '" + delayImageLoading + '\'' +
+ ",cache-buster = '" + cacheBuster + '\'' +
+ ",titleLayout = '" + titleLayout + '\'' +
+ ",theme:id = '" + themeId + '\'' +
+ ",topicSearchEnabled = '" + topicSearchEnabled + '\'' +
+ ",searchEnabled = '" + searchEnabled + '\'' +
+ ",reconnectionDelay = '" + reconnectionDelay + '\'' +
+ "}";
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/entity/config/Cookies.java b/app/src/main/java/com/stardust/scriptdroid/network/entity/config/Cookies.java
new file mode 100644
index 00000000..da526c22
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/network/entity/config/Cookies.java
@@ -0,0 +1,62 @@
+package com.stardust.scriptdroid.network.entity.config;
+
+
+import com.google.gson.annotations.SerializedName;
+
+public class Cookies {
+
+ @SerializedName("link")
+ private String link;
+
+ @SerializedName("dismiss")
+ private String dismiss;
+
+ @SerializedName("message")
+ private String message;
+
+ @SerializedName("enabled")
+ private boolean enabled;
+
+ public void setLink(String link) {
+ this.link = link;
+ }
+
+ public String getLink() {
+ return link;
+ }
+
+ public void setDismiss(String dismiss) {
+ this.dismiss = dismiss;
+ }
+
+ public String getDismiss() {
+ return dismiss;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ @Override
+ public String toString() {
+ return
+ "Cookies{" +
+ "link = '" + link + '\'' +
+ ",dismiss = '" + dismiss + '\'' +
+ ",message = '" + message + '\'' +
+ ",enabled = '" + enabled + '\'' +
+ "}";
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/entity/config/Markdown.java b/app/src/main/java/com/stardust/scriptdroid/network/entity/config/Markdown.java
new file mode 100644
index 00000000..be019be9
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/network/entity/config/Markdown.java
@@ -0,0 +1,37 @@
+package com.stardust.scriptdroid.network.entity.config;
+
+import com.google.gson.annotations.SerializedName;
+
+public class Markdown{
+
+ @SerializedName("highlight")
+ private int highlight;
+
+ @SerializedName("theme")
+ private String theme;
+
+ public void setHighlight(int highlight){
+ this.highlight = highlight;
+ }
+
+ public int getHighlight(){
+ return highlight;
+ }
+
+ public void setTheme(String theme){
+ this.theme = theme;
+ }
+
+ public String getTheme(){
+ return theme;
+ }
+
+ @Override
+ public String toString(){
+ return
+ "Markdown{" +
+ "highlight = '" + highlight + '\'' +
+ ",theme = '" + theme + '\'' +
+ "}";
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/entity/GroupsItem.java b/app/src/main/java/com/stardust/scriptdroid/network/entity/user/GroupsItem.java
similarity index 98%
rename from app/src/main/java/com/stardust/scriptdroid/network/entity/GroupsItem.java
rename to app/src/main/java/com/stardust/scriptdroid/network/entity/user/GroupsItem.java
index 2c7f5a42..85a7660d 100644
--- a/app/src/main/java/com/stardust/scriptdroid/network/entity/GroupsItem.java
+++ b/app/src/main/java/com/stardust/scriptdroid/network/entity/user/GroupsItem.java
@@ -1,4 +1,4 @@
-package com.stardust.scriptdroid.network.entity;
+package com.stardust.scriptdroid.network.entity.user;
import com.google.gson.annotations.SerializedName;
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/entity/User.java b/app/src/main/java/com/stardust/scriptdroid/network/entity/user/User.java
similarity index 99%
rename from app/src/main/java/com/stardust/scriptdroid/network/entity/User.java
rename to app/src/main/java/com/stardust/scriptdroid/network/entity/user/User.java
index 5c97da2c..30d433b4 100644
--- a/app/src/main/java/com/stardust/scriptdroid/network/entity/User.java
+++ b/app/src/main/java/com/stardust/scriptdroid/network/entity/user/User.java
@@ -1,4 +1,4 @@
-package com.stardust.scriptdroid.network.entity;
+package com.stardust.scriptdroid.network.entity.user;
import java.util.List;
import com.google.gson.annotations.SerializedName;
diff --git a/app/src/main/java/com/stardust/scriptdroid/tool/DrawableSaver.java b/app/src/main/java/com/stardust/scriptdroid/tool/DrawableSaver.java
deleted file mode 100644
index 21560113..00000000
--- a/app/src/main/java/com/stardust/scriptdroid/tool/DrawableSaver.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package com.stardust.scriptdroid.tool;
-
-import android.app.Activity;
-import android.content.Context;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.view.View;
-import android.widget.ImageView;
-
-import com.stardust.app.OnActivityResultDelegate;
-import com.stardust.pio.PFiles;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * Created by Stardust on 2017/4/3.
- */
-
-public abstract class DrawableSaver {
-
- private static final String PREFIX = "saved_drawable_";
-
- protected Drawable mOriginalDrawable;
- private Context mContext;
- private String mName;
-
- public DrawableSaver(Context context, String name, Drawable originalDrawable) {
- mContext = context;
- mName = PREFIX + name;
- mOriginalDrawable = originalDrawable;
- readImageAndApply();
- }
-
- private void readImageAndApply() {
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- InputStream inputStream = mContext.openFileInput(mName);
- Drawable drawable = BitmapDrawable.createFromStream(inputStream, mName);
- applyDrawableToView(drawable);
- } catch (FileNotFoundException e) {
-
- }
- }
- }).start();
- }
-
- public void setDrawable(InputStream inputStream) {
- saveDrawable(inputStream, new Runnable() {
- @Override
- public void run() {
- readImageAndApply();
- }
- });
- }
-
- private void saveDrawable(final InputStream inputStream, final Runnable callback) {
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- OutputStream outputStream = mContext.openFileOutput(mName, Context.MODE_PRIVATE);
- PFiles.write(inputStream, outputStream);
- outputStream.close();
- inputStream.close();
- callback.run();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }).start();
-
- }
-
- public void select(Activity activity, final OnActivityResultDelegate.Mediator mediator) {
- new ImageSelector(activity, mediator, new ImageSelector.ImageSelectorCallback() {
- @Override
- public void onImageSelected(ImageSelector selector, InputStream inputStream) {
- if (inputStream != null)
- setDrawable(inputStream);
- mediator.removeDelegate(selector);
- }
- }).select();
- }
-
- public void reset() {
- applyDrawableToView(mOriginalDrawable);
- mContext.deleteFile(mName);
- }
-
- public static void reset(Context context, String name) {
- context.deleteFile(PREFIX + name);
- }
-
- protected abstract void applyDrawableToView(Drawable drawable);
-
- public static class ViewBackgroundSaver extends DrawableSaver {
-
- private View mView;
-
- public ViewBackgroundSaver(Context activity, String name, View view) {
- super(activity, name, view.getBackground());
- mView = view;
- }
-
- @Override
- protected void applyDrawableToView(final Drawable drawable) {
- mView.post(new Runnable() {
- @Override
- public void run() {
- mView.setBackground(drawable);
- }
- });
- }
- }
-
- public static class ImageSaver extends DrawableSaver {
-
- private ImageView mView;
-
- public ImageSaver(Context activity, String name, ImageView view) {
- super(activity, name, view.getDrawable());
- mView = view;
- }
-
- @Override
- protected void applyDrawableToView(final Drawable drawable) {
- mView.post(new Runnable() {
- @Override
- public void run() {
- mView.setImageDrawable(drawable);
- }
- });
- }
- }
-}
diff --git a/app/src/main/java/com/stardust/scriptdroid/tool/ImageSelector.java b/app/src/main/java/com/stardust/scriptdroid/tool/ImageSelector.java
index 2462ac6b..56ee252e 100644
--- a/app/src/main/java/com/stardust/scriptdroid/tool/ImageSelector.java
+++ b/app/src/main/java/com/stardust/scriptdroid/tool/ImageSelector.java
@@ -2,6 +2,7 @@ package com.stardust.scriptdroid.tool;
import android.app.Activity;
import android.content.Intent;
+import android.net.Uri;
import com.stardust.app.OnActivityResultDelegate;
import com.stardust.scriptdroid.R;
@@ -16,7 +17,7 @@ import java.io.InputStream;
public class ImageSelector implements OnActivityResultDelegate {
public interface ImageSelectorCallback {
- void onImageSelected(ImageSelector selector, InputStream path);
+ void onImageSelected(ImageSelector selector, Uri uri);
}
private static final String TAG = ImageSelector.class.getSimpleName();
@@ -24,11 +25,14 @@ public class ImageSelector implements OnActivityResultDelegate {
private static final int REQUEST_CODE = "LOVE EATING".hashCode() >> 16;
private Activity mActivity;
private ImageSelectorCallback mCallback;
+ private boolean mDisposable;
+ private Mediator mMediator;
public ImageSelector(Activity activity, OnActivityResultDelegate.Mediator mediator, ImageSelectorCallback callback) {
mediator.addDelegate(REQUEST_CODE, this);
mActivity = activity;
mCallback = callback;
+ mMediator = mediator;
}
public void select() {
@@ -37,19 +41,21 @@ public class ImageSelector implements OnActivityResultDelegate {
REQUEST_CODE);
}
+ public ImageSelector disposable() {
+ mDisposable = true;
+ return this;
+ }
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (mDisposable) {
+ mMediator.removeDelegate(this);
+ }
if (data == null) {
mCallback.onImageSelected(this, null);
return;
}
- try {
- InputStream inputStream = mActivity.getContentResolver().openInputStream(data.getData());
- mCallback.onImageSelected(this, inputStream);
- } catch (FileNotFoundException e) {
- mCallback.onImageSelected(this, null);
- }
+ mCallback.onImageSelected(this, data.getData());
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/doc/DocumentationActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/doc/DocumentationActivity.java
index cc5b8bd8..25ccd572 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/doc/DocumentationActivity.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/doc/DocumentationActivity.java
@@ -1,13 +1,11 @@
package com.stardust.scriptdroid.ui.doc;
-import android.app.Activity;
import android.webkit.WebView;
import com.stardust.scriptdroid.Pref;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.ui.BaseActivity;
-import com.stardust.util.BackPressedHandler;
-import com.stardust.widget.EWebView;
+import com.stardust.scriptdroid.ui.widget.EWebView;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/doc/ManualDialog.java b/app/src/main/java/com/stardust/scriptdroid/ui/doc/ManualDialog.java
index 2062345e..39acedf0 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/doc/ManualDialog.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/doc/ManualDialog.java
@@ -9,7 +9,7 @@ import android.widget.TextView;
import com.afollestad.materialdialogs.MaterialDialog;
import com.stardust.scriptdroid.R;
-import com.stardust.widget.EWebView;
+import com.stardust.scriptdroid.ui.widget.EWebView;
import butterknife.BindView;
import butterknife.ButterKnife;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/doc/OnlineDocsFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/doc/OnlineDocsFragment.java
index df466fdd..1dc07a27 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/doc/OnlineDocsFragment.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/doc/OnlineDocsFragment.java
@@ -1,19 +1,15 @@
package com.stardust.scriptdroid.ui.doc;
import android.app.Activity;
-import android.content.Context;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
-import android.support.v4.app.Fragment;
-import android.support.v4.view.ViewPager;
-import android.view.View;
import android.webkit.WebView;
import com.stardust.scriptdroid.Pref;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.ui.main.ViewPagerFragment;
import com.stardust.util.BackPressedHandler;
-import com.stardust.widget.EWebView;
+import com.stardust.scriptdroid.ui.widget.EWebView;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditActivity.java
index 087730e9..10fa1658 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditActivity.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditActivity.java
@@ -2,20 +2,13 @@ package com.stardust.scriptdroid.ui.edit;
import android.content.Context;
import android.content.Intent;
-import android.os.Bundle;
-import android.support.annotation.NonNull;
-import android.support.v4.widget.DrawerLayout;
import android.view.Menu;
import android.view.MenuItem;
-import com.afollestad.materialdialogs.DialogAction;
-import com.afollestad.materialdialogs.MaterialDialog;
-import com.stardust.scriptdroid.Pref;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.model.script.ScriptFile;
import com.stardust.scriptdroid.ui.BaseActivity;
import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
-import com.stardust.widget.EWebView;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EActivity;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditorView.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditorView.java
index c9404ce1..787c1450 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditorView.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/edit/EditorView.java
@@ -27,8 +27,8 @@ import com.stardust.scriptdroid.ui.edit.completion.CodeCompletions;
import com.stardust.scriptdroid.ui.edit.completion.CodeCompletionBar;
import com.stardust.scriptdroid.ui.edit.completion.InputMethodEnhancedBarColors;
import com.stardust.scriptdroid.ui.edit.completion.Symbols;
-import com.stardust.widget.EWebView;
-import com.stardust.widget.ToolbarMenuItem;
+import com.stardust.scriptdroid.ui.widget.EWebView;
+import com.stardust.scriptdroid.ui.widget.ToolbarMenuItem;
import com.stardust.widget.ViewSwitcher;
import org.androidannotations.annotations.AfterViews;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/edit/ViewSampleActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/edit/ViewSampleActivity.java
index 709f0387..38867705 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/edit/ViewSampleActivity.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/edit/ViewSampleActivity.java
@@ -23,7 +23,7 @@ import com.stardust.scriptdroid.ui.common.ScriptOperations;
import com.stardust.theme.ThemeColorManager;
import com.stardust.util.AssetsCache;
import com.stardust.util.SparseArrayEntries;
-import com.stardust.widget.ToolbarMenuItem;
+import com.stardust.scriptdroid.ui.widget.ToolbarMenuItem;
import butterknife.ButterKnife;
import butterknife.OnClick;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/filechooser/FileChooseListView.java b/app/src/main/java/com/stardust/scriptdroid/ui/filechooser/FileChooseListView.java
index 31fe13d6..51f7e106 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/filechooser/FileChooseListView.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/filechooser/FileChooseListView.java
@@ -9,7 +9,6 @@ import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.CheckBox;
import android.widget.TextView;
import com.stardust.pio.PFile;
@@ -17,8 +16,8 @@ import com.stardust.pio.PFiles;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.model.script.ScriptFile;
import com.stardust.scriptdroid.ui.main.scripts.ScriptListView;
-import com.stardust.widget.BindableViewHolder;
-import com.stardust.widget.CheckBoxCompat;
+import com.stardust.scriptdroid.ui.widget.BindableViewHolder;
+import com.stardust.scriptdroid.ui.widget.CheckBoxCompat;
import java.util.ArrayList;
import java.util.LinkedHashMap;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/floating/CircularMenu.java b/app/src/main/java/com/stardust/scriptdroid/ui/floating/CircularMenu.java
index 815be886..ef8a59a5 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/floating/CircularMenu.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/floating/CircularMenu.java
@@ -80,19 +80,15 @@ public class CircularMenu implements Recorder.OnStateChangedListener {
}
private void setupListeners() {
- mWindow.setOnActionViewClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mState == STATE_RECORDING) {
- stopRecord();
- } else if (mWindow.isExpanded()) {
- mWindow.collapse();
- } else {
- AutoJs.getInstance().getLayoutInspector().captureCurrentWindow();
- mWindow.expand();
- }
+ mWindow.setOnActionViewClickListener(v -> {
+ if (mState == STATE_RECORDING) {
+ stopRecord();
+ } else if (mWindow.isExpanded()) {
+ mWindow.collapse();
+ } else {
+ AutoJs.getInstance().getLayoutInspector().captureCurrentWindow();
+ mWindow.expand();
}
-
});
}
@@ -130,12 +126,7 @@ public class CircularMenu implements Recorder.OnStateChangedListener {
.customView(listView, false)
.positiveText(R.string.cancel)
.build();
- listView.setOnItemOperatedListener(new ScriptListView.OnItemOperatedListener() {
- @Override
- public void OnItemOperated(ScriptFile file) {
- dialog.dismiss();
- }
- });
+ listView.setOnItemOperatedListener(file -> dialog.dismiss());
DialogUtils.showDialog(dialog);
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/floating/layoutinspector/LayoutBoundsFloatyWindow.java b/app/src/main/java/com/stardust/scriptdroid/ui/floating/layoutinspector/LayoutBoundsFloatyWindow.java
index 5316ee63..33641dbf 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/floating/layoutinspector/LayoutBoundsFloatyWindow.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/floating/layoutinspector/LayoutBoundsFloatyWindow.java
@@ -13,7 +13,7 @@ import com.stardust.enhancedfloaty.FloatyService;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.ui.floating.FullScreenFloatyWindow;
import com.stardust.view.accessibility.NodeInfo;
-import com.stardust.widget.BubblePopupMenu;
+import com.stardust.scriptdroid.ui.widget.BubblePopupMenu;
import java.util.Arrays;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/floating/layoutinspector/LayoutHierarchyFloatyWindow.java b/app/src/main/java/com/stardust/scriptdroid/ui/floating/layoutinspector/LayoutHierarchyFloatyWindow.java
index aba7b08f..aaf89857 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/floating/layoutinspector/LayoutHierarchyFloatyWindow.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/floating/layoutinspector/LayoutHierarchyFloatyWindow.java
@@ -11,10 +11,9 @@ import com.afollestad.materialdialogs.MaterialDialog;
import com.afollestad.materialdialogs.Theme;
import com.stardust.enhancedfloaty.FloatyService;
import com.stardust.scriptdroid.R;
-import com.stardust.scriptdroid.autojs.AutoJs;
import com.stardust.scriptdroid.ui.floating.FullScreenFloatyWindow;
import com.stardust.view.accessibility.NodeInfo;
-import com.stardust.widget.BubblePopupMenu;
+import com.stardust.scriptdroid.ui.widget.BubblePopupMenu;
import java.util.Arrays;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/floating/layoutinspector/LayoutHierarchyView.java b/app/src/main/java/com/stardust/scriptdroid/ui/floating/layoutinspector/LayoutHierarchyView.java
index 5efb03c5..9d08ff41 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/floating/layoutinspector/LayoutHierarchyView.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/floating/layoutinspector/LayoutHierarchyView.java
@@ -16,7 +16,7 @@ import android.widget.TextView;
import com.stardust.scriptdroid.R;
import com.stardust.view.accessibility.NodeInfo;
import com.stardust.util.ViewUtil;
-import com.stardust.widget.LevelBeamView;
+import com.stardust.scriptdroid.ui.widget.LevelBeamView;
import java.util.Collections;
import java.util.HashSet;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/login/LoginActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/login/LoginActivity.java
deleted file mode 100644
index 45093339..00000000
--- a/app/src/main/java/com/stardust/scriptdroid/ui/login/LoginActivity.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package com.stardust.scriptdroid.ui.login;
-
-import android.util.Log;
-import android.widget.TextView;
-
-import com.stardust.scriptdroid.R;
-import com.stardust.scriptdroid.network.NodeBB;
-import com.stardust.scriptdroid.network.api.UserApi;
-import com.stardust.scriptdroid.network.entity.VerifyResponse;
-import com.stardust.scriptdroid.tool.SimpleObserver;
-import com.stardust.scriptdroid.ui.BaseActivity;
-
-import org.androidannotations.annotations.AfterViews;
-import org.androidannotations.annotations.Click;
-import org.androidannotations.annotations.EActivity;
-import org.androidannotations.annotations.ViewById;
-
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.annotations.NonNull;
-import io.reactivex.schedulers.Schedulers;
-
-/**
- * Created by Stardust on 2017/9/20.
- */
-@EActivity(R.layout.activity_login)
-public class LoginActivity extends BaseActivity {
-
- @ViewById(R.id.username)
- TextView mUserName;
-
- @ViewById(R.id.password)
- TextView mPassword;
-
- @AfterViews
- void setUpViews() {
- setToolbarAsBack(getString(R.string.text_login));
- }
-
- @Click(R.id.login)
- void login() {
- String userName = mUserName.getText().toString();
- String password = mPassword.getText().toString();
- if (!checkNotEmpty(userName, password)) {
- return;
- }
-
- NodeBB.getInstance().getRetrofit()
- .create(UserApi.class)
- .verify(userName, password)
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new SimpleObserver() {
-
- @Override
- public void onNext(@NonNull VerifyResponse verifyResponse) {
- Log.d("Login", verifyResponse.toString());
- }
-
- @Override
- public void onError(@NonNull Throwable e) {
- e.printStackTrace();
- }
- });
- }
-
- private boolean checkNotEmpty(String userName, String password) {
- if (userName.isEmpty()) {
- mUserName.setError(getString(R.string.text_username_cannot_be_empty));
- return false;
- }
- if (password.isEmpty()) {
- mUserName.setError(getString(R.string.text_password_cannot_be_empty));
- return false;
- }
- return true;
- }
-}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java
index 40645bb7..719fd3ec 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/MainActivity.java
@@ -40,9 +40,9 @@ import com.stardust.scriptdroid.ui.BaseActivity;
import com.stardust.scriptdroid.ui.settings.SettingsActivity_;
import com.stardust.scriptdroid.ui.update.VersionGuard;
import com.stardust.util.BackPressedHandler;
-import com.stardust.view.DrawerAutoClose;
-import com.stardust.widget.CommonMarkdownView;
-import com.stardust.widget.SearchViewItem;
+import com.stardust.util.DrawerAutoClose;
+import com.stardust.scriptdroid.ui.widget.CommonMarkdownView;
+import com.stardust.scriptdroid.ui.widget.SearchViewItem;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityFragment.java
index 565f6f55..1bcff930 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityFragment.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityFragment.java
@@ -6,12 +6,10 @@ import android.support.annotation.Nullable;
import android.support.design.widget.FloatingActionButton;
import android.webkit.WebView;
-import com.stardust.scriptdroid.Pref;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.ui.main.QueryEvent;
import com.stardust.scriptdroid.ui.main.ViewPagerFragment;
import com.stardust.util.BackPressedHandler;
-import com.stardust.widget.EWebView;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
@@ -20,7 +18,6 @@ import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import java.net.URLEncoder;
-import java.util.regex.Pattern;
/**
* Created by Stardust on 2017/8/22.
@@ -92,7 +89,7 @@ public class CommunityFragment extends ViewPagerFragment implements BackPressedH
if (isInPostsPage()) {
mWebView.loadUrl("javascript:$('button[component=\"topic/reply\"]').click()");
} else {
- mWebView.loadUrl("javascript:$('.new_topic').click()");
+ mWebView.loadUrl("javascript:$('#new_topic').click()");
}
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityWebView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityWebView.java
index ef057411..f86cd4bd 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityWebView.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityWebView.java
@@ -1,25 +1,21 @@
package com.stardust.scriptdroid.ui.main.community;
import android.content.Context;
-import android.content.DialogInterface;
import android.net.Uri;
import android.support.design.widget.BottomSheetDialog;
import android.support.design.widget.Snackbar;
import android.util.AttributeSet;
import android.webkit.ValueCallback;
-import android.webkit.WebChromeClient;
import android.webkit.WebView;
-import com.stardust.pio.PFile;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.io.StorageFileProvider;
-import com.stardust.scriptdroid.model.script.ScriptFile;
import com.stardust.scriptdroid.model.script.Scripts;
import com.stardust.scriptdroid.network.download.DownloadManager;
import com.stardust.scriptdroid.ui.common.OptionListView;
import com.stardust.scriptdroid.ui.common.ScriptOperations;
import com.stardust.scriptdroid.ui.filechooser.FileChooserDialogBuilder;
-import com.stardust.widget.EWebView;
+import com.stardust.scriptdroid.ui.widget.EWebView;
import java.util.regex.Pattern;
@@ -119,19 +115,26 @@ public class CommunityWebView extends EWebView {
return super.shouldOverrideUrlLoading(view, url);
}
+ @Override
+ public void onPageFinished(WebView view, String url) {
+ evalJavaScript("$('#header').hide();$('#content').css({ top: '0', position: 'absolute' });");
+ }
}
private class MyWebChromeClient extends EWebView.MyWebChromeClient {
@Override
- public void openFileChooser(ValueCallback callback) {
+ public boolean openFileChooser(ValueCallback callback, String[] acceptType) {
+ if (super.openFileChooser(callback, acceptType)) {
+ return true;
+ }
new FileChooserDialogBuilder(getContext())
.title(R.string.text_select_file_to_upload)
.dir(StorageFileProvider.DEFAULT_DIRECTORY_PATH)
.singleChoice(file -> callback.onReceiveValue(Uri.fromFile(file)))
.cancelListener(dialog -> callback.onReceiveValue(null))
.show();
+ return true;
}
-
}
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java
index 222ee25b..316ba074 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerFragment.java
@@ -1,31 +1,40 @@
package com.stardust.scriptdroid.ui.main.drawer;
-import android.content.DialogInterface;
+import android.content.Intent;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
-import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.text.TextUtils;
import android.view.View;
-import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
-import com.afollestad.materialdialogs.DialogAction;
import com.afollestad.materialdialogs.MaterialDialog;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.bumptech.glide.request.target.SimpleTarget;
+import com.bumptech.glide.request.transition.Transition;
import com.stardust.scriptdroid.App;
import com.stardust.scriptdroid.Pref;
import com.stardust.scriptdroid.R;
+import com.stardust.scriptdroid.network.GlideApp;
+import com.stardust.scriptdroid.network.UserService;
import com.stardust.scriptdroid.ui.floating.CircularMenu;
import com.stardust.scriptdroid.ui.floating.FloatyWindowManger;
import com.stardust.scriptdroid.network.NodeBB;
import com.stardust.scriptdroid.network.VersionService;
import com.stardust.scriptdroid.network.api.UserApi;
-import com.stardust.scriptdroid.network.entity.User;
+import com.stardust.scriptdroid.network.entity.user.User;
import com.stardust.scriptdroid.network.entity.VersionInfo;
import com.stardust.scriptdroid.tool.SimpleObserver;
-import com.stardust.scriptdroid.ui.login.LoginActivity_;
+import com.stardust.scriptdroid.ui.user.LoginActivity_;
import com.stardust.scriptdroid.ui.settings.SettingsActivity;
import com.stardust.scriptdroid.ui.update.UpdateInfoDialogBuilder;
+import com.stardust.scriptdroid.ui.user.WebActivity;
+import com.stardust.scriptdroid.ui.user.WebActivity_;
+import com.stardust.scriptdroid.ui.widget.AvatarView;
import com.stardust.theme.ThemeColorManager;
+import com.stardust.theme.ThemeColorManagerCompat;
import com.stardust.view.accessibility.AccessibilityService;
import com.stardust.scriptdroid.sublime.SublimePluginService;
import com.stardust.scriptdroid.tool.AccessibilityServiceTool;
@@ -39,12 +48,9 @@ import org.androidannotations.annotations.ViewById;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
-import java.util.concurrent.Callable;
-
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
-import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
@@ -75,7 +81,13 @@ public class DrawerFragment extends android.support.v4.app.Fragment {
TextView mUserName;
@ViewById(R.id.avatar)
- ImageView mAvatar;
+ AvatarView mAvatar;
+
+ @ViewById(R.id.shadow)
+ View mShadow;
+
+ @ViewById(R.id.default_cover)
+ View mDefaultCover;
private Disposable mConnectionStateDisposable;
@@ -114,26 +126,60 @@ public class DrawerFragment extends android.support.v4.app.Fragment {
.me()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
- .subscribe(new SimpleObserver() {
- @Override
- public void onNext(@io.reactivex.annotations.NonNull User user) {
- setUpUserInfo(user);
- }
-
- @Override
- public void onError(@io.reactivex.annotations.NonNull Throwable e) {
- e.printStackTrace();
- }
+ .subscribe(this::setUpUserInfo, error -> {
+ error.printStackTrace();
+ setUpUserInfo(null);
});
}
- private void setUpUserInfo(User user) {
- mUserName.setText(user.getUsername());
+ private void setUpUserInfo(@Nullable User user) {
+ if (user == null) {
+ mUserName.setText(R.string.not_login);
+ mAvatar.setIcon(R.drawable.profile_avatar_placeholder);
+ } else {
+ mUserName.setText(user.getUsername());
+ mAvatar.setUser(user);
+ }
+ setCoverImage(user);
+
+
+ }
+
+ private void setCoverImage(User user) {
+ if (user == null || TextUtils.isEmpty(user.getCoverUrl()) || user.getCoverUrl().equals("/assets/images/cover-default.png")) {
+ mDefaultCover.setVisibility(View.VISIBLE);
+ mShadow.setVisibility(View.GONE);
+ mHeaderView.setBackgroundColor(ThemeColorManagerCompat.getColorPrimary());
+ } else {
+ mDefaultCover.setVisibility(View.GONE);
+ mShadow.setVisibility(View.VISIBLE);
+ GlideApp.with(getContext())
+ .load(NodeBB.BASE_URL + user.getCoverUrl())
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
+ .into(new SimpleTarget() {
+ @Override
+ public void onResourceReady(Drawable resource, Transition super Drawable> transition) {
+ mHeaderView.setBackground(resource);
+ }
+ });
+ }
}
@Click(R.id.avatar)
void loginOrShowUserInfo() {
- LoginActivity_.intent(getActivity()).start();
+ NodeBB.getInstance().getRetrofit()
+ .create(UserApi.class)
+ .me()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe((user -> {
+ WebActivity_.intent(this)
+ .extra(WebActivity.EXTRA_URL, NodeBB.url("user/" + user.getUserslug()))
+ .extra(Intent.EXTRA_TITLE, user.getUsername())
+ .start();
+ }), error -> {
+ LoginActivity_.intent(getActivity()).start();
+ });
}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuItem.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuItem.java
index d8748827..270a7408 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuItem.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/drawer/DrawerMenuItem.java
@@ -7,7 +7,6 @@ import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.util.AttributeSet;
import android.view.View;
-import android.widget.AutoCompleteTextView;
import android.widget.CompoundButton;
import android.widget.FrameLayout;
import android.widget.ImageView;
@@ -15,8 +14,8 @@ import android.widget.TextView;
import android.widget.Toast;
import com.stardust.scriptdroid.R;
-import com.stardust.widget.PrefSwitch;
-import com.stardust.widget.SwitchCompat;
+import com.stardust.scriptdroid.ui.widget.PrefSwitch;
+import com.stardust.scriptdroid.ui.widget.SwitchCompat;
import butterknife.BindView;
import butterknife.ButterKnife;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListView.java
index eb1eb031..1a763414 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListView.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListView.java
@@ -27,7 +27,7 @@ import com.stardust.scriptdroid.ui.common.ScriptLoopDialog;
import com.stardust.scriptdroid.ui.common.ScriptOperations;
import com.stardust.scriptdroid.ui.floating.EditorFloaty;
import com.stardust.scriptdroid.ui.viewmodel.ScriptList;
-import com.stardust.widget.BindableViewHolder;
+import com.stardust.scriptdroid.ui.widget.BindableViewHolder;
import org.greenrobot.eventbus.Subscribe;
@@ -307,7 +307,6 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
@Override
public void onBindViewHolder(BindableViewHolder> holder, int position) {
int positionOfCategoryFile = positionOfCategoryFile();
- Log.d(LOG_TAG, String.format("view holder = %s, pos = %d, posOfCategory = %d, size = %d", holder.getClass().toString(), position, positionOfCategoryFile, mScriptList.count()));
BindableViewHolder bindableViewHolder = (BindableViewHolder) holder;
if (position == positionOfCategoryDir || position == positionOfCategoryFile) {
// FIXME: 2017/10/20 java.lang.ClassCastException: java.lang.Boolean cannot be cast to com.stardust.scriptdroid.model.script.ScriptFile
@@ -323,17 +322,14 @@ public class ScriptListView extends SwipeRefreshLayout implements SwipeRefreshLa
@Override
public int getItemViewType(int position) {
- int viewType;
int positionOfCategoryFile = positionOfCategoryFile();
if (position == positionOfCategoryDir || position == positionOfCategoryFile) {
- viewType = VIEW_TYPE_CATEGORY;
+ return VIEW_TYPE_CATEGORY;
} else if (position < positionOfCategoryFile) {
- viewType = VIEW_TYPE_DIRECTORY;
+ return VIEW_TYPE_DIRECTORY;
} else {
- viewType = VIEW_TYPE_FILE;
+ return VIEW_TYPE_FILE;
}
- Log.d(LOG_TAG, String.format("view type = %d, pos = %d, posOfCategory = %d, size = %d", viewType, position, positionOfCategoryFile, mScriptList.count()));
- return viewType;
}
@Override
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/main/task/TaskManagerFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/task/TaskManagerFragment.java
index 25eeb875..45b9396e 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/main/task/TaskManagerFragment.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/main/task/TaskManagerFragment.java
@@ -13,7 +13,7 @@ import com.stardust.autojs.core.console.StardustConsole;
import com.stardust.scriptdroid.R;
import com.stardust.scriptdroid.autojs.AutoJs;
import com.stardust.scriptdroid.ui.main.ViewPagerFragment;
-import com.stardust.widget.SimpleAdapterDataObserver;
+import com.stardust.scriptdroid.ui.widget.SimpleAdapterDataObserver;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Click;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/update/UpdateInfoDialogBuilder.java b/app/src/main/java/com/stardust/scriptdroid/ui/update/UpdateInfoDialogBuilder.java
index baa4111b..1df1ea04 100644
--- a/app/src/main/java/com/stardust/scriptdroid/ui/update/UpdateInfoDialogBuilder.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/update/UpdateInfoDialogBuilder.java
@@ -21,7 +21,7 @@ import com.stardust.scriptdroid.io.StorageFileProvider;
import com.stardust.scriptdroid.tool.IntentTool;
import com.stardust.util.DownloadTask;
import com.stardust.util.IntentUtil;
-import com.stardust.widget.CommonMarkdownView;
+import com.stardust.scriptdroid.ui.widget.CommonMarkdownView;
/**
* Created by Stardust on 2017/4/9.
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/user/LoginActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/user/LoginActivity.java
new file mode 100644
index 00000000..4661d02c
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/user/LoginActivity.java
@@ -0,0 +1,104 @@
+package com.stardust.scriptdroid.ui.user;
+
+import android.annotation.SuppressLint;
+import android.content.Intent;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.afollestad.materialdialogs.MaterialDialog;
+import com.stardust.scriptdroid.R;
+import com.stardust.scriptdroid.network.NodeBB;
+import com.stardust.scriptdroid.network.UserService;
+import com.stardust.scriptdroid.ui.BaseActivity;
+
+import org.androidannotations.annotations.AfterViews;
+import org.androidannotations.annotations.Click;
+import org.androidannotations.annotations.EActivity;
+import org.androidannotations.annotations.ViewById;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * Created by Stardust on 2017/9/20.
+ */
+@EActivity(R.layout.activity_login)
+public class LoginActivity extends BaseActivity {
+
+ @ViewById(R.id.username)
+ TextView mUserName;
+
+ @ViewById(R.id.password)
+ TextView mPassword;
+
+ @AfterViews
+ void setUpViews() {
+ setToolbarAsBack(getString(R.string.text_login));
+ }
+
+ @Click(R.id.login)
+ void login() {
+ String userName = mUserName.getText().toString();
+ String password = mPassword.getText().toString();
+ if (!checkNotEmpty(userName, password)) {
+ return;
+ }
+ MaterialDialog dialog = new MaterialDialog.Builder(this)
+ .progress(true, 0)
+ .content(R.string.text_logining)
+ .cancelable(false)
+ .show();
+ UserService.getInstance().login(userName, password)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(response -> {
+ dialog.dismiss();
+ Toast.makeText(getApplicationContext(), R.string.text_login_succeed, Toast.LENGTH_SHORT).show();
+ finish();
+ }
+ , error -> {
+ dialog.dismiss();
+ mPassword.setError(getString(R.string.text_login_fail));
+ error.printStackTrace();
+ });
+
+ }
+
+ @Click(R.id.forgot_password)
+ void forgotPassword() {
+ WebActivity_.intent(this)
+ .extra(WebActivity.EXTRA_URL, NodeBB.BASE_URL + "reset")
+ .extra(Intent.EXTRA_TITLE, getString(R.string.text_reset_password))
+ .start();
+ }
+
+ private boolean checkNotEmpty(String userName, String password) {
+ if (userName.isEmpty()) {
+ mUserName.setError(getString(R.string.text_username_cannot_be_empty));
+ return false;
+ }
+ if (password.isEmpty()) {
+ mUserName.setError(getString(R.string.text_password_cannot_be_empty));
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.menu_login, menu);
+ return true;
+ }
+
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == R.id.action_register) {
+ RegisterActivity_.intent(this).start();
+ finish();
+ }
+ return super.onOptionsItemSelected(item);
+ }
+}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/user/RegisterActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/user/RegisterActivity.java
new file mode 100644
index 00000000..33aaad4a
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/user/RegisterActivity.java
@@ -0,0 +1,93 @@
+package com.stardust.scriptdroid.ui.user;
+
+import android.util.Log;
+import android.util.Patterns;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.afollestad.materialdialogs.MaterialDialog;
+import com.stardust.scriptdroid.R;
+import com.stardust.scriptdroid.network.UserService;
+import com.stardust.scriptdroid.ui.BaseActivity;
+
+import org.androidannotations.annotations.AfterViews;
+import org.androidannotations.annotations.Click;
+import org.androidannotations.annotations.EActivity;
+import org.androidannotations.annotations.ViewById;
+
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.schedulers.Schedulers;
+
+/**
+ * Created by Stardust on 2017/10/26.
+ */
+@EActivity(R.layout.activity_register)
+public class RegisterActivity extends BaseActivity {
+
+ @ViewById(R.id.email)
+ TextView mEmail;
+
+ @ViewById(R.id.username)
+ TextView mUserName;
+
+ @ViewById(R.id.password)
+ TextView mPassword;
+
+ @AfterViews
+ void setUpViews() {
+ setToolbarAsBack(getString(R.string.text_register));
+ }
+
+ @Click(R.id.register)
+ void login() {
+ String email = mEmail.getText().toString();
+ String userName = mUserName.getText().toString();
+ String password = mPassword.getText().toString();
+ if (!validateInput(email, userName, password)) {
+ return;
+ }
+ MaterialDialog dialog = new MaterialDialog.Builder(this)
+ .progress(true, 0)
+ .content(R.string.text_registering)
+ .cancelable(false)
+ .show();
+ UserService.getInstance().register(email, userName, password)
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(response -> {
+ dialog.dismiss();
+ onRegisterResponse(response.string());
+ }
+ , error -> {
+ dialog.dismiss();
+ mPassword.setError(getString(R.string.text_register_fail));
+ error.printStackTrace();
+ });
+
+ }
+
+ private void onRegisterResponse(String res) {
+ Toast.makeText(this, R.string.text_register_succeed, Toast.LENGTH_SHORT).show();
+ finish();
+ }
+
+ private boolean validateInput(String email, String userName, String password) {
+ if (email.isEmpty()) {
+ mEmail.setError(getString(R.string.text_email_cannot_be_empty));
+ return false;
+ }
+ if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
+ mEmail.setError(getString(R.string.text_email_format_error));
+ return false;
+ }
+ if (userName.isEmpty()) {
+ mUserName.setError(getString(R.string.text_username_cannot_be_empty));
+ return false;
+ }
+ if (password.isEmpty()) {
+ mUserName.setError(getString(R.string.text_password_cannot_be_empty));
+ return false;
+ }
+ return true;
+ }
+}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/user/UserDetailActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/user/UserDetailActivity.java
new file mode 100644
index 00000000..24801477
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/user/UserDetailActivity.java
@@ -0,0 +1,11 @@
+package com.stardust.scriptdroid.ui.user;
+
+import com.stardust.scriptdroid.ui.BaseActivity;
+
+/**
+ * Created by Stardust on 2017/10/26.
+ */
+
+public class UserDetailActivity extends WebActivity {
+
+}
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/user/WebActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/user/WebActivity.java
new file mode 100644
index 00000000..d7f5905d
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/user/WebActivity.java
@@ -0,0 +1,44 @@
+package com.stardust.scriptdroid.ui.user;
+
+import android.content.Intent;
+import android.support.annotation.NonNull;
+
+import com.stardust.app.OnActivityResultDelegate;
+import com.stardust.scriptdroid.R;
+import com.stardust.scriptdroid.ui.BaseActivity;
+import com.stardust.scriptdroid.ui.widget.EWebView;
+
+import org.androidannotations.annotations.AfterViews;
+import org.androidannotations.annotations.EActivity;
+import org.androidannotations.annotations.ViewById;
+
+/**
+ * Created by Stardust on 2017/10/26.
+ */
+@EActivity(R.layout.activity_web)
+public class WebActivity extends BaseActivity implements OnActivityResultDelegate.DelegateHost {
+
+ public static final String EXTRA_URL = "url";
+
+ private OnActivityResultDelegate.Mediator mMediator = new OnActivityResultDelegate.Mediator();
+
+ @ViewById(R.id.eweb_view)
+ EWebView mEWebView;
+
+ @AfterViews
+ void setupViews() {
+ setToolbarAsBack(getIntent().getStringExtra(Intent.EXTRA_TITLE));
+ mEWebView.getWebView().loadUrl(getIntent().getStringExtra(EXTRA_URL));
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ mMediator.onActivityResult(requestCode, resultCode, data);
+ }
+
+ @NonNull
+ @Override
+ public OnActivityResultDelegate.Mediator getOnActivityResultDelegateMediator() {
+ return mMediator;
+ }
+}
diff --git a/app/src/main/java/com/stardust/widget/AppWithStatusBarLayout.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/AppWithStatusBarLayout.java
similarity index 98%
rename from app/src/main/java/com/stardust/widget/AppWithStatusBarLayout.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/AppWithStatusBarLayout.java
index 0d4f7aa4..ab35f03e 100644
--- a/app/src/main/java/com/stardust/widget/AppWithStatusBarLayout.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/AppWithStatusBarLayout.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.app.Activity;
import android.content.Context;
diff --git a/app/src/main/java/com/stardust/widget/AutoAdapter.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/AutoAdapter.java
similarity index 97%
rename from app/src/main/java/com/stardust/widget/AutoAdapter.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/AutoAdapter.java
index e3453724..49778a3c 100644
--- a/app/src/main/java/com/stardust/widget/AutoAdapter.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/AutoAdapter.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/widget/AvatarView.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/AvatarView.java
new file mode 100644
index 00000000..ded4b63d
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/AvatarView.java
@@ -0,0 +1,92 @@
+package com.stardust.scriptdroid.ui.widget;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.GradientDrawable;
+import android.support.annotation.AttrRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.engine.DiskCacheStrategy;
+import com.makeramen.roundedimageview.RoundedImageView;
+import com.nickandjerry.dynamiclayoutinflator.lib.DynamicLayoutInflator;
+import com.stardust.scriptdroid.R;
+import com.stardust.scriptdroid.network.GlideApp;
+import com.stardust.scriptdroid.network.Glides;
+import com.stardust.scriptdroid.network.NodeBB;
+import com.stardust.scriptdroid.network.entity.user.User;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
+ * Created by 婷 on 2017/9/29.
+ */
+
+public class AvatarView extends FrameLayout {
+
+ @BindView(R.id.icon_text)
+ TextView mIconText;
+
+ @BindView(R.id.icon)
+ RoundedImageView mIcon;
+
+ private GradientDrawable mIconTextBackground;
+
+
+ public AvatarView(@NonNull Context context) {
+ super(context);
+ init();
+ }
+
+ public AvatarView(@NonNull Context context, @Nullable AttributeSet attrs) {
+ super(context, attrs);
+ init();
+ }
+
+ public AvatarView(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ init();
+ }
+
+ private void init() {
+ inflate(getContext(), R.layout.avatar_view, this);
+ ButterKnife.bind(this);
+ mIconTextBackground = (GradientDrawable) mIconText.getBackground();
+ }
+
+ public void setIcon(int resId) {
+ mIcon.setVisibility(View.VISIBLE);
+ mIconText.setVisibility(View.GONE);
+ mIcon.setImageResource(resId);
+ }
+
+ public void setUser(final User user) {
+ if (TextUtils.isEmpty(user.getPicture())) {
+ mIcon.setVisibility(View.GONE);
+ mIconText.setVisibility(View.VISIBLE);
+ mIconTextBackground.setColor(Color.parseColor(user.getIconBgColor()));
+ mIconTextBackground.setCornerRadius(getWidth() / 2);
+ mIconText.setText(user.getIconText());
+ } else {
+ mIcon.setVisibility(View.VISIBLE);
+ mIconText.setVisibility(View.GONE);
+ mIcon.setCornerRadius(getWidth() / 2);
+ GlideApp.with(getContext())
+ .load(NodeBB.BASE_URL + user.getPicture())
+ .diskCacheStrategy(DiskCacheStrategy.NONE)
+ .skipMemoryCache(true)
+ .into(mIcon);
+ }
+ }
+}
+
diff --git a/app/src/main/java/com/stardust/widget/BindableViewHolder.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/BindableViewHolder.java
similarity index 88%
rename from app/src/main/java/com/stardust/widget/BindableViewHolder.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/BindableViewHolder.java
index 308e3ca6..c1305d96 100644
--- a/app/src/main/java/com/stardust/widget/BindableViewHolder.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/BindableViewHolder.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.support.v7.widget.RecyclerView;
import android.view.View;
diff --git a/app/src/main/java/com/stardust/widget/BubblePopupMenu.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/BubblePopupMenu.java
similarity index 98%
rename from app/src/main/java/com/stardust/widget/BubblePopupMenu.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/BubblePopupMenu.java
index a3f98075..47fad986 100644
--- a/app/src/main/java/com/stardust/widget/BubblePopupMenu.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/BubblePopupMenu.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.content.Context;
import android.graphics.Color;
diff --git a/app/src/main/java/com/stardust/widget/CheckBoxCompat.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/CheckBoxCompat.java
similarity index 96%
rename from app/src/main/java/com/stardust/widget/CheckBoxCompat.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/CheckBoxCompat.java
index 7ab06388..212f3c01 100644
--- a/app/src/main/java/com/stardust/widget/CheckBoxCompat.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/CheckBoxCompat.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.content.Context;
import android.support.v7.widget.AppCompatCheckBox;
diff --git a/app/src/main/java/com/stardust/widget/CommonMarkdownView.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/CommonMarkdownView.java
similarity index 98%
rename from app/src/main/java/com/stardust/widget/CommonMarkdownView.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/CommonMarkdownView.java
index 408f630a..d87bbfad 100644
--- a/app/src/main/java/com/stardust/widget/CommonMarkdownView.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/CommonMarkdownView.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.content.Context;
import android.content.Intent;
@@ -12,7 +12,6 @@ import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;
-import com.afollestad.materialdialogs.MaterialDialog;
import com.stardust.theme.dialog.ThemeColorMaterialDialogBuilder;
import org.commonmark.ext.heading.anchor.HeadingAnchorExtension;
diff --git a/app/src/main/java/com/stardust/widget/EWebView.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java
similarity index 61%
rename from app/src/main/java/com/stardust/widget/EWebView.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java
index 980b5152..2088033a 100644
--- a/app/src/main/java/com/stardust/widget/EWebView.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java
@@ -1,6 +1,7 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.annotation.SuppressLint;
+import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
@@ -18,19 +19,35 @@ import android.webkit.WebViewClient;
import android.widget.FrameLayout;
import android.widget.ProgressBar;
+import com.stardust.app.OnActivityResultDelegate;
import com.stardust.scriptdroid.R;
+import com.stardust.scriptdroid.tool.ImageSelector;
+import com.stardust.util.IntentUtil;
+import org.androidannotations.annotations.OnActivityResult;
import org.androidannotations.annotations.ViewById;
+import java.io.File;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import io.reactivex.Observable;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+
/**
* Created by Stardust on 2017/8/22.
*/
-public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefreshListener {
+public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefreshListener, OnActivityResultDelegate {
+
+ private static final List IMAGE_TYPES = Arrays.asList("png", "jpg", "bmp");
+ private static final int CHOOSE_IMAGE = 42222;
private WebView mWebView;
private ProgressBar mProgressBar;
- SwipeRefreshLayout mSwipeRefreshLayout;
+ private SwipeRefreshLayout mSwipeRefreshLayout;
public EWebView(Context context) {
super(context);
@@ -46,8 +63,8 @@ public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefres
private void init() {
inflate(getContext(), R.layout.ewebview, this);
mWebView = (WebView) findViewById(R.id.web_view);
- mProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
+ mProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
mSwipeRefreshLayout.setOnRefreshListener(this);
setUpWebView();
}
@@ -69,9 +86,26 @@ public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefres
return mWebView;
}
+ public void evalJavaScript(String script) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ mWebView.evaluateJavascript(script, null);
+ } else {
+ mWebView.loadUrl("javascript:" + script);
+ }
+ }
+
@Override
public void onRefresh() {
mWebView.reload();
+ Observable.timer(2, TimeUnit.SECONDS)
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(t -> mSwipeRefreshLayout.setRefreshing(false));
+
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+
}
protected class MyWebChromeClient extends WebChromeClient {
@@ -82,25 +116,28 @@ public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefres
mProgressBar.setProgress(newProgress);
}
-
- // For Android < 3.0
- public void openFileChooser(ValueCallback valueCallback) {
-
- }
-
- // For Android >= 3.0
- @SuppressWarnings("unchecked")
- public void openFileChooser(ValueCallback valueCallback, String acceptType) {
- openFileChooser(valueCallback);
- }
-
//For Android >= 4.1
public void openFileChooser(ValueCallback valueCallback,
String acceptType, String capture) {
- openFileChooser(valueCallback);
+ if (acceptType == null) {
+ openFileChooser(valueCallback, null);
+ } else {
+ openFileChooser(valueCallback, acceptType.split(","));
+ }
+ }
+
+ public boolean openFileChooser(ValueCallback valueCallback,
+ String[] acceptType) {
+ if (getContext() instanceof OnActivityResultDelegate.DelegateHost &&
+ getContext() instanceof Activity && isImageType(acceptType)) {
+ chooseImage(valueCallback);
+ return true;
+ }
+ return false;
}
// For Android >= 5.0
+ @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onShowFileChooser(WebView webView,
ValueCallback filePathCallback,
@@ -111,9 +148,34 @@ public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefres
} else {
filePathCallback.onReceiveValue(new Uri[]{value});
}
- });
+ }, fileChooserParams.getAcceptTypes());
return true;
}
+
+
+ }
+
+ private void chooseImage(ValueCallback valueCallback) {
+ DelegateHost delegateHost = ((OnActivityResultDelegate.DelegateHost) getContext());
+ Mediator mediator = delegateHost.getOnActivityResultDelegateMediator();
+ Activity activity = (Activity) getContext();
+ new ImageSelector(activity, mediator, (selector, uri) -> valueCallback.onReceiveValue(uri))
+ .disposable()
+ .select();
+ }
+
+ private boolean isImageType(String[] acceptTypes) {
+ if (acceptTypes == null) {
+ return false;
+ }
+ for (String acceptType : acceptTypes) {
+ for (String imageType : IMAGE_TYPES) {
+ if (acceptType.contains(imageType)) {
+ return true;
+ }
+ }
+ }
+ return false;
}
protected class MyWebViewClient extends WebViewClient {
diff --git a/app/src/main/java/com/stardust/widget/ExpandableRecyclerView.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/ExpandableRecyclerView.java
similarity index 99%
rename from app/src/main/java/com/stardust/widget/ExpandableRecyclerView.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/ExpandableRecyclerView.java
index 685d2985..ae11a8c0 100644
--- a/app/src/main/java/com/stardust/widget/ExpandableRecyclerView.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/ExpandableRecyclerView.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.content.Context;
import android.support.annotation.Nullable;
diff --git a/app/src/main/java/com/stardust/widget/ItemTouchHelperSimpleCallback.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/ItemTouchHelperSimpleCallback.java
similarity index 95%
rename from app/src/main/java/com/stardust/widget/ItemTouchHelperSimpleCallback.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/ItemTouchHelperSimpleCallback.java
index d294749f..4be0c29b 100644
--- a/app/src/main/java/com/stardust/widget/ItemTouchHelperSimpleCallback.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/ItemTouchHelperSimpleCallback.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
diff --git a/app/src/main/java/com/stardust/widget/LevelBeamView.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/LevelBeamView.java
similarity index 98%
rename from app/src/main/java/com/stardust/widget/LevelBeamView.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/LevelBeamView.java
index 5f0f1bbb..daabbf49 100644
--- a/app/src/main/java/com/stardust/widget/LevelBeamView.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/LevelBeamView.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.content.Context;
import android.graphics.Canvas;
diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/widget/NestedWebView.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/NestedWebView.java
new file mode 100644
index 00000000..b8e7bfc7
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/NestedWebView.java
@@ -0,0 +1,141 @@
+package com.stardust.scriptdroid.ui.widget;/*
+ * Copyright (C) 2015 takahirom
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+import android.content.Context;
+import android.support.v4.view.MotionEventCompat;
+import android.support.v4.view.NestedScrollingChild;
+import android.support.v4.view.NestedScrollingChildHelper;
+import android.support.v4.view.ViewCompat;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.webkit.WebView;
+
+public class NestedWebView extends WebView implements NestedScrollingChild {
+ private int mLastY;
+ private final int[] mScrollOffset = new int[2];
+ private final int[] mScrollConsumed = new int[2];
+ private int mNestedOffsetY;
+ private NestedScrollingChildHelper mChildHelper;
+
+ public NestedWebView(Context context) {
+ this(context, null);
+ }
+
+ public NestedWebView(Context context, AttributeSet attrs) {
+ this(context, attrs, android.R.attr.webViewStyle);
+ }
+
+ public NestedWebView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ mChildHelper = new NestedScrollingChildHelper(this);
+ setNestedScrollingEnabled(true);
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ boolean returnValue = false;
+
+ MotionEvent event = MotionEvent.obtain(ev);
+ final int action = MotionEventCompat.getActionMasked(event);
+ if (action == MotionEvent.ACTION_DOWN) {
+ mNestedOffsetY = 0;
+ }
+ int eventY = (int) event.getY();
+ event.offsetLocation(0, mNestedOffsetY);
+ switch (action) {
+ case MotionEvent.ACTION_MOVE:
+ int deltaY = mLastY - eventY;
+ // NestedPreScroll
+ if (dispatchNestedPreScroll(0, deltaY, mScrollConsumed, mScrollOffset)) {
+ deltaY -= mScrollConsumed[1];
+ mLastY = eventY - mScrollOffset[1];
+ event.offsetLocation(0, -mScrollOffset[1]);
+ mNestedOffsetY += mScrollOffset[1];
+ }
+ returnValue = super.onTouchEvent(event);
+
+ // NestedScroll
+ if (dispatchNestedScroll(0, mScrollOffset[1], 0, deltaY, mScrollOffset)) {
+ event.offsetLocation(0, mScrollOffset[1]);
+ mNestedOffsetY += mScrollOffset[1];
+ mLastY -= mScrollOffset[1];
+ }
+ break;
+ case MotionEvent.ACTION_DOWN:
+ returnValue = super.onTouchEvent(event);
+ mLastY = eventY;
+ // start NestedScroll
+ startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL);
+ break;
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_CANCEL:
+ returnValue = super.onTouchEvent(event);
+ // end NestedScroll
+ stopNestedScroll();
+ break;
+ }
+ return returnValue;
+ }
+
+ // Nested Scroll implements
+ @Override
+ public void setNestedScrollingEnabled(boolean enabled) {
+ mChildHelper.setNestedScrollingEnabled(enabled);
+ }
+
+ @Override
+ public boolean isNestedScrollingEnabled() {
+ return mChildHelper.isNestedScrollingEnabled();
+ }
+
+ @Override
+ public boolean startNestedScroll(int axes) {
+ return mChildHelper.startNestedScroll(axes);
+ }
+
+ @Override
+ public void stopNestedScroll() {
+ mChildHelper.stopNestedScroll();
+ }
+
+ @Override
+ public boolean hasNestedScrollingParent() {
+ return mChildHelper.hasNestedScrollingParent();
+ }
+
+ @Override
+ public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed,
+ int[] offsetInWindow) {
+ return mChildHelper.dispatchNestedScroll(dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, offsetInWindow);
+ }
+
+ @Override
+ public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) {
+ return mChildHelper.dispatchNestedPreScroll(dx, dy, consumed, offsetInWindow);
+ }
+
+ @Override
+ public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) {
+ return mChildHelper.dispatchNestedFling(velocityX, velocityY, consumed);
+ }
+
+ @Override
+ public boolean dispatchNestedPreFling(float velocityX, float velocityY) {
+ return mChildHelper.dispatchNestedPreFling(velocityX, velocityY);
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/stardust/widget/OnItemClickListener.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/OnItemClickListener.java
similarity index 84%
rename from app/src/main/java/com/stardust/widget/OnItemClickListener.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/OnItemClickListener.java
index 15a3abdf..834369d7 100644
--- a/app/src/main/java/com/stardust/widget/OnItemClickListener.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/OnItemClickListener.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.support.v7.widget.RecyclerView;
import android.view.View;
diff --git a/app/src/main/java/com/stardust/widget/PrefSwitch.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/PrefSwitch.java
similarity index 96%
rename from app/src/main/java/com/stardust/widget/PrefSwitch.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/PrefSwitch.java
index 7aae68ec..f71901dc 100644
--- a/app/src/main/java/com/stardust/widget/PrefSwitch.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/PrefSwitch.java
@@ -1,12 +1,10 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.TypedArray;
import android.preference.PreferenceManager;
-import android.support.annotation.IntDef;
import android.util.AttributeSet;
-import android.view.View;
import com.stardust.scriptdroid.R;
diff --git a/app/src/main/java/com/stardust/widget/ScrollAwareFABBehavior.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/ScrollAwareFABBehavior.java
similarity index 98%
rename from app/src/main/java/com/stardust/widget/ScrollAwareFABBehavior.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/ScrollAwareFABBehavior.java
index ba7e49f9..fed1fde4 100644
--- a/app/src/main/java/com/stardust/widget/ScrollAwareFABBehavior.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/ScrollAwareFABBehavior.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
diff --git a/app/src/main/java/com/stardust/widget/SearchViewItem.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/SearchViewItem.java
similarity index 97%
rename from app/src/main/java/com/stardust/widget/SearchViewItem.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/SearchViewItem.java
index a95acd4b..31661666 100644
--- a/app/src/main/java/com/stardust/widget/SearchViewItem.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/SearchViewItem.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.app.Activity;
import android.app.SearchManager;
diff --git a/app/src/main/java/com/stardust/widget/SimpleAdapterDataObserver.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/SimpleAdapterDataObserver.java
similarity index 94%
rename from app/src/main/java/com/stardust/widget/SimpleAdapterDataObserver.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/SimpleAdapterDataObserver.java
index 4f4aa844..f5439cd1 100644
--- a/app/src/main/java/com/stardust/widget/SimpleAdapterDataObserver.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/SimpleAdapterDataObserver.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.support.v7.widget.RecyclerView;
diff --git a/app/src/main/java/com/stardust/widget/SimpleRecyclerViewAdapter.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/SimpleRecyclerViewAdapter.java
similarity index 97%
rename from app/src/main/java/com/stardust/widget/SimpleRecyclerViewAdapter.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/SimpleRecyclerViewAdapter.java
index 87117611..3873f7c9 100644
--- a/app/src/main/java/com/stardust/widget/SimpleRecyclerViewAdapter.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/SimpleRecyclerViewAdapter.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
diff --git a/app/src/main/java/com/stardust/widget/SlidingUpPanel.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/SlidingUpPanel.java
similarity index 98%
rename from app/src/main/java/com/stardust/widget/SlidingUpPanel.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/SlidingUpPanel.java
index a3ba7e84..f617125a 100644
--- a/app/src/main/java/com/stardust/widget/SlidingUpPanel.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/SlidingUpPanel.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.annotation.TargetApi;
import android.content.Context;
diff --git a/app/src/main/java/com/stardust/widget/SwitchCompat.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/SwitchCompat.java
similarity index 96%
rename from app/src/main/java/com/stardust/widget/SwitchCompat.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/SwitchCompat.java
index f217a46f..96d90157 100644
--- a/app/src/main/java/com/stardust/widget/SwitchCompat.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/SwitchCompat.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.content.Context;
import android.util.AttributeSet;
diff --git a/app/src/main/java/com/stardust/widget/ToolbarMenuItem.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/ToolbarMenuItem.java
similarity index 98%
rename from app/src/main/java/com/stardust/widget/ToolbarMenuItem.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/ToolbarMenuItem.java
index 526d3c4a..749a91e0 100644
--- a/app/src/main/java/com/stardust/widget/ToolbarMenuItem.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/ToolbarMenuItem.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.annotation.TargetApi;
import android.content.Context;
diff --git a/app/src/main/java/com/stardust/widget/ViewHolderMutableAdapter.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/ViewHolderMutableAdapter.java
similarity index 94%
rename from app/src/main/java/com/stardust/widget/ViewHolderMutableAdapter.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/ViewHolderMutableAdapter.java
index a451cc91..a9617831 100644
--- a/app/src/main/java/com/stardust/widget/ViewHolderMutableAdapter.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/ViewHolderMutableAdapter.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.support.v7.widget.RecyclerView;
import android.view.ViewGroup;
diff --git a/app/src/main/java/com/stardust/widget/ViewHolderSupplier.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/ViewHolderSupplier.java
similarity index 92%
rename from app/src/main/java/com/stardust/widget/ViewHolderSupplier.java
rename to app/src/main/java/com/stardust/scriptdroid/ui/widget/ViewHolderSupplier.java
index 7df88c06..780d682d 100644
--- a/app/src/main/java/com/stardust/widget/ViewHolderSupplier.java
+++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/ViewHolderSupplier.java
@@ -1,4 +1,4 @@
-package com.stardust.widget;
+package com.stardust.scriptdroid.ui.widget;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
@@ -6,7 +6,6 @@ import android.view.View;
import android.view.ViewGroup;
import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
/**
* Created by Stardust on 2017/4/8.
diff --git a/app/src/main/java/com/stardust/view/ViewStack.java b/app/src/main/java/com/stardust/view/ViewStack.java
deleted file mode 100644
index 6bd88529..00000000
--- a/app/src/main/java/com/stardust/view/ViewStack.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.stardust.view;
-
-import android.view.View;
-
-import java.util.Stack;
-
-/**
- * Created by Stardust on 2017/3/11.
- */
-
-public class ViewStack {
-
- public interface CurrentViewSetter {
- void setCurrentView(View v);
- }
-
- public interface NavigableView {
- void goBack();
- }
-
- private Stack mStack = new Stack<>();
- private CurrentViewSetter mCurrentViewSetter;
-
- public ViewStack(CurrentViewSetter currentViewSetter) {
- mCurrentViewSetter = currentViewSetter;
- }
-
- public void navigateTo(View v) {
- mStack.push(v);
- mCurrentViewSetter.setCurrentView(v);
- }
-
- public boolean canGoBack() {
- return mStack.size() > 1;
- }
-
- public void goBack() {
- mCurrentViewSetter.setCurrentView(mStack.pop());
- }
-
- public void goBackToFirst() {
- while (mStack.size() > 1) {
- mStack.pop();
- }
- mCurrentViewSetter.setCurrentView(mStack.peek());
- }
-
- public void setRootView(View view) {
- mStack.clear();
- mStack.push(view);
- }
-
-
-}
diff --git a/app/src/main/res/drawable/avatar_view_bg.xml b/app/src/main/res/drawable/avatar_view_bg.xml
new file mode 100644
index 00000000..f757a93c
--- /dev/null
+++ b/app/src/main/res/drawable/avatar_view_bg.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/drawer_header_shadow.xml b/app/src/main/res/drawable/drawer_header_shadow.xml
new file mode 100644
index 00000000..29dda27b
--- /dev/null
+++ b/app/src/main/res/drawable/drawer_header_shadow.xml
@@ -0,0 +1,10 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_ali_register.png b/app/src/main/res/drawable/ic_ali_register.png
new file mode 100644
index 00000000..37c19e84
Binary files /dev/null and b/app/src/main/res/drawable/ic_ali_register.png differ
diff --git a/app/src/main/res/layout/activity_documentation.xml b/app/src/main/res/layout/activity_documentation.xml
index 50cba729..d0627b08 100644
--- a/app/src/main/res/layout/activity_documentation.xml
+++ b/app/src/main/res/layout/activity_documentation.xml
@@ -20,7 +20,7 @@
-
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index 7ef93775..f72d9e6b 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -1,158 +1,102 @@
-
+
-
-
+ android:orientation="vertical">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:theme="@style/AppTheme.AppBarOverlay">
+
+
+
+
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 1d248020..dc9b23d8 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -44,36 +44,29 @@
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
-
+
+
-
-
-
-
-
-
+ app:layout_anchorGravity="bottom|right|end"/>
diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml
new file mode 100644
index 00000000..95c41ea3
--- /dev/null
+++ b/app/src/main/res/layout/activity_register.xml
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_view_sample.xml b/app/src/main/res/layout/activity_view_sample.xml
index 8711d4ed..38637155 100644
--- a/app/src/main/res/layout/activity_view_sample.xml
+++ b/app/src/main/res/layout/activity_view_sample.xml
@@ -27,7 +27,7 @@
android:layout_gravity="right"
android:orientation="horizontal">
-
-
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/avatar_view.xml b/app/src/main/res/layout/avatar_view.xml
new file mode 100644
index 00000000..ca5adb83
--- /dev/null
+++ b/app/src/main/res/layout/avatar_view.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_update_info.xml b/app/src/main/res/layout/dialog_update_info.xml
index a34ff141..f77e0731 100644
--- a/app/src/main/res/layout/dialog_update_info.xml
+++ b/app/src/main/res/layout/dialog_update_info.xml
@@ -27,7 +27,7 @@
android:textColor="@android:color/primary_text_light"
android:textSize="18sp"/>
-
diff --git a/app/src/main/res/layout/drawer_menu_item.xml b/app/src/main/res/layout/drawer_menu_item.xml
index f8b26ee8..1c7a09ae 100644
--- a/app/src/main/res/layout/drawer_menu_item.xml
+++ b/app/src/main/res/layout/drawer_menu_item.xml
@@ -39,7 +39,7 @@
android:textSize="14sp"
tools:text="@string/text_auto_operate_service"/>
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/file_choose_list_directory.xml b/app/src/main/res/layout/file_choose_list_directory.xml
index 59f4574c..3ed61975 100644
--- a/app/src/main/res/layout/file_choose_list_directory.xml
+++ b/app/src/main/res/layout/file_choose_list_directory.xml
@@ -20,7 +20,7 @@
android:paddingBottom="16dp"
android:paddingTop="16dp">
-
-
-
-
-
diff --git a/app/src/main/res/layout/fragment_drawer.xml b/app/src/main/res/layout/fragment_drawer.xml
index ea5aef26..fe1175a3 100644
--- a/app/src/main/res/layout/fragment_drawer.xml
+++ b/app/src/main/res/layout/fragment_drawer.xml
@@ -16,18 +16,21 @@
android:layout_height="170dp"
android:layout_marginBottom="5dp">
-
+
+
+ android:layout_marginBottom="8dp"
+ android:layout_marginLeft="12dp"
+ android:scaleType="fitXY"/>
+ android:textSize="16sp"/>
-
diff --git a/app/src/main/res/layout/fragment_online_docs.xml b/app/src/main/res/layout/fragment_online_docs.xml
index 84e9d009..b350f7f1 100644
--- a/app/src/main/res/layout/fragment_online_docs.xml
+++ b/app/src/main/res/layout/fragment_online_docs.xml
@@ -1,7 +1,7 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_hierarchy_view_item.xml b/app/src/main/res/layout/layout_hierarchy_view_item.xml
index 3e075a3a..9b5d7ad8 100644
--- a/app/src/main/res/layout/layout_hierarchy_view_item.xml
+++ b/app/src/main/res/layout/layout_hierarchy_view_item.xml
@@ -6,7 +6,7 @@
android:layout_height="32dp"
android:padding="5dp">
-
diff --git a/app/src/main/res/menu/menu_login.xml b/app/src/main/res/menu/menu_login.xml
new file mode 100644
index 00000000..b90d6843
--- /dev/null
+++ b/app/src/main/res/menu/menu_login.xml
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 515eafd1..b109daba 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -200,7 +200,7 @@
用户名
密码
登录
- 忘记密码
+ 忘记密码?
用户名不能为空
密码不能为空
时间
@@ -264,6 +264,17 @@
悬浮编辑
选择图标
添加到图标快捷方式
+ 登录成功
+ 登录失败
+ 重置密码
+ 登录中
+ 注册
+ 邮箱
+ 邮箱不能为空
+ 邮箱格式错误
+ 注册中
+ 注册失败
+ 注册成功
diff --git a/app/src/test/java/com/stardust/scriptdroid/ExampleUnitTest.java b/app/src/test/java/com/stardust/scriptdroid/ExampleUnitTest.java
index a479ada1..0c2a9962 100644
--- a/app/src/test/java/com/stardust/scriptdroid/ExampleUnitTest.java
+++ b/app/src/test/java/com/stardust/scriptdroid/ExampleUnitTest.java
@@ -3,6 +3,8 @@ package com.stardust.scriptdroid;
import org.junit.Test;
import java.util.concurrent.Callable;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import io.reactivex.Observable;
import io.reactivex.annotations.NonNull;
@@ -20,28 +22,10 @@ public class ExampleUnitTest {
@Test
public void test() {
- Observable.fromCallable(new Callable() {
- @Override
- public String call() throws Exception {
- System.out.println(Thread.currentThread());
- return "";
- }
- })
- .subscribeOn(Schedulers.io())
- .observeOn(Schedulers.newThread())
- .doOnComplete(new Action() {
- @Override
- public void run() throws Exception {
- System.out.println(Thread.currentThread());
- }
- })
- .observeOn(Schedulers.newThread())
- .subscribe(new Consumer() {
- @Override
- public void accept(@NonNull String s) throws Exception {
- System.out.println(Thread.currentThread());
- }
- });
+ Matcher matcher = Pattern.compile("[0-9]+").matcher("2937Finish!");
+ if (matcher.find()) {
+ System.out.println(matcher.group());
+ }
}
@Test
diff --git a/autojs/build.gradle b/autojs/build.gradle
index 573b8d88..95efa15c 100644
--- a/autojs/build.gradle
+++ b/autojs/build.gradle
@@ -2,7 +2,7 @@ apply plugin: 'com.android.library'
android {
compileSdkVersion 25
- buildToolsVersion "25.0.2"
+ buildToolsVersion '26.0.2'
defaultConfig {
minSdkVersion 17
diff --git a/autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java b/autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java
index f0ef7e52..f301d902 100644
--- a/autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/accessibility/SimpleActionAutomator.java
@@ -20,6 +20,9 @@ import com.stardust.automator.simple_action.SimpleAction;
import com.stardust.util.DeveloperUtils;
import com.stardust.util.ScreenMetrics;
+import org.mozilla.javascript.Context;
+import org.mozilla.javascript.NativeJavaObject;
+
/**
* Created by Stardust on 2017/4/2.
*/
diff --git a/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java b/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java
index 1045f271..c1462d2f 100644
--- a/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/console/StardustConsole.java
@@ -14,6 +14,7 @@ import com.stardust.enhancedfloaty.FloatyService;
import com.stardust.enhancedfloaty.ResizableExpandableFloatyWindow;
import com.stardust.util.UiHandler;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
@@ -67,7 +68,7 @@ public class StardustConsole extends AbstractConsole {
private LogListener mLogListener;
private UiHandler mUiHandler;
private BlockingQueue mInput = new ArrayBlockingQueue<>(1);
- private ConsoleView mConsoleView;
+ private WeakReference mConsoleView;
private volatile boolean mShown = false;
public StardustConsole(UiHandler uiHandler) {
@@ -88,7 +89,7 @@ public class StardustConsole extends AbstractConsole {
}
public void setConsoleView(ConsoleView consoleView) {
- mConsoleView = consoleView;
+ mConsoleView = new WeakReference<>(consoleView);
setLogListener(consoleView);
synchronized (this) {
this.notify();
@@ -177,13 +178,13 @@ public class StardustConsole extends AbstractConsole {
@ScriptInterface
public String rawInput() {
- if (mConsoleView == null) {
+ if (mConsoleView == null || mConsoleView.get() == null) {
if (!mShown) {
show();
}
waitForConsoleView();
}
- mConsoleView.showEditText();
+ mConsoleView.get().showEditText();
try {
return mInput.take();
} catch (InterruptedException e) {
diff --git a/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToAutoFileRecorder.java b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToAutoFileRecorder.java
index 8245cdc4..6fd9c6e1 100644
--- a/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToAutoFileRecorder.java
+++ b/autojs/src/main/java/com/stardust/autojs/core/record/inputevent/InputEventToAutoFileRecorder.java
@@ -56,7 +56,7 @@ public class InputEventToAutoFileRecorder extends InputEventRecorder {
public void recordInputEvent(@NonNull InputEventObserver.InputEvent event) {
try {
convertEventOrThrow(event);
- //Log.d(LOG_TAG, "recordInputEvent: " + event);
+ Log.d(LOG_TAG, "recordInputEvent: " + event);
} catch (IOException e) {
e.printStackTrace();
}
diff --git a/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java b/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java
index 05c53635..347fb089 100644
--- a/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java
+++ b/autojs/src/main/java/com/stardust/autojs/engine/RootAutomatorEngine.java
@@ -3,14 +3,23 @@ package com.stardust.autojs.engine;
import android.content.Context;
import android.preference.PreferenceManager;
import android.util.Log;
+import android.util.Patterns;
import com.stardust.autojs.runtime.api.AbstractShell;
import com.stardust.autojs.runtime.api.ProcessShell;
import com.stardust.autojs.core.inputevent.InputDevices;
+import com.stardust.autojs.runtime.exception.ScriptException;
+import com.stardust.autojs.runtime.exception.ScriptInterruptedException;
import com.stardust.autojs.script.AutoFileSource;
import com.stardust.pio.PFiles;
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Created by Stardust on 2017/8/1.
@@ -22,6 +31,7 @@ public class RootAutomatorEngine extends ScriptEngine.AbstractScriptEngine