新增 市场界面

删除 无用资源
This commit is contained in:
hyb1996
2019-01-27 14:22:17 +08:00
parent afc7f35983
commit f2c636d599
29 changed files with 1452 additions and 199 deletions

View File

@@ -4,6 +4,7 @@ import android.content.Context;
import android.util.Log;
import com.google.gson.GsonBuilder;
import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory;
import com.jakewharton.retrofit2.adapter.rxjava2.HttpException;
import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import org.autojs.autojs.R;
@@ -40,6 +41,7 @@ public class NodeBB {
.setLenient()
.create()))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addCallAdapterFactory(CoroutineCallAdapterFactory.create())
.client(new OkHttpClient.Builder()
.cookieJar(new WebkitCookieManagerProxy())
.build())

View File

@@ -0,0 +1,23 @@
package org.autojs.autojs.network
import org.autojs.autojs.network.api.TopicApi
import org.autojs.autojs.network.entity.topic.Topic
object TopicService {
private const val CID_SCRIPTS = 9L
private val mRetrofit = NodeBB.getInstance().retrofit
private val mTopicApi = mRetrofit.create(TopicApi::class.java)
suspend fun getTopics(cid: Long): List<Topic> {
val category = mTopicApi.getCategory(cid).await()
return category.topics.filter {
it.appInfo != null
}
}
suspend fun getScriptsTopics(): List<Topic> {
return getTopics(CID_SCRIPTS)
}
}

View File

@@ -0,0 +1,17 @@
package org.autojs.autojs.network.api
import kotlinx.coroutines.Deferred
import org.autojs.autojs.network.entity.topic.Category
import org.autojs.autojs.network.entity.topic.Topic
import retrofit2.http.GET
import retrofit2.http.Path
interface TopicApi {
@GET("/api/category/{cid}")
fun getCategory(@Path("cid") cid: Long): Deferred<Category>
@GET("/api/topic/{tid}")
fun getTopic(@Path("tid") cid: Long): Deferred<Topic>
}

View File

@@ -0,0 +1,171 @@
package org.autojs.autojs.network.entity.topic;
import java.util.List;
import com.google.gson.annotations.SerializedName;
@SuppressWarnings("unused")
public class AppInfo {
@SerializedName("details")
private String mDetails;
@SerializedName("email")
private String mEmail;
@SerializedName("file")
private String mFile;
@SerializedName("minSdkVersion")
private long mMinSdkVersion;
@SerializedName("name")
private String mName;
@SerializedName("package")
private String mPackage;
@SerializedName("permissions")
private List<String> mPermissions;
@SerializedName("qq")
private String mQq;
@SerializedName("releaseNotes")
private String mReleaseNotes;
@SerializedName("screenshots")
private List<String> mScreenshots;
@SerializedName("summary")
private String mSummary;
@SerializedName("userGuide")
private String mUserGuide;
@SerializedName("version")
private String mVersion;
@SerializedName("versionCode")
private long mVersionCode;
public String getDetails() {
return mDetails;
}
public void setDetails(String details) {
mDetails = details;
}
public String getEmail() {
return mEmail;
}
public void setEmail(String email) {
mEmail = email;
}
public String getFile() {
return mFile;
}
public void setFile(String file) {
mFile = file;
}
public long getMinSdkVersion() {
return mMinSdkVersion;
}
public void setMinSdkVersion(long minSdkVersion) {
mMinSdkVersion = minSdkVersion;
}
public String getName() {
return mName;
}
public void setName(String name) {
mName = name;
}
public String getPackage() {
return mPackage;
}
public void setPackage(String packageName) {
mPackage = packageName;
}
public List<String> getPermissions() {
return mPermissions;
}
public void setPermissions(List<String> permissions) {
mPermissions = permissions;
}
public String getQq() {
return mQq;
}
public void setQq(String qq) {
mQq = qq;
}
public String getReleaseNotes() {
return mReleaseNotes;
}
public void setReleaseNotes(String releaseNotes) {
mReleaseNotes = releaseNotes;
}
public List<String> getScreenshots() {
return mScreenshots;
}
public void setScreenshots(List<String> screenshots) {
mScreenshots = screenshots;
}
public String getSummary() {
return mSummary;
}
public void setSummary(String summary) {
mSummary = summary;
}
public String getUserGuide() {
return mUserGuide;
}
public void setUserGuide(String userGuide) {
mUserGuide = userGuide;
}
public String getVersion() {
return mVersion;
}
public void setVersion(String version) {
mVersion = version;
}
public long getVersionCode() {
return mVersionCode;
}
public void setVersionCode(long versionCode) {
mVersionCode = versionCode;
}
@Override
public String toString() {
return "ScriptApp{" +
"mDetails='" + mDetails + '\'' +
", mEmail='" + mEmail + '\'' +
", mFile='" + mFile + '\'' +
", mMinSdkVersion=" + mMinSdkVersion +
", mName='" + mName + '\'' +
", mPackage='" + mPackage + '\'' +
", mPermissions=" + mPermissions +
", mQq='" + mQq + '\'' +
", mReleaseNotes='" + mReleaseNotes + '\'' +
", mScreenshots=" + mScreenshots +
", mSummary='" + mSummary + '\'' +
", mUserGuide='" + mUserGuide + '\'' +
", mVersion='" + mVersion + '\'' +
", mVersionCode=" + mVersionCode +
'}';
}
}

View File

