kunfei 4 лет назад
Родитель
Сommit
29bc56c3bb

+ 1 - 6
app/build.gradle

@@ -3,7 +3,6 @@ plugins {
     id 'org.jetbrains.kotlin.android'
     id 'kotlin-parcelize'
     id 'kotlin-kapt'
-    id "de.timfreiheit.resourceplaceholders"
     //id "com.google.gms.google-services"
 }
 apply from: 'download.gradle'
@@ -125,13 +124,9 @@ android {
     }
 }
 
-resourcePlaceholders {
-    files = ['xml/shortcuts.xml']
-}
-
 dependencies {
     //noinspection GradleDependency,GradlePackageUpdate
-    coreLibraryDesugaring('com.android.tools:desugar_jdk_libs:1.1.6')
+    coreLibraryDesugaring('com.android.tools:desugar_jdk_libs:1.2.2')
     testImplementation('junit:junit:4.13.2')
     androidTestImplementation('androidx.test:runner:1.4.0')
     androidTestImplementation('androidx.test.espresso:espresso-core:3.4.0')

+ 0 - 35
app/src/main/AndroidManifest.xml

@@ -35,11 +35,6 @@
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
-
-            <meta-data
-                android:name="android.app.shortcuts"
-                android:launchMode="singleTask"
-                android:resource="@xml/shortcuts" />
         </activity>
         <!-- 图标1 -->
         <activity
@@ -52,11 +47,6 @@
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
-
-            <meta-data
-                android:name="android.app.shortcuts"
-                android:launchMode="singleTask"
-                android:resource="@xml/shortcuts" />
         </activity>
         <!-- 图标2 -->
         <activity
@@ -69,11 +59,6 @@
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
-
-            <meta-data
-                android:name="android.app.shortcuts"
-                android:launchMode="singleTask"
-                android:resource="@xml/shortcuts" />
         </activity>
         <!-- 图标3 -->
         <activity
@@ -86,11 +71,6 @@
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
-
-            <meta-data
-                android:name="android.app.shortcuts"
-                android:launchMode="singleTask"
-                android:resource="@xml/shortcuts" />
         </activity>
         <!-- 图标4 -->
         <activity
@@ -103,11 +83,6 @@
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
-
-            <meta-data
-                android:name="android.app.shortcuts"
-                android:launchMode="singleTask"
-                android:resource="@xml/shortcuts" />
         </activity>
         <!-- 图标5 -->
         <activity
@@ -120,11 +95,6 @@
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
-
-            <meta-data
-                android:name="android.app.shortcuts"
-                android:launchMode="singleTask"
-                android:resource="@xml/shortcuts" />
         </activity>
         <!-- 图标6 -->
         <activity
@@ -137,11 +107,6 @@
 
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
-
-            <meta-data
-                android:name="android.app.shortcuts"
-                android:launchMode="singleTask"
-                android:resource="@xml/shortcuts" />
         </activity>
         <!-- 主界面 -->
         <activity

+ 6 - 1
app/src/main/java/io/legado/app/api/ReaderProvider.kt

@@ -49,7 +49,12 @@ class ReaderProvider : ContentProvider() {
         }
     }
 
