From 1e5c05efb9298daef6e6b97b9052d0562c1a87ca Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Thu, 26 Oct 2017 13:16:34 +0800 Subject: [PATCH 1/6] fix: user login; refactor: move package widget to package ui --- .../scriptdroid/network/UserService.java | 41 +- .../scriptdroid/network/api/ConfigApi.java | 17 + .../scriptdroid/network/api/UserApi.java | 19 +- .../network/entity/TokenResponse.java | 17 - .../network/entity/VerifyResponse.java | 376 ----------- .../network/entity/config/Config.java | 617 ++++++++++++++++++ .../network/entity/config/Cookies.java | 62 ++ .../network/entity/config/Markdown.java | 37 ++ .../network/entity/{ => user}/GroupsItem.java | 2 +- .../network/entity/{ => user}/User.java | 2 +- .../ui/doc/DocumentationActivity.java | 4 +- .../scriptdroid/ui/doc/ManualDialog.java | 2 +- .../ui/doc/OnlineDocsFragment.java | 6 +- .../scriptdroid/ui/edit/EditActivity.java | 7 - .../scriptdroid/ui/edit/EditorView.java | 4 +- .../ui/edit/ViewSampleActivity.java | 2 +- .../ui/filechooser/FileChooseListView.java | 5 +- .../LayoutBoundsFloatyWindow.java | 2 +- .../LayoutHierarchyFloatyWindow.java | 3 +- .../layoutinspector/LayoutHierarchyView.java | 2 +- .../scriptdroid/ui/login/LoginActivity.java | 30 +- .../scriptdroid/ui/main/MainActivity.java | 6 +- .../ui/main/community/CommunityFragment.java | 3 - .../ui/main/community/CommunityWebView.java | 6 +- .../ui/main/drawer/DrawerFragment.java | 8 +- .../ui/main/drawer/DrawerMenuItem.java | 5 +- .../ui/main/scripts/ScriptListView.java | 2 +- .../ui/main/task/TaskManagerFragment.java | 2 +- .../ui/update/UpdateInfoDialogBuilder.java | 2 +- .../ui}/widget/AppWithStatusBarLayout.java | 2 +- .../ui}/widget/AutoAdapter.java | 2 +- .../ui}/widget/BindableViewHolder.java | 2 +- .../ui}/widget/BubblePopupMenu.java | 2 +- .../ui}/widget/CheckBoxCompat.java | 2 +- .../ui}/widget/CommonMarkdownView.java | 3 +- .../{ => scriptdroid/ui}/widget/EWebView.java | 2 +- .../ui}/widget/ExpandableRecyclerView.java | 2 +- .../widget/ItemTouchHelperSimpleCallback.java | 2 +- .../ui}/widget/LevelBeamView.java | 2 +- .../ui}/widget/OnItemClickListener.java | 2 +- .../ui}/widget/PrefSwitch.java | 4 +- .../ui}/widget/ScrollAwareFABBehavior.java | 2 +- .../ui}/widget/SearchViewItem.java | 2 +- .../ui}/widget/SimpleAdapterDataObserver.java | 2 +- .../ui}/widget/SimpleRecyclerViewAdapter.java | 2 +- .../ui}/widget/SlidingUpPanel.java | 2 +- .../ui}/widget/SwitchCompat.java | 2 +- .../ui}/widget/ToolbarMenuItem.java | 2 +- .../ui}/widget/ViewHolderMutableAdapter.java | 2 +- .../ui}/widget/ViewHolderSupplier.java | 3 +- .../java/com/stardust/view/ViewStack.java | 54 -- .../res/layout/activity_documentation.xml | 2 +- .../main/res/layout/activity_view_sample.xml | 4 +- .../main/res/layout/dialog_update_info.xml | 2 +- app/src/main/res/layout/drawer_menu_item.xml | 2 +- app/src/main/res/layout/editor_view.xml | 18 +- .../res/layout/file_choose_list_directory.xml | 2 +- .../main/res/layout/file_choose_list_file.xml | 2 +- app/src/main/res/layout/floating_editor.xml | 4 +- .../res/layout/floating_manual_dialog.xml | 2 +- .../main/res/layout/fragment_online_docs.xml | 12 +- .../res/layout/layout_hierarchy_view_item.xml | 2 +- app/src/main/res/values/strings.xml | 2 + .../accessibility/SimpleActionAutomator.java | 3 + .../com/stardust/util}/DrawerAutoClose.java | 2 +- 65 files changed, 843 insertions(+), 607 deletions(-) create mode 100644 app/src/main/java/com/stardust/scriptdroid/network/api/ConfigApi.java delete mode 100644 app/src/main/java/com/stardust/scriptdroid/network/entity/TokenResponse.java delete mode 100644 app/src/main/java/com/stardust/scriptdroid/network/entity/VerifyResponse.java create mode 100644 app/src/main/java/com/stardust/scriptdroid/network/entity/config/Config.java create mode 100644 app/src/main/java/com/stardust/scriptdroid/network/entity/config/Cookies.java create mode 100644 app/src/main/java/com/stardust/scriptdroid/network/entity/config/Markdown.java rename app/src/main/java/com/stardust/scriptdroid/network/entity/{ => user}/GroupsItem.java (98%) rename app/src/main/java/com/stardust/scriptdroid/network/entity/{ => user}/User.java (99%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/AppWithStatusBarLayout.java (98%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/AutoAdapter.java (97%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/BindableViewHolder.java (88%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/BubblePopupMenu.java (98%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/CheckBoxCompat.java (96%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/CommonMarkdownView.java (98%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/EWebView.java (99%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/ExpandableRecyclerView.java (99%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/ItemTouchHelperSimpleCallback.java (95%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/LevelBeamView.java (98%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/OnItemClickListener.java (84%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/PrefSwitch.java (96%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/ScrollAwareFABBehavior.java (98%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/SearchViewItem.java (97%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/SimpleAdapterDataObserver.java (94%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/SimpleRecyclerViewAdapter.java (97%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/SlidingUpPanel.java (98%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/SwitchCompat.java (96%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/ToolbarMenuItem.java (98%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/ViewHolderMutableAdapter.java (94%) rename app/src/main/java/com/stardust/{ => scriptdroid/ui}/widget/ViewHolderSupplier.java (92%) delete mode 100644 app/src/main/java/com/stardust/view/ViewStack.java rename {app/src/main/java/com/stardust/view => common/src/main/java/com/stardust/util}/DrawerAutoClose.java (96%) 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..58ce7ec6 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,19 @@ 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 mRetrofit.create(ConfigApi.class) + .getConfig() + .flatMap(config -> { + Log.d("login", config.toString()); + return mRetrofit.create(UserApi.class) + .login(Collections.singletonMap("x-csrf-token", config.getCsrfToken()), + 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..2b4a909e 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,8 @@ public interface UserApi { 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); - + @POST("/login") + Observable login(@HeaderMap Map csrfToken, @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/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/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 index 45093339..611ad79c 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/login/LoginActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/login/LoginActivity.java @@ -1,13 +1,10 @@ package com.stardust.scriptdroid.ui.login; -import android.util.Log; import android.widget.TextView; +import android.widget.Toast; 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.network.UserService; import com.stardust.scriptdroid.ui.BaseActivity; import org.androidannotations.annotations.AfterViews; @@ -16,7 +13,6 @@ 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; /** @@ -43,24 +39,16 @@ public class LoginActivity extends BaseActivity { if (!checkNotEmpty(userName, password)) { return; } - - NodeBB.getInstance().getRetrofit() - .create(UserApi.class) - .verify(userName, password) + UserService.getInstance().login(userName, password) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new SimpleObserver() { + .subscribe(response -> { + Toast.makeText(getApplicationContext(), R.string.text_login_succeed, Toast.LENGTH_SHORT).show(); + finish(); + } + , error -> + Toast.makeText(getApplicationContext(), R.string.text_login_fail, Toast.LENGTH_SHORT).show()); - @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) { 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..d48abee4 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. 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..000ef095 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; 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..fd0a74c2 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,15 +1,12 @@ package com.stardust.scriptdroid.ui.main.drawer; -import android.content.DialogInterface; import android.os.Bundle; -import android.support.annotation.NonNull; import android.support.annotation.Nullable; 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.stardust.scriptdroid.App; import com.stardust.scriptdroid.Pref; @@ -19,7 +16,7 @@ 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_; @@ -39,12 +36,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; 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..1db73ba7 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; 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/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/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 99% 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..5034bdf8 100644 --- a/app/src/main/java/com/stardust/widget/EWebView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java @@ -1,4 +1,4 @@ -package com.stardust.widget; +package com.stardust.scriptdroid.ui.widget; import android.annotation.SuppressLint; import android.content.Context; 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/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/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_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"> - - - 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/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/values/strings.xml b/app/src/main/res/values/strings.xml index 515eafd1..87afe904 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -264,6 +264,8 @@ 悬浮编辑 选择图标 添加到图标快捷方式 + 登录成功 + 登录失败 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/app/src/main/java/com/stardust/view/DrawerAutoClose.java b/common/src/main/java/com/stardust/util/DrawerAutoClose.java similarity index 96% rename from app/src/main/java/com/stardust/view/DrawerAutoClose.java rename to common/src/main/java/com/stardust/util/DrawerAutoClose.java index 86c72f59..df13b073 100644 --- a/app/src/main/java/com/stardust/view/DrawerAutoClose.java +++ b/common/src/main/java/com/stardust/util/DrawerAutoClose.java @@ -1,4 +1,4 @@ -package com.stardust.view; +package com.stardust.util; import android.app.Activity; import android.support.v4.widget.DrawerLayout; From f55593a7a21b9aa13727dd655108221c9f4421cf Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Thu, 26 Oct 2017 17:01:29 +0800 Subject: [PATCH 2/6] fix: user register; update dependencies --- .idea/misc.xml | 12 +- app/build.gradle | 32 +-- app/src/main/AndroidManifest.xml | 7 +- .../external/open/RunIntentActivity.java | 5 +- .../stardust/scriptdroid/network/Glides.java | 11 + .../stardust/scriptdroid/network/NodeBB.java | 19 +- .../scriptdroid/network/UserService.java | 13 +- .../scriptdroid/network/api/UserApi.java | 5 + .../ui/main/community/CommunityWebView.java | 3 +- .../ui/main/drawer/DrawerFragment.java | 58 ++++- .../ui/{login => user}/LoginActivity.java | 40 ++- .../scriptdroid/ui/user/RegisterActivity.java | 93 +++++++ .../ui/user/UserDetailActivity.java | 10 + .../scriptdroid/ui/widget/AvatarView.java | 86 +++++++ .../scriptdroid/ui/widget/EWebView.java | 22 +- app/src/main/res/drawable/avatar_view_bg.xml | 9 + .../res/drawable/drawer_header_shadow.xml | 10 + app/src/main/res/drawable/ic_ali_register.png | Bin 0 -> 2137 bytes app/src/main/res/layout/activity_login.xml | 242 +++++++----------- app/src/main/res/layout/activity_register.xml | 95 +++++++ app/src/main/res/layout/avatar_view.xml | 28 ++ app/src/main/res/layout/fragment_drawer.xml | 32 +-- app/src/main/res/menu/menu_login.xml | 10 + app/src/main/res/values/strings.xml | 11 +- autojs/build.gradle | 2 +- automator/build.gradle | 2 +- build.gradle | 4 +- common/build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- inrt/build.gradle | 2 +- 30 files changed, 630 insertions(+), 239 deletions(-) create mode 100644 app/src/main/java/com/stardust/scriptdroid/network/Glides.java rename app/src/main/java/com/stardust/scriptdroid/ui/{login => user}/LoginActivity.java (61%) create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/user/RegisterActivity.java create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/user/UserDetailActivity.java create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/widget/AvatarView.java create mode 100644 app/src/main/res/drawable/avatar_view_bg.xml create mode 100644 app/src/main/res/drawable/drawer_header_shadow.xml create mode 100644 app/src/main/res/drawable/ic_ali_register.png create mode 100644 app/src/main/res/layout/activity_register.xml create mode 100644 app/src/main/res/layout/avatar_view.xml create mode 100644 app/src/main/res/menu/menu_login.xml 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..00b608e1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,11 +1,10 @@ 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 @@ -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..1542ef7d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -78,7 +78,12 @@ - + + 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..d8668ee7 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,14 @@ 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); + + } } 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 58ce7ec6..ccf3c262 100644 --- a/app/src/main/java/com/stardust/scriptdroid/network/UserService.java +++ b/app/src/main/java/com/stardust/scriptdroid/network/UserService.java @@ -29,7 +29,7 @@ public class UserService { } public Observable login(String userName, final String password) { - return mRetrofit.create(ConfigApi.class) + return NodeBB.getInstance() .getConfig() .flatMap(config -> { Log.d("login", config.toString()); @@ -39,4 +39,15 @@ public class UserService { }); } + + 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/UserApi.java b/app/src/main/java/com/stardust/scriptdroid/network/api/UserApi.java index 2b4a909e..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 @@ -25,5 +25,10 @@ public interface UserApi { @POST("/login") Observable login(@HeaderMap Map csrfToken, @Field("username") String userName, @Field("password") String password); + @FormUrlEncoded + @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/ui/main/community/CommunityWebView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityWebView.java index 000ef095..32d4b6ee 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 @@ -120,7 +120,7 @@ public class CommunityWebView extends EWebView { private class MyWebChromeClient extends EWebView.MyWebChromeClient { @Override - public void openFileChooser(ValueCallback callback) { + public void openFileChooser(ValueCallback callback, String[] acceptType, boolean isCaptureEnabled) { new FileChooserDialogBuilder(getContext()) .title(R.string.text_select_file_to_upload) .dir(StorageFileProvider.DEFAULT_DIRECTORY_PATH) @@ -128,6 +128,5 @@ public class CommunityWebView extends EWebView { .cancelListener(dialog -> callback.onReceiveValue(null)) .show(); } - } } 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 fd0a74c2..67a66e25 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,16 +1,23 @@ package com.stardust.scriptdroid.ui.main.drawer; +import android.graphics.drawable.Drawable; import android.os.Bundle; 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.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; @@ -19,10 +26,12 @@ import com.stardust.scriptdroid.network.api.UserApi; 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.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; @@ -69,7 +78,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; @@ -108,21 +123,36 @@ 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, Throwable::printStackTrace); } private void setUpUserInfo(User user) { mUserName.setText(user.getUsername()); + mAvatar.setUser(user); + setCoverImage(user); + + + } + + private void setCoverImage(User user) { + String coverUrl = user.getCoverUrl(); + if (TextUtils.isEmpty(coverUrl) || coverUrl.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 + coverUrl) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .into(new SimpleTarget() { + @Override + public void onResourceReady(Drawable resource, Transition transition) { + mHeaderView.setBackground(resource); + } + }); + } } @Click(R.id.avatar) diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/login/LoginActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/user/LoginActivity.java similarity index 61% rename from app/src/main/java/com/stardust/scriptdroid/ui/login/LoginActivity.java rename to app/src/main/java/com/stardust/scriptdroid/ui/user/LoginActivity.java index 611ad79c..ef8e7d05 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/login/LoginActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/user/LoginActivity.java @@ -1,8 +1,12 @@ -package com.stardust.scriptdroid.ui.login; +package com.stardust.scriptdroid.ui.user; +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.UserService; import com.stardust.scriptdroid.ui.BaseActivity; @@ -39,15 +43,29 @@ public class LoginActivity extends BaseActivity { 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 -> - Toast.makeText(getApplicationContext(), R.string.text_login_fail, Toast.LENGTH_SHORT).show()); + , error -> { + dialog.dismiss(); + mPassword.setError(getString(R.string.text_login_fail)); + error.printStackTrace(); + }); + + } + + @Click(R.id.forgot_password) + void forgotPassword() { } @@ -62,4 +80,20 @@ public class LoginActivity extends BaseActivity { } 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..5096ebca --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/ui/user/UserDetailActivity.java @@ -0,0 +1,10 @@ +package com.stardust.scriptdroid.ui.user; + +import com.stardust.scriptdroid.ui.BaseActivity; + +/** + * Created by Stardust on 2017/10/26. + */ + +public class UserDetailActivity extends BaseActivity { +} 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..13f4a834 --- /dev/null +++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/AvatarView.java @@ -0,0 +1,86 @@ +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 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/scriptdroid/ui/widget/EWebView.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java index 5034bdf8..9e008e68 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java @@ -82,25 +82,19 @@ 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); + openFileChooser(valueCallback, acceptType.split(","), capture.equals("true")); + } + + public void openFileChooser(ValueCallback valueCallback, + String[] acceptType, boolean isCaptureEnabled) { + } // For Android >= 5.0 + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @Override public boolean onShowFileChooser(WebView webView, ValueCallback filePathCallback, @@ -111,7 +105,7 @@ public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefres } else { filePathCallback.onReceiveValue(new Uri[]{value}); } - }); + }, fileChooserParams.getAcceptTypes(), fileChooserParams.isCaptureEnabled()); return true; } } 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 0000000000000000000000000000000000000000..37c19e84ec633245cba95966a76b64aa0647d31d GIT binary patch literal 2137 zcmaJ@S5%XU68;k)h89C8fkPvGfr{w{umZDIRT;=0?k^xW2o^B#O7q@K>>h@Ub01d?YqS;c_*l_ ze^$0oyZ3XL_D0}n5DV6D|ur^jQq?bs9EE z+1{>l2A%|+XNPqFUbOdFu7cG)lQW~{G({PY6M8jA#9035FH2lxgl;+E@0GHocG%L} zMmKAqiLij=NV_32-I0Me81jzmPR&2Ot#pKO1l<0YGP(li>q|sxY0kT#LoAVC_}-lC zecrR49P)y5w3em`(5V{PF(zydhAJvqsWjspqbDNJ->*8m&#RAIu~d;L$xuJ*+;5TU z^xTJTnduYwB%}_yFMfB~ApIjO<70LHY%7IS!bo**df|s1OM(uXDc^`V16zJuq(Yx{ zf{zrju&=AO>XGcq=yn=89FhBtYUYKI0E#GTOk#$b;f8gNnrELkja+Xl+e^DV)HnxY zAN{gR!;@}xF*x&PRE(|We*0g^KXaW3JOv7V_`=IoZeBcK--VFa9PU&fNS_&FXdg4r zi$0-QG(J0p9Yaa4d2*;`qZk{1Ju;aTs|`IBZrBuGMg*|}y5;0IWE&tswPms7@}?Rk zkAeH2keE=LFC(?qj8pN+ChEs$y$y&phqX`)LD80V-;=6rguIJC8A#aGfsb4?2vmPU8P{1!dPii?i5)@IVpcj6|JxuuFg@t>*HLZ2! zxFS`;i<`Wfgh|PBl-=O$PatBxH#mFkO-^_~tG&5Nr7A(|U2$q)}*DF3<&bZT<|O%I0{vF&ok(Ugw-JjJ-@w5+qy8`rp6v05g6`}TA37b%xM3_rI-Vi^i}ys)Ct>xHc|D)j4=HK%%m&EbX9bBxE5vso4~^y-_aJ8?j@%T7=!)}aFkzwsWB64GxB~Xdgk}uz*k$?xs;;mAKNXw=Dd{m!Klwdl>>Xv zw2p`m9LcdNi!I-=nGk#9*{L`TBoKuwvX!>_^(01BDc2bxp9lZc|B?3X!N-;H(mg`! zVSJu41ESnbxxh5K!iv7z#QV<;`KtoE(3S+_QBI(8eh*G+pB6X+w~F7NR$W0UZzC2V z6Ah7Hb0J}ES%Gn}&b@Zfh(Gf?YC1_*e?6ndL<%)4Ojm}!PSRzV(Oy^=2j>pgvWl+2 z&3xwbpVIi3Zat5tT4;yME4LqJYKs&7{^<1~U9Z06_i{WLR1_t3Xu z{vc61@Pmw63MrnHFSy`4W^#$}HIA=K)Pmep%w}VSG`sMD5Vwb|q``s`0&@$ah+2*g zgWa3?aq4@8kC~VU7FX5Ue<9FCareM7C1nDIsq2v{mTd`C4oA{O6t8$VN-@;I2VCDx z;yNdNQqr{gA&5@=5M7u2*{xsLtD&+<0KP9haa`ijjRH;a)T!JKx!ps{KhJ5XFPN|L z9J$GIDoOo(siIXyc@^7TZ~MJ!YG?Bau00d~b)d}AeETooPLN*yBC+KfChFK~`~5x9 zNd)}kCa?Ns?G!?$;6b);VX9yHwZ$@e=o1 zrP?+UJ`!F(hgGYwk7zNs4(z@Wp@>@_w8y7gYLB6qQOZw`D-B=Dv)gC^h4m-!g5@dVy$K=kAo;t%02B^hB;LzlG@H><)IDxj>2gQr_qS)$|5qP;F3xP(764t7!fj@!2?ymtJ% ztJYf6; - + - - + 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_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/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/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/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 87afe904..b109daba 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -200,7 +200,7 @@ 用户名 密码 登录 - 忘记密码 + 忘记密码? 用户名不能为空 密码不能为空 时间 @@ -266,6 +266,15 @@ 添加到图标快捷方式 登录成功 登录失败 + 重置密码 + 登录中 + 注册 + 邮箱 + 邮箱不能为空 + 邮箱格式错误 + 注册中 + 注册失败 + 注册成功 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/automator/build.gradle b/automator/build.gradle index d0ad0721..d2353a6b 100644 --- a/automator/build.gradle +++ b/automator/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/build.gradle b/build.gradle index 84cd092b..a7f286b1 100644 --- a/build.gradle +++ b/build.gradle @@ -3,11 +3,11 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.0' classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.6.4' - classpath 'me.tatarka:gradle-retrolambda:3.7.0' } } diff --git a/common/build.gradle b/common/build.gradle index 363d1962..e4de4dc3 100644 --- a/common/build.gradle +++ b/common/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/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 35322ab9..2af64641 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Sat Mar 04 22:18:28 CST 2017 +#Thu Oct 26 16:01:06 CST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip diff --git a/inrt/build.gradle b/inrt/build.gradle index 775bbec6..e257675c 100644 --- a/inrt/build.gradle +++ b/inrt/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'com.android.application' android { compileSdkVersion 25 - buildToolsVersion "25.0.2" + buildToolsVersion '26.0.2' defaultConfig { applicationId "com.stardust.auojs.inrt" From bc29c578e6f6888387c0baf2da5f383b22af5bfc Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Thu, 26 Oct 2017 19:22:43 +0800 Subject: [PATCH 3/6] * fix: webview nested scroll issue * add: image upload support * add: user page --- app/src/main/AndroidManifest.xml | 1 + .../stardust/scriptdroid/network/NodeBB.java | 4 + .../scriptdroid/tool/DrawableSaver.java | 140 ----------------- .../scriptdroid/tool/ImageSelector.java | 20 ++- .../ui/main/community/CommunityFragment.java | 2 +- .../ui/main/community/CommunityWebView.java | 10 +- .../ui/main/drawer/DrawerFragment.java | 38 ++++- .../scriptdroid/ui/user/LoginActivity.java | 7 +- .../ui/user/UserDetailActivity.java | 3 +- .../scriptdroid/ui/user/WebActivity.java | 44 ++++++ .../scriptdroid/ui/widget/AvatarView.java | 6 + .../scriptdroid/ui/widget/EWebView.java | 86 +++++++++-- .../scriptdroid/ui/widget/NestedWebView.java | 141 ++++++++++++++++++ app/src/main/res/layout/activity_web.xml | 29 ++++ app/src/main/res/layout/ewebview.xml | 21 ++- 15 files changed, 372 insertions(+), 180 deletions(-) delete mode 100644 app/src/main/java/com/stardust/scriptdroid/tool/DrawableSaver.java create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/user/WebActivity.java create mode 100644 app/src/main/java/com/stardust/scriptdroid/ui/widget/NestedWebView.java create mode 100644 app/src/main/res/layout/activity_web.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1542ef7d..7616cb72 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -84,6 +84,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 index d8668ee7..df49ac47 100644 --- a/app/src/main/java/com/stardust/scriptdroid/network/NodeBB.java +++ b/app/src/main/java/com/stardust/scriptdroid/network/NodeBB.java @@ -55,4 +55,8 @@ public class NodeBB { return Observable.just(mConfig); } + + public static String url(String relativePath) { + return BASE_URL + relativePath; + } } 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/main/community/CommunityFragment.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/community/CommunityFragment.java index d48abee4..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 @@ -89,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 32d4b6ee..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 @@ -115,18 +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, String[] acceptType, boolean isCaptureEnabled) { + 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 67a66e25..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,5 +1,6 @@ package com.stardust.scriptdroid.ui.main.drawer; +import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.support.annotation.Nullable; @@ -29,6 +30,8 @@ import com.stardust.scriptdroid.tool.SimpleObserver; 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; @@ -123,20 +126,27 @@ public class DrawerFragment extends android.support.v4.app.Fragment { .me() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(this::setUpUserInfo, Throwable::printStackTrace); + .subscribe(this::setUpUserInfo, error -> { + error.printStackTrace(); + setUpUserInfo(null); + }); } - private void setUpUserInfo(User user) { - mUserName.setText(user.getUsername()); - mAvatar.setUser(user); + 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) { - String coverUrl = user.getCoverUrl(); - if (TextUtils.isEmpty(coverUrl) || coverUrl.equals("/assets/images/cover-default.png")) { + 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()); @@ -144,7 +154,7 @@ public class DrawerFragment extends android.support.v4.app.Fragment { mDefaultCover.setVisibility(View.GONE); mShadow.setVisibility(View.VISIBLE); GlideApp.with(getContext()) - .load(NodeBB.BASE_URL + coverUrl) + .load(NodeBB.BASE_URL + user.getCoverUrl()) .diskCacheStrategy(DiskCacheStrategy.NONE) .into(new SimpleTarget() { @Override @@ -157,7 +167,19 @@ public class DrawerFragment extends android.support.v4.app.Fragment { @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/user/LoginActivity.java b/app/src/main/java/com/stardust/scriptdroid/ui/user/LoginActivity.java index ef8e7d05..4661d02c 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/user/LoginActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/user/LoginActivity.java @@ -1,5 +1,6 @@ package com.stardust.scriptdroid.ui.user; +import android.annotation.SuppressLint; import android.content.Intent; import android.view.Menu; import android.view.MenuItem; @@ -8,6 +9,7 @@ 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; @@ -66,7 +68,10 @@ public class LoginActivity extends BaseActivity { @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) { 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 index 5096ebca..24801477 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/user/UserDetailActivity.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/user/UserDetailActivity.java @@ -6,5 +6,6 @@ import com.stardust.scriptdroid.ui.BaseActivity; * Created by Stardust on 2017/10/26. */ -public class UserDetailActivity extends BaseActivity { +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/scriptdroid/ui/widget/AvatarView.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/AvatarView.java index 13f4a834..ded4b63d 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/widget/AvatarView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/AvatarView.java @@ -64,6 +64,12 @@ public class AvatarView extends FrameLayout { 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); diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java index 9e008e68..82cd5226 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java @@ -1,6 +1,7 @@ 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,34 @@ 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 SwipeRefreshLayout 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; public EWebView(Context context) { super(context); @@ -47,8 +63,7 @@ public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefres 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); - mSwipeRefreshLayout.setOnRefreshListener(this); + setOnRefreshListener(this); setUpWebView(); } @@ -69,9 +84,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 -> setRefreshing(false)); + + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + } protected class MyWebChromeClient extends WebChromeClient { @@ -85,12 +117,21 @@ public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefres //For Android >= 4.1 public void openFileChooser(ValueCallback valueCallback, String acceptType, String capture) { - openFileChooser(valueCallback, acceptType.split(","), capture.equals("true")); + if (acceptType == null) { + openFileChooser(valueCallback, null); + } else { + openFileChooser(valueCallback, acceptType.split(",")); + } } - public void openFileChooser(ValueCallback valueCallback, - String[] acceptType, boolean isCaptureEnabled) { - + 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 @@ -105,9 +146,34 @@ public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefres } else { filePathCallback.onReceiveValue(new Uri[]{value}); } - }, fileChooserParams.getAcceptTypes(), fileChooserParams.isCaptureEnabled()); + }, 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 { @@ -123,7 +189,7 @@ public class EWebView extends FrameLayout implements SwipeRefreshLayout.OnRefres public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); mProgressBar.setVisibility(GONE); - mSwipeRefreshLayout.setRefreshing(false); + setRefreshing(false); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 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/res/layout/activity_web.xml b/app/src/main/res/layout/activity_web.xml new file mode 100644 index 00000000..a6303c17 --- /dev/null +++ b/app/src/main/res/layout/activity_web.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/ewebview.xml b/app/src/main/res/layout/ewebview.xml index cb9ca6b7..a3892c8c 100644 --- a/app/src/main/res/layout/ewebview.xml +++ b/app/src/main/res/layout/ewebview.xml @@ -1,26 +1,25 @@ - - - - - + + \ No newline at end of file From 2aa2d074a8a4ccc3d0f3d6845fb80520005d5266 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Thu, 26 Oct 2017 19:42:39 +0800 Subject: [PATCH 4/6] fix: swipe refresh layout abnormal refreshing with nested webview --- .gitignore | 1 + app/build.gradle | 4 ++-- .../scriptdroid/ui/widget/EWebView.java | 10 ++++++---- app/src/main/res/layout/ewebview.xml | 19 ++++++++++--------- 4 files changed, 19 insertions(+), 15 deletions(-) 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/app/build.gradle b/app/build.gradle index 00b608e1..c5f62dc3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { 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 { diff --git a/app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java b/app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java index 82cd5226..2088033a 100644 --- a/app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java +++ b/app/src/main/java/com/stardust/scriptdroid/ui/widget/EWebView.java @@ -40,13 +40,14 @@ import io.reactivex.android.schedulers.AndroidSchedulers; * Created by Stardust on 2017/8/22. */ -public class EWebView extends SwipeRefreshLayout implements SwipeRefreshLayout.OnRefreshListener, OnActivityResultDelegate { +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; + private SwipeRefreshLayout mSwipeRefreshLayout; public EWebView(Context context) { super(context); @@ -62,8 +63,9 @@ public class EWebView extends SwipeRefreshLayout implements SwipeRefreshLayout.O private void init() { inflate(getContext(), R.layout.ewebview, this); mWebView = (WebView) findViewById(R.id.web_view); + mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout); mProgressBar = (ProgressBar) findViewById(R.id.progress_bar); - setOnRefreshListener(this); + mSwipeRefreshLayout.setOnRefreshListener(this); setUpWebView(); } @@ -97,7 +99,7 @@ public class EWebView extends SwipeRefreshLayout implements SwipeRefreshLayout.O mWebView.reload(); Observable.timer(2, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) - .subscribe(t -> setRefreshing(false)); + .subscribe(t -> mSwipeRefreshLayout.setRefreshing(false)); } @@ -189,7 +191,7 @@ public class EWebView extends SwipeRefreshLayout implements SwipeRefreshLayout.O public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); mProgressBar.setVisibility(GONE); - setRefreshing(false); + mSwipeRefreshLayout.setRefreshing(false); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) diff --git a/app/src/main/res/layout/ewebview.xml b/app/src/main/res/layout/ewebview.xml index a3892c8c..a429510d 100644 --- a/app/src/main/res/layout/ewebview.xml +++ b/app/src/main/res/layout/ewebview.xml @@ -1,11 +1,12 @@ - @@ -13,13 +14,13 @@ android:id="@+id/web_view" android:layout_width="match_parent" android:layout_height="match_parent"/> + - - + \ No newline at end of file From ece78e5903353a8dc94adc6b2a116fe5c3bb9be1 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Thu, 26 Oct 2017 20:23:10 +0800 Subject: [PATCH 5/6] fix: fab scroll aware behaviour --- app/src/main/res/layout/activity_main.xml | 41 ++++++++++------------- 1 file changed, 17 insertions(+), 24 deletions(-) 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"/> From 19bbbe9fe10ce88848318e9bd45a01639cbdaeca Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Fri, 27 Oct 2017 11:34:41 +0800 Subject: [PATCH 6/6] fix: root_automator cannot be force stopped --- .../scriptdroid/ui/floating/CircularMenu.java | 27 +++----- .../ui/main/scripts/ScriptListView.java | 10 +-- .../stardust/scriptdroid/ExampleUnitTest.java | 28 ++------ .../autojs/core/console/StardustConsole.java | 9 +-- .../InputEventToAutoFileRecorder.java | 2 +- .../autojs/engine/RootAutomatorEngine.java | 64 +++++++++++++++++-- .../autojs/runtime/api/ProcessShell.java | 2 +- 7 files changed, 83 insertions(+), 59 deletions(-) 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/main/scripts/ScriptListView.java b/app/src/main/java/com/stardust/scriptdroid/ui/main/scripts/ScriptListView.java index 1db73ba7..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 @@ -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/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/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