@@ -0,0 +1,176 @@
package org.autojs.autojs.network.entity.topic;
import java.util.List;
import com.google.gson.annotations.SerializedName;
@SuppressWarnings("unused")
public class Category {
@SerializedName("cid")
private String mCid;
@SerializedName("description")
private String mDescription;
@SerializedName("descriptionParsed")
private String mDescriptionParsed;
@SerializedName("link")
private String mLink;
@SerializedName("loggedIn")
private Boolean mLoggedIn;
@SerializedName("name")
private String mName;
@SerializedName("nextStart")
private Long mNextStart;
@SerializedName("numRecentReplies")
private String mNumRecentReplies;
@SerializedName("pagination")
private Pagination mPagination;
@SerializedName("parentCid")
private String mParentCid;
@SerializedName("post_count")
private String mPostCount;
@SerializedName("privileges")
private Privileges mPrivileges;
@SerializedName("slug")
private String mSlug;
@SerializedName("title")
private String mTitle;
@SerializedName("topic_count")
private String mTopicCount;
@SerializedName("topics")
private List<Topic> mTopics;
@SerializedName("totalPostCount")
private Long mTotalPostCount;
@SerializedName("totalTopicCount")
private Long mTotalTopicCount;
@SerializedName("url")
private String mUrl;
public String getDescription() {
return mDescription;
}
public void setDescription(String description) {
mDescription = description;
}
public String getDescriptionParsed() {
return mDescriptionParsed;
}
public void setDescriptionParsed(String descriptionParsed) {
mDescriptionParsed = descriptionParsed;
}
public String getLink() {
return mLink;
}
public void setLink(String link) {
mLink = link;
}
public Boolean getLoggedIn() {
return mLoggedIn;
}
public void setLoggedIn(Boolean loggedIn) {
mLoggedIn = loggedIn;
}
public String getName() {
return mName;
}
public void setName(String name) {
mName = name;
}
public Long getNextStart() {
return mNextStart;
}
public void setNextStart(Long nextStart) {
mNextStart = nextStart;
}
public String getNumRecentReplies() {
return mNumRecentReplies;
}
public void setNumRecentReplies(String numRecentReplies) {
mNumRecentReplies = numRecentReplies;
}
public String getParentCid() {
return mParentCid;
}
public void setParentCid(String parentCid) {
mParentCid = parentCid;
}
public String getPostCount() {
return mPostCount;
}
public void setPostCount(String postCount) {
mPostCount = postCount;
}
public Privileges getPrivileges() {
return mPrivileges;
}
public void setPrivileges(Privileges privileges) {
mPrivileges = privileges;
}
public String getSlug() {
return mSlug;
}
public void setSlug(String slug) {
mSlug = slug;
}
public String getTitle() {
return mTitle;
}
public void setTitle(String title) {
mTitle = title;
}
public String getTopicCount() {
return mTopicCount;
}
public void setTopicCount(String topicCount) {
mTopicCount = topicCount;
}
public List<Topic> getTopics() {
return mTopics;
}
public void setTopics(List<Topic> topics) {
mTopics = topics;
}
public Long getTotalPostCount() {
return mTotalPostCount;
}
public void setTotalPostCount(Long totalPostCount) {
mTotalPostCount = totalPostCount;
}
public Long getTotalTopicCount() {
return mTotalTopicCount;
}
public void setTotalTopicCount(Long totalTopicCount) {
mTotalTopicCount = totalTopicCount;
}
}

View File

@@ -0,0 +1,30 @@
package org.autojs.autojs.network.entity.topic;
import com.google.gson.annotations.SerializedName;
@SuppressWarnings("unused")
public class Page {
@SerializedName("active")
private boolean mActive;
@SerializedName("page")
private long mPage;
public boolean getActive() {
return mActive;
}
public void setActive(boolean active) {
mActive = active;
}
public long getPage() {
return mPage;
}
public void setPage(long page) {
mPage = page;
}
}

View File

@@ -0,0 +1,71 @@
package org.autojs.autojs.network.entity.topic;
import java.util.List;
import com.google.gson.annotations.SerializedName;
@SuppressWarnings("unused")
public class Pagination {
@SerializedName("currentPage")
private Long mCurrentPage;
@SerializedName("next")
private Page mNext;
@SerializedName("pageCount")
private Long mPageCount;
@SerializedName("pages")
private List<Object> mPages;
@SerializedName("prev")
private Page mPrev;
@SerializedName("rel")
private List<Object> mRel;
public Long getCurrentPage() {
return mCurrentPage;
}
public void setCurrentPage(Long currentPage) {
mCurrentPage = currentPage;
}
public Page getNext() {
return mNext;
}
public void setNext(Page next) {
mNext = next;
}
public Long getPageCount() {
return mPageCount;
}
public void setPageCount(Long pageCount) {
mPageCount = pageCount;
}
public List<Object> getPages() {
return mPages;
}
public void setPages(List<Object> pages) {
mPages = pages;
}
public Page getPrev() {
return mPrev;
}
public void setPrev(Page prev) {
mPrev = prev;
}
public List<Object> getRel() {
return mRel;
}
public void setRel(List<Object> rel) {
mRel = rel;
}
}

View File

