Show recently used instant apps provided by the app discovery service

in the same section as installed apps.

Change-Id: I2efd41c69960c4982523c58893aacfc7a5d0bb2e
This commit is contained in:
Mario Bertschler 2017-03-23 14:48:53 -07:00
parent 77ff9a4343
commit 853c13d427
6 changed files with 23 additions and 81 deletions

View File

@ -1,43 +0,0 @@
<?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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="@dimen/badge_size"
android:height="@dimen/badge_size"
android:viewportWidth="18"
android:viewportHeight="18">
<path
android:fillColor="@android:color/black"
android:fillType="evenOdd"
android:strokeWidth="1"
android:pathData="M 9 0 C 13.9705627485 0 18 4.02943725152 18 9 C 18 13.9705627485 13.9705627485 18 9 18 C 4.02943725152 18 0 13.9705627485 0 9 C 0 4.02943725152 4.02943725152 0 9 0 Z" />
<path
android:fillColor="@android:color/white"
android:fillType="evenOdd"
android:strokeWidth="1"
android:pathData="M 9 0 C 13.9705627485 0 18 4.02943725152 18 9 C 18 13.9705627485 13.9705627485 18 9 18 C 4.02943725152 18 0 13.9705627485 0 9 C 0 4.02943725152 4.02943725152 0 9 0 Z" />
<path
android:fillColor="@android:color/white"
android:fillType="evenOdd"
android:strokeWidth="1"
android:pathData="M 9 0 C 13.9705627485 0 18 4.02943725152 18 9 C 18 13.9705627485 13.9705627485 18 9 18 C 4.02943725152 18 0 13.9705627485 0 9 C 0 4.02943725152 4.02943725152 0 9 0 Z" />
<path
android:fillColor="@android:color/black"
android:fillAlpha="0.87"
android:fillType="evenOdd"
android:strokeWidth="1"
android:pathData="M 6 10.4123279 L 8.63934949 10.4123279 L 8.63934949 15.6 L 12.5577168 7.84517705 L 9.94547194 7.84517705 L 9.94547194 2 Z" />
</vector>

View File

@ -27,18 +27,6 @@
android:padding="8dp"
android:scaleType="fitCenter"/>
<ImageView
android:id="@+id/badge"
android:layout_width="16dp"
android:layout_height="16dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_instant_app"
android:layout_marginRight="6dp"
android:layout_marginBottom="6dp"
android:layout_alignRight="@+id/image"
android:layout_alignBottom="@+id/image"
android:clickable="false"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"

View File

