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

Commit a109d3a3 authored by timhypeng's avatar timhypeng Committed by tim peng
Browse files

Move MediaRoute2Info API from InfoMediaDevice to MediaDevice

-All types of MediaDevice use the same MediaRoute2Info API
-Update test cases

Bug: 148756190
Test: make -j42 RunSettingsLibRoboTests
Change-Id: I4a01aaa03c657b24e2c747f1202d968deb4d9932
parent 977ab22b
Loading
Loading
Loading
Loading
+0 −43
Original line number Diff line number Diff line
@@ -16,12 +16,9 @@
package com.android.settingslib.media;

import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.text.TextUtils;
import android.util.Log;

import com.android.settingslib.R;
import com.android.settingslib.bluetooth.BluetoothUtils;
@@ -62,46 +59,6 @@ public class InfoMediaDevice extends MediaDevice {
        return MediaDeviceUtils.getId(mRouteInfo);
    }

    @Override
    public void requestSetVolume(int volume) {
        mRouterManager.requestSetVolume(mRouteInfo, volume);
    }

    @Override
    public int getMaxVolume() {
        return mRouteInfo.getVolumeMax();
    }

    @Override
    public int getCurrentVolume() {
        return mRouteInfo.getVolume();
    }

    @Override
    public String getClientPackageName() {
        return mRouteInfo.getClientPackageName();
    }

    @Override
    public String getClientAppLabel() {
        final String packageName = mRouteInfo.getClientPackageName();
        if (TextUtils.isEmpty(packageName)) {
            Log.d(TAG, "Client package name is empty");
            return mContext.getResources().getString(R.string.unknown);
        }
        try {
            final PackageManager packageManager = mContext.getPackageManager();
            final String appLabel = packageManager.getApplicationLabel(
                    packageManager.getApplicationInfo(packageName, 0)).toString();
            if (!TextUtils.isEmpty(appLabel)) {
                return appLabel;
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e(TAG, "unable to find " + packageName);
        }
        return mContext.getResources().getString(R.string.unknown);
    }

    public boolean isConnected() {
        return true;
    }
+25 −4
Original line number Diff line number Diff line
@@ -16,14 +16,18 @@
package com.android.settingslib.media;

import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.text.TextUtils;
import android.util.Log;

import androidx.annotation.IntDef;
import androidx.annotation.VisibleForTesting;

import com.android.settingslib.R;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@@ -113,7 +117,9 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
     *
     * @param volume is the new value.
     */

    public void requestSetVolume(int volume) {
        mRouterManager.requestSetVolume(mRouteInfo, volume);
    }

    /**
@@ -122,7 +128,7 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
     * @return max volume.
     */
    public int getMaxVolume() {
        return 100;
        return mRouteInfo.getVolumeMax();
    }

    /**
@@ -131,7 +137,7 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
     * @return current volume.
     */
    public int getCurrentVolume() {
        return 0;
        return mRouteInfo.getVolume();
    }

    /**
@@ -140,7 +146,7 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
     * @return package name.
     */
    public String getClientPackageName() {
        return null;
        return mRouteInfo.getClientPackageName();
    }

    /**
@@ -149,7 +155,22 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
     * @return application label.
     */
    public String getClientAppLabel() {
        return null;
        final String packageName = mRouteInfo.getClientPackageName();
        if (TextUtils.isEmpty(packageName)) {
            Log.d(TAG, "Client package name is empty");
            return mContext.getResources().getString(R.string.unknown);
        }
        try {
            final PackageManager packageManager = mContext.getPackageManager();
            final String appLabel = packageManager.getApplicationLabel(
                    packageManager.getApplicationInfo(packageName, 0)).toString();
            if (!TextUtils.isEmpty(appLabel)) {
                return appLabel;
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e(TAG, "unable to find " + packageName);
        }
        return mContext.getResources().getString(R.string.unknown);
    }

    /**
+0 −48
Original line number Diff line number Diff line
@@ -21,9 +21,6 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageStats;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;

@@ -36,14 +33,11 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.shadows.ShadowPackageManager;

@RunWith(RobolectricTestRunner.class)
public class InfoMediaDeviceTest {

    private static final String TEST_PACKAGE_NAME = "com.test.packagename";
    private static final String TEST_PACKAGE_NAME2 = "com.test.packagename2";
    private static final String TEST_ID = "test_id";
    private static final String TEST_NAME = "test_name";

@@ -52,27 +46,13 @@ public class InfoMediaDeviceTest {
    @Mock
    private MediaRoute2Info mRouteInfo;


    private Context mContext;
    private InfoMediaDevice mInfoMediaDevice;
    private ShadowPackageManager mShadowPackageManager;
    private ApplicationInfo mAppInfo;
    private PackageInfo mPackageInfo;
    private PackageStats mPackageStats;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mContext = RuntimeEnvironment.application;
        mShadowPackageManager = Shadows.shadowOf(mContext.getPackageManager());
        mAppInfo = new ApplicationInfo();
        mAppInfo.flags = ApplicationInfo.FLAG_INSTALLED;
        mAppInfo.packageName = TEST_PACKAGE_NAME;
        mAppInfo.name = TEST_NAME;
        mPackageInfo = new PackageInfo();
        mPackageInfo.packageName = TEST_PACKAGE_NAME;
        mPackageInfo.applicationInfo = mAppInfo;
        mPackageStats = new PackageStats(TEST_PACKAGE_NAME);

        mInfoMediaDevice = new InfoMediaDevice(mContext, mRouterManager, mRouteInfo,
                TEST_PACKAGE_NAME);
@@ -106,32 +86,4 @@ public class InfoMediaDeviceTest {

        assertThat(mInfoMediaDevice.getId()).isEqualTo(TEST_ID);
    }

    @Test
    public void getClientPackageName_returnPackageName() {
        when(mRouteInfo.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);

        assertThat(mInfoMediaDevice.getClientPackageName()).isEqualTo(TEST_PACKAGE_NAME);
    }

    @Test
    public void getClientAppLabel_matchedPackageName_returnLabel() {
        when(mRouteInfo.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);

        assertThat(mInfoMediaDevice.getClientAppLabel()).isEqualTo(
                mContext.getResources().getString(R.string.unknown));

        mShadowPackageManager.addPackage(mPackageInfo, mPackageStats);

        assertThat(mInfoMediaDevice.getClientAppLabel()).isEqualTo(TEST_NAME);
    }

    @Test
    public void getClientAppLabel_noMatchedPackageName_returnDefault() {
        mShadowPackageManager.addPackage(mPackageInfo, mPackageStats);
        when(mRouteInfo.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME2);

        assertThat(mInfoMediaDevice.getClientAppLabel()).isEqualTo(
                mContext.getResources().getString(R.string.unknown));
    }
}
+54 −0
Original line number Diff line number Diff line
@@ -23,9 +23,13 @@ import static org.mockito.Mockito.when;
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageStats;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;

import com.android.settingslib.R;
import com.android.settingslib.bluetooth.A2dpProfile;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.HearingAidProfile;
@@ -39,6 +43,8 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.shadows.ShadowPackageManager;

import java.util.ArrayList;
import java.util.Collections;
@@ -58,6 +64,8 @@ public class MediaDeviceTest {
    private static final String ROUTER_ID_2 = "RouterId_2";
    private static final String ROUTER_ID_3 = "RouterId_3";
    private static final String TEST_PACKAGE_NAME = "com.test.playmusic";
    private static final String TEST_PACKAGE_NAME2 = "com.test.playmusic2";
    private static final String TEST_APPLICATION_LABEL = "playmusic";
    private final BluetoothClass mHeadreeClass =
            new BluetoothClass(BluetoothClass.Device.AUDIO_VIDEO_HEADPHONES);
    private final BluetoothClass mCarkitClass =
@@ -111,6 +119,10 @@ public class MediaDeviceTest {
    private InfoMediaDevice mInfoMediaDevice3;
    private List<MediaDevice> mMediaDevices = new ArrayList<>();
    private PhoneMediaDevice mPhoneMediaDevice;
    private ShadowPackageManager mShadowPackageManager;
    private ApplicationInfo mAppInfo;
    private PackageInfo mPackageInfo;
    private PackageStats mPackageStats;

    @Before
    public void setUp() {
@@ -394,4 +406,46 @@ public class MediaDeviceTest {

        verify(mMediaRouter2Manager).selectRoute(TEST_PACKAGE_NAME, mRouteInfo1);
    }

    @Test
    public void getClientPackageName_returnPackageName() {
        when(mRouteInfo1.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);

        assertThat(mInfoMediaDevice1.getClientPackageName()).isEqualTo(TEST_PACKAGE_NAME);
    }

    private void initPackage() {
        mShadowPackageManager = Shadows.shadowOf(mContext.getPackageManager());
        mAppInfo = new ApplicationInfo();
        mAppInfo.flags = ApplicationInfo.FLAG_INSTALLED;
        mAppInfo.packageName = TEST_PACKAGE_NAME;
        mAppInfo.name = TEST_APPLICATION_LABEL;
        mPackageInfo = new PackageInfo();
        mPackageInfo.packageName = TEST_PACKAGE_NAME;
        mPackageInfo.applicationInfo = mAppInfo;
        mPackageStats = new PackageStats(TEST_PACKAGE_NAME);
    }

    @Test
    public void getClientAppLabel_matchedPackageName_returnLabel() {
        initPackage();
        when(mRouteInfo1.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME);

        assertThat(mInfoMediaDevice1.getClientAppLabel()).isEqualTo(
                mContext.getResources().getString(R.string.unknown));

        mShadowPackageManager.addPackage(mPackageInfo, mPackageStats);

        assertThat(mInfoMediaDevice1.getClientAppLabel()).isEqualTo(TEST_APPLICATION_LABEL);
    }

    @Test
    public void getClientAppLabel_noMatchedPackageName_returnDefault() {
        initPackage();
        mShadowPackageManager.addPackage(mPackageInfo, mPackageStats);
        when(mRouteInfo1.getClientPackageName()).thenReturn(TEST_PACKAGE_NAME2);

        assertThat(mInfoMediaDevice1.getClientAppLabel()).isEqualTo(
                mContext.getResources().getString(R.string.unknown));
    }
}