@@ -0,0 +1,182 @@
package org.autojs.autojs.network.entity.topic;
import com.google.gson.annotations.SerializedName;
import org.autojs.autojs.network.entity.user.User;
@SuppressWarnings("unused")
public class Post {
@SerializedName("content")
private String mContent;
@SerializedName("downvoted")
private boolean mDownvoted;
@SerializedName("downvotes")
private long mDownvotes;
@SerializedName("edited")
private String mEdited;
@SerializedName("editedISO")
private String mEditedISO;
@SerializedName("index")
private long mIndex;
@SerializedName("pid")
private String mPid;
@SerializedName("replies")
private Replies mReplies;
@SerializedName("selfPost")
private boolean mSelfPost;
@SerializedName("tid")
private String mTid;
@SerializedName("timestamp")
private String mTimestamp;
@SerializedName("timestampISO")
private String mTimestampISO;
@SerializedName("uid")
private String mUid;
@SerializedName("upvoted")
private boolean mUpvoted;
@SerializedName("upvotes")
private long mUpvotes;
@SerializedName("user")
private User mUser;
@SerializedName("votes")
private long mVotes;
public String getContent() {
return mContent;
}
public void setContent(String content) {
mContent = content;
}
public boolean getDownvoted() {
return mDownvoted;
}
public void setDownvoted(boolean downvoted) {
mDownvoted = downvoted;
}
public long getDownvotes() {
return mDownvotes;
}
public void setDownvotes(long downvotes) {
mDownvotes = downvotes;
}
public String getEdited() {
return mEdited;
}
public void setEdited(String edited) {
mEdited = edited;
}
public String getEditedISO() {
return mEditedISO;
}
public void setEditedISO(String editedISO) {
mEditedISO = editedISO;
}
public long getIndex() {
return mIndex;
}
public void setIndex(long index) {
mIndex = index;
}
public String getPid() {
return mPid;
}
public void setPid(String pid) {
mPid = pid;
}
public Replies getReplies() {
return mReplies;
}
public void setReplies(Replies replies) {
mReplies = replies;
}
public boolean getSelfPost() {
return mSelfPost;
}
public void setSelfPost(boolean selfPost) {
mSelfPost = selfPost;
}
public String getTid() {
return mTid;
}
public void setTid(String tid) {
mTid = tid;
}
public String getTimestamp() {
return mTimestamp;
}
public void setTimestamp(String timestamp) {
mTimestamp = timestamp;
}
public String getTimestampISO() {
return mTimestampISO;
}
public void setTimestampISO(String timestampISO) {
mTimestampISO = timestampISO;
}
public String getUid() {
return mUid;
}
public void setUid(String uid) {
mUid = uid;
}
public boolean getUpvoted() {
return mUpvoted;
}
public void setUpvoted(boolean upvoted) {
mUpvoted = upvoted;
}
public long getUpvotes() {
return mUpvotes;
}
public void setUpvotes(long upvotes) {
mUpvotes = upvotes;
}
public User getUser() {
return mUser;
}
public void setUser(User user) {
mUser = user;
}
public long getVotes() {
return mVotes;
}
public void setVotes(long votes) {
mVotes = votes;
}
}

View File

@@ -0,0 +1,100 @@
package org.autojs.autojs.network.entity.topic;
import com.google.gson.annotations.SerializedName;
@SuppressWarnings("unused")
public class Privileges {
@SerializedName("cid")
private String mCid;
@SerializedName("editable")
private Boolean mEditable;
@SerializedName("isAdminOrMod")
private Boolean mIsAdminOrMod;
@SerializedName("read")
private Boolean mRead;
@SerializedName("topics:create")
private Boolean mTopicsCreate;
@SerializedName("topics:read")
private Boolean mTopicsRead;
@SerializedName("topics:tag")
private Boolean mTopicsTag;
@SerializedName("uid")
private Long mUid;
@SerializedName("view_deleted")
private Boolean mViewDeleted;
public String getCid() {
return mCid;
}
public void setCid(String cid) {
mCid = cid;
}
public Boolean getEditable() {
return mEditable;
}
public void setEditable(Boolean editable) {
mEditable = editable;
}
public Boolean getIsAdminOrMod() {
return mIsAdminOrMod;
}
public void setIsAdminOrMod(Boolean isAdminOrMod) {
mIsAdminOrMod = isAdminOrMod;
}
public Boolean getRead() {
return mRead;
}
public void setRead(Boolean read) {
mRead = read;
}
public Boolean getTopicsCreate() {
return mTopicsCreate;
}
public void setTopicsCreate(Boolean topicsCreate) {
mTopicsCreate = topicsCreate;
}
public Boolean getTopicsRead() {
return mTopicsRead;
}
public void setTopicsRead(Boolean topicsRead) {
mTopicsRead = topicsRead;
}
public Boolean getTopicsTag() {
return mTopicsTag;
}
public void setTopicsTag(Boolean topicsTag) {
mTopicsTag = topicsTag;
}
public Long getUid() {
return mUid;
}
public void setUid(Long uid) {
mUid = uid;
}
public Boolean getViewDeleted() {
return mViewDeleted;
}
public void setViewDeleted(Boolean viewDeleted) {
mViewDeleted = viewDeleted;
}
}

View File

@@ -0,0 +1,53 @@
package org.autojs.autojs.network.entity.topic;
import java.util.List;
import com.google.gson.annotations.SerializedName;
import org.autojs.autojs.network.entity.user.User;
@SuppressWarnings("unused")
public class Replies {
@SerializedName("count")
private long mCount;
@SerializedName("hasMore")
private boolean mHasMore;
@SerializedName("text")
private String mText;
@SerializedName("users")
private List<User> mUsers;
public long getCount() {
return mCount;
}
public void setCount(long count) {
mCount = count;
}
public boolean getHasMore() {
return mHasMore;
}
public void setHasMore(boolean hasMore) {
mHasMore = hasMore;
}
public String getText() {
return mText;
}
public void setText(String text) {
mText = text;
}
public List<User> getUsers() {
return mUsers;
}
public void setUsers(List<User> users) {
mUsers = users;
}
}

View File