@ -292,7 +292,7 @@ public class AlphabeticalAppsList {
mDiscoveredApps.clear();
break;
case UPDATE:
mDiscoveredApps.add(new AppDiscoveryAppInfo(app, mLauncher));
mDiscoveredApps.add(new AppDiscoveryAppInfo(app));
break;
}
updateAdapterItems();
@ -494,10 +494,13 @@ public class AlphabeticalAppsList {
if (hasFilter()) {
if (isAppDiscoveryRunning() || mDiscoveredApps.size() > 0) {
mAdapterItems.add(AdapterItem.asLoadingDivider(position++));
// Append all app discovery results
for (int i = 0; i < mDiscoveredApps.size(); i++) {
AppDiscoveryAppInfo appDiscoveryAppInfo = mDiscoveredApps.get(i);
if (appDiscoveryAppInfo.isRecent) {
// already handled in getFilteredAppInfos()
continue;
}
AdapterItem item = AdapterItem.asDiscoveryItem(position++,
"", appDiscoveryAppInfo, appIndex++);
mAdapterItems.add(item);
@ -589,6 +592,17 @@ public class AlphabeticalAppsList {
result.add(match);
}
}
// adding recently used instant apps
if (mDiscoveredApps.size() > 0) {
for (int i = 0; i < mDiscoveredApps.size(); i++) {
AppDiscoveryAppInfo discoveryAppInfo = mDiscoveredApps.get(i);
if (discoveryAppInfo.isRecent) {
result.add(discoveryAppInfo);
}
}
Collections.sort(result, mAppNameComparator);
}
return result;
}

View File

@ -18,24 +18,18 @@ package com.android.launcher3.discovery;
import android.content.ComponentName;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.android.launcher3.AppInfo;
import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.R;
import com.android.launcher3.ShortcutInfo;
public class AppDiscoveryAppInfo extends AppInfo {
private final @NonNull Launcher mLauncher;
public final boolean showAsDiscoveryItem;
public final boolean isInstantApp;
public final boolean isRecent;
public final float rating;
public final long reviewCount;
public final @NonNull String publisher;
@ -43,14 +37,14 @@ public class AppDiscoveryAppInfo extends AppInfo {
public final @NonNull Intent launchIntent;
public final @Nullable String priceFormatted;
public AppDiscoveryAppInfo(AppDiscoveryItem item, Launcher launcher) {
this.mLauncher = launcher;
public AppDiscoveryAppInfo(AppDiscoveryItem item) {
this.intent = item.isInstantApp ? item.launchIntent : item.installIntent;
this.title = item.title;
this.iconBitmap = item.bitmap;
this.isDisabled = ShortcutInfo.DEFAULT;
this.usingLowResIcon = false;
this.isInstantApp = item.isInstantApp;
this.isRecent = item.isRecent;
this.rating = item.starRating;
this.showAsDiscoveryItem = true;
this.publisher = item.publisher != null ? item.publisher : "";
@ -67,18 +61,7 @@ public class AppDiscoveryAppInfo extends AppInfo {
if (!isDragAndDropSupported()) {
throw new RuntimeException("DnD is currently not supported for discovered store apps");
}
ShortcutInfo shortcutInfo = super.makeShortcut();
if (isInstantApp) {
int iconSize = iconBitmap.getWidth();
int badgeSize = mLauncher.getResources().getDimensionPixelOffset(R.dimen.badge_size);
Bitmap icon = Bitmap.createBitmap(iconBitmap);
Drawable badgeDrawable = mLauncher.getDrawable(R.drawable.ic_instant_app);
badgeDrawable.setBounds(iconSize - badgeSize, iconSize - badgeSize, iconSize, iconSize);
Canvas canvas = new Canvas(icon);
badgeDrawable.draw(canvas);
shortcutInfo.iconBitmap = icon;
}
return shortcutInfo;
return super.makeShortcut();
}
public boolean isDragAndDropSupported() {

View File

@ -28,6 +28,7 @@ public class AppDiscoveryItem {
public final String packageName;
public final boolean isInstantApp;
public final boolean isRecent;
public final float starRating;
public final long reviewCount;
public final Intent launchIntent;
@ -39,6 +40,7 @@ public class AppDiscoveryItem {
public AppDiscoveryItem(String packageName,
boolean isInstantApp,
boolean isRecent,
float starRating,
long reviewCount,
CharSequence title,
@ -49,6 +51,7 @@ public class AppDiscoveryItem {
Intent installIntent) {
this.packageName = packageName;
this.isInstantApp = isInstantApp;
this.isRecent = isRecent;
this.starRating = starRating;
this.reviewCount = reviewCount;
this.launchIntent = launchIntent;

View File

@ -34,7 +34,6 @@ public class AppDiscoveryItemView extends RelativeLayout {
private static boolean SHOW_REVIEW_COUNT = false;
private ImageView mImage;
private ImageView mBadge;
private TextView mTitle;
private TextView mRatingText;
private RatingView mRatingView;
@ -58,7 +57,6 @@ public class AppDiscoveryItemView extends RelativeLayout {
protected void onFinishInflate() {
super.onFinishInflate();
this.mImage = (ImageView) findViewById(R.id.image);
this.mBadge = (ImageView) findViewById(R.id.badge);
this.mTitle = (TextView) findViewById(R.id.title);
this.mRatingText = (TextView) findViewById(R.id.rating);
this.mRatingView = (RatingView) findViewById(R.id.rating_view);
@ -80,7 +78,6 @@ public class AppDiscoveryItemView extends RelativeLayout {
mImage.setTag(info);
mImage.setImageBitmap(info.iconBitmap);
mImage.setOnLongClickListener(info.isDragAndDropSupported() ? mOnLongClickListener : null);
mBadge.setVisibility(info.isInstantApp ? View.VISIBLE : View.GONE);
mTitle.setText(info.title);
mPrice.setText(info.priceFormatted != null ? info.priceFormatted : "");
mReviewCount.setVisibility(SHOW_REVIEW_COUNT ? View.VISIBLE : View.GONE);