mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-01 16:26:47 +00:00
Widget is loaded only when the user enters the overview mode and we keep the list updated as long as the user is in the overview mode. Once the user leaves the overview mode, we stop responding to widget updates Bug: 26077457 Change-Id: I9e4904b8f1300bfe0d77e2bc5f59aa6963fad8d1
176 lines
6.4 KiB
Java
176 lines
6.4 KiB
Java
/*
|
|
* Copyright (C) 2014 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.
|
|
*/
|
|
|
|
package com.android.launcher3.compat;
|
|
|
|
import android.annotation.TargetApi;
|
|
import android.app.Activity;
|
|
import android.appwidget.AppWidgetHost;
|
|
import android.appwidget.AppWidgetProviderInfo;
|
|
import android.content.ActivityNotFoundException;
|
|
import android.content.ComponentName;
|
|
import android.content.Context;
|
|
import android.content.pm.PackageManager;
|
|
import android.content.res.Resources;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.Color;
|
|
import android.graphics.Rect;
|
|
import android.graphics.drawable.BitmapDrawable;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.os.UserHandle;
|
|
import android.os.UserManager;
|
|
import android.view.View;
|
|
import android.widget.Toast;
|
|
|
|
import com.android.launcher3.IconCache;
|
|
import com.android.launcher3.LauncherAppWidgetProviderInfo;
|
|
import com.android.launcher3.R;
|
|
import com.android.launcher3.util.ComponentKey;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
|
|
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
|
|
class AppWidgetManagerCompatVL extends AppWidgetManagerCompat {
|
|
|
|
private final UserManager mUserManager;
|
|
private final PackageManager mPm;
|
|
|
|
AppWidgetManagerCompatVL(Context context) {
|
|
super(context);
|
|
mPm = context.getPackageManager();
|
|
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
|
|
}
|
|
|
|
@Override
|
|
public List<AppWidgetProviderInfo> getAllProviders() {
|
|
ArrayList<AppWidgetProviderInfo> providers = new ArrayList<AppWidgetProviderInfo>();
|
|
for (UserHandle user : mUserManager.getUserProfiles()) {
|
|
providers.addAll(mAppWidgetManager.getInstalledProvidersForProfile(user));
|
|
}
|
|
return providers;
|
|
}
|
|
|
|
@Override
|
|
public String loadLabel(LauncherAppWidgetProviderInfo info) {
|
|
return info.getLabel(mPm);
|
|
}
|
|
|
|
@Override
|
|
public boolean bindAppWidgetIdIfAllowed(int appWidgetId, AppWidgetProviderInfo info,
|
|
Bundle options) {
|
|
return mAppWidgetManager.bindAppWidgetIdIfAllowed(
|
|
appWidgetId, info.getProfile(), info.provider, options);
|
|
}
|
|
|
|
@Override
|
|
public UserHandleCompat getUser(LauncherAppWidgetProviderInfo info) {
|
|
if (info.isCustomWidget) {
|
|
return UserHandleCompat.myUserHandle();
|
|
}
|
|
return UserHandleCompat.fromUser(info.getProfile());
|
|
}
|
|
|
|
@Override
|
|
public void startConfigActivity(AppWidgetProviderInfo info, int widgetId, Activity activity,
|
|
AppWidgetHost host, int requestCode) {
|
|
try {
|
|
host.startAppWidgetConfigureActivityForResult(activity, widgetId, 0, requestCode, null);
|
|
} catch (ActivityNotFoundException | SecurityException e) {
|
|
Toast.makeText(activity, R.string.activity_not_found, Toast.LENGTH_SHORT).show();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public Drawable loadPreview(AppWidgetProviderInfo info) {
|
|
return info.loadPreviewImage(mContext, 0);
|
|
}
|
|
|
|
@Override
|
|
public Drawable loadIcon(LauncherAppWidgetProviderInfo info, IconCache cache) {
|
|
return info.getIcon(mContext, cache);
|
|
}
|
|
|
|
@Override
|
|
public Bitmap getBadgeBitmap(LauncherAppWidgetProviderInfo info, Bitmap bitmap,
|
|
int imageWidth, int imageHeight) {
|
|
if (info.isCustomWidget || info.getProfile().equals(android.os.Process.myUserHandle())) {
|
|
return bitmap;
|
|
}
|
|
|
|
// Add a user badge in the bottom right of the image.
|
|
final Resources res = mContext.getResources();
|
|
final int badgeMinTop = res.getDimensionPixelSize(R.dimen.profile_badge_minimum_top);
|
|
|
|
// choose min between badge size defined for widget tray versus width, height of the image.
|
|
// Width, height of the image can be smaller than widget tray badge size when being dropped
|
|
// to the workspace.
|
|
final int badgeSize = Math.min(res.getDimensionPixelSize(R.dimen.profile_badge_size),
|
|
Math.min(imageWidth, imageHeight - badgeMinTop));
|
|
final Rect badgeLocation = new Rect(0, 0, badgeSize, badgeSize);
|
|
|
|
final int top = Math.max(imageHeight - badgeSize, badgeMinTop);
|
|
|
|
if (res.getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL) {
|
|
badgeLocation.offset(0, top);
|
|
} else {
|
|
badgeLocation.offset(bitmap.getWidth() - badgeSize, top);
|
|
}
|
|
|
|
Drawable drawable = mPm.getUserBadgedDrawableForDensity(
|
|
new BitmapDrawable(res, bitmap), info.getProfile(), badgeLocation, 0);
|
|
|
|
if (drawable instanceof BitmapDrawable) {
|
|
return ((BitmapDrawable) drawable).getBitmap();
|
|
}
|
|
|
|
bitmap.eraseColor(Color.TRANSPARENT);
|
|
Canvas c = new Canvas(bitmap);
|
|
drawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
|
|
drawable.draw(c);
|
|
c.setBitmap(null);
|
|
return bitmap;
|
|
}
|
|
|
|
@Override
|
|
public LauncherAppWidgetProviderInfo findProvider(ComponentName provider, UserHandleCompat user) {
|
|
for (AppWidgetProviderInfo info : mAppWidgetManager
|
|
.getInstalledProvidersForProfile(user.getUser())) {
|
|
if (info.provider.equals(provider)) {
|
|
return LauncherAppWidgetProviderInfo.fromProviderInfo(mContext, info);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public HashMap<ComponentKey, AppWidgetProviderInfo> getAllProvidersMap() {
|
|
HashMap<ComponentKey, AppWidgetProviderInfo> result = new HashMap<>();
|
|
for (UserHandle user : mUserManager.getUserProfiles()) {
|
|
UserHandleCompat userHandle = UserHandleCompat.fromUser(user);
|
|
for (AppWidgetProviderInfo info :
|
|
mAppWidgetManager.getInstalledProvidersForProfile(user)) {
|
|
result.put(new ComponentKey(info.provider, userHandle), info);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
}
|