-    override fun onCreate() = false
+    override fun onCreate(): Boolean {
+        context?.let { context ->
+            ShortCuts.buildShortCuts(context)
+        }
+        return false
+    }
 
     override fun delete(
         uri: Uri,

+ 63 - 0
app/src/main/java/io/legado/app/api/ShortCuts.kt

@@ -0,0 +1,63 @@
+package io.legado.app.api
+
+import android.content.Context
+import android.content.Intent
+import androidx.core.content.pm.ShortcutInfoCompat
+import androidx.core.content.pm.ShortcutManagerCompat
+import androidx.core.graphics.drawable.IconCompat
+import io.legado.app.R
+import io.legado.app.receiver.SharedReceiverActivity
+import io.legado.app.ui.book.read.ReadBookActivity
+import io.legado.app.ui.main.MainActivity
+
+object ShortCuts {
+
+    private inline fun <reified T> buildIntent(context: Context): Intent {
+        val intent = Intent(context, T::class.java)
+        intent.action = Intent.ACTION_VIEW
+        return intent
+    }
+
+    private fun buildBookShelfShortCutInfo(context: Context): ShortcutInfoCompat {
+        val bookShelfIntent = buildIntent<MainActivity>(context)
+        return ShortcutInfoCompat.Builder(context, "bookshelf")
+            .setShortLabel(context.getString(R.string.bookshelf))
+            .setLongLabel(context.getString(R.string.bookshelf))
+            .setIcon(IconCompat.createWithResource(context, R.drawable.icon_read_book))
+            .setIntent(bookShelfIntent)
+            .build()
+    }
+
+    private fun buildReadBookShortCutInfo(context: Context): ShortcutInfoCompat {
+        val bookShelfIntent = buildIntent<MainActivity>(context)
+        val readBookIntent = buildIntent<ReadBookActivity>(context)
+        return ShortcutInfoCompat.Builder(context, "lastRead")
+            .setShortLabel(context.getString(R.string.last_read))
+            .setLongLabel(context.getString(R.string.last_read))
+            .setIcon(IconCompat.createWithResource(context, R.drawable.icon_read_book))
+            .setIntents(arrayOf(bookShelfIntent, readBookIntent))
+            .build()
+    }
+
+    private fun buildReadAloudShortCutInfo(context: Context): ShortcutInfoCompat {
+        val readAloudIntent = buildIntent<SharedReceiverActivity>(context)
+        readAloudIntent.putExtra("action", "readAloud")
+        return ShortcutInfoCompat.Builder(context, "readAloud")
+            .setShortLabel(context.getString(R.string.read_aloud))
+            .setLongLabel(context.getString(R.string.read_aloud))
+            .setIcon(IconCompat.createWithResource(context, R.drawable.icon_read_book))
+            .setIntent(readAloudIntent)
+            .build()
+    }
+
+    fun buildShortCuts(context: Context) {
+        ShortcutManagerCompat.setDynamicShortcuts(
+            context, listOf(
+                buildReadBookShortCutInfo(context),
+                buildReadAloudShortCutInfo(context),
+                buildBookShelfShortCutInfo(context)
+            )
+        )
+    }
+
+}

+ 0 - 60
app/src/main/res/xml/shortcuts.xml

@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shortcuts xmlns:tools="http://schemas.android.com/tools"
-    xmlns:android="http://schemas.android.com/apk/res/android">
-    <shortcut
-        android:shortcutId="bookRead"
-        android:enabled="true"
-        android:icon="@drawable/icon_read_book"
-        android:shortcutShortLabel="@string/last_read"
-        android:shortcutLongLabel="@string/last_read"
-        android:shortcutDisabledMessage="@string/last_read"
-        tools:ignore="UnusedAttribute">
-
-        <intent
-            android:action="android.intent.action.VIEW"
-            android:targetPackage="${applicationId}"
-            android:targetClass="io.legado.app.ui.main.MainActivity" />
-        <intent
-            android:action="android.intent.action.VIEW"
-            android:targetPackage="${applicationId}"
-            android:targetClass="io.legado.app.ui.book.read.ReadBookActivity" />
-        <categories android:name="android.shortcut.conversation" />
-    </shortcut>
-
-    <shortcut
-        android:shortcutId="readAloud"
-        android:enabled="true"
-        android:icon="@drawable/icon_read_book"
-        android:shortcutShortLabel="@string/read_aloud"
-        android:shortcutLongLabel="@string/read_aloud"
-        android:shortcutDisabledMessage="@string/read_aloud"
-        tools:ignore="UnusedAttribute">
-
-        <intent
-            android:action="android.intent.action.VIEW"
-            android:targetPackage="${applicationId}"
-            android:targetClass="io.legado.app.receiver.SharedReceiverActivity">
-            <extra
-                android:name="action"
-                android:value="readAloud" />
-        </intent>
-        <categories android:name="android.shortcut.conversation" />
-    </shortcut>
-
-    <shortcut
-        android:shortcutId="bookshelf"
-        android:enabled="true"
-        android:icon="@drawable/icon_read_book"
-        android:shortcutShortLabel="@string/bookshelf"
-        android:shortcutLongLabel="@string/bookshelf"
-        android:shortcutDisabledMessage="@string/bookshelf"
-        tools:ignore="UnusedAttribute">
-
-        <intent
-            android:action="android.intent.action.VIEW"
-            android:targetPackage="${applicationId}"
-            android:targetClass="io.legado.app.ui.main.MainActivity" />
-        <categories android:name="android.shortcut.conversation" />
-    </shortcut>
-
-</shortcuts>

+ 1 - 2
build.gradle

@@ -5,7 +5,7 @@ buildscript {
         kotlin_version = '1.7.10'
         compose_version = '1.2.1'
         compose_compiler_version = '1.3.0'
-        agp_version = '7.2.0'
+        agp_version = '7.3.0'
         exoplayer_version = '2.18.1'
         splitties_version = '3.0.0'
         room_version = '2.4.3'
@@ -16,7 +16,6 @@ plugins {
     id 'com.android.application' version "$agp_version" apply false
     id 'com.android.library' version "$agp_version" apply false
     id 'org.jetbrains.kotlin.android' version "$kotlin_version" apply false
-    id "de.timfreiheit.resourceplaceholders" version "0.4" apply false
     id "de.undercouch.download" version "5.1.0" apply false
     id "com.google.gms.google-services" version "4.3.10" apply false
 }