From e0e412e85aaae9df5f8ce2aedde2c85596628adc Mon Sep 17 00:00:00 2001 From: kunfei Date: Wed, 26 Feb 2020 14:24:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 5 +- app/google-services.json | 29 ++++++++ app/src/debug/google-services.json | 69 ------------------- .../io/legado/app/ui/about/AboutActivity.kt | 8 +-- .../legado/app/ui/book/read/TextActionMenu.kt | 32 ++++++--- .../source/edit/BookSourceEditActivity.kt | 10 +-- .../legado/app/ui/rss/read/ReadRssActivity.kt | 4 +- .../rss/source/edit/RssSourceEditActivity.kt | 8 ++- .../io/legado/app/utils/ContextExtensions.kt | 11 --- app/src/main/res/layout/popup_action_menu.xml | 27 ++++++-- .../main/res/menu/content_select_action.xml | 3 + 11 files changed, 100 insertions(+), 106 deletions(-) delete mode 100644 app/src/debug/google-services.json diff --git a/app/build.gradle b/app/build.gradle index 585099975..d6f63988d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -54,6 +54,7 @@ android { if (project.hasProperty("RELEASE_STORE_FILE")) { signingConfig signingConfigs.myConfig } + applicationIdSuffix '.release' minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } @@ -123,7 +124,7 @@ dependencies { implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" //room - def room_version = '2.2.3' + def room_version = '2.2.4' implementation "androidx.room:room-runtime:$room_version" kapt "androidx.room:room-compiler:$room_version" @@ -175,7 +176,7 @@ dependencies { //MarkDown implementation 'ru.noties.markwon:core:3.0.2' - // 转换繁体 + //转换繁体 implementation 'com.github.houbb:opencc4j:1.4.0' } diff --git a/app/google-services.json b/app/google-services.json index 8cc19b1d5..fb88090cb 100644 --- a/app/google-services.json +++ b/app/google-services.json @@ -63,6 +63,35 @@ ] } } + }, + { + "client_info": { + "mobilesdk_app_id": "1:453392274790:android:c1481c1c3d3f51eff624a7", + "android_client_info": { + "package_name": "io.legado.app.release" + } + }, + "oauth_client": [ + { + "client_id": "453392274790-hnbpatpce9hbjiggj76hgo7queu86atq.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyD90mfNLhA7cAzzI9SonpSz5mrF5BnmyJA" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "453392274790-hnbpatpce9hbjiggj76hgo7queu86atq.apps.googleusercontent.com", + "client_type": 3 + } + ] + } + } } ], "configuration_version": "1" diff --git a/app/src/debug/google-services.json b/app/src/debug/google-services.json deleted file mode 100644 index 8cc19b1d5..000000000 --- a/app/src/debug/google-services.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "project_info": { - "project_number": "453392274790", - "firebase_url": "https://legado-fca69.firebaseio.com", - "project_id": "legado-fca69", - "storage_bucket": "legado-fca69.appspot.com" - }, - "client": [ - { - "client_info": { - "mobilesdk_app_id": "1:453392274790:android:1d2b1eefbe0e78cff624a7", - "android_client_info": { - "package_name": "io.legado.app" - } - }, - "oauth_client": [ - { - "client_id": "453392274790-hnbpatpce9hbjiggj76hgo7queu86atq.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyD90mfNLhA7cAzzI9SonpSz5mrF5BnmyJA" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "453392274790-hnbpatpce9hbjiggj76hgo7queu86atq.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - }, - { - "client_info": { - "mobilesdk_app_id": "1:453392274790:android:c4eac14b1410eec5f624a7", - "android_client_info": { - "package_name": "io.legado.app.debug" - } - }, - "oauth_client": [ - { - "client_id": "453392274790-hnbpatpce9hbjiggj76hgo7queu86atq.apps.googleusercontent.com", - "client_type": 3 - } - ], - "api_key": [ - { - "current_key": "AIzaSyD90mfNLhA7cAzzI9SonpSz5mrF5BnmyJA" - } - ], - "services": { - "appinvite_service": { - "other_platform_oauth_client": [ - { - "client_id": "453392274790-hnbpatpce9hbjiggj76hgo7queu86atq.apps.googleusercontent.com", - "client_type": 3 - } - ] - } - } - } - ], - "configuration_version": "1" -} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/about/AboutActivity.kt b/app/src/main/java/io/legado/app/ui/about/AboutActivity.kt index 33587d0a2..8fc7d1294 100644 --- a/app/src/main/java/io/legado/app/ui/about/AboutActivity.kt +++ b/app/src/main/java/io/legado/app/ui/about/AboutActivity.kt @@ -6,7 +6,7 @@ import android.view.MenuItem import io.legado.app.R import io.legado.app.base.BaseActivity import io.legado.app.utils.openUrl -import io.legado.app.utils.shareText +import org.jetbrains.anko.share class AboutActivity : BaseActivity(R.layout.activity_about) { @@ -27,9 +27,9 @@ class AboutActivity : BaseActivity(R.layout.activity_about) { override fun onCompatOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { R.id.menu_scoring -> openUrl("market://details?id=$packageName") - R.id.menu_share_it -> shareText( - "App Share", - getString(R.string.app_share_description) + R.id.menu_share_it -> share( + getString(R.string.app_share_description), + getString(R.string.app_name) ) } return super.onCompatOptionsItemSelected(item) diff --git a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt index 9d0959177..4dc9ba7da 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/TextActionMenu.kt @@ -15,6 +15,8 @@ import androidx.annotation.RequiresApi import androidx.appcompat.view.SupportMenuInflater import androidx.appcompat.view.menu.MenuBuilder import androidx.appcompat.view.menu.MenuItemImpl +import androidx.appcompat.widget.PopupMenu +import androidx.core.view.size import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import io.legado.app.R @@ -22,9 +24,11 @@ import io.legado.app.base.adapter.ItemViewHolder import io.legado.app.base.adapter.SimpleRecyclerAdapter import io.legado.app.utils.isAbsUrl import io.legado.app.utils.sendToClip +import io.legado.app.utils.visible import kotlinx.android.synthetic.main.item_fillet_text.view.* import kotlinx.android.synthetic.main.popup_action_menu.view.* import org.jetbrains.anko.sdk27.listeners.onClick +import org.jetbrains.anko.share import org.jetbrains.anko.toast @SuppressLint("RestrictedApi") @@ -48,10 +52,27 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac recycler_view.adapter = adapter val menu = MenuBuilder(context) SupportMenuInflater(context).inflate(R.menu.content_select_action, menu) + adapter.setItems(menu.visibleItems) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - onInitializeMenu(menu) + val popupMenu = PopupMenu(context, iv_menu_more) + onInitializeMenu(popupMenu.menu) + if (popupMenu.menu.size > 0) { + iv_menu_more.visible() + popupMenu.setOnMenuItemClickListener { item -> + item.intent?.let { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + it.putExtra(Intent.EXTRA_PROCESS_TEXT, callBack.selectedText) + context.startActivity(it) + } + } + this@TextActionMenu.dismiss() + true + } + } + iv_menu_more.onClick { + popupMenu.show() + } } - adapter.setItems(menu.visibleItems) } inner class Adapter(context: Context) : @@ -81,6 +102,7 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac private fun onMenuItemSelected(item: MenuItemImpl) { when (item.itemId) { R.id.menu_copy -> context.sendToClip(callBack.selectedText) + R.id.menu_share_str -> context.share(callBack.selectedText) R.id.menu_browser -> { try { val intent = if (callBack.selectedText.isAbsUrl()) { @@ -98,12 +120,6 @@ class TextActionMenu(private val context: Context, private val callBack: CallBac context.toast(e.localizedMessage ?: "ERROR") } } - else -> item.intent?.let { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - it.putExtra(Intent.EXTRA_PROCESS_TEXT, callBack.selectedText) - context.startActivity(it) - } - } } callBack.onMenuActionFinally() } diff --git a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt index f693c07ed..c0eab1b32 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/edit/BookSourceEditActivity.kt @@ -25,9 +25,13 @@ import io.legado.app.lib.dialogs.alert import io.legado.app.lib.theme.ATH import io.legado.app.ui.book.source.debug.BookSourceDebugActivity import io.legado.app.ui.widget.KeyboardToolPop -import io.legado.app.utils.* +import io.legado.app.utils.GSON +import io.legado.app.utils.applyTint +import io.legado.app.utils.getViewModel +import io.legado.app.utils.shareWithQr import kotlinx.android.synthetic.main.activity_book_source_edit.* import org.jetbrains.anko.displayMetrics +import org.jetbrains.anko.share import org.jetbrains.anko.startActivity import org.jetbrains.anko.toast import kotlin.math.abs @@ -84,9 +88,7 @@ class BookSourceEditActivity : } } R.id.menu_paste_source -> viewModel.pasteSource { upRecyclerView(it) } - R.id.menu_share_str -> GSON.toJson(getSource())?.let { sourceStr -> - shareText(getString(R.string.share_book_source), sourceStr) - } + R.id.menu_share_str -> GSON.toJson(getSource())?.let { share(it) } R.id.menu_share_qr -> GSON.toJson(getSource())?.let { sourceStr -> shareWithQr(getString(R.string.share_book_source), sourceStr) } diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt index c68db66a1..ebaf05233 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssActivity.kt @@ -14,10 +14,10 @@ import io.legado.app.lib.theme.DrawableUtils import io.legado.app.lib.theme.primaryTextColor import io.legado.app.utils.NetworkUtils import io.legado.app.utils.getViewModel -import io.legado.app.utils.shareText import kotlinx.android.synthetic.main.activity_rss_read.* import kotlinx.coroutines.launch import org.apache.commons.text.StringEscapeUtils +import org.jetbrains.anko.share import org.jsoup.Jsoup import org.jsoup.safety.Whitelist @@ -54,7 +54,7 @@ class ReadRssActivity : VMBaseActivity(R.layout.activity_rss_r when (item.itemId) { R.id.menu_rss_star -> viewModel.favorite() R.id.menu_share_it -> viewModel.rssArticle?.let { - shareText("链接分享", it.link) + share(it.link) } R.id.menu_aloud -> readAloud() } diff --git a/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt b/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt index 09839e458..22aaab453 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditActivity.kt @@ -21,9 +21,13 @@ import io.legado.app.lib.dialogs.alert import io.legado.app.lib.theme.ATH import io.legado.app.ui.rss.source.debug.RssSourceDebugActivity import io.legado.app.ui.widget.KeyboardToolPop -import io.legado.app.utils.* +import io.legado.app.utils.GSON +import io.legado.app.utils.applyTint +import io.legado.app.utils.getViewModel +import io.legado.app.utils.shareWithQr import kotlinx.android.synthetic.main.activity_rss_source_edit.* import org.jetbrains.anko.displayMetrics +import org.jetbrains.anko.share import org.jetbrains.anko.startActivity import org.jetbrains.anko.toast import kotlin.math.abs @@ -101,7 +105,7 @@ class RssSourceEditActivity : } R.id.menu_paste_source -> viewModel.pasteSource { upRecyclerView(it) } R.id.menu_share_str -> GSON.toJson(getRssSource())?.let { sourceStr -> - shareText(getString(R.string.share_rss_source), sourceStr) + share(sourceStr) } R.id.menu_share_qr -> GSON.toJson(getRssSource())?.let { sourceStr -> shareWithQr(getString(R.string.share_rss_source), sourceStr) diff --git a/app/src/main/java/io/legado/app/utils/ContextExtensions.kt b/app/src/main/java/io/legado/app/utils/ContextExtensions.kt index 90415484a..2f05fa014 100644 --- a/app/src/main/java/io/legado/app/utils/ContextExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/ContextExtensions.kt @@ -92,17 +92,6 @@ val Context.navigationBarHeight: Int return resources.getDimensionPixelSize(resourceId) } -fun Context.shareText(title: String, text: String) { - try { - val textIntent = Intent(Intent.ACTION_SEND) - textIntent.type = "text/plain" - textIntent.putExtra(Intent.EXTRA_TEXT, text) - startActivity(Intent.createChooser(textIntent, title)) - } catch (e: Exception) { - toast(R.string.can_not_share) - } -} - @SuppressLint("SetWorldReadable") fun Context.shareWithQr(title: String, text: String) { QRCodeEncoder.HINTS[EncodeHintType.ERROR_CORRECTION] = ErrorCorrectionLevel.L diff --git a/app/src/main/res/layout/popup_action_menu.xml b/app/src/main/res/layout/popup_action_menu.xml index b5273a77a..c6b9067d7 100644 --- a/app/src/main/res/layout/popup_action_menu.xml +++ b/app/src/main/res/layout/popup_action_menu.xml @@ -1,8 +1,27 @@ - + android:padding="5dp" + android:orientation="horizontal"> + + + + + + + diff --git a/app/src/main/res/menu/content_select_action.xml b/app/src/main/res/menu/content_select_action.xml index 52ac3e0f6..d11ee6154 100644 --- a/app/src/main/res/menu/content_select_action.xml +++ b/app/src/main/res/menu/content_select_action.xml @@ -13,4 +13,7 @@ android:id="@+id/menu_browser" android:title="@string/browser" /> + \ No newline at end of file