MDM Adjust bookmarks implementation for new UI
Recent UI changes to bookmarks broke the MDM overlay functionality
because the new Tile based containers do not have a way to get
pre-layout continer metrics.
The solution is to get the metrics from dimen resource (xml).
I also refactored overlayBookmarkBitmap() to take container metrics
as input and perform all pre-scaling calculations internally, which
simplifies calling code. Also added an overlayMarginX parameter, which
allows side-to side adjustment of the overlay.
Change-Id: I17ea1ea6ca9412d8ab960fdfc4e9ca5fbe5c30c3
diff --git a/src/com/android/browser/BookmarkItem.java b/src/com/android/browser/BookmarkItem.java
index 12b2b70..1f7b7d2 100644
--- a/src/com/android/browser/BookmarkItem.java
+++ b/src/com/android/browser/BookmarkItem.java
@@ -84,10 +84,6 @@
}
}
- public int getFavIconIntrinsicWidth() {
- return mTileView.getMeasuredWidth();
- }
-
void setFaviconBackground(Drawable d) {
mTileView.setBackgroundDrawable(d);
}
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index d0930ff..fc75050 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -89,7 +89,6 @@
SiteTileView thumb = (SiteTileView) view.findViewById(R.id.thumb_image);
TextView tv = (TextView) view.findViewById(R.id.label);
tv.setText(item.title);
- int containerWidth = thumb.getWidth() - thumb.getPaddingLeft() - thumb.getPaddingRight();
Bitmap b;
@@ -109,24 +108,23 @@
}
// If the item is managed by mdm or edit bookmark restriction enabled
- if (containerWidth != 0 && (item.is_mdm_managed ||
- EditBookmarksRestriction.getInstance().isEnabled())) {
- int iconResId;
- float overlayScale, overlayVertPos;
+ if (item.title != null &&
+ (item.is_mdm_managed || EditBookmarksRestriction.getInstance().isEnabled())) {
+ int containerWidth = view.getResources().getDimensionPixelSize(R.dimen.bookmarkThumbnailWidth);
+ int containerHeight = view.getResources().getDimensionPixelSize(R.dimen.bookmarkThumbnailHeight);
+ Bitmap bm;
if (item.is_mdm_managed) {
- iconResId = R.drawable.img_deco_mdm_badge_bright;
- overlayScale = 0.6f;
- overlayVertPos = 100f;
+ bm = BrowserBookmarksPage.overlayBookmarkBitmap(mContext, b,
+ R.drawable.img_deco_mdm_badge_bright,
+ containerWidth, containerHeight, 0.6f, 185, 20);
}
else {
- iconResId = R.drawable.ic_deco_secure;
- overlayScale = 1.2f;
- overlayVertPos = 75f;
+ bm = BrowserBookmarksPage.overlayBookmarkBitmap(mContext, b,
+ R.drawable.ic_deco_secure,
+ containerWidth, containerHeight, 1.7f, 110, 0);
}
- float willScale = (float) containerWidth / (float) b.getWidth();
- Bitmap bm = BrowserBookmarksPage.overlayBookmarkBitmap(b, iconResId, mContext,
- overlayScale / willScale, (int) (overlayVertPos / willScale));
+
thumb.replaceFavicon(bm);
}
else {
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index 05bd248..59d4a68 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -333,19 +333,31 @@
|| type == BrowserContract.Bookmarks.BOOKMARK_TYPE_FOLDER;
}
- public static Bitmap overlayBookmarkBitmap(Bitmap origImage, int overlayResId, Context context,
- float overlayScaleFactor, int overlayOffsetY) {
+ public static Bitmap overlayBookmarkBitmap(Context context, Bitmap origImage, int overlayResId,
+ int containerWidth, int containerHeight,
+ float overlayScale, int overlayOffsetY,
+ int overlayMarginX) {
if (origImage == null) {
Log.e(TAG, "Orig Image is null!");
return origImage;
}
+
// Get metrics for incoming bitmap
int origWidth = origImage.getWidth();
int origHeight = origImage.getHeight();
+ // Compute final overlay scale factor based on container size
+ float willScale, overlayScaleFactor;
+ if (Math.abs(containerWidth - origWidth) > Math.abs(containerHeight - origHeight)) {
+ willScale = (float) containerWidth / (float) origWidth;
+ }
+ else {
+ willScale = (float) containerHeight / (float) origHeight;
+ }
+ overlayScaleFactor = overlayScale / willScale;
+
// Load the bitmap for the badge
Bitmap srcOverlay = BitmapFactory.decodeResource(context.getResources(), overlayResId);
-
if (srcOverlay == null) {
Log.e(TAG, "Overlay bitmap creation failed");
return origImage;
@@ -376,11 +388,11 @@
Canvas comboImage = new Canvas(overlaid);
comboImage.drawBitmap(origImage, 0, 0, null);
- // align overlay to right edge. Vertical alingment
+ // align overlay to right edge. Vertical alignment
// determined by overlayOffsetY
comboImage.drawBitmap(scaledOverlay,
- origWidth - scaledOverlay.getWidth(),
- overlayOffsetY,
+ (origWidth - scaledOverlay.getWidth()) - (overlayMarginX / willScale),
+ (overlayOffsetY / willScale),
null);
// Clean up our bitmaps
@@ -411,22 +423,19 @@
}
}
- // if mdm element or edit bookmak restriction enforced, overlay an indicator
- int containerWidth = item.getFavIconIntrinsicWidth();
- if (containerWidth != 0 &&
- (isMdmElem || EditBookmarksRestriction.getInstance().isEnabled())) {
- float willScale = (float) containerWidth / (float) bitmap.getWidth();
+ // if mdm element or edit bookmark restriction enforced, overlay an indicator
+ if (isMdmElem || EditBookmarksRestriction.getInstance().isEnabled()) {
+ int containerSize = getResources().
+ getDimensionPixelSize(R.dimen.bookmark_widget_favicon_size); // it's square!
if (isMdmElem) {
- float overlayscale = 0.3f;
- float overlayVertPos = 50f;
- bitmap = overlayBookmarkBitmap(bitmap, R.drawable.img_deco_mdm_badge_bright,
- getActivity(), overlayscale / willScale, (int) (overlayVertPos/willScale));
+ bitmap = overlayBookmarkBitmap(getActivity(), bitmap,
+ R.drawable.img_deco_mdm_badge_bright,
+ containerSize, containerSize, 0.25f, 40, 0);
}
else if (EditBookmarksRestriction.getInstance().isEnabled()) {
- float overlayscale = 1.3f;
- float overlayVertPos = -25f;
- bitmap = overlayBookmarkBitmap(bitmap, R.drawable.ic_deco_secure,
- getActivity(), overlayscale / willScale, (int) (overlayVertPos/willScale));
+ bitmap = overlayBookmarkBitmap(getActivity(), bitmap,
+ R.drawable.ic_deco_secure,
+ containerSize, containerSize, 0.75f, 0, 0);
}
}