Merge "Add a filter to take out unnecessary homepage data."

This commit is contained in:
Fan Zhang
2018-10-09 16:48:04 +00:00
committed by Android (Google) Code Review
3 changed files with 179 additions and 104 deletions

View File

@@ -16,13 +16,21 @@
package com.android.settings.homepage;
import static android.app.slice.Slice.HINT_ERROR;
import static androidx.slice.widget.SliceLiveData.SUPPORTED_SPECS;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
import androidx.slice.Slice;
import com.android.settings.homepage.deviceinfo.DataUsageSlice;
import com.android.settings.homepage.deviceinfo.DeviceInfoSlice;
@@ -31,6 +39,7 @@ import com.android.settingslib.utils.AsyncLoaderCompat;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
public class CardContentLoader extends AsyncLoaderCompat<List<ContextualCard>> {
private static final String TAG = "CardContentLoader";
@@ -59,18 +68,18 @@ public class CardContentLoader extends AsyncLoaderCompat<List<ContextualCard>> {
try (Cursor cursor = getContextualCardsFromProvider()) {
if (cursor.getCount() == 0) {
result.addAll(createStaticCards());
return result;
}
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
final ContextualCard card = new ContextualCard(cursor);
if (card.isCustomCard()) {
//TODO(b/114688391): Load and generate custom card,then add into list
} else {
result.add(card);
} else {
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
final ContextualCard card = new ContextualCard(cursor);
if (card.isCustomCard()) {
//TODO(b/114688391): Load and generate custom card,then add into list
} else {
result.add(card);
}
}
}
}
return result;
return filter(result);
}
@VisibleForTesting
@@ -95,15 +104,15 @@ public class CardContentLoader extends AsyncLoaderCompat<List<ContextualCard>> {
.build());
//TODO(b/115971399): Will change following values of SliceUri and Name
// after landing these slice cards.
add(new ContextualCard.Builder()
.setSliceUri("content://com.android.settings.slices/intent/battery_card")
.setName(packageName + "/" + "battery_card")
.setPackageName(packageName)
.setRankingScore(rankingScore)
.setAppVersion(appVersionCode)
.setCardType(ContextualCard.CardType.SLICE)
.setIsHalfWidth(true)
.build());
// add(new ContextualCard.Builder()
// .setSliceUri("content://com.android.settings.slices/battery_card")
// .setName(packageName + "/" + "battery_card")
// .setPackageName(packageName)
// .setRankingScore(rankingScore)
// .setAppVersion(appVersionCode)
// .setCardType(ContextualCard.CardType.SLICE)
// .setIsHalfWidth(true)
// .build());
add(new ContextualCard.Builder()
.setSliceUri(DeviceInfoSlice.DEVICE_INFO_CARD_URI.toString())
.setName(packageName + "/" + DeviceInfoSlice.PATH_DEVICE_INFO_CARD)
@@ -126,6 +135,41 @@ public class CardContentLoader extends AsyncLoaderCompat<List<ContextualCard>> {
return result;
}
@VisibleForTesting
List<ContextualCard> filter(List<ContextualCard> candidates) {
return candidates.stream().filter(card -> isCardEligibleToDisplay(card)).collect(
Collectors.toList());
}
@VisibleForTesting
boolean isCardEligibleToDisplay(ContextualCard card) {
if (card.isCustomCard()) {
return true;
}
final Uri uri = card.getSliceUri();
if (!ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
return false;
}
//check if the uri has a provider associated with.
final ContentProviderClient provider =
mContext.getContentResolver().acquireContentProviderClient(uri);
if (provider == null) {
return false;
}
//release contentProviderClient to prevent from memory leak.
provider.release();
final Slice slice = Slice.bindSlice(mContext, uri, SUPPORTED_SPECS);
if (slice == null || slice.hasHint(HINT_ERROR)) {
return false;
}
return true;
}
private long getAppVersionCode() {
try {
return mContext.getPackageManager().getPackageInfo(mContext.getPackageName(),