Loading src/com/android/settings/homepage/CardContentLoader.java +4 −4 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ public class CardContentLoader { private CardContentLoaderListener mListener; public interface CardContentLoaderListener { void onFinishCardLoading(List<HomepageCard> homepageCards); void onFinishCardLoading(List<ContextualCard> contextualCards); } public CardContentLoader() { Loading @@ -42,20 +42,20 @@ public class CardContentLoader { mListener = listener; } private static class CardLoader extends AsyncLoaderCompat<List<HomepageCard>> { private static class CardLoader extends AsyncLoaderCompat<List<ContextualCard>> { public CardLoader(Context context) { super(context); } @Override protected void onDiscardResult(List<HomepageCard> result) { protected void onDiscardResult(List<ContextualCard> result) { } @Nullable @Override public List<HomepageCard> loadInBackground() { public List<ContextualCard> loadInBackground() { return null; } } Loading src/com/android/settings/homepage/HomepageCard.java→src/com/android/settings/homepage/ContextualCard.java +8 −8 Original line number Diff line number Diff line Loading @@ -25,12 +25,12 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Data class representing a {@link HomepageCard}. * Data class representing a {@link ContextualCard}. */ public class HomepageCard { public class ContextualCard { /** * Flags indicating the type of the HomepageCard. * Flags indicating the type of the ContextualCard. */ @IntDef({CardType.INVALID, CardType.SLICE, CardType.SUGGESTION, CardType.CONDITIONAL}) @Retention(RetentionPolicy.SOURCE) Loading Loading @@ -137,7 +137,7 @@ public class HomepageCard { return mIsHalfWidth; } public HomepageCard(Builder builder) { public ContextualCard(Builder builder) { mName = builder.mName; mCardType = builder.mCardType; mRankingScore = builder.mRankingScore; Loading Loading @@ -171,10 +171,10 @@ public class HomepageCard { if (this == obj) { return true; } if (!(obj instanceof HomepageCard)) { if (!(obj instanceof ContextualCard)) { return false; } final HomepageCard that = (HomepageCard) obj; final ContextualCard that = (ContextualCard) obj; return TextUtils.equals(mName, that.mName); } Loading Loading @@ -289,8 +289,8 @@ public class HomepageCard { return this; } public HomepageCard build() { return new HomepageCard(this); public ContextualCard build() { return new ContextualCard(this); } } } src/com/android/settings/homepage/HomepageCardController.java→src/com/android/settings/homepage/ContextualCardController.java +8 −8 Original line number Diff line number Diff line Loading @@ -19,22 +19,22 @@ package com.android.settings.homepage; import java.util.List; /** * Data controller for {@link HomepageCard}. * Data controller for {@link ContextualCard}. */ public interface HomepageCardController { public interface ContextualCardController { @HomepageCard.CardType @ContextualCard.CardType int getCardType(); /** * When data is updated or changed, the new data should be passed to HomepageManager for list * When data is updated or changed, the new data should be passed to ContextualCardManager for list * updating. */ void onDataUpdated(List<HomepageCard> cardList); void onDataUpdated(List<ContextualCard> cardList); void onPrimaryClick(HomepageCard card); void onPrimaryClick(ContextualCard card); void onActionClick(HomepageCard card); void onActionClick(ContextualCard card); void setHomepageCardUpdateListener(HomepageCardUpdateListener listener); void setCardUpdateListener(ContextualCardUpdateListener listener); } src/com/android/settings/homepage/HomepageCardLookupTable.java→src/com/android/settings/homepage/ContextualCardLookupTable.java +21 −19 Original line number Diff line number Diff line Loading @@ -16,43 +16,45 @@ package com.android.settings.homepage; import com.android.settings.homepage.HomepageCard.CardType; import com.android.settings.homepage.conditional.ConditionHomepageCardController; import com.android.settings.homepage.conditional.ConditionHomepageCardRenderer; import com.android.settings.homepage.ContextualCard.CardType; import com.android.settings.homepage.conditional.ConditionContextualCardController; import com.android.settings.homepage.conditional.ConditionContextualCardRenderer; import java.util.Set; import java.util.TreeSet; public class HomepageCardLookupTable { public class ContextualCardLookupTable { static class HomepageMapping implements Comparable<HomepageMapping> { static class ControllerRendererMapping implements Comparable<ControllerRendererMapping> { @CardType private final int mCardType; private final Class<? extends HomepageCardController> mControllerClass; private final Class<? extends HomepageCardRenderer> mRendererClass; private final Class<? extends ContextualCardController> mControllerClass; private final Class<? extends ContextualCardRenderer> mRendererClass; private HomepageMapping(@CardType int cardType, Class<? extends HomepageCardController> controllerClass, Class<? extends HomepageCardRenderer> rendererClass) { private ControllerRendererMapping(@CardType int cardType, Class<? extends ContextualCardController> controllerClass, Class<? extends ContextualCardRenderer> rendererClass) { mCardType = cardType; mControllerClass = controllerClass; mRendererClass = rendererClass; } @Override public int compareTo(HomepageMapping other) { public int compareTo(ControllerRendererMapping other) { return Integer.compare(this.mCardType, other.mCardType); } } private static final Set<HomepageMapping> LOOKUP_TABLE = new TreeSet<HomepageMapping>() {{ add(new HomepageMapping(CardType.CONDITIONAL, ConditionHomepageCardController.class, ConditionHomepageCardRenderer.class)); private static final Set<ControllerRendererMapping> LOOKUP_TABLE = new TreeSet<ControllerRendererMapping>() {{ add(new ControllerRendererMapping(CardType.CONDITIONAL, ConditionContextualCardController.class, ConditionContextualCardRenderer.class)); }}; public static Class<? extends HomepageCardController> getCardControllerClass( public static Class<? extends ContextualCardController> getCardControllerClass( @CardType int cardType) { for (HomepageMapping mapping : LOOKUP_TABLE) { for (ControllerRendererMapping mapping : LOOKUP_TABLE) { if (mapping.mCardType == cardType) { return mapping.mControllerClass; } Loading @@ -61,9 +63,9 @@ public class HomepageCardLookupTable { } //TODO(b/112578070): Implement multi renderer cases. public static Class<? extends HomepageCardRenderer> getCardRendererClasses( public static Class<? extends ContextualCardRenderer> getCardRendererClasses( @CardType int cardType) { for (HomepageMapping mapping : LOOKUP_TABLE) { for (ControllerRendererMapping mapping : LOOKUP_TABLE) { if (mapping.mCardType == cardType) { return mapping.mRendererClass; } Loading src/com/android/settings/homepage/HomepageManager.java→src/com/android/settings/homepage/ContextualCardManager.java +31 −31 Original line number Diff line number Diff line Loading @@ -26,37 +26,37 @@ import java.util.ArrayList; import java.util.List; /** * This is a centralized manager of multiple {@link HomepageCardController}. * This is a centralized manager of multiple {@link ContextualCardController}. * * {@link HomepageManager} first loads data from {@link CardContentLoader} and gets back a list of * {@link HomepageCard}. All subclasses of {@link HomepageCardController} are loaded here, which * will then trigger the {@link HomepageCardController} to load its data and listen to * corresponding changes. When every single {@link HomepageCardController} updates its data, the * {@link ContextualCardManager} first loads data from {@link CardContentLoader} and gets back a list of * {@link ContextualCard}. All subclasses of {@link ContextualCardController} are loaded here, which * will then trigger the {@link ContextualCardController} to load its data and listen to * corresponding changes. When every single {@link ContextualCardController} updates its data, the * data will be passed here, then going through some sorting mechanisms. The * {@link HomepageCardController} will end up building a list of {@link HomepageCard} for {@link * HomepageAdapter} and {@link BaseAdapter#notifyDataSetChanged()} will be called to get the page * {@link ContextualCardController} will end up building a list of {@link ContextualCard} for {@link * ContextualCardsAdapter} and {@link BaseAdapter#notifyDataSetChanged()} will be called to get the page * refreshed. */ public class HomepageManager implements CardContentLoader.CardContentLoaderListener, HomepageCardUpdateListener { public class ContextualCardManager implements CardContentLoader.CardContentLoaderListener, ContextualCardUpdateListener { private static final String TAG = "HomepageManager"; private static final String TAG = "ContextualCardManager"; //The list for Settings Custom Card @HomepageCard.CardType private static final int[] SETTINGS_CARDS = {HomepageCard.CardType.CONDITIONAL}; @ContextualCard.CardType private static final int[] SETTINGS_CARDS = {ContextualCard.CardType.CONDITIONAL}; private final Context mContext; private final ControllerRendererPool mControllerRendererPool; private final Lifecycle mLifecycle; private List<HomepageCard> mHomepageCards; private HomepageCardUpdateListener mListener; private List<ContextualCard> mContextualCards; private ContextualCardUpdateListener mListener; public HomepageManager(Context context, Lifecycle lifecycle) { public ContextualCardManager(Context context, Lifecycle lifecycle) { mContext = context; mLifecycle = lifecycle; mHomepageCards = new ArrayList<>(); mContextualCards = new ArrayList<>(); mControllerRendererPool = new ControllerRendererPool(); } Loading @@ -66,8 +66,8 @@ public class HomepageManager implements CardContentLoader.CardContentLoaderListe } private void loadCardControllers() { if (mHomepageCards != null) { for (HomepageCard card : mHomepageCards) { if (mContextualCards != null) { for (ContextualCard card : mContextualCards) { setupController(card.getCardType()); } } Loading @@ -79,10 +79,10 @@ public class HomepageManager implements CardContentLoader.CardContentLoaderListe } private void setupController(int cardType) { final HomepageCardController controller = mControllerRendererPool.getController(mContext, final ContextualCardController controller = mControllerRendererPool.getController(mContext, cardType); if (controller != null) { controller.setHomepageCardUpdateListener(this); controller.setCardUpdateListener(this); if (controller instanceof LifecycleObserver) { if (mLifecycle != null) { mLifecycle.addObserver((LifecycleObserver) controller); Loading @@ -93,35 +93,35 @@ public class HomepageManager implements CardContentLoader.CardContentLoaderListe //TODO(b/111822376): implement sorting mechanism. private void sortCards() { //take mHomepageCards as the source and do the ranking based on the rule. //take mContextualCards as the source and do the ranking based on the rule. } @Override public void onHomepageCardUpdated(int cardType, List<HomepageCard> updateList) { public void onHomepageCardUpdated(int cardType, List<ContextualCard> updateList) { //TODO(b/112245748): Should implement a DiffCallback. //Keep the old list for comparison. final List<HomepageCard> prevCards = mHomepageCards; final List<ContextualCard> prevCards = mContextualCards; //Remove the existing data that matches the certain cardType so as to insert the new data. for (int i = mHomepageCards.size() - 1; i >= 0; i--) { if (mHomepageCards.get(i).getCardType() == cardType) { mHomepageCards.remove(i); for (int i = mContextualCards.size() - 1; i >= 0; i--) { if (mContextualCards.get(i).getCardType() == cardType) { mContextualCards.remove(i); } } //Append the new data mHomepageCards.addAll(updateList); mContextualCards.addAll(updateList); sortCards(); if (mListener != null) { mListener.onHomepageCardUpdated(HomepageCard.CardType.INVALID, mHomepageCards); mListener.onHomepageCardUpdated(ContextualCard.CardType.INVALID, mContextualCards); } } @Override public void onFinishCardLoading(List<HomepageCard> homepageCards) { mHomepageCards = homepageCards; public void onFinishCardLoading(List<ContextualCard> contextualCards) { mContextualCards = contextualCards; //Force card sorting here in case CardControllers of custom view have nothing to update // for the first launch. Loading @@ -130,7 +130,7 @@ public class HomepageManager implements CardContentLoader.CardContentLoaderListe loadCardControllers(); } void setListener(HomepageCardUpdateListener listener) { void setListener(ContextualCardUpdateListener listener) { mListener = listener; } Loading Loading
src/com/android/settings/homepage/CardContentLoader.java +4 −4 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ public class CardContentLoader { private CardContentLoaderListener mListener; public interface CardContentLoaderListener { void onFinishCardLoading(List<HomepageCard> homepageCards); void onFinishCardLoading(List<ContextualCard> contextualCards); } public CardContentLoader() { Loading @@ -42,20 +42,20 @@ public class CardContentLoader { mListener = listener; } private static class CardLoader extends AsyncLoaderCompat<List<HomepageCard>> { private static class CardLoader extends AsyncLoaderCompat<List<ContextualCard>> { public CardLoader(Context context) { super(context); } @Override protected void onDiscardResult(List<HomepageCard> result) { protected void onDiscardResult(List<ContextualCard> result) { } @Nullable @Override public List<HomepageCard> loadInBackground() { public List<ContextualCard> loadInBackground() { return null; } } Loading
src/com/android/settings/homepage/HomepageCard.java→src/com/android/settings/homepage/ContextualCard.java +8 −8 Original line number Diff line number Diff line Loading @@ -25,12 +25,12 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Data class representing a {@link HomepageCard}. * Data class representing a {@link ContextualCard}. */ public class HomepageCard { public class ContextualCard { /** * Flags indicating the type of the HomepageCard. * Flags indicating the type of the ContextualCard. */ @IntDef({CardType.INVALID, CardType.SLICE, CardType.SUGGESTION, CardType.CONDITIONAL}) @Retention(RetentionPolicy.SOURCE) Loading Loading @@ -137,7 +137,7 @@ public class HomepageCard { return mIsHalfWidth; } public HomepageCard(Builder builder) { public ContextualCard(Builder builder) { mName = builder.mName; mCardType = builder.mCardType; mRankingScore = builder.mRankingScore; Loading Loading @@ -171,10 +171,10 @@ public class HomepageCard { if (this == obj) { return true; } if (!(obj instanceof HomepageCard)) { if (!(obj instanceof ContextualCard)) { return false; } final HomepageCard that = (HomepageCard) obj; final ContextualCard that = (ContextualCard) obj; return TextUtils.equals(mName, that.mName); } Loading Loading @@ -289,8 +289,8 @@ public class HomepageCard { return this; } public HomepageCard build() { return new HomepageCard(this); public ContextualCard build() { return new ContextualCard(this); } } }
src/com/android/settings/homepage/HomepageCardController.java→src/com/android/settings/homepage/ContextualCardController.java +8 −8 Original line number Diff line number Diff line Loading @@ -19,22 +19,22 @@ package com.android.settings.homepage; import java.util.List; /** * Data controller for {@link HomepageCard}. * Data controller for {@link ContextualCard}. */ public interface HomepageCardController { public interface ContextualCardController { @HomepageCard.CardType @ContextualCard.CardType int getCardType(); /** * When data is updated or changed, the new data should be passed to HomepageManager for list * When data is updated or changed, the new data should be passed to ContextualCardManager for list * updating. */ void onDataUpdated(List<HomepageCard> cardList); void onDataUpdated(List<ContextualCard> cardList); void onPrimaryClick(HomepageCard card); void onPrimaryClick(ContextualCard card); void onActionClick(HomepageCard card); void onActionClick(ContextualCard card); void setHomepageCardUpdateListener(HomepageCardUpdateListener listener); void setCardUpdateListener(ContextualCardUpdateListener listener); }
src/com/android/settings/homepage/HomepageCardLookupTable.java→src/com/android/settings/homepage/ContextualCardLookupTable.java +21 −19 Original line number Diff line number Diff line Loading @@ -16,43 +16,45 @@ package com.android.settings.homepage; import com.android.settings.homepage.HomepageCard.CardType; import com.android.settings.homepage.conditional.ConditionHomepageCardController; import com.android.settings.homepage.conditional.ConditionHomepageCardRenderer; import com.android.settings.homepage.ContextualCard.CardType; import com.android.settings.homepage.conditional.ConditionContextualCardController; import com.android.settings.homepage.conditional.ConditionContextualCardRenderer; import java.util.Set; import java.util.TreeSet; public class HomepageCardLookupTable { public class ContextualCardLookupTable { static class HomepageMapping implements Comparable<HomepageMapping> { static class ControllerRendererMapping implements Comparable<ControllerRendererMapping> { @CardType private final int mCardType; private final Class<? extends HomepageCardController> mControllerClass; private final Class<? extends HomepageCardRenderer> mRendererClass; private final Class<? extends ContextualCardController> mControllerClass; private final Class<? extends ContextualCardRenderer> mRendererClass; private HomepageMapping(@CardType int cardType, Class<? extends HomepageCardController> controllerClass, Class<? extends HomepageCardRenderer> rendererClass) { private ControllerRendererMapping(@CardType int cardType, Class<? extends ContextualCardController> controllerClass, Class<? extends ContextualCardRenderer> rendererClass) { mCardType = cardType; mControllerClass = controllerClass; mRendererClass = rendererClass; } @Override public int compareTo(HomepageMapping other) { public int compareTo(ControllerRendererMapping other) { return Integer.compare(this.mCardType, other.mCardType); } } private static final Set<HomepageMapping> LOOKUP_TABLE = new TreeSet<HomepageMapping>() {{ add(new HomepageMapping(CardType.CONDITIONAL, ConditionHomepageCardController.class, ConditionHomepageCardRenderer.class)); private static final Set<ControllerRendererMapping> LOOKUP_TABLE = new TreeSet<ControllerRendererMapping>() {{ add(new ControllerRendererMapping(CardType.CONDITIONAL, ConditionContextualCardController.class, ConditionContextualCardRenderer.class)); }}; public static Class<? extends HomepageCardController> getCardControllerClass( public static Class<? extends ContextualCardController> getCardControllerClass( @CardType int cardType) { for (HomepageMapping mapping : LOOKUP_TABLE) { for (ControllerRendererMapping mapping : LOOKUP_TABLE) { if (mapping.mCardType == cardType) { return mapping.mControllerClass; } Loading @@ -61,9 +63,9 @@ public class HomepageCardLookupTable { } //TODO(b/112578070): Implement multi renderer cases. public static Class<? extends HomepageCardRenderer> getCardRendererClasses( public static Class<? extends ContextualCardRenderer> getCardRendererClasses( @CardType int cardType) { for (HomepageMapping mapping : LOOKUP_TABLE) { for (ControllerRendererMapping mapping : LOOKUP_TABLE) { if (mapping.mCardType == cardType) { return mapping.mRendererClass; } Loading
src/com/android/settings/homepage/HomepageManager.java→src/com/android/settings/homepage/ContextualCardManager.java +31 −31 Original line number Diff line number Diff line Loading @@ -26,37 +26,37 @@ import java.util.ArrayList; import java.util.List; /** * This is a centralized manager of multiple {@link HomepageCardController}. * This is a centralized manager of multiple {@link ContextualCardController}. * * {@link HomepageManager} first loads data from {@link CardContentLoader} and gets back a list of * {@link HomepageCard}. All subclasses of {@link HomepageCardController} are loaded here, which * will then trigger the {@link HomepageCardController} to load its data and listen to * corresponding changes. When every single {@link HomepageCardController} updates its data, the * {@link ContextualCardManager} first loads data from {@link CardContentLoader} and gets back a list of * {@link ContextualCard}. All subclasses of {@link ContextualCardController} are loaded here, which * will then trigger the {@link ContextualCardController} to load its data and listen to * corresponding changes. When every single {@link ContextualCardController} updates its data, the * data will be passed here, then going through some sorting mechanisms. The * {@link HomepageCardController} will end up building a list of {@link HomepageCard} for {@link * HomepageAdapter} and {@link BaseAdapter#notifyDataSetChanged()} will be called to get the page * {@link ContextualCardController} will end up building a list of {@link ContextualCard} for {@link * ContextualCardsAdapter} and {@link BaseAdapter#notifyDataSetChanged()} will be called to get the page * refreshed. */ public class HomepageManager implements CardContentLoader.CardContentLoaderListener, HomepageCardUpdateListener { public class ContextualCardManager implements CardContentLoader.CardContentLoaderListener, ContextualCardUpdateListener { private static final String TAG = "HomepageManager"; private static final String TAG = "ContextualCardManager"; //The list for Settings Custom Card @HomepageCard.CardType private static final int[] SETTINGS_CARDS = {HomepageCard.CardType.CONDITIONAL}; @ContextualCard.CardType private static final int[] SETTINGS_CARDS = {ContextualCard.CardType.CONDITIONAL}; private final Context mContext; private final ControllerRendererPool mControllerRendererPool; private final Lifecycle mLifecycle; private List<HomepageCard> mHomepageCards; private HomepageCardUpdateListener mListener; private List<ContextualCard> mContextualCards; private ContextualCardUpdateListener mListener; public HomepageManager(Context context, Lifecycle lifecycle) { public ContextualCardManager(Context context, Lifecycle lifecycle) { mContext = context; mLifecycle = lifecycle; mHomepageCards = new ArrayList<>(); mContextualCards = new ArrayList<>(); mControllerRendererPool = new ControllerRendererPool(); } Loading @@ -66,8 +66,8 @@ public class HomepageManager implements CardContentLoader.CardContentLoaderListe } private void loadCardControllers() { if (mHomepageCards != null) { for (HomepageCard card : mHomepageCards) { if (mContextualCards != null) { for (ContextualCard card : mContextualCards) { setupController(card.getCardType()); } } Loading @@ -79,10 +79,10 @@ public class HomepageManager implements CardContentLoader.CardContentLoaderListe } private void setupController(int cardType) { final HomepageCardController controller = mControllerRendererPool.getController(mContext, final ContextualCardController controller = mControllerRendererPool.getController(mContext, cardType); if (controller != null) { controller.setHomepageCardUpdateListener(this); controller.setCardUpdateListener(this); if (controller instanceof LifecycleObserver) { if (mLifecycle != null) { mLifecycle.addObserver((LifecycleObserver) controller); Loading @@ -93,35 +93,35 @@ public class HomepageManager implements CardContentLoader.CardContentLoaderListe //TODO(b/111822376): implement sorting mechanism. private void sortCards() { //take mHomepageCards as the source and do the ranking based on the rule. //take mContextualCards as the source and do the ranking based on the rule. } @Override public void onHomepageCardUpdated(int cardType, List<HomepageCard> updateList) { public void onHomepageCardUpdated(int cardType, List<ContextualCard> updateList) { //TODO(b/112245748): Should implement a DiffCallback. //Keep the old list for comparison. final List<HomepageCard> prevCards = mHomepageCards; final List<ContextualCard> prevCards = mContextualCards; //Remove the existing data that matches the certain cardType so as to insert the new data. for (int i = mHomepageCards.size() - 1; i >= 0; i--) { if (mHomepageCards.get(i).getCardType() == cardType) { mHomepageCards.remove(i); for (int i = mContextualCards.size() - 1; i >= 0; i--) { if (mContextualCards.get(i).getCardType() == cardType) { mContextualCards.remove(i); } } //Append the new data mHomepageCards.addAll(updateList); mContextualCards.addAll(updateList); sortCards(); if (mListener != null) { mListener.onHomepageCardUpdated(HomepageCard.CardType.INVALID, mHomepageCards); mListener.onHomepageCardUpdated(ContextualCard.CardType.INVALID, mContextualCards); } } @Override public void onFinishCardLoading(List<HomepageCard> homepageCards) { mHomepageCards = homepageCards; public void onFinishCardLoading(List<ContextualCard> contextualCards) { mContextualCards = contextualCards; //Force card sorting here in case CardControllers of custom view have nothing to update // for the first launch. Loading @@ -130,7 +130,7 @@ public class HomepageManager implements CardContentLoader.CardContentLoaderListe loadCardControllers(); } void setListener(HomepageCardUpdateListener listener) { void setListener(ContextualCardUpdateListener listener) { mListener = listener; } Loading