diff --git a/app/build.gradle b/app/build.gradle
index ea8d5991..8182adbc 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@ android {
applicationId "com.stardust.scriptdroid"
minSdkVersion 17
targetSdkVersion 23
- versionCode 200
- versionName "3.0.0 Alpha1"
+ versionCode 201
+ versionName "3.0.0 Alpha2"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
ndk {
@@ -132,6 +132,8 @@ dependencies {
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
+ //Picasso
+ compile 'com.squareup.picasso:picasso:2.5.2'
// Tasker Plugin
compile 'com.twofortyfouram:android-plugin-client-sdk-for-locale:[4.0.2, 5.0['
compile 'com.flurry.android:analytics:7.0.0@aar'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f4f91ba5..6f9c3207 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -82,6 +82,7 @@
+
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/NodeBB.java b/app/src/main/java/com/stardust/scriptdroid/network/NodeBB.java
new file mode 100644
index 00000000..254e6078
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/network/NodeBB.java
@@ -0,0 +1,41 @@
+package com.stardust.scriptdroid.network;
+
+import com.google.gson.GsonBuilder;
+import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+import com.stardust.scriptdroid.network.util.WebkitCookieManagerProxy;
+
+import okhttp3.OkHttpClient;
+import retrofit2.Retrofit;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+/**
+ * Created by Stardust on 2017/9/20.
+ */
+
+public class NodeBB {
+
+ private static final NodeBB sInstance = new NodeBB();
+
+ private Retrofit mRetrofit;
+
+ NodeBB() {
+ mRetrofit = new Retrofit.Builder()
+ .baseUrl("http://www.autojs.org/")
+ .addConverterFactory(GsonConverterFactory.create(new GsonBuilder()
+ .setLenient()
+ .create()))
+ .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
+ .client(new OkHttpClient.Builder()
+ .cookieJar(new WebkitCookieManagerProxy())
+ .build())
+ .build();
+ }
+
+ public static NodeBB getInstance() {
+ return sInstance;
+ }
+
+ public Retrofit getRetrofit() {
+ return mRetrofit;
+ }
+}
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/UserService.java b/app/src/main/java/com/stardust/scriptdroid/network/UserService.java
new file mode 100644
index 00000000..d499f7f3
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/network/UserService.java
@@ -0,0 +1,47 @@
+package com.stardust.scriptdroid.network;
+
+import com.google.gson.GsonBuilder;
+import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
+import com.stardust.scriptdroid.network.api.UserApi;
+import com.stardust.scriptdroid.network.entity.TokenResponse;
+import com.stardust.scriptdroid.network.entity.VerifyResponse;
+
+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 retrofit2.Retrofit;
+import retrofit2.converter.gson.GsonConverterFactory;
+
+/**
+ * Created by Stardust on 2017/9/20.
+ */
+
+public class UserService {
+
+ private static final UserService sInstance = new UserService();
+ private final Retrofit mRetrofit;
+
+ UserService() {
+ mRetrofit = NodeBB.getInstance().getRetrofit();
+ }
+
+
+ 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()));
+ }
+ }
+ });
+ }
+}
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
new file mode 100644
index 00000000..b7f64159
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/network/api/UserApi.java
@@ -0,0 +1,34 @@
+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 io.reactivex.Observable;
+import retrofit2.http.Field;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.GET;
+import retrofit2.http.POST;
+import retrofit2.http.Path;
+
+/**
+ * Created by Stardust on 2017/9/20.
+ */
+
+public interface UserApi {
+
+ @GET("/api/me")
+ Observable me();
+
+ @FormUrlEncoded
+ @POST("/api/ns/login")
+ Observable verify(@Field("username") String userName, @Field("password") String password);
+
+
+ @FormUrlEncoded
+ @POST("/api/v2/{uid}/tokens")
+ Observable generateToken(@Path("uid") String uid, @Field("password") String password);
+
+
+
+}
diff --git a/app/src/main/java/com/stardust/scriptdroid/network/entity/GroupsItem.java b/app/src/main/java/com/stardust/scriptdroid/network/entity/GroupsItem.java
new file mode 100644
index 00000000..2c7f5a42
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/network/entity/GroupsItem.java
@@ -0,0 +1,253 @@
+package com.stardust.scriptdroid.network.entity;
+
+import com.google.gson.annotations.SerializedName;
+
+public class GroupsItem{
+
+ @SerializedName("createtimeISO")
+ private String createtimeISO;
+
+ @SerializedName("createtime")
+ private String createtime;
+
+ @SerializedName("private")
+ private boolean jsonMemberPrivate;
+
+ @SerializedName("hidden")
+ private boolean hidden;
+
+ @SerializedName("userTitleEnabled")
+ private boolean userTitleEnabled;
+
+ @SerializedName("displayName")
+ private String displayName;
+
+ @SerializedName("memberCount")
+ private String memberCount;
+
+ @SerializedName("icon")
+ private String icon;
+
+ @SerializedName("description")
+ private String description;
+
+ @SerializedName("labelColor")
+ private String labelColor;
+
+ @SerializedName("userTitle")
+ private String userTitle;
+
+ @SerializedName("deleted")
+ private String deleted;
+
+ @SerializedName("system")
+ private boolean system;
+
+ @SerializedName("cover:position")
+ private String coverPosition;
+
+ @SerializedName("name")
+ private String name;
+
+ @SerializedName("cover:url")
+ private String coverUrl;
+
+ @SerializedName("cover:thumb:url")
+ private String coverThumbUrl;
+
+ @SerializedName("disableJoinRequests")
+ private boolean disableJoinRequests;
+
+ @SerializedName("slug")
+ private String slug;
+
+ @SerializedName("nameEncoded")
+ private String nameEncoded;
+
+ public void setCreatetimeISO(String createtimeISO){
+ this.createtimeISO = createtimeISO;
+ }
+
+ public String getCreatetimeISO(){
+ return createtimeISO;
+ }
+
+ public void setCreatetime(String createtime){
+ this.createtime = createtime;
+ }
+
+ public String getCreatetime(){
+ return createtime;
+ }
+
+ public void setJsonMemberPrivate(boolean jsonMemberPrivate){
+ this.jsonMemberPrivate = jsonMemberPrivate;
+ }
+
+ public boolean isJsonMemberPrivate(){
+ return jsonMemberPrivate;
+ }
+
+ public void setHidden(boolean hidden){
+ this.hidden = hidden;
+ }
+
+ public boolean isHidden(){
+ return hidden;
+ }
+
+ public void setUserTitleEnabled(boolean userTitleEnabled){
+ this.userTitleEnabled = userTitleEnabled;
+ }
+
+ public boolean isUserTitleEnabled(){
+ return userTitleEnabled;
+ }
+
+ public void setDisplayName(String displayName){
+ this.displayName = displayName;
+ }
+
+ public String getDisplayName(){
+ return displayName;
+ }
+
+ public void setMemberCount(String memberCount){
+ this.memberCount = memberCount;
+ }
+
+ public String getMemberCount(){
+ return memberCount;
+ }
+
+ public void setIcon(String icon){
+ this.icon = icon;
+ }
+
+ public String getIcon(){
+ return icon;
+ }
+
+ public void setDescription(String description){
+ this.description = description;
+ }
+
+ public String getDescription(){
+ return description;
+ }
+
+ public void setLabelColor(String labelColor){
+ this.labelColor = labelColor;
+ }
+
+ public String getLabelColor(){
+ return labelColor;
+ }
+
+ public void setUserTitle(String userTitle){
+ this.userTitle = userTitle;
+ }
+
+ public String getUserTitle(){
+ return userTitle;
+ }
+
+ public void setDeleted(String deleted){
+ this.deleted = deleted;
+ }
+
+ public String getDeleted(){
+ return deleted;
+ }
+
+ public void setSystem(boolean system){
+ this.system = system;
+ }
+
+ public boolean isSystem(){
+ return system;
+ }
+
+ public void setCoverPosition(String coverPosition){
+ this.coverPosition = coverPosition;
+ }
+
+ public String getCoverPosition(){
+ return coverPosition;
+ }
+
+ public void setName(String name){
+ this.name = name;
+ }
+
+ public String getName(){
+ return name;
+ }
+
+ public void setCoverUrl(String coverUrl){
+ this.coverUrl = coverUrl;
+ }
+
+ public String getCoverUrl(){
+ return coverUrl;
+ }
+
+ public void setCoverThumbUrl(String coverThumbUrl){
+ this.coverThumbUrl = coverThumbUrl;
+ }
+
+ public String getCoverThumbUrl(){
+ return coverThumbUrl;
+ }
+
+ public void setDisableJoinRequests(boolean disableJoinRequests){
+ this.disableJoinRequests = disableJoinRequests;
+ }
+
+ public boolean isDisableJoinRequests(){
+ return disableJoinRequests;
+ }
+
+ public void setSlug(String slug){
+ this.slug = slug;
+ }
+
+ public String getSlug(){
+ return slug;
+ }
+
+ public void setNameEncoded(String nameEncoded){
+ this.nameEncoded = nameEncoded;
+ }
+
+ public String getNameEncoded(){
+ return nameEncoded;
+ }
+
+ @Override
+ public String toString(){
+ return
+ "GroupsItem{" +
+ "createtimeISO = '" + createtimeISO + '\'' +
+ ",createtime = '" + createtime + '\'' +
+ ",private = '" + jsonMemberPrivate + '\'' +
+ ",hidden = '" + hidden + '\'' +
+ ",userTitleEnabled = '" + userTitleEnabled + '\'' +
+ ",displayName = '" + displayName + '\'' +
+ ",memberCount = '" + memberCount + '\'' +
+ ",icon = '" + icon + '\'' +
+ ",description = '" + description + '\'' +
+ ",labelColor = '" + labelColor + '\'' +
+ ",userTitle = '" + userTitle + '\'' +
+ ",deleted = '" + deleted + '\'' +
+ ",system = '" + system + '\'' +
+ ",cover:position = '" + coverPosition + '\'' +
+ ",name = '" + name + '\'' +
+ ",cover:url = '" + coverUrl + '\'' +
+ ",cover:thumb:url = '" + coverThumbUrl + '\'' +
+ ",disableJoinRequests = '" + disableJoinRequests + '\'' +
+ ",slug = '" + slug + '\'' +
+ ",nameEncoded = '" + nameEncoded + '\'' +
+ "}";
+ }
+}
\ No newline at end of file
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
new file mode 100644
index 00000000..e87ad11e
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/network/entity/TokenResponse.java
@@ -0,0 +1,17 @@
+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/User.java b/app/src/main/java/com/stardust/scriptdroid/network/entity/User.java
new file mode 100644
index 00000000..5c97da2c
--- /dev/null
+++ b/app/src/main/java/com/stardust/scriptdroid/network/entity/User.java
@@ -0,0 +1,746 @@
+package com.stardust.scriptdroid.network.entity;
+
+import java.util.List;
+import com.google.gson.annotations.SerializedName;
+
+public class User{
+
+ @SerializedName("websiteLink")
+ private String websiteLink;
+
+ @SerializedName("reputation")
+ private String reputation;
+
+ @SerializedName("sso")
+ private List
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/App.java b/inrt/src/main/java/com/stardust/auojs/inrt/App.java
index 1f08a119..f61726ca 100644
--- a/inrt/src/main/java/com/stardust/auojs/inrt/App.java
+++ b/inrt/src/main/java/com/stardust/auojs/inrt/App.java
@@ -1,6 +1,9 @@
package com.stardust.auojs.inrt;
import android.app.Application;
+import android.app.Fragment;
+
+import com.stardust.auojs.inrt.rt.AutoJs;
/**
* Created by Stardust on 2017/7/1.
@@ -8,9 +11,17 @@ import android.app.Application;
public class App extends Application {
+ private static App sApp;
+
+ public static App getApp() {
+ return sApp;
+ }
+
@Override
public void onCreate() {
super.onCreate();
+ sApp = this;
+ AutoJs.initInstance(this);
}
}
diff --git a/inrt/src/main/java/com/stardust/auojs/inrt/MainActivity.java b/inrt/src/main/java/com/stardust/auojs/inrt/MainActivity.java
index 8ae3fe42..a023eeee 100644
--- a/inrt/src/main/java/com/stardust/auojs/inrt/MainActivity.java
+++ b/inrt/src/main/java/com/stardust/auojs/inrt/MainActivity.java
@@ -3,6 +3,7 @@ package com.stardust.auojs.inrt;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
+import com.stardust.auojs.inrt.rt.AutoJs;
import com.stardust.autojs.script.StringScriptSource;
import java.io.IOException;
@@ -19,7 +20,7 @@ public class MainActivity extends AppCompatActivity {
is.read(data);
String js = new String(data);
StringScriptSource source = new StringScriptSource("