@@ -0,0 +1,379 @@
package org.autojs.autojs.network.entity.topic;
import android.text.Html;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import org.autojs.autojs.network.entity.user.User;
@SuppressWarnings("unused")
public class Topic {
private static final Gson GSON = new Gson();
@SerializedName("category")
private Category mCategory;
@SerializedName("cid")
private String mCid;
@SerializedName("deleted")
private boolean mDeleted;
@SerializedName("downvotes")
private long mDownvotes;
@SerializedName("icons")
private List<Object> mIcons;
@SerializedName("ignored")
private boolean mIgnored;
@SerializedName("index")
private long mIndex;
@SerializedName("isOwner")
private boolean mIsOwner;
@SerializedName("lastposttime")
private String mLastposttime;
@SerializedName("lastposttimeISO")
private String mLastposttimeISO;
@SerializedName("locked")
private boolean mLocked;
@SerializedName("mainPid")
private String mMainPid;
@SerializedName("pinned")
private boolean mPinned;
@SerializedName("postcount")
private String mPostcount;
@SerializedName("slug")
private String mSlug;
@SerializedName("tags")
private List<Object> mTags;
@SerializedName("thumb")
private String mThumb;
@SerializedName("tid")
private String mTid;
@SerializedName("timestamp")
private String mTimestamp;
@SerializedName("timestampISO")
private String mTimestampISO;
@SerializedName("title")
private String mTitle;
@SerializedName("titleRaw")
private String mTitleRaw;
@SerializedName("uid")
private String mUid;
@SerializedName("unread")
private boolean mUnread;
@SerializedName("unreplied")
private boolean mUnreplied;
@SerializedName("upvotes")
private long mUpvotes;
@SerializedName("user")
private User mUser;
@SerializedName("viewcount")
private String mViewcount;
@SerializedName("votes")
private long mVotes;
@SerializedName("posts")
private List<Post> mPosts = new ArrayList<>();
@SerializedName("teaser")
private Post mTeaser;
private AppInfo mAppInfo;
public Category getCategory() {
return mCategory;
}
public void setCategory(Category category) {
mCategory = category;
}
public String getCid() {
return mCid;
}
public void setCid(String cid) {
mCid = cid;
}
public boolean getDeleted() {
return mDeleted;
}
public void setDeleted(boolean deleted) {
mDeleted = deleted;
}
public long getDownvotes() {
return mDownvotes;
}
public void setDownvotes(long downvotes) {
mDownvotes = downvotes;
}
public List<Object> getIcons() {
return mIcons;
}
public void setIcons(List<Object> icons) {
mIcons = icons;
}
public boolean getIgnored() {
return mIgnored;
}
public void setIgnored(boolean ignored) {
mIgnored = ignored;
}
public long getIndex() {
return mIndex;
}
public void setIndex(long index) {
mIndex = index;
}
public boolean getIsOwner() {
return mIsOwner;
}
public void setIsOwner(boolean isOwner) {
mIsOwner = isOwner;
}
public String getLastposttime() {
return mLastposttime;
}
public void setLastposttime(String lastposttime) {
mLastposttime = lastposttime;
}
public String getLastposttimeISO() {
return mLastposttimeISO;
}
public void setLastposttimeISO(String lastposttimeISO) {
mLastposttimeISO = lastposttimeISO;
}
public boolean getLocked() {
return mLocked;
}
public void setLocked(boolean locked) {
mLocked = locked;
}
public String getMainPid() {
return mMainPid;
}
public void setMainPid(String mainPid) {
mMainPid = mainPid;
}
public boolean getPinned() {
return mPinned;
}
public void setPinned(boolean pinned) {
mPinned = pinned;
}
public String getPostcount() {
return mPostcount;
}
public void setPostcount(String postcount) {
mPostcount = postcount;
}
public String getSlug() {
return mSlug;
}
public void setSlug(String slug) {
mSlug = slug;
}
public List<Object> getTags() {
return mTags;
}
public void setTags(List<Object> tags) {
mTags = tags;
}
public String getThumb() {
return mThumb;
}
public void setThumb(String thumb) {
mThumb = thumb;
}
public String getTid() {
return mTid;
}
public void setTid(String tid) {
mTid = tid;
}
public String getTimestamp() {
return mTimestamp;
}
public void setTimestamp(String timestamp) {
mTimestamp = timestamp;
}
public String getTimestampISO() {
return mTimestampISO;
}
public void setTimestampISO(String timestampISO) {
mTimestampISO = timestampISO;
}
public String getTitle() {
return mTitle;
}
public void setTitle(String title) {
mTitle = title;
}
public String getTitleRaw() {
return mTitleRaw;
}
public void setTitleRaw(String titleRaw) {
mTitleRaw = titleRaw;
}
public String getUid() {
return mUid;
}
public void setUid(String uid) {
mUid = uid;
}
public boolean getUnread() {
return mUnread;
}
public void setUnread(boolean unread) {
mUnread = unread;
}
public boolean getUnreplied() {
return mUnreplied;
}
public void setUnreplied(boolean unreplied) {
mUnreplied = unreplied;
}
public long getUpvotes() {
return mUpvotes;
}
public void setUpvotes(long upvotes) {
mUpvotes = upvotes;
}
public User getUser() {
return mUser;
}
public void setUser(User user) {
mUser = user;
}
public String getViewcount() {
return mViewcount;
}
public void setViewcount(String viewcount) {
mViewcount = viewcount;
}
public long getVotes() {
return mVotes;
}
public void setVotes(long votes) {
mVotes = votes;
}
public List<Post> getPosts() {
return mPosts;
}
public void setPosts(List<Post> posts) {
mPosts = posts;
}
public AppInfo getAppInfo() {
if (mAppInfo != null) {
return mAppInfo;
}
if (mTeaser == null || mTeaser.getContent() == null) {
return null;
}
try {
String decoded = Html.fromHtml(mTeaser.getContent()).toString();
AppInfo appInfo = GSON.fromJson(decoded, AppInfo.class);
mAppInfo = appInfo;
return appInfo;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
public String toString() {
return "Topic{" +
"mCategory=" + mCategory +
", mCid='" + mCid + '\'' +
", mDeleted=" + mDeleted +
", mDownvotes=" + mDownvotes +
", mIcons=" + mIcons +
", mIgnored=" + mIgnored +
", mIndex=" + mIndex +
", mIsOwner=" + mIsOwner +
", mLastposttime='" + mLastposttime + '\'' +
", mLastposttimeISO='" + mLastposttimeISO + '\'' +
", mLocked=" + mLocked +
", mMainPid='" + mMainPid + '\'' +
", mPinned=" + mPinned +
", mPostcount='" + mPostcount + '\'' +
", mSlug='" + mSlug + '\'' +
", mTags=" + mTags +
", mThumb='" + mThumb + '\'' +
", mTid='" + mTid + '\'' +
", mTimestamp='" + mTimestamp + '\'' +
", mTimestampISO='" + mTimestampISO + '\'' +
", mTitle='" + mTitle + '\'' +
", mTitleRaw='" + mTitleRaw + '\'' +
", mUid='" + mUid + '\'' +
", mUnread=" + mUnread +
", mUnreplied=" + mUnreplied +
", mUpvotes=" + mUpvotes +
", mUser=" + mUser +
", mViewcount='" + mViewcount + '\'' +
", mVotes=" + mVotes +
", mPosts=" + mPosts +
", mTeaser=" + mTeaser +
", mAppInfo=" + mAppInfo +
'}';
}
}

View File

@@ -52,7 +52,7 @@ import org.autojs.autojs.ui.floating.FloatyWindowManger;
import org.autojs.autojs.ui.log.LogActivity_;
import org.autojs.autojs.ui.main.community.CommunityFragment;
import org.autojs.autojs.ui.main.community.CommunityFragment_;
import org.autojs.autojs.ui.main.sample.MarketFragment_;
import org.autojs.autojs.ui.main.market.MarketFragment;
import org.autojs.autojs.ui.main.scripts.MyScriptListFragment_;
import org.autojs.autojs.ui.main.task.TaskManagerFragment_;
import org.autojs.autojs.ui.settings.SettingsActivity_;
@@ -172,7 +172,7 @@ public class MainActivity extends BaseActivity implements OnActivityResultDelega
.add(new MyScriptListFragment_(), R.string.text_file)
.add(new DocsFragment_(), R.string.text_tutorial)
.add(new CommunityFragment_(), R.string.text_community)
.add(new MarketFragment_(), R.string.text_market)
.add(new MarketFragment(), R.string.text_market)
.add(new TaskManagerFragment_(), R.string.text_manage)
.build();
mViewPager.setAdapter(mPagerAdapter);

View File

@@ -0,0 +1,98 @@
package org.autojs.autojs.ui.main.market
import android.app.Activity
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.stardust.autojs.workground.WrapContentLinearLayoutManager
import kotlinx.android.synthetic.main.fragment_market.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import org.autojs.autojs.R
import org.autojs.autojs.network.TopicService
import org.autojs.autojs.network.entity.topic.Topic
import org.autojs.autojs.ui.main.ViewPagerFragment
import org.autojs.autojs.ui.widget.AvatarView
import org.joda.time.format.DateTimeFormat
class MarketFragment : ViewPagerFragment(0) {
private val mTopics = ArrayList<Topic>()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_market, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
topicsView.layoutManager = WrapContentLinearLayoutManager(context)
topicsView.adapter = Adapter()
swipeRefreshLayout.setOnRefreshListener {
refresh()
}
refresh()
}
private fun refresh() {
GlobalScope.launch(Dispatchers.Main) {
swipeRefreshLayout.isRefreshing = true
val topics = TopicService.getScriptsTopics()
mTopics.clear()
mTopics.addAll(topics)
topicsView.adapter!!.notifyDataSetChanged()
swipeRefreshLayout.isRefreshing = false
}
}
override fun onBackPressed(activity: Activity): Boolean {
return false
}
override fun onFabClick(fab: FloatingActionButton) {
}
inner class TopicViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val rootView: TextView = itemView.findViewById(R.id.root)
val titleView: TextView = itemView.findViewById(R.id.title)
val avatarView: AvatarView = itemView.findViewById(R.id.avatar)
val usernameView: TextView = itemView.findViewById(R.id.username)
val dateView: TextView = itemView.findViewById(R.id.date)
}
inner class Adapter : RecyclerView.Adapter<TopicViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TopicViewHolder {
return TopicViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.item_topic, parent, false))
}
override fun getItemCount(): Int {
return mTopics.size
}
override fun onBindViewHolder(holder: TopicViewHolder, position: Int) {
val topic = mTopics[position]
holder.run {
val root = topic.appInfo.permissions.contains("root")
rootView.text = if (root) {
"Root"
} else {
"免Root"
}
titleView.text = topic.title
avatarView.setUser(topic.user)
usernameView.text = topic.user.username
dateView.text = DateTimeFormat.mediumDateTime().print(topic.timestamp.toLong())
}
}
}
}

