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

Commit 7488b373 authored by Eric Erfanian's avatar Eric Erfanian Committed by android-build-merger
Browse files

Merge changes I6883ce15,Ife5e6bad,If5a40a97,I36916560 am: 52a16114 am: 090c5584

am: 9a04785b

Change-Id: I9ab2f7697132adc4ef71ce0854028e344ba48650
parents bc135c66 9a04785b
Loading
Loading
Loading
Loading
+18 −12
Original line number Diff line number Diff line
@@ -34,10 +34,10 @@ import com.android.dialer.speeddial.HeaderViewHolder.SpeedDialHeaderListener;
import com.android.dialer.speeddial.SuggestionViewHolder.SuggestedContactsListener;
import com.android.dialer.speeddial.draghelper.SpeedDialItemTouchHelperCallback.ItemTouchHelperAdapter;
import com.android.dialer.speeddial.loader.SpeedDialUiItem;
import com.google.common.collect.ImmutableList;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;

@@ -146,7 +146,13 @@ public final class SpeedDialAdapter extends RecyclerView.Adapter<RecyclerView.Vi
  public void setSpeedDialUiItems(List<SpeedDialUiItem> immutableSpeedDialUiItems) {
    speedDialUiItems = new ArrayList<>();
    speedDialUiItems.addAll(immutableSpeedDialUiItems);
    speedDialUiItems.sort((o1, o2) -> Boolean.compare(o2.isStarred(), o1.isStarred()));
    speedDialUiItems.sort(
        (o1, o2) -> {
          if (o1.isStarred() && o2.isStarred()) {
            return Integer.compare(o1.pinnedPosition().or(-1), o2.pinnedPosition().or(-1));
          }
          return Boolean.compare(o2.isStarred(), o1.isStarred());
        });
    positionToRowTypeMap.clear();
    if (speedDialUiItems.isEmpty()) {
      return;
@@ -168,6 +174,13 @@ public final class SpeedDialAdapter extends RecyclerView.Adapter<RecyclerView.Vi
    }
  }

  public ImmutableList<SpeedDialUiItem> getSpeedDialUiItems() {
    if (speedDialUiItems == null || speedDialUiItems.isEmpty()) {
      return ImmutableList.of();
    }
    return ImmutableList.copyOf(speedDialUiItems);
  }

  public SpanSizeLookup getSpanSizeLookup() {
    return new SpanSizeLookup() {
      @Override
@@ -189,16 +202,9 @@ public final class SpeedDialAdapter extends RecyclerView.Adapter<RecyclerView.Vi

  @Override
  public void onItemMove(int fromPosition, int toPosition) {
    if (fromPosition < toPosition) {
      for (int i = fromPosition; i < toPosition && i < speedDialUiItems.size() - 1; i++) {
        Collections.swap(speedDialUiItems, i, i + 1);
      }
    } else {
      for (int i = fromPosition - 1; i > toPosition; i--) {
        Collections.swap(speedDialUiItems, i, i - 1);
      }
    }
    // TODO(calderwoodra): store pinned positions
    // fromPosition/toPosition correspond to adapter position, which is off by 1 from the list
    // position b/c of the favorites header. So subtract 1 here.
    speedDialUiItems.add(toPosition - 1, speedDialUiItems.remove(fromPosition - 1));
    notifyItemMoved(fromPosition, toPosition);
  }

+17 −3
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.callintent.CallIntentBuilder;
import com.android.dialer.common.FragmentUtils;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.DefaultFutureCallback;
import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.common.concurrent.SupportUiListener;
import com.android.dialer.constants.ActivityRequestCodes;
@@ -54,6 +55,7 @@ import com.android.dialer.speeddial.loader.SpeedDialUiItem;
import com.android.dialer.speeddial.loader.UiItemLoaderComponent;
import com.android.dialer.util.IntentUtil;
import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.Futures;

/**
 * Fragment for displaying:
@@ -143,7 +145,7 @@ public class SpeedDialFragment extends Fragment {

    speedDialLoaderListener.listen(
        getContext(),
        UiItemLoaderComponent.get(getContext()).speedDialUiItemLoader().loadSpeedDialUiItems(),
        UiItemLoaderComponent.get(getContext()).speedDialUiItemMutator().loadSpeedDialUiItems(),
        this::onSpeedDialUiItemListLoaded,
        throwable -> {
          throw new RuntimeException(throwable);
@@ -158,7 +160,7 @@ public class SpeedDialFragment extends Fragment {
        speedDialLoaderListener.listen(
            getContext(),
            UiItemLoaderComponent.get(getContext())
                .speedDialUiItemLoader()
                .speedDialUiItemMutator()
                .starContact(data.getData()),
            this::onSpeedDialUiItemListLoaded,
            throwable -> {
@@ -173,7 +175,7 @@ public class SpeedDialFragment extends Fragment {
    // TODO(calderwoodra): Use DiffUtil to properly update and animate the change
    adapter.setSpeedDialUiItems(
        UiItemLoaderComponent.get(getContext())
            .speedDialUiItemLoader()
            .speedDialUiItemMutator()
            .insertDuoChannels(getContext(), speedDialUiItems));
    adapter.notifyDataSetChanged();
    if (getActivity() != null) {
@@ -187,6 +189,18 @@ public class SpeedDialFragment extends Fragment {
    super.onPause();
    contextMenu.hideMenu();
    contextMenuBackground.setVisibility(View.GONE);
    Futures.addCallback(
        DialerExecutorComponent.get(getContext())
            .backgroundExecutor()
            .submit(
                () -> {
                  UiItemLoaderComponent.get(getContext())
                      .speedDialUiItemMutator()
                      .updatePinnedPosition(adapter.getSpeedDialUiItems());
                  return null;
                }),
        new DefaultFutureCallback<>(),
        DialerExecutorComponent.get(getContext()).backgroundExecutor());
  }

  @Override
+7 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.support.annotation.IntDef;
import android.support.annotation.Nullable;
import com.google.auto.value.AutoValue;
import com.google.common.base.Optional;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@@ -35,6 +36,9 @@ public abstract class SpeedDialEntry {
  @Nullable
  public abstract Long id();

  /** Position the contact is pinned to in the UI. Will be absent if it hasn't be set yet. */
  public abstract Optional<Integer> pinnedPosition();

  /** @see {@link Contacts#_ID} */
  public abstract long contactId();

@@ -53,7 +57,7 @@ public abstract class SpeedDialEntry {
  public abstract Builder toBuilder();

  public static Builder builder() {
    return new AutoValue_SpeedDialEntry.Builder();
    return new AutoValue_SpeedDialEntry.Builder().setPinnedPosition(Optional.absent());
  }

  /** Builder class for speed dial entry. */
@@ -62,6 +66,8 @@ public abstract class SpeedDialEntry {

    public abstract Builder setId(Long id);

    public abstract Builder setPinnedPosition(Optional<Integer> pinnedPosition);

    public abstract Builder setContactId(long contactId);

    public abstract Builder setLookupKey(String lookupKey);
+24 −6
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.text.TextUtils;
import com.android.dialer.common.Assert;
import com.android.dialer.common.database.Selection;
import com.android.dialer.speeddial.database.SpeedDialEntry.Channel;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.ArrayList;
@@ -38,12 +39,20 @@ import java.util.List;
public final class SpeedDialEntryDatabaseHelper extends SQLiteOpenHelper
    implements SpeedDialEntryDao {

  /**
   * If the pinned position is absent, then we need to write an impossible value in the table like
   * -1 so that it doesn't default to 0. When we read this value from the table, we'll translate it
   * to Optional.absent() in the resulting {@link SpeedDialEntry}.
   */
  private static final int PINNED_POSITION_ABSENT = -1;

  private static final int DATABASE_VERSION = 2;
  private static final String DATABASE_NAME = "CPSpeedDialEntry";

  // Column names
  private static final String TABLE_NAME = "speed_dial_entries";
  private static final String ID = "id";
  private static final String PINNED_POSITION = "pinned_position";
  private static final String CONTACT_ID = "contact_id";
  private static final String LOOKUP_KEY = "lookup_key";
  private static final String PHONE_NUMBER = "phone_number";
@@ -53,12 +62,13 @@ public final class SpeedDialEntryDatabaseHelper extends SQLiteOpenHelper

  // Column positions
  private static final int POSITION_ID = 0;
  private static final int POSITION_CONTACT_ID = 1;
  private static final int POSITION_LOOKUP_KEY = 2;
  private static final int POSITION_PHONE_NUMBER = 3;
  private static final int POSITION_PHONE_TYPE = 4;
  private static final int POSITION_PHONE_LABEL = 5;
  private static final int POSITION_PHONE_TECHNOLOGY = 6;
  private static final int POSITION_PINNED_POSITION = 1;
  private static final int POSITION_CONTACT_ID = 2;
  private static final int POSITION_LOOKUP_KEY = 3;
  private static final int POSITION_PHONE_NUMBER = 4;
  private static final int POSITION_PHONE_TYPE = 5;
  private static final int POSITION_PHONE_LABEL = 6;
  private static final int POSITION_PHONE_TECHNOLOGY = 7;

  // Create Table Query
  private static final String CREATE_TABLE_SQL =
@@ -66,6 +76,7 @@ public final class SpeedDialEntryDatabaseHelper extends SQLiteOpenHelper
          + TABLE_NAME
          + " ("
          + (ID + " integer primary key, ")
          + (PINNED_POSITION + " integer, ")
          + (CONTACT_ID + " integer, ")
          + (LOOKUP_KEY + " text, ")
          + (PHONE_NUMBER + " text, ")
@@ -119,11 +130,17 @@ public final class SpeedDialEntryDatabaseHelper extends SQLiteOpenHelper
                  .build();
        }

        Optional<Integer> pinnedPosition = Optional.of(cursor.getInt(POSITION_PINNED_POSITION));
        if (pinnedPosition.or(PINNED_POSITION_ABSENT) == PINNED_POSITION_ABSENT) {
          pinnedPosition = Optional.absent();
        }

        SpeedDialEntry entry =
            SpeedDialEntry.builder()
                .setDefaultChannel(channel)
                .setContactId(cursor.getLong(POSITION_CONTACT_ID))
                .setLookupKey(cursor.getString(POSITION_LOOKUP_KEY))
                .setPinnedPosition(pinnedPosition)
                .setId(cursor.getLong(POSITION_ID))
                .build();
        entries.add(entry);
@@ -226,6 +243,7 @@ public final class SpeedDialEntryDatabaseHelper extends SQLiteOpenHelper
    if (includeId) {
      values.put(ID, entry.id());
    }
    values.put(PINNED_POSITION, entry.pinnedPosition().or(PINNED_POSITION_ABSENT));
    values.put(CONTACT_ID, entry.contactId());
    values.put(LOOKUP_KEY, entry.lookupKey());
    if (entry.defaultChannel() != null) {
+10 −1
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import com.android.dialer.common.Assert;
import com.android.dialer.speeddial.database.SpeedDialEntry;
import com.android.dialer.speeddial.database.SpeedDialEntry.Channel;
import com.google.auto.value.AutoValue;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
import java.util.List;
@@ -83,7 +84,9 @@ public abstract class SpeedDialUiItem {
  }

  public static Builder builder() {
    return new AutoValue_SpeedDialUiItem.Builder().setChannels(ImmutableList.of());
    return new AutoValue_SpeedDialUiItem.Builder()
        .setChannels(ImmutableList.of())
        .setPinnedPosition(Optional.absent());
  }

  /**
@@ -139,6 +142,7 @@ public abstract class SpeedDialUiItem {
  public SpeedDialEntry buildSpeedDialEntry() {
    return SpeedDialEntry.builder()
        .setId(speedDialEntryId())
        .setPinnedPosition(pinnedPosition())
        .setLookupKey(lookupKey())
        .setContactId(contactId())
        .setDefaultChannel(defaultChannel())
@@ -212,6 +216,9 @@ public abstract class SpeedDialUiItem {
  @Nullable
  public abstract Long speedDialEntryId();

  /** @see SpeedDialEntry#pinnedPosition() */
  public abstract Optional<Integer> pinnedPosition();

  /** @see android.provider.ContactsContract.Contacts#DISPLAY_NAME */
  public abstract String name();

@@ -255,6 +262,8 @@ public abstract class SpeedDialUiItem {
    /** Set to null if {@link #isStarred()} is false. */
    public abstract Builder setSpeedDialEntryId(@Nullable Long id);

    public abstract Builder setPinnedPosition(Optional<Integer> pinnedPosition);

    public abstract Builder setName(String name);

    public abstract Builder setContactId(long contactId);
Loading