summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDave Tharp <dtharp@codeaurora.org>2015-06-19 08:46:57 -0700
committerjrizzoli <joey@cyanogenmoditalia.it>2015-08-28 13:15:45 +0200
commit9a082b13f1011a40d3dea942fa8ad3d40ed41971 (patch)
tree08d48b2ceab57e4df09e108f38e619e1d5eeaa01 /src
parent490ca7fb96367bd8444698b59a5d0fe17f1a90d1 (diff)
downloadandroid_packages_apps_Gello-9a082b13f1011a40d3dea942fa8ad3d40ed41971.tar.gz
android_packages_apps_Gello-9a082b13f1011a40d3dea942fa8ad3d40ed41971.tar.bz2
android_packages_apps_Gello-9a082b13f1011a40d3dea942fa8ad3d40ed41971.zip
MDM Edit Bookmark Restriction
When enabled through the MDM mechanism, Bookmark editing operations are disabled: - Edit and Delete pop-up menu options are disabled - The 'Add Bookmark' and 'New Folder' buttons are greyed and if pressed a Toast message is displayed: 'Managed by your administrator' - All existing bookmark items (except the MDM Managed tree if it is present) are overlaid with a lock icon (existing: ic_deco_secure). - The 'Star' icon is greyed and if pressed results in the above Toast message New files are the core implementation of the EditBookmarksRestriction and the tests for it: EditBookmarksRestriction.java EditBookmarkRestrictionsTest.java Note the has been some refactoring in BrowserBookmarksAdapter.java to simplify the handling of bitmaps with regard to overlay operations. We now always set the bitmaps with setImageBitmap() instead of sometimes using setImageResource(). This simplifies the code considerably but does result in a side effect: Folder icons look a bit different now because they are translated and scaled the same way as bookmark bitmaps. So instead of center-crop, they appear as if they are scaled width-wise and top-aligned. Personally, I like the look, but if its not acceptable, I'll adjust it as needed. Change-Id: I966f84485873593ca70f2822cdace30a15464c44
Diffstat (limited to 'src')
-rw-r--r--src/com/android/browser/BookmarkItem.java4
-rw-r--r--src/com/android/browser/BrowserActivity.java2
-rw-r--r--src/com/android/browser/BrowserBookmarksAdapter.java76
-rw-r--r--src/com/android/browser/BrowserBookmarksPage.java85
-rw-r--r--src/com/android/browser/Controller.java39
-rw-r--r--src/com/android/browser/mdm/EditBookmarksRestriction.java142
-rw-r--r--src/com/android/browser/mdm/tests/EditBookmarkRestrictionsTest.java109
-rw-r--r--src/com/android/browser/view/BookmarkThumbImageView.java48
8 files changed, 392 insertions, 113 deletions
diff --git a/src/com/android/browser/BookmarkItem.java b/src/com/android/browser/BookmarkItem.java
index 76115cf7..b230de6c 100644
--- a/src/com/android/browser/BookmarkItem.java
+++ b/src/com/android/browser/BookmarkItem.java
@@ -98,6 +98,10 @@ class BookmarkItem extends ScrollView {
}
}
+ public int getFavIconIntrinsicWidth() {
+ return mImageView.getDrawable().getIntrinsicWidth();
+ }
+
void setFaviconBackground(Drawable d) {
mImageView.setBackgroundDrawable(d);
}
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 8bade816..34a19faf 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -41,6 +41,7 @@ import android.view.Window;
import org.chromium.base.VisibleForTesting;
import com.android.browser.R;
+import com.android.browser.mdm.EditBookmarksRestriction;
import com.android.browser.mdm.ManagedBookmarksRestriction;
import com.android.browser.mdm.ThirdPartyCookiesRestriction;
import com.android.browser.search.DefaultSearchEngine;
@@ -163,6 +164,7 @@ public class BrowserActivity extends Activity {
// MDM Restrictions not tied to a UI element initialized here.
ThirdPartyCookiesRestriction.getInstance();
ManagedBookmarksRestriction.getInstance();
+ EditBookmarksRestriction.getInstance();
}
@VisibleForTesting
diff --git a/src/com/android/browser/BrowserBookmarksAdapter.java b/src/com/android/browser/BrowserBookmarksAdapter.java
index ae9c4915..d9bfcea4 100644
--- a/src/com/android/browser/BrowserBookmarksAdapter.java
+++ b/src/com/android/browser/BrowserBookmarksAdapter.java
@@ -24,9 +24,9 @@ import android.graphics.drawable.BitmapDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageView.ScaleType;
import android.widget.TextView;
+import com.android.browser.mdm.EditBookmarksRestriction;
import com.android.browser.mdm.ManagedBookmarksRestriction;
import com.android.browser.platformsupport.BrowserContract.Bookmarks;
import com.android.browser.util.ThreadedCursorAdapter;
@@ -87,51 +87,45 @@ public class BrowserBookmarksAdapter extends
padding, view.getPaddingBottom());
BookmarkThumbImageView thumb = (BookmarkThumbImageView) view.findViewById(R.id.thumb_image);
TextView tv = (TextView) view.findViewById(R.id.label);
- float badgeScale = 0.8f;
-
tv.setText(item.title);
+ int containerWidth = thumb.getWidth() - thumb.getPaddingLeft() - thumb.getPaddingRight();
+
+ Bitmap b;
+
if (item.is_folder) {
- // folder
- if(item.is_mdm_managed) {
- // build a bitmap that has the mdm badge overlaid
- Bitmap b = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.thumb_bookmark_widget_folder_holo);
- Bitmap bm = BrowserBookmarksPage.overlayBookmarkBitmap(b, R.drawable.img_deco_mdm_badge_bright, mContext, badgeScale);
- thumb.setmAdjustDown(false);
- thumb.setScaleType(ScaleType.CENTER_INSIDE);
- thumb.setImageBitmap(bm);
+ b = BitmapFactory.decodeResource(mContext.getResources(),
+ R.drawable.thumb_bookmark_widget_folder_holo);
+ }
+ else if (item.thumbnail == null || !item.has_thumbnail) {
+ b = BitmapFactory.decodeResource(mContext.getResources(),
+ R.drawable.browser_thumbnail);
+ }
+ else {
+ b = item.thumbnail.getBitmap();
+ }
+
+ // 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.is_mdm_managed) {
+ iconResId = R.drawable.img_deco_mdm_badge_bright;
+ overlayScale = 0.6f;
+ overlayVertPos = 100f;
}
else {
- thumb.setmAdjustDown(true);
- thumb.setImageResource(R.drawable.thumb_bookmark_widget_folder_holo);
- thumb.setScaleType(ScaleType.FIT_END);
- }
- thumb.setBackground(null);
- } else {
- if (item.thumbnail == null || !item.has_thumbnail) {
- if(item.is_mdm_managed) {
- Bitmap b = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.browser_thumbnail);
- Bitmap bm = BrowserBookmarksPage.overlayBookmarkBitmap(b, R.drawable.img_deco_mdm_badge_bright, mContext, badgeScale);
- thumb.setmAdjustDown(false);
- thumb.setScaleType(ScaleType.CENTER_INSIDE);
- thumb.setImageBitmap(bm);
- }
- else {
- thumb.setmAdjustDown(true);
- thumb.setScaleType(ScaleType.CENTER_CROP);
- thumb.setImageResource(R.drawable.browser_thumbnail);
- }
- } else {
- if (item.is_mdm_managed) {
- Bitmap b = item.thumbnail.getBitmap();
- Bitmap bm = BrowserBookmarksPage.overlayBookmarkBitmap(b, R.drawable.img_deco_mdm_badge_bright, mContext, badgeScale);
- thumb.setmAdjustDown(false);
- thumb.setScaleType(ScaleType.CENTER_INSIDE);
- thumb.setImageBitmap(bm);
- } else {
- thumb.setmAdjustDown(true);
- thumb.setImageDrawable(item.thumbnail);
- }
+ iconResId = R.drawable.ic_deco_secure;
+ overlayScale = 1.2f;
+ overlayVertPos = 75f;
}
+ float willScale = (float) containerWidth / (float) b.getWidth();
+ Bitmap bm = BrowserBookmarksPage.overlayBookmarkBitmap(b, iconResId, mContext,
+ overlayScale / willScale, (int) (overlayVertPos / willScale));
+ thumb.setImageBitmap(bm);
+ }
+ else {
+ thumb.setImageBitmap(b);
}
}
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index e0042255..80ff6d8d 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -51,6 +51,7 @@ import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.Toast;
+import com.android.browser.mdm.EditBookmarksRestriction;
import com.android.browser.mdm.ManagedBookmarksRestriction;
import com.android.browser.platformsupport.BrowserContract;
import com.android.browser.platformsupport.BrowserContract.Accounts;
@@ -294,13 +295,14 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte
= cursor.getInt(BookmarksLoader.COLUMN_INDEX_IS_FOLDER) != 0;
boolean isMdmElem = ManagedBookmarksRestriction.getInstance().mDb.
isMdmElement(cursor.getLong(BookmarksLoader.COLUMN_INDEX_ID));
+ boolean isMdmEditRestricted = EditBookmarksRestriction.getInstance().isEnabled();
final Activity activity = getActivity();
MenuInflater inflater = activity.getMenuInflater();
inflater.inflate(R.menu.bookmarkscontext, menu);
if (isFolder) {
menu.setGroupVisible(R.id.FOLDER_CONTEXT_MENU, true);
- if(isMdmElem) {
+ if(isMdmElem || isMdmEditRestricted) {
menu.findItem(R.id.folder_edit_context_menu_id).setEnabled(false);
menu.findItem(R.id.folder_delete_context_menu_id).setEnabled(false);
}
@@ -309,7 +311,7 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte
if (mDisableNewWindow) {
menu.findItem(R.id.new_window_context_menu_id).setVisible(false);
}
- if(isMdmElem) {
+ if(isMdmElem || isMdmEditRestricted) {
menu.findItem(R.id.edit_context_menu_id).setEnabled(false);
menu.findItem(R.id.delete_context_menu_id).setEnabled(false);
}
@@ -332,7 +334,7 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte
}
public static Bitmap overlayBookmarkBitmap(Bitmap origImage, int overlayResId, Context context,
- float overlayScaleFactor) {
+ float overlayScaleFactor, int overlayOffsetY) {
if (origImage == null) {
Log.e(TAG, "Orig Image is null!");
return origImage;
@@ -374,9 +376,11 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte
Canvas comboImage = new Canvas(overlaid);
comboImage.drawBitmap(origImage, 0, 0, null);
+ // align overlay to right edge. Vertical alingment
+ // determined by overlayOffsetY
comboImage.drawBitmap(scaledOverlay,
origWidth - scaledOverlay.getWidth(),
- origHeight - scaledOverlay.getHeight(),
+ overlayOffsetY,
null);
// Clean up our bitmaps
@@ -387,29 +391,50 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte
return overlaid;
}
- private void populateBookmarkItem(Cursor cursor, BookmarkItem item, boolean isFolder, boolean isMdmElem) {
+ private void populateBookmarkItem(Cursor cursor, BookmarkItem item,
+ boolean isFolder, boolean isMdmElem) {
item.setName(cursor.getString(BookmarksLoader.COLUMN_INDEX_TITLE));
+
+ // Fetch appropriate bitmap
+ Bitmap bitmap;
if (isFolder) {
item.setUrl(null);
- Bitmap bitmap =
- BitmapFactory.decodeResource(getResources(), R.drawable.ic_deco_folder_normal);
- if (isMdmElem) {
- bitmap = overlayBookmarkBitmap(bitmap, R.drawable.img_deco_mdm_badge_bright, getActivity(), 0.25f);
- }
- item.setFavicon(bitmap);
- new LookupBookmarkCount(getActivity(), item)
- .execute(cursor.getLong(BookmarksLoader.COLUMN_INDEX_ID));
- } else {
+ bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_deco_folder_normal);
+ }
+ else {
String url = cursor.getString(BookmarksLoader.COLUMN_INDEX_URL);
item.setUrl(url);
- Bitmap bitmap = getBitmap(cursor, BookmarksLoader.COLUMN_INDEX_FAVICON);
+ bitmap = getBitmap(cursor, BookmarksLoader.COLUMN_INDEX_FAVICON);
+ if (null == bitmap) {
+ bitmap = BitmapFactory.decodeResource(getResources(),
+ R.drawable.ic_deco_favicon_normal);
+ }
+ }
+
+ // 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 (isMdmElem) {
- if (null == bitmap) {
- bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_deco_favicon_normal);
- }
- bitmap = overlayBookmarkBitmap(bitmap, R.drawable.img_deco_mdm_badge_bright, getActivity(), 0.25f);
+ float overlayscale = 0.3f;
+ float overlayVertPos = 50f;
+ bitmap = overlayBookmarkBitmap(bitmap, R.drawable.img_deco_mdm_badge_bright,
+ getActivity(), overlayscale / willScale, (int) (overlayVertPos/willScale));
+ }
+ 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));
}
- item.setFavicon(bitmap);
+ }
+
+ // Set the bitmap
+ item.setFavicon(bitmap);
+ if (isFolder) {
+ new LookupBookmarkCount(getActivity(), item)
+ .execute(cursor.getLong(BookmarksLoader.COLUMN_INDEX_ID));
}
}
@@ -500,9 +525,10 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte
@Override
public void onClick(View view) {
ManagedBookmarksRestriction mbr = ManagedBookmarksRestriction.getInstance();
- if (mbr.isEnabled() &&
- mbr.mDb.isMdmElement(mCurrentFolderId)) {
- Toast.makeText(getActivity(), R.string.mdm_managed_alert, Toast.LENGTH_SHORT).show();
+ if ((mbr.isEnabled() && mbr.mDb.isMdmElement(mCurrentFolderId)) ||
+ EditBookmarksRestriction.getInstance().isEnabled()) {
+ Toast.makeText(getActivity().getApplicationContext(),
+ R.string.mdm_managed_alert, Toast.LENGTH_SHORT).show();
}
else {
Intent intent = new Intent(activity, AddBookmarkPage.class);
@@ -513,15 +539,17 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte
}
}
});
+ EditBookmarksRestriction.getInstance().registerControl(btn);
btn = (Button) mRoot.findViewById(R.id.new_bmfolder_button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ManagedBookmarksRestriction mbr = ManagedBookmarksRestriction.getInstance();
- if (mbr.isEnabled() &&
- mbr.mDb.isMdmElement(mCurrentFolderId)) {
- Toast.makeText(getActivity(), R.string.mdm_managed_alert, Toast.LENGTH_SHORT).show();
+ if ((mbr.isEnabled() && mbr.mDb.isMdmElement(mCurrentFolderId)) ||
+ EditBookmarksRestriction.getInstance().isEnabled()) {
+ Toast.makeText(getActivity().getApplicationContext(),
+ R.string.mdm_managed_alert, Toast.LENGTH_SHORT).show();
}
else {
Intent intent = new Intent(activity, AddBookmarkFolder.class);
@@ -530,6 +558,7 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte
}
}
});
+ EditBookmarksRestriction.getInstance().registerControl(btn);
// Start the loaders
LoaderManager lm = getLoaderManager();
@@ -538,6 +567,8 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte
//Notify about anticipated network activity
NetworkServices.HintUpcomingUserActivity();
+ EditBookmarksRestriction.getInstance().registerView(mGrid);
+
return mRoot;
}
@@ -553,6 +584,8 @@ public class BrowserBookmarksPage extends Fragment implements View.OnCreateConte
lm.destroyLoader(id);
}
mBookmarkAdapters.clear();
+
+ EditBookmarksRestriction.getInstance().registerView(null);
}
private BrowserBookmarksAdapter getChildAdapter(int groupPosition) {
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 99a40fef..2f8db527 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -98,6 +98,7 @@ import com.android.browser.AppAdapter;
import com.android.browser.R;
import com.android.browser.IntentHandler.UrlData;
import com.android.browser.UI.ComboViews;
+import com.android.browser.mdm.EditBookmarksRestriction;
import com.android.browser.mdm.IncognitoRestriction;
import com.android.browser.mdm.URLFilterRestriction;
import com.android.browser.mynavigation.AddMyNavigationPage;
@@ -1933,8 +1934,9 @@ public class Controller
mUi.onPrepareOptionsMenu(menu);
IncognitoRestriction.getInstance()
- .registerControl(menu.findItem(R.id.incognito_menu_id)
- .getIcon());
+ .registerControl(menu.findItem(R.id.incognito_menu_id).getIcon());
+ EditBookmarksRestriction.getInstance()
+ .registerControl(menu.findItem(R.id.bookmark_this_page_id).getIcon());
}
private void setMenuItemVisibility(Menu menu, int id,
@@ -2347,20 +2349,25 @@ public class Controller
@Override
public void bookmarkCurrentPage() {
- WebView w = getCurrentTopWebView();
- if (w == null)
- return;
- final Intent i = createBookmarkCurrentPageIntent(false);
- createScreenshotAsync(
- w, getDesiredThumbnailWidth(mActivity),
- getDesiredThumbnailHeight(mActivity),
- new ValueCallback<Bitmap>() {
- @Override
- public void onReceiveValue(Bitmap bitmap) {
- mBookmarkBitmap = bitmap;
- mActivity.startActivity(i);
- }
- });
+ if(EditBookmarksRestriction.getInstance().isEnabled()) {
+ Toast.makeText(getContext(), R.string.mdm_managed_alert, Toast.LENGTH_SHORT).show();
+ }
+ else {
+ WebView w = getCurrentTopWebView();
+ if (w == null)
+ return;
+ final Intent i = createBookmarkCurrentPageIntent(false);
+ createScreenshotAsync(
+ w, getDesiredThumbnailWidth(mActivity),
+ getDesiredThumbnailHeight(mActivity),
+ new ValueCallback<Bitmap>() {
+ @Override
+ public void onReceiveValue(Bitmap bitmap) {
+ mBookmarkBitmap = bitmap;
+ mActivity.startActivity(i);
+ }
+ });
+ }
}
private void goLive() {
diff --git a/src/com/android/browser/mdm/EditBookmarksRestriction.java b/src/com/android/browser/mdm/EditBookmarksRestriction.java
new file mode 100644
index 00000000..bbfe88a6
--- /dev/null
+++ b/src/com/android/browser/mdm/EditBookmarksRestriction.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+package com.android.browser.mdm;
+
+import android.content.res.ColorStateList;
+import android.graphics.Color;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.util.Log;
+import android.widget.Button;
+import android.widget.ExpandableListView;
+
+import java.util.ArrayList;
+
+public class EditBookmarksRestriction extends Restriction {
+
+ private final static String TAG = "EditBookmarkRestriction";
+
+ public static final String EDIT_BOOKMARKS_RESTRICTION = "EditBookmarksEnabled";
+
+ private static EditBookmarksRestriction sInstance;
+
+ private ExpandableListView targetListView;
+ private ArrayList<Button> registeredButtons;
+ private ArrayList<Drawable> registeredDrawables;
+ private ColorStateList initialButtonColors;
+ private int disabledColor;
+
+ private EditBookmarksRestriction() {
+ super(TAG);
+ }
+
+ public static EditBookmarksRestriction getInstance() {
+ synchronized (EditBookmarksRestriction.class) {
+ if (sInstance == null) {
+ sInstance = new EditBookmarksRestriction();
+ }
+ }
+ return sInstance;
+ }
+
+ @Override
+ protected void doCustomInit() {
+ targetListView = null;
+ registeredButtons = new ArrayList<>();
+ registeredDrawables = new ArrayList<>();
+ initialButtonColors = null;
+ disabledColor = Color.parseColor("grey");
+ }
+
+ public void registerView(ExpandableListView f) {
+ targetListView = f;
+ }
+
+ public void registerControl(Button v) {
+ if (initialButtonColors == null) {
+ // we assume both buttons will have the same color info
+ initialButtonColors = v.getTextColors();
+ }
+ if (!registeredButtons.contains(v)) {
+ registeredButtons.add(v);
+ }
+ updateUiElems();
+ }
+
+ public void registerControl(Drawable d) {
+ if (!registeredDrawables.contains(d)) {
+ registeredDrawables.add(d);
+ }
+ updateUiElems();
+ }
+
+ private void updateUiElems() {
+ if (null != registeredButtons) {
+ for (Button v : registeredButtons) {
+ if (null != v) {
+ if (isEnabled()) {
+ v.setTextColor(disabledColor);
+ }
+ else {
+ v.setTextColor(initialButtonColors);
+ }
+ }
+ }
+ }
+ if (null != registeredDrawables) {
+ for (Drawable d : registeredDrawables) {
+ if (null != d) {
+ d.setAlpha((isEnabled() ? 0x80 : 0xff));
+ }
+ }
+ }
+ if (targetListView != null) {
+ targetListView.invalidateViews();
+ }
+ }
+
+ /*
+ * Note reversed logic:
+ * [x] 'Restrict' true = EditBookmarksEnabled : false => disable editing in swe
+ * [ ] 'Restrict' false = EditBookmarksEnabled : true => enable editing in swe
+ */
+ @Override
+ public void enforce(Bundle restrictions) {
+ boolean bEnable = false;
+ if (restrictions.containsKey(EDIT_BOOKMARKS_RESTRICTION)) {
+ bEnable = ! restrictions.getBoolean(EDIT_BOOKMARKS_RESTRICTION);
+ }
+ Log.i(TAG, "Enforce [" + bEnable + "]");
+ enable(bEnable);
+
+ updateUiElems();
+ }
+}
diff --git a/src/com/android/browser/mdm/tests/EditBookmarkRestrictionsTest.java b/src/com/android/browser/mdm/tests/EditBookmarkRestrictionsTest.java
new file mode 100644
index 00000000..edc77cbc
--- /dev/null
+++ b/src/com/android/browser/mdm/tests/EditBookmarkRestrictionsTest.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+package com.android.browser.mdm.tests;
+
+import android.app.Instrumentation;
+import android.os.Bundle;
+import android.test.ActivityInstrumentationTestCase2;
+import android.util.Log;
+
+import com.android.browser.BrowserActivity;
+import com.android.browser.mdm.EditBookmarksRestriction;
+import com.android.browser.mdm.ManagedProfileManager;
+
+public class EditBookmarkRestrictionsTest extends ActivityInstrumentationTestCase2<BrowserActivity> {
+
+ private final static String TAG = "+++EdBookmarkRestTest";
+
+ private Instrumentation mInstrumentation;
+ private BrowserActivity mActivity;
+ private EditBookmarksRestriction editBookmarksRestriction;
+
+ public EditBookmarkRestrictionsTest() {
+ super(BrowserActivity.class);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mInstrumentation = getInstrumentation();
+ mActivity = getActivity();
+ editBookmarksRestriction = EditBookmarksRestriction.getInstance();
+ }
+
+ public void test_EditBookmarksRestriction() throws Throwable {
+ Log.i(TAG, "*** Starting EditBookmarksTest ***");
+ clearBookmarksRestrictions();
+ assertFalse(editBookmarksRestriction.isEnabled());
+
+ setBookmarksRestrictions(true);
+ assertTrue(editBookmarksRestriction.isEnabled());
+
+ setBookmarksRestrictions(false);
+ assertFalse(editBookmarksRestriction.isEnabled());
+ }
+
+ /**
+ * Activate EditBookmarks restriction
+ * @param clear if true, sends an empty bundle (which is interpreted as "allow editing"
+ * @param enabled Required. true (disallow editing: restriction enforced)
+ * or false (allow editing: restriction lifted)
+ *
+ */
+ private void setBookmarksRestrictions(boolean clear, boolean enabled) {
+ final Bundle restrictions = new Bundle();
+
+ if (!clear) {
+ // note reversed logic. This is setting 'EditBookmarksEnabled'
+ // if enabled is true, we want it set to false and vice cersa
+ restrictions.putBoolean(EditBookmarksRestriction.EDIT_BOOKMARKS_RESTRICTION, ! enabled);
+ }
+
+ // Deliver restriction on UI thread
+ mActivity.runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ ManagedProfileManager.getInstance().setMdmRestrictions(restrictions);
+ }
+ });
+
+ // Wait to ensure restriction is set
+ mInstrumentation.waitForIdleSync();
+ }
+
+ private void clearBookmarksRestrictions() {
+ setBookmarksRestrictions(true, false);
+ }
+
+ private void setBookmarksRestrictions(boolean enabled) {
+ setBookmarksRestrictions(false, enabled);
+ }
+}
diff --git a/src/com/android/browser/view/BookmarkThumbImageView.java b/src/com/android/browser/view/BookmarkThumbImageView.java
index 21c1f4fb..50b35447 100644
--- a/src/com/android/browser/view/BookmarkThumbImageView.java
+++ b/src/com/android/browser/view/BookmarkThumbImageView.java
@@ -38,8 +38,6 @@ import android.widget.ImageView;
public class BookmarkThumbImageView extends ImageView {
- private boolean mAdjustDown = true;
-
public BookmarkThumbImageView(Context context) {
this(context, null);
}
@@ -52,39 +50,29 @@ public class BookmarkThumbImageView extends ImageView {
super(context, attrs, defStyleAttr);
}
- public boolean getAdjustDown() {
- return mAdjustDown;
- }
-
- public void setmAdjustDown(boolean mAdjustDown) {
- this.mAdjustDown = mAdjustDown;
- }
-
@Override
public void setImageDrawable(Drawable drawable) {
- if (mAdjustDown) {
- int drawableWidth = drawable.getIntrinsicWidth();
- int drawableHeight = drawable.getIntrinsicHeight();
- int containerWidth = getWidth() - getPaddingLeft() - getPaddingRight();
- int containerHeight = getHeight() - getPaddingTop() - getPaddingBottom();
+ int drawableWidth = drawable.getIntrinsicWidth();
+ int drawableHeight = drawable.getIntrinsicHeight();
+ int containerWidth = getWidth() - getPaddingLeft() - getPaddingRight();
+ int containerHeight = getHeight() - getPaddingTop() - getPaddingBottom();
- float scale;
- Matrix m = new Matrix();
- if ( (drawableWidth * containerHeight) > (containerWidth * drawableHeight)) {
- scale = (float) containerHeight / (float) drawableHeight;
- } else {
- scale = (float) containerWidth / (float) drawableWidth;
- float translateY = (containerHeight - drawableHeight * scale) / 2;
- if (translateY < 0) {
- translateY = 0;
- }
- m.postTranslate(0, translateY + 0.5f);
+ float scale;
+ Matrix m = new Matrix();
+ if ( (drawableWidth * containerHeight) > (containerWidth * drawableHeight)) {
+ scale = (float) containerHeight / (float) drawableHeight;
+ } else {
+ scale = (float) containerWidth / (float) drawableWidth;
+ float translateY = (containerHeight - drawableHeight * scale) / 2;
+ if (translateY < 0) {
+ translateY = 0;
}
- m.setScale(scale, scale);
-
- this.setScaleType(ScaleType.MATRIX);
- this.setImageMatrix(m);
+ m.postTranslate(0, translateY + 0.5f);
}
+ m.setScale(scale, scale);
+
+ this.setScaleType(ScaleType.MATRIX);
+ this.setImageMatrix(m);
super.setImageDrawable(drawable);
}
}