View File

@@ -1,88 +0,0 @@
package org.autojs.autojs.ui.main.sample;
import android.app.Activity;
import android.os.Bundle;
import androidx.annotation.Nullable;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import org.autojs.autojs.R;
import org.autojs.autojs.ui.main.QueryEvent;
import org.autojs.autojs.ui.main.ViewPagerFragment;
import com.stardust.util.BackPressedHandler;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
/**
* Created by Stardust on 2017/10/28.
*/
@EFragment(R.layout.fragment_market)
public class MarketFragment extends ViewPagerFragment implements BackPressedHandler {
public MarketFragment() {
super(ROTATION_GONE);
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
}
@AfterViews
void setUpViews() {
}
@Override
public void onResume() {
super.onResume();
((BackPressedHandler.HostActivity) getActivity())
.getBackPressedObserver()
.registerHandlerAtFront(this);
}
@Override
public void onPause() {
super.onPause();
((BackPressedHandler.HostActivity) getActivity())
.getBackPressedObserver()
.unregisterHandler(this);
}
@Override
protected void onFabClick(FloatingActionButton fab) {
}
@Override
public boolean onBackPressed(Activity activity) {
return false;
}
@Subscribe
public void onQuerySummit(QueryEvent event) {
if (!isShown()) {
return;
}
if (event == QueryEvent.CLEAR) {
return;
}
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="5dp"/>
<solid android:color="@color/colorAccent"/>
</shape>

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,35 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#80000000"/>
<padding
android:bottom="3dp"
android:left="12dp"
android:right="12dp"
android:top="3dp"/>
<corners android:radius="16dp"/>
</shape>
</item>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#40000000"/>
<padding
android:bottom="3dp"
android:left="12dp"
android:right="12dp"
android:top="3dp"/>
<corners android:radius="16dp"/>
</shape>
</item>
</selector>

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<View xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#d8d8d8"/>

View File

@@ -1,9 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<org.autojs.autojs.theme.widget.ThemeColorSwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swipeRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.ThemeColorRecyclerView
android:id="@+id/topicsView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
</org.autojs.autojs.theme.widget.ThemeColorSwipeRefreshLayout>

View File

@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:layout_marginTop="2dp"
android:layout_marginRight="4dp"
android:layout_marginBottom="2dp"
app:cardCornerRadius="2dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/root"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_label_root_permission"
android:paddingLeft="4dp"
android:paddingTop="2dp"
android:paddingRight="4dp"
android:paddingBottom="2dp"
android:textColor="@android:color/white"
android:textSize="12sp"
tools:text="免Root"/>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:textColor="@android:color/black"
android:textSize="17sp"
tools:text="Hello, Auto.js"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp">
<org.autojs.autojs.ui.widget.AvatarView
android:id="@+id/avatar"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:scaleType="fitXY"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="vertical">
<TextView
android:id="@+id/username"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#202020"
android:textSize="14sp"
tools:text="admin"/>
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#909090"
android:textSize="13sp"
tools:text="admin"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="24dp"
android:layout_marginTop="8dp"
android:orientation="horizontal"
android:paddingTop="3dp"
android:paddingBottom="3dp">
<ImageView
android:id="@+id/download"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:src="@drawable/download"
android:tint="#939393"/>
<ImageView
android:id="@+id/upvote"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:src="@drawable/upvote"
android:tint="#939393"/>
<ImageView
android:id="@+id/downvote"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:src="@drawable/downvote"
android:tint="#939393"/>
<ImageView
android:id="@+id/star"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:src="@drawable/star"
android:tint="#939393"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>

View File

@@ -1,19 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/run_repeatedly"
android:title="@string/text_run_repeatedly"/>
<item
android:id="@+id/create_shortcut"
android:title="@string/text_send_shortcut"/>
<item
android:id="@+id/copy_to_my_script"
android:title="@string/text_copy_to_my_script"/>
<item
android:id="@+id/reset"
android:title="@string/text_reset_to_initial_content"/>
</menu>

View File

@@ -32,13 +32,11 @@
<string name="developer">Stardust</string>
<string name="github">Source Code</string>
<string name="text_already_copy_to_clip">Copied</string>
<string name="donate_developer">Donate</string>
<string name="my_github">https://github.com/hyb1996/NoRootScriptDroid</string>
<string name="share_app">[UiAutomator]Downloadhttp://www.coolapk.com/apk/org.autojs.autojs </string>
<string name="text_floating_window">Floating Window</string>
<string name="text_error_report">Bug Report</string>
<string name="text_press_again_to_exit">Press again to exit</string>
<string name="text_no_running_script">No running scipts</string>
<string name="text_already_stop_n_scripts">%d script(s) is(are) stopped</string>
<string name="text_start_running">Running</string>
<string name="text_open_by_other_apps">Open by other apps</string>
@@ -50,13 +48,11 @@
<string name="text_error">Error</string>
<string name="text_copy_debug_info">Copy debugging log</string>
<string name="text_it_is_the_developer_of_app">This is a software developer(。・・)</string>
<string name="text_lll">lol</string>
<string name="text_please_choose">Please choose </string>
<string name="text_crash">Crash~ o(≧口≦)o</string>
<string name="crash_feedback">(ಥ _ ಥ)Exit or submit a bug report or copy debugging log to the developer(≧∇≦)ノ</string>
<string name="text_clear">Clear</string>
<string name="text_console">Console</string>
<string name="text_report_bug">Submit Bug report</string>
<string name="text_report_fail">Submission Failed</string>
<string name="text_report_succeed">Submitted successfully</string>
<string name="edit_and_run_handle_intent_error">Cannot process file</string>
@@ -66,7 +62,6 @@
<string name="text_recorded">Recording stopped</string>
<string name="text_copy_to_clip">Copy</string>
<string name="text_file_write_fail">File writing failed</string>
<string name="text_join_qq_group">Join in QQ Group</string>
<string name="text_use_volume_control_record">Use the volume keys to control</string>
<string name="summary_use_volume_control_record">Stop or start recording when volume changes</string>
<string name="key_use_volume_control_record">key_use_volume_control_record</string>
@@ -139,7 +134,6 @@
<string name="air_title_issue">Issue</string>
<string name="air_dialog_description_failed_unknown">Unknown error</string>
<string name="air_label_use_email">Send by email</string>
<string name="text_name_should_not_be_empty">Invalid name</string>
<string name="text_import_fail">Import failed</string>
<string name="text_no_brower">No brower installed.</string>
<string name="text_please_choose_a_script">Choose a script</string>
@@ -150,7 +144,6 @@
<string name="text_check_update_error">Check for updates failed</string>
<string name="text_download_url">Download</string>
<string name="text_directly_download">Download now</string>
<string name="text_downloading">Dowloading</string>
<string name="text_download_failed">Download failed</string>
<string name="text_do_not_ask_again_for_this_version">Do not ask again for this version</string>
<string name="text_code_beautify">Beautify code</string>

View File

@@ -3,7 +3,6 @@
<color name="window_background">#202020</color>
<color name="item_background">#333333</color>
<color name="item_background_dark">#252525</color>
<color name="text_color_primary">#7F7F80</color>
<color name="drawer_menu_item_text_color">#9a9a9a</color>
<color name="drawer_menu_group_text_color">#808080</color>
<color name="divider">#111214</color>

View File

@@ -10,14 +10,11 @@
<color name="prefTextColorSecondary">#9DA0A2</color>
<color name="prefTextColorPrimary">#282C2F</color>
<color name="divider_functions_keyboard">#f0f0f0</color>
<color name="color_red">#ef5350</color>
<color name="project_toolbar_color">#777777</color>
<color name="theme_color_black">#111214</color>
<color name="window_background">#FFFFFF</color>
<color name="item_background">#FFFFFF</color>
<color name="item_background_dark">#FFFFFF</color>
<color name="text_color_primary">@android:color/primary_text_light</color>
<color name="text_color_secondary">#484C4F</color>
<color name="text_color_thirdly">#9DA0A2</color>
<color name="divider">#f2f3f5</color>

View File

@@ -33,14 +33,11 @@
<string name="email" translatable="false">hybbbb1996@gmail.com</string>
<string name="github">软件源代码</string>
<string name="text_already_copy_to_clip">已复制到剪贴板</string>
<string name="donate_developer">打赏作者</string>
<string name="my_github">https://github.com/hyb1996/NoRootScriptDroid</string>
<string name="share_app">[Auto.js]下载地址http://www.coolapk.com/apk/org.autojs.autojs </string>
<string name="text_floating_window">悬浮窗</string>
<string name="text_error_report">错误报告</string>
<string name="text_press_again_to_exit">再按一次退出程序</string>
<string name="sorry_for_crash">很抱歉(ಥ _ ಥ)程序遇到未知错误,即将停止运行\n错误代码</string>
<string name="text_no_running_script">没有正在运行的脚本</string>
<string name="text_already_stop_n_scripts">已停止%d个正在运行的脚本</string>
<string name="text_start_running">开始运行</string>
<string name="text_open_by_other_apps">用其他应用打开</string>
@@ -52,14 +49,12 @@
<string name="text_error">错误</string>
<string name="text_copy_debug_info">复制调试信息</string>
<string name="text_it_is_the_developer_of_app">这是软件开发者(。・・)</string>
<string name="text_lll">略略略</string>
<string name="text_please_choose">请选择</string>
<string name="text_crash">崩溃了o(≧口≦)o</string>
<string name="crash_feedback">将会自动提交错误信息。您也可以手动复制调试信息提交给开发者(*^▽^*)或者点击\"退出\"退出程序o(╥﹏╥)o</string>
<string name="text_clear">清空</string>
<string name="text_console">控制台</string>
<string name="text_log">日志</string>
<string name="text_report_bug">提交错误报告</string>
<string name="text_report_fail">提交失败</string>
<string name="text_report_succeed">提交成功</string>
<string name="edit_and_run_handle_intent_error">无法处理文件</string>
@@ -69,7 +64,6 @@
<string name="text_recorded">录制结束</string>
<string name="text_copy_to_clip">复制到剪贴板</string>
<string name="text_file_write_fail">文件写入失败</string>
<string name="text_join_qq_group">加入QQ互赞&amp;交流群</string>
<string name="text_use_volume_control_record">使用音量下键控制</string>
<string name="summary_use_volume_control_record">开启悬浮窗后每次音量下键会开始或停止脚本录制</string>
<string name="key_use_volume_control_record">key_use_volume_control_record</string>
@@ -104,7 +98,6 @@
<string name="key_use_volume_control_running">key_use_volume_control_running</string>
<string name="text_use_volume_to_stop_running">音量上键停止所有脚本</string>
<string name="text_need_to_enable_accessibility_service">需要启用无障碍服务</string>
<string name="text_name_should_not_be_empty">名称不能为空</string>
<string name="text_import_fail">导入失败</string>
<string name="text_no_brower">没有浏览器耶o(╯□╰)o快去安装一个吧</string>
<string name="text_refresh">刷新</string>
@@ -126,7 +119,6 @@
<string name="text_release_notes">更新日志</string>
<string name="text_download_url">下载地址</string>
<string name="text_directly_download">直接下载</string>
<string name="text_downloading">下载中</string>
<string name="text_download_failed">下载失败</string>
<string name="text_do_not_ask_again_for_this_version">此版本不再提示</string>
<string name="text_code_beautify">格式化代码</string>
@@ -151,12 +143,6 @@
<string name="text_show_layout_hierarchy">在布局层次中查看</string>
<string name="text_show_layout_bounds">在布局范围中查看</string>
<string name="text_more">更多</string>
<string name="format_skip">跳过 %d</string>
<string name="key_ad_showing_mode">key_ad_showing_mode</string>
<string name="text_ad">广告</string>
<string name="show_ad">欣赏广告</string>
<string name="text_ad_showing_settings">广告显示设置</string>
<string name="text_default">Default</string>
<string name="text_script_save_successfully">保存成功,请刷新目录</string>
<string name="text_run_repeatedly">循环运行</string>
<string name="text_loop_interval">循环间隔(秒)</string>
@@ -166,7 +152,6 @@
<string name="hint_loop_delay">延迟多少秒后开始循环</string>
<string name="text_number_format_error">格式错误</string>
<string name="text_accessibility_settings">打开无障碍服务</string>
<string name="text_inspect_failed">布局抓取失败,请关闭悬浮窗后动一下页面重试</string>
<string name="text_enable_accessibitliy_service_by_root_failed">使用root权限开启失败</string>
<string name="text_on_progress">处理中</string>
<string name="text_delete_failed">删除失败</string>
@@ -184,7 +169,6 @@
<string name="text_directory">文件夹</string>
<string name="text_file">文件</string>
<string name="text_tutorial">教程</string>
<string name="text_script">脚本</string>
<string name="text_community">社区</string>
<string name="text_manage">管理</string>
<string name="not_login">未登录</string>
@@ -201,12 +185,10 @@
<string name="text_time">时间</string>
<string name="text_size">大小</string>
<string name="text_type">类型</string>
<string name="text_donate">捐赠</string>
<string name="text_editor_theme">编辑器主题</string>
<string name="text_jump_to_line">跳转到行</string>
<string name="text_info">信息</string>
<string name="text_find_or_replace">查找/替换</string>
<string name="text_paste">粘贴</string>
<string name="text_copy_all">复制全部</string>
<string name="text_copy_line">复制行</string>
<string name="text_delete_line">删除行</string>
@@ -219,14 +201,10 @@
<string name="text_find_prev">向上</string>
<string name="hint_regex">正则语法与JavaScript中相同, 可使用$1~9代替被捕获的匹配</string>
<string name="text_jump">跳转</string>
<string name="text_jump_to_def">转到定义</string>
<string name="text_jump_to_end">转到文件末尾</string>
<string name="text_jump_to_start">转到文件开始</string>
<string name="text_jump_to_line_start">转到行首</string>
<string name="text_jump_to_line_end">转到行尾</string>
<string name="text_refactor">重构</string>
<string name="text_select_variable">选择变量</string>
<string name="text_show_type">显示变量类型</string>
<string name="text_exit_floating_window">退出悬浮窗</string>
<string name="text_select_save_path">保存到</string>
<string name="text_cancel_download">取消下载</string>
@@ -267,9 +245,7 @@
<string name="text_register_fail">注册失败</string>
<string name="text_register_succeed">注册成功</string>
<string name="text_sample">示例代码</string>
<string name="text_copy_to_my_script">导入到我的脚本</string>
<string name="text_reset_to_initial_content">重置为初始内容</string>
<string name="text_reset_fail">重置失败</string>
<string name="text_reset_succeed">重置成功</string>
<string name="text_cannot_read_file">无法读取文件</string>
<string name="text_service">服务</string>
@@ -338,9 +314,6 @@
<string name="text_logout">退出登录</string>
<string name="nodebb_error_forbidden">操作失败,请稍后重试</string>
<string name="description_stable_mode">稳定模式通过省略布局细节使脚本抓取布局时更稳定,但同时获取到的屏幕上的控件可能会减少。\n\n重新启动无障碍服务才能生效。</string>
<string name="text_no_phone_state_permission">获取权限失败 :-(</string>
<string name="text_request_permission">重新授予</string>
<string name="info_no_phone_state_permission">软件需要显示启动页广告来维持服务器和软件的开发和维护,因此需要\"读取手机状态\"的权限。\n如果您不喜欢广告可以在设置中设定广告每天只显示一次。</string>
<string name="dex_crcs">2184044085\n3566596539\npJTCkHuhypD9i3UBQ55XQw==RtXsgCTVFA7VYhLeF1TSkg==</string>
<string name="text_size_min_value">8</string>
<string name="text_size_max_value">56</string>
@@ -354,7 +327,6 @@
<string name="text_inspect_layout_hierarchy">布局层次分析</string>
<string name="text_inspect_layout">布局分析</string>
<string name="text_pointer_location">指针位置[Root]</string>
<string name="text_skip">跳过</string>
<string name="text_change_script_dir">更改脚本文件夹路径</string>
<string name="key_script_dir_path">key_script_dir_path</string>
<string name="default_value_script_dir_path">/脚本/</string>
@@ -369,7 +341,6 @@
<string name="text_stop">停止</string>
<string name="text_new_watching_variable">增加监视的变量或表达式</string>
<string name="text_variable_or_expr">变量或表达式</string>
<string name="text_variable">变量</string>
<string name="text_remove_all_breakpoints">删除所有断点</string>
<string name="hint_long_click_run_to_debug">长按\"运行\"图标也可以启动调试</string>
<string name="format_debug_bar_title">调试 [%s]</string>
@@ -379,7 +350,6 @@
<string name="text_result">结果</string>
<string name="text_close">关闭</string>
<string name="text_execute">执行</string>
<string name="text_use_alarm_clock">使用系统闹钟唤醒Auto.js</string>
<string name="error_connect_to_remote">连接失败: %s</string>
<string name="text_are_you_sure_to_delete">确定要删除%s吗</string>
<string name="text_run_on_broadcast">特定事件(广播)触发运行</string>
@@ -387,8 +357,6 @@
<string name="text_class_or_package_name">类/包名</string>
<string name="text_view_docs">查看文档</string>
<string name="text_en_import">import</string>
<string name="key_ad_type">key_ad_type</string>
<string name="text_ad_type_settings">广告类型设置</string>
<string name="text_market">市场</string>
<string name="text_launch_config">运行配置</string>
<string name="text_main_file_name">主脚本名称</string>
@@ -431,8 +399,6 @@
<string name="text_run_on_startup">Auto.js启动时</string>
<string name="text_usage_stats_permission">查看使用统计权限</string>
<string name="description_usage_stats_permission">通过\"查看使用统计\"权限可以获取本设备过去使用应用的情况,从而使获取当前应用(currentPackage)时更准确。</string>
<string name="text_gesture_observing">手势监听</string>
<string name="summary_gesture_observing">开启后将支持events手势事件但Auto.js崩溃时可能会导致屏幕失灵</string>
<string name="text_open_with">打开方式</string>
<plurals name="air_error_short_description" key="air_error_short_description">
<item quantity="one">描述至少要 %d 个字.</item>