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

Commit d53c83fa authored by keyboardr's avatar keyboardr Committed by Eric Erfanian
Browse files

Make shortcuts use adaptive icons

Test: IconFactoryTest.java
PiperOrigin-RevId: 159871437
Change-Id: I8df921f36bde619811129ae0f3013ff77903fc8e
parent 590000b9
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -20,11 +20,16 @@ import android.content.Context;
import android.content.pm.ShortcutInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.AdaptiveIconDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
import android.net.Uri;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.support.annotation.WorkerThread;
import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
@@ -83,6 +88,38 @@ class IconFactory {
        ContactsContract.Contacts.openContactPhotoInputStream(
            context.getContentResolver(), lookupUri, false /* preferHighres */);

    return VERSION.SDK_INT >= VERSION_CODES.O
        ? createAdaptiveIcon(displayName, lookupKey, inputStream)
        : createFlatIcon(displayName, lookupKey, inputStream);
  }

  @RequiresApi(VERSION_CODES.O)
  private Icon createAdaptiveIcon(
      @NonNull String displayName, @NonNull String lookupKey, @Nullable InputStream inputStream) {
    if (inputStream == null) {
      LetterTileDrawable letterTileDrawable = new LetterTileDrawable(context.getResources());
      // The adaptive icons clip the drawable to a safe area inside the drawable. Scale the letter
      // so it fits inside the safe area.
      letterTileDrawable.setScale(1f / (1f + AdaptiveIconDrawable.getExtraInsetFraction()));
      letterTileDrawable.setCanonicalDialerLetterTileDetails(
          displayName,
          lookupKey,
          LetterTileDrawable.SHAPE_RECTANGLE,
          LetterTileDrawable.TYPE_DEFAULT);

      int iconSize =
          context
              .getResources()
              .getDimensionPixelSize(R.dimen.launcher_shortcut_adaptive_icon_size);
      return Icon.createWithAdaptiveBitmap(
          DrawableConverter.drawableToBitmap(letterTileDrawable, iconSize, iconSize));
    }
    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
    return Icon.createWithAdaptiveBitmap(bitmap);
  }

  private Icon createFlatIcon(
      @NonNull String displayName, @NonNull String lookupKey, @Nullable InputStream inputStream) {
    Drawable drawable;
    if (inputStream == null) {
      // No photo for contact; use a letter tile.
+21 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Copyright (C) 2017 The Android Open Source Project
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License
  -->
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
  <background android:drawable="@color/shortcut_add_contact_background_color"/>

  <foreground android:drawable="@drawable/ic_add_contact_foreground"/>
</adaptive-icon>
+23 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Copyright (C) 2017 The Android Open Source Project
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License
  -->

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:gravity="center"
    android:src="@drawable/quantum_ic_person_add_white_24"
    android:tint="@color/shortcut_add_contact_foreground_color">

</bitmap>
+1 −0
Original line number Diff line number Diff line
@@ -16,4 +16,5 @@
  -->
<resources>
  <dimen name="launcher_shortcut_icon_size">48dp</dimen>
  <dimen name="launcher_shortcut_adaptive_icon_size">108dp</dimen>
</resources>
+2 −2
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ import java.util.ArrayList;
import java.util.List;

/** Populates the device database with contacts. */
final class SimulatorContacts {
public final class SimulatorContacts {
  // Phone numbers from https://www.google.com/about/company/facts/locations/
  private static final Contact[] SIMPLE_CONTACTS = {
    // US, contact with e164 number.
@@ -114,7 +114,7 @@ final class SimulatorContacts {
  };

  @WorkerThread
  static void populateContacts(@NonNull Context context) {
  public static void populateContacts(@NonNull Context context) {
    Assert.isWorkerThread();
    ArrayList<ContentProviderOperation> operations = new ArrayList<>();
    for (Contact contact : SIMPLE_CONTACTS) {