diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index bd35f5f4..04417f56 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -39,17 +39,27 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
- android:usesCleartextTraffic="true"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
+ android:usesCleartextTraffic="true"
tools:ignore="UnusedAttribute">
-
+
+
+
+
+ android:windowSoftInputMode="adjustResize"
+ android:theme="@style/AppTheme.PhotoView" />
@@ -199,8 +209,8 @@
android:windowSoftInputMode="adjustResize" />
+ android:label="@string/title_theme_settings"
+ android:windowSoftInputMode="adjustResize" />
diff --git a/app/src/main/assets/plugins.json b/app/src/main/assets/plugins.json
index 41b7c356..14448cf7 100644
--- a/app/src/main/assets/plugins.json
+++ b/app/src/main/assets/plugins.json
@@ -4,6 +4,7 @@
"id": "CommentLookup",
"name": "发言查询",
"desc": "使用第三方工具箱查询用户过往发言",
+ "author": "huanchengfly",
"version": "1.0",
"main_class": "com.huanchengfly.tieba.post.plugins.PluginCommentLookup"
}
diff --git a/app/src/main/java/com/huanchengfly/tieba/post/BaseApplication.kt b/app/src/main/java/com/huanchengfly/tieba/post/BaseApplication.kt
index 70ae19f9..4bd9a60c 100644
--- a/app/src/main/java/com/huanchengfly/tieba/post/BaseApplication.kt
+++ b/app/src/main/java/com/huanchengfly/tieba/post/BaseApplication.kt
@@ -173,7 +173,7 @@ class BaseApplication : Application(), IApp {
override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {}
override fun onActivityDestroyed(activity: Activity) {}
})
- CrashUtil.CrashHandler.getInstance().init(this)
+ if (BuildConfig.DEBUG) CrashUtil.CrashHandler.getInstance().init(this)
PluginManager.init(this)
}
@@ -472,6 +472,6 @@ class BaseApplication : Application(), IApp {
}
override fun launchUrl(url: String) {
- launchUrl(this, url)
+ launchUrl(mActivityList.lastOrNull() ?: this, url)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/huanchengfly/tieba/post/activities/PluginManageActivity.kt b/app/src/main/java/com/huanchengfly/tieba/post/activities/PluginManageActivity.kt
new file mode 100644
index 00000000..9eb47576
--- /dev/null
+++ b/app/src/main/java/com/huanchengfly/tieba/post/activities/PluginManageActivity.kt
@@ -0,0 +1,44 @@
+package com.huanchengfly.tieba.post.activities
+
+import android.os.Bundle
+import androidx.appcompat.widget.Toolbar
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import butterknife.BindView
+import com.google.android.material.appbar.CollapsingToolbarLayout
+import com.huanchengfly.tieba.post.R
+import com.huanchengfly.tieba.post.adapters.PluginManageAdapter
+import com.huanchengfly.tieba.post.components.dividers.SpacesItemDecoration
+import com.huanchengfly.tieba.post.dpToPx
+import com.huanchengfly.tieba.post.plugins.PluginManager
+import com.huanchengfly.tieba.post.utils.ThemeUtil
+
+class PluginManageActivity : BaseActivity() {
+ @BindView(R.id.toolbar)
+ lateinit var toolbar: Toolbar
+
+ @BindView(R.id.collapsing_toolbar)
+ lateinit var collapsingToolbar: CollapsingToolbarLayout
+
+ @BindView(R.id.recycler_view)
+ lateinit var recyclerView: RecyclerView
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ ThemeUtil.setTranslucentThemeBackground(findViewById(R.id.background))
+ setSupportActionBar(toolbar)
+ supportActionBar?.setDisplayHomeAsUpEnabled(true)
+ supportActionBar?.title = title
+ collapsingToolbar.title = title
+ PluginManager.reloadPluginManifests()
+ recyclerView.apply {
+ adapter = PluginManageAdapter(this@PluginManageActivity)
+ layoutManager = LinearLayoutManager(this@PluginManageActivity)
+ addItemDecoration(SpacesItemDecoration(0, 0, 0, 8.dpToPx()))
+ }
+ }
+
+ override fun getLayoutId(): Int {
+ return R.layout.activity_plugin_manage
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/huanchengfly/tieba/post/activities/UserActivity.kt b/app/src/main/java/com/huanchengfly/tieba/post/activities/UserActivity.kt
index 43f6dfdf..e785dc30 100644
--- a/app/src/main/java/com/huanchengfly/tieba/post/activities/UserActivity.kt
+++ b/app/src/main/java/com/huanchengfly/tieba/post/activities/UserActivity.kt
@@ -219,7 +219,6 @@ class UserActivity : BaseActivity() {
}
}
return if (PluginManager.performPluginMenuClick(
- this,
PluginManager.MENU_USER_ACTIVITY,
item.itemId,
profileBean
diff --git a/app/src/main/java/com/huanchengfly/tieba/post/adapters/PluginManageAdapter.kt b/app/src/main/java/com/huanchengfly/tieba/post/adapters/PluginManageAdapter.kt
new file mode 100644
index 00000000..c2642f6a
--- /dev/null
+++ b/app/src/main/java/com/huanchengfly/tieba/post/adapters/PluginManageAdapter.kt
@@ -0,0 +1,45 @@
+package com.huanchengfly.tieba.post.adapters
+
+import android.content.Context
+import android.content.SharedPreferences
+import androidx.appcompat.widget.SwitchCompat
+import androidx.core.content.edit
+import com.huanchengfly.tieba.post.R
+import com.huanchengfly.tieba.post.adapters.base.BaseSingleTypeAdapter
+import com.huanchengfly.tieba.post.components.MyViewHolder
+import com.huanchengfly.tieba.post.plugins.PluginManager
+import com.huanchengfly.tieba.post.plugins.models.PluginManifest
+import com.huanchengfly.tieba.post.utils.SharedPreferencesUtil
+
+class PluginManageAdapter(context: Context) :
+ BaseSingleTypeAdapter(context, PluginManager.pluginManifests) {
+ val preferences: SharedPreferences
+ get() = SharedPreferencesUtil.get(SharedPreferencesUtil.SP_PLUGINS)
+
+ override fun getItemLayoutId(): Int {
+ return R.layout.item_plugin_list
+ }
+
+ override fun convert(viewHolder: MyViewHolder, item: PluginManifest, position: Int) {
+ viewHolder.setText(R.id.plugin_name, item.name)
+ viewHolder.setText(
+ R.id.plugin_info,
+ context.getString(R.string.template_plugin_info, item.version, item.author)
+ )
+ viewHolder.setText(R.id.plugin_desc, item.desc)
+ viewHolder.getView(R.id.plugin_status).apply {
+ isChecked = preferences.getBoolean("${item.id}_enabled", false)
+ setOnCheckedChangeListener { _, isChecked ->
+ preferences.edit(commit = true) {
+ putBoolean("${item.id}_enabled", isChecked)
+ }
+ PluginManager.reloadPlugins()
+ }
+ }
+ }
+
+ fun refresh() {
+ PluginManager.reloadPluginManifests()
+ setData(PluginManager.pluginManifests)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/huanchengfly/tieba/post/plugins/IPlugin.kt b/app/src/main/java/com/huanchengfly/tieba/post/plugins/IPlugin.kt
index 50ca831a..5fd02184 100644
--- a/app/src/main/java/com/huanchengfly/tieba/post/plugins/IPlugin.kt
+++ b/app/src/main/java/com/huanchengfly/tieba/post/plugins/IPlugin.kt
@@ -33,11 +33,11 @@ inline fun IPlugin.registerMenuItem(
inline fun IPlugin.registerMenuItem(
id: String,
title: String,
- crossinline callback: (Context, Data) -> Unit
+ crossinline callback: (Data) -> Unit
) {
registerMenuItem(id, title, object : ClickCallback {
- override fun onClick(context: Context, data: Data) {
- callback.invoke(context, data)
+ override fun onClick(data: Data) {
+ callback.invoke(data)
}
})
}
diff --git a/app/src/main/java/com/huanchengfly/tieba/post/plugins/PluginCommentLookup.kt b/app/src/main/java/com/huanchengfly/tieba/post/plugins/PluginCommentLookup.kt
index dc5b807d..f74af5ab 100644
--- a/app/src/main/java/com/huanchengfly/tieba/post/plugins/PluginCommentLookup.kt
+++ b/app/src/main/java/com/huanchengfly/tieba/post/plugins/PluginCommentLookup.kt
@@ -4,7 +4,6 @@ import com.huanchengfly.tieba.post.R
import com.huanchengfly.tieba.post.api.models.ProfileBean
import com.huanchengfly.tieba.post.plugins.interfaces.IApp
import com.huanchengfly.tieba.post.plugins.models.PluginManifest
-import com.huanchengfly.tieba.post.utils.launchUrl
class PluginCommentLookup(app: IApp, manifest: PluginManifest) : IPlugin(app, manifest) {
override fun onEnable() {
@@ -12,8 +11,8 @@ class PluginCommentLookup(app: IApp, manifest: PluginManifest) : IPlugin(app, ma
registerMenuItem(
"lookup_comment",
context.getString(R.string.plugin_comment_lookup_menu)
- ) { context, data ->
- launchUrl(context, "https://www.82cat.com/tieba/reply/${data.user?.name}/1")
+ ) { data ->
+ app.launchUrl("https://www.82cat.com/tieba/reply/${data.user?.name}/1")
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/huanchengfly/tieba/post/plugins/PluginManager.kt b/app/src/main/java/com/huanchengfly/tieba/post/plugins/PluginManager.kt
index 4ba938c0..2efedb3e 100644
--- a/app/src/main/java/com/huanchengfly/tieba/post/plugins/PluginManager.kt
+++ b/app/src/main/java/com/huanchengfly/tieba/post/plugins/PluginManager.kt
@@ -30,6 +30,11 @@ object PluginManager {
get() = SharedPreferencesUtil.get(SP_PLUGINS)
init {
+ reloadPluginMenu()
+ }
+
+ private fun reloadPluginMenu() {
+ registeredPluginMenuItems.clear()
listOf(
MENU_USER_ACTIVITY,
MENU_NONE
@@ -56,7 +61,6 @@ object PluginManager {
}
fun performPluginMenuClick(
- context: Context,
menuId: String,
itemId: Int,
data: Data
@@ -67,7 +71,7 @@ object PluginManager {
return false
}
return try {
- (item as PluginMenuItem).callback!!.onClick(context, data)
+ (item as PluginMenuItem).callback!!.onClick(data)
true
} catch (e: Exception) {
false
@@ -132,10 +136,11 @@ object PluginManager {
destroyPlugin(it)
}
pluginInstances.clear()
+ reloadPluginMenu()
reloadPluginManifests()
pluginManifests.forEach {
try {
- if (!it.pluginCreated && preferences.getBoolean("${it.id}_enabled", true)) {
+ if (!it.pluginCreated && preferences.getBoolean("${it.id}_enabled", false)) {
val pluginInstance = createPlugin(it)
if (pluginInstance != null) {
pluginInstances.add(pluginInstance)
@@ -163,7 +168,7 @@ class PluginMenuItem(
val callback: ClickCallback? = null
) {
interface ClickCallback {
- fun onClick(context: Context, data: Data)
+ fun onClick(data: Data)
}
override fun equals(other: Any?): Boolean {
diff --git a/app/src/main/java/com/huanchengfly/tieba/post/plugins/models/PluginManifest.kt b/app/src/main/java/com/huanchengfly/tieba/post/plugins/models/PluginManifest.kt
index f5fa41c6..5c8d9c71 100644
--- a/app/src/main/java/com/huanchengfly/tieba/post/plugins/models/PluginManifest.kt
+++ b/app/src/main/java/com/huanchengfly/tieba/post/plugins/models/PluginManifest.kt
@@ -7,6 +7,7 @@ data class PluginManifest(
val name: String,
val desc: String,
val version: String,
+ val author: String,
@SerializedName("main_class")
val mainClass: String
)
diff --git a/app/src/main/res/drawable/ic_round_extension.xml b/app/src/main/res/drawable/ic_round_extension.xml
new file mode 100644
index 00000000..a4a20d17
--- /dev/null
+++ b/app/src/main/res/drawable/ic_round_extension.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_plugin_manage.xml b/app/src/main/res/layout/activity_plugin_manage.xml
new file mode 100644
index 00000000..7ddabdd6
--- /dev/null
+++ b/app/src/main/res/layout/activity_plugin_manage.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_plugin_list.xml b/app/src/main/res/layout/item_plugin_list.xml
new file mode 100644
index 00000000..c8c9ee47
--- /dev/null
+++ b/app/src/main/res/layout/item_plugin_list.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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 5131f3e0..6edf43b2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -466,4 +466,6 @@
透明主题
自定义
查询发言
+ 附加功能管理
+ v%1$s · 作者 %2$s
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index eff9e73b..2fd88bd1 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -120,6 +120,16 @@
android:key="forumFabFunction"
android:title="@string/settings_forum_fab_function" />
+
+
+
+