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

Commit 7de579f1 authored by tim peng's avatar tim peng Committed by Android (Google) Code Review
Browse files

Merge changes from topic "media_output_dialog" into rvc-qpr-dev

* changes:
  Apply animation for Media Ouput Switcher dialog
  Add dynamic item in output switcher if it is available
  Fix NPE when notification icon is empty
  Fix output switcher didn't show album art
  Add dynamic group operation in output switcher
  Enhancement for group operation in output switcher
  Add dismiss timing for Media Output Dialog
  Update OutputSwitcher from SettingsPanel to MediaOutputDialog in SystemUI
  Add constant for dismiss Settings panel
  Add animation when switching output device
  Add dismiss intent and method for MediaOutputDialog
  Add "Stop" button for remote device
  Add constant for dialog dismiss
  Rename MediaOutDialogReceiver to MediaOutputDialogReceiver
  Add getFeatures() for get device supporting features
  Add a receiver to launch Output Switcher dialog
  Add MediaOutputDialogFactory to create MediaOutputDialog
  Add Media Output Dialog for Output Switcher
  Add controller for Media operation
  Add MediaOutputAdapter for Media device list
  Define strings for output switcher dialog in SystemUI
  Add image utility methods
parents 73ba6273 b71aeae0
Loading
Loading
Loading
Loading
+26 −0
Original line number Original line Diff line number Diff line
@@ -13,6 +13,7 @@ import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.ColorFilter;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrix;
@@ -32,6 +33,10 @@ import android.telephony.AccessNetworkConstants;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.ServiceState;
import android.telephony.ServiceState;


import androidx.annotation.NonNull;
import androidx.core.graphics.drawable.RoundedBitmapDrawable;
import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.UserIcons;
import com.android.internal.util.UserIcons;
import com.android.launcher3.icons.IconFactory;
import com.android.launcher3.icons.IconFactory;
@@ -537,4 +542,25 @@ public class Utils {
                == NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING);
                == NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING);
        return !isInIwlan;
        return !isInIwlan;
    }
    }

    /**
     * Returns a bitmap with rounded corner.
     *
     * @param context application context.
     * @param source bitmap to apply round corner.
     * @param cornerRadius corner radius value.
     */
    public static Bitmap convertCornerRadiusBitmap(@NonNull Context context,
            @NonNull Bitmap source, @NonNull float cornerRadius) {
        final Bitmap roundedBitmap = Bitmap.createBitmap(source.getWidth(), source.getHeight(),
                Bitmap.Config.ARGB_8888);
        final RoundedBitmapDrawable drawable =
                RoundedBitmapDrawableFactory.create(context.getResources(), source);
        drawable.setAntiAlias(true);
        drawable.setCornerRadius(cornerRadius);
        final Canvas canvas = new Canvas(roundedBitmap);
        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawable.draw(canvas);
        return roundedBitmap;
    }
}
}
+18 −0
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ import android.util.Log;
import android.util.Pair;
import android.util.Pair;


import androidx.annotation.DrawableRes;
import androidx.annotation.DrawableRes;
import androidx.core.graphics.drawable.IconCompat;


import com.android.settingslib.R;
import com.android.settingslib.R;
import com.android.settingslib.widget.AdaptiveIcon;
import com.android.settingslib.widget.AdaptiveIcon;
@@ -215,6 +216,23 @@ public class BluetoothUtils {
        return new Pair<>(pair.first, pair.second);
        return new Pair<>(pair.first, pair.second);
    }
    }


    /**
     * Create an Icon pointing to a drawable.
     */
    public static IconCompat createIconWithDrawable(Drawable drawable) {
        Bitmap bitmap;
        if (drawable instanceof BitmapDrawable) {
            bitmap = ((BitmapDrawable) drawable).getBitmap();
        } else {
            final int width = drawable.getIntrinsicWidth();
            final int height = drawable.getIntrinsicHeight();
            bitmap = createBitmap(drawable,
                    width > 0 ? width : 1,
                    height > 0 ? height : 1);
        }
        return IconCompat.createWithBitmap(bitmap);
    }

    /**
    /**
     * Build device icon with advanced outline
     * Build device icon with advanced outline
     */
     */
+8 −0
Original line number Original line Diff line number Diff line
@@ -46,6 +46,7 @@ import com.android.settingslib.R;


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


/**
/**
 * MediaDevice represents a media device(such like Bluetooth device, cast device and phone device).
 * MediaDevice represents a media device(such like Bluetooth device, cast device and phone device).
@@ -353,6 +354,13 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
        }
        }
    }
    }


    /**
     * Gets the supported features of the route.
     */
    public List<String> getFeatures() {
        return mRouteInfo.getFeatures();
    }

    /**
    /**
     * Check if it is CarKit device
     * Check if it is CarKit device
     * @return true if it is CarKit device
     * @return true if it is CarKit device
+35 −1
Original line number Original line Diff line number Diff line
@@ -60,8 +60,42 @@ public class MediaOutputSliceConstants {
            "com.android.settings.panel.action.MEDIA_OUTPUT_GROUP";
            "com.android.settings.panel.action.MEDIA_OUTPUT_GROUP";


    /**
    /**
     * An string extra specifying a media package name.
     * A string extra specifying a media package name.
     */
     */
    public static final String EXTRA_PACKAGE_NAME =
    public static final String EXTRA_PACKAGE_NAME =
            "com.android.settings.panel.extra.PACKAGE_NAME";
            "com.android.settings.panel.extra.PACKAGE_NAME";

    /**
     * An intent action to launch media output dialog.
     */
    public static final String ACTION_LAUNCH_MEDIA_OUTPUT_DIALOG =
            "com.android.systemui.action.LAUNCH_MEDIA_OUTPUT_DIALOG";

    /**
     * An intent action to dismiss media output dialog.
     */
    public static final String ACTION_DISMISS_MEDIA_OUTPUT_DIALOG =
            "com.android.systemui.action.DISMISS_MEDIA_OUTPUT_DIALOG";

    /**
     * Settings package name.
     */
    public static final String SETTINGS_PACKAGE_NAME = "com.android.settings";

    /**
     * An intent action to launch Bluetooth paring page.
     */
    public static final String ACTION_LAUNCH_BLUETOOTH_PAIRING =
            "com.android.settings.action.LAUNCH_BLUETOOTH_PAIRING";

    /**
     * SystemUi package name.
     */
    public static final String SYSTEMUI_PACKAGE_NAME = "com.android.systemui";

    /**
     * An intent action to close settings panel.
     */
    public static final String ACTION_CLOSE_PANEL =
            "com.android.settings.panel.action.CLOSE_PANEL";
}
}
+8 −0
Original line number Original line Diff line number Diff line
@@ -781,5 +781,13 @@
            </intent-filter>
            </intent-filter>
        </receiver>
        </receiver>


        <receiver android:name=".media.dialog.MediaOutputDialogReceiver"
                  android:exported="true">
            <intent-filter>
                <action android:name="com.android.systemui.action.LAUNCH_MEDIA_OUTPUT_DIALOG" />
                <action android:name="com.android.systemui.action.DISMISS_MEDIA_OUTPUT_DIALOG" />
            </intent-filter>
        </receiver>

    </application>
    </application>
</manifest>
</manifest>
Loading