Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f97f1208 authored by Anton Potapov's avatar Anton Potapov
Browse files

Use app info to load app data instead of component info

Test: manual
Test: atest ControlsUiControllerImplTest
Fixes: 268194168
Change-Id: Icd98df3ec8905330e6e1e6565a1b5ed085a97bbd
parent be845d9e
Loading
Loading
Loading
Loading
+32 −10
Original line number Diff line number Diff line
@@ -26,9 +26,10 @@ import android.content.pm.PackageManager.MATCH_DIRECT_BOOT_AWARE
import android.content.pm.PackageManager.MATCH_DIRECT_BOOT_UNAWARE
import android.content.pm.ResolveInfo
import android.content.pm.ServiceInfo
import android.graphics.drawable.Drawable
import android.os.UserHandle
import android.service.controls.ControlsProviderService
import androidx.annotation.VisibleForTesting
import android.util.IconDrawableFactory
import androidx.annotation.WorkerThread
import com.android.settingslib.applications.DefaultAppInfo
import com.android.systemui.R
@@ -118,6 +119,27 @@ open class ControlsServiceInfo(
        }
    }

    @WorkerThread
    override fun loadLabel(): CharSequence {
        return componentName?.let {
            val appInfo = mPm.getApplicationInfoAsUser(componentName.packageName, 0, userId)
            appInfo.loadLabel(mPm)
        }
            ?: packageItemInfo?.loadLabel(mPm)
            ?: throw IllegalArgumentException("Package info is missing")
    }

    @WorkerThread
    override fun loadIcon(): Drawable {
        val packageName =
            componentName?.packageName
                ?: packageItemInfo?.packageName
                ?: throw IllegalArgumentException("Package info is missing")
        val factory = IconDrawableFactory.newInstance(context)
        val appInfo = mPm.getApplicationInfoAsUser(packageName, 0, userId)
        return factory.getBadgedIcon(appInfo)
    }

    override fun equals(other: Any?): Boolean {
        return other is ControlsServiceInfo &&
                userId == other.userId &&
+5 −3
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.content.Context
import android.content.pm.ApplicationInfo
import android.content.pm.PackageManager
import android.content.pm.ServiceInfo
import android.graphics.drawable.Drawable
import android.os.UserHandle
import android.service.controls.ControlsProviderService
import android.testing.AndroidTestingRunner
@@ -69,6 +70,7 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.clearInvocations
import org.mockito.Mockito.doReturn
import org.mockito.Mockito.never
import org.mockito.Mockito.spy
import org.mockito.Mockito.verify
@@ -516,9 +518,9 @@ class ControlsUiControllerImplTest : SysuiTestCase() {
                name = componentName.className
            }
        return spy(ControlsServiceInfo(mContext, serviceInfo)).apply {
            `when`(loadLabel()).thenReturn(label)
            `when`(loadIcon()).thenReturn(mock())
            `when`(panelActivity).thenReturn(panelComponentName)
            doReturn(label).whenever(this).loadLabel()
            doReturn(mock<Drawable>()).whenever(this).loadIcon()
            doReturn(panelComponentName).whenever(this).panelActivity
        }
    }