From decbaf63416b21d1aece708b8c0b6523b47f74ac Mon Sep 17 00:00:00 2001 From: Jorge Ruesga Date: Sun, 28 Apr 2013 05:11:42 +0200 Subject: Trebuchet: Labels on dock items Patchset 4: Discard item scale and use paddings to adjust the workspace Patchset 5: mHideDockIconLabels = false on vertical hotseat Patchset 6: Fixed FolderIcon typo Fixed inline style Remove Workspace injection on Launcher class Use isLargeScreen to show text in vertical hotseat Change-Id: I00c57a28b4c7110b66ec6f856df8865006a76699 JIRA: CYAN-523 Issue: https://jira.cyanogenmod.org/browse/CYAN-523 Signed-off-by: Jorge Ruesga --- src/com/cyanogenmod/trebuchet/CellLayout.java | 9 ++++ src/com/cyanogenmod/trebuchet/FolderIcon.java | 1 + src/com/cyanogenmod/trebuchet/Hotseat.java | 21 ++++++--- src/com/cyanogenmod/trebuchet/Launcher.java | 50 ++++++++++++++++++---- src/com/cyanogenmod/trebuchet/LauncherModel.java | 10 +++++ .../cyanogenmod/trebuchet/LauncherProvider.java | 4 ++ src/com/cyanogenmod/trebuchet/Workspace.java | 33 +++++++------- .../trebuchet/preference/PreferencesProvider.java | 3 ++ 8 files changed, 99 insertions(+), 32 deletions(-) (limited to 'src') diff --git a/src/com/cyanogenmod/trebuchet/CellLayout.java b/src/com/cyanogenmod/trebuchet/CellLayout.java index a59a96e..6062c31 100644 --- a/src/com/cyanogenmod/trebuchet/CellLayout.java +++ b/src/com/cyanogenmod/trebuchet/CellLayout.java @@ -348,6 +348,15 @@ public class CellLayout extends ViewGroup { requestLayout(); } + void setCellDimensions(int cellWidth, int cellHeight, int widthGap, int heightGap) { + mCellWidth = cellWidth; + mCellHeight = cellHeight; + mWidthGap = widthGap; + mHeightGap = heightGap; + mShortcutsAndWidgets.setCellDimensions(mCellWidth, mCellHeight, mWidthGap, mHeightGap); + requestLayout(); + } + private void invalidateBubbleTextView(BubbleTextView icon) { final int padding = icon.getPressedOrFocusedBackgroundPadding(); invalidate(icon.getLeft() + getPaddingLeft() - padding, diff --git a/src/com/cyanogenmod/trebuchet/FolderIcon.java b/src/com/cyanogenmod/trebuchet/FolderIcon.java index b67e0bd..8827576 100644 --- a/src/com/cyanogenmod/trebuchet/FolderIcon.java +++ b/src/com/cyanogenmod/trebuchet/FolderIcon.java @@ -596,6 +596,7 @@ public class FolderIcon extends LinearLayout implements FolderListener { } public void setTextVisible(boolean visible) { + if (getTextVisible() == visible) return; if (visible) { mFolderName.setVisibility(VISIBLE); } else { diff --git a/src/com/cyanogenmod/trebuchet/Hotseat.java b/src/com/cyanogenmod/trebuchet/Hotseat.java index 9f6441a..2773c0f 100644 --- a/src/com/cyanogenmod/trebuchet/Hotseat.java +++ b/src/com/cyanogenmod/trebuchet/Hotseat.java @@ -18,17 +18,15 @@ package com.cyanogenmod.trebuchet; import android.content.Context; import android.content.res.Configuration; +import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Matrix; import android.util.AttributeSet; -import android.util.Log; import android.view.LayoutInflater; import android.view.View; import com.cyanogenmod.trebuchet.preference.PreferencesProvider; -import java.util.Arrays; - public class Hotseat extends PagedView { private int mCellCount; @@ -53,6 +51,8 @@ public class Hotseat extends PagedView { public Hotseat(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); + final Resources res = getResources(); + mFadeInAdjacentScreens = false; mHandleScrollIndicator = true; @@ -67,8 +67,8 @@ public class Hotseat extends PagedView { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Hotseat, defStyle, 0); mTransposeLayoutWithOrientation = - context.getResources().getBoolean(R.bool.hotseat_transpose_layout_with_orientation); - mIsLandscape = context.getResources().getConfiguration().orientation == + res.getBoolean(R.bool.hotseat_transpose_layout_with_orientation); + mIsLandscape = res.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; mCellCount = a.getInt(R.styleable.Hotseat_cellCount, DEFAULT_CELL_COUNT); mCellCount = PreferencesProvider.Interface.Dock.getNumberIcons(mCellCount); @@ -77,6 +77,12 @@ public class Hotseat extends PagedView { mVertical = hasVerticalHotseat(); + boolean hideDockIconLabels = PreferencesProvider.Interface.Dock.getHideIconLabels() || + (mVertical && !LauncherApplication.isScreenLarge()); + int cellHeight = (int)res.getDimension(R.dimen.hotseat_cell_height); + if (!hideDockIconLabels) { + cellHeight = (int)res.getDimension(R.dimen.workspace_cell_height); + } float childrenScale = PreferencesProvider.Interface.Dock.getIconScale( getResources().getInteger(R.integer.hotseat_item_scale_percentage)) / 100f; @@ -87,6 +93,11 @@ public class Hotseat extends PagedView { CellLayout cl = (CellLayout) inflater.inflate(R.layout.hotseat_page, null); cl.setChildrenScale(childrenScale); cl.setGridSize((!hasVerticalHotseat() ? mCellCount : 1), (hasVerticalHotseat() ? mCellCount : 1)); + + if (!hideDockIconLabels) { + cl.setCellDimensions(cl.getCellWidth(), cellHeight, cl.getWidthGap(), cl.getHeightGap()); + } + addView(cl); } diff --git a/src/com/cyanogenmod/trebuchet/Launcher.java b/src/com/cyanogenmod/trebuchet/Launcher.java index ed8ae08..148f336 100644 --- a/src/com/cyanogenmod/trebuchet/Launcher.java +++ b/src/com/cyanogenmod/trebuchet/Launcher.java @@ -87,6 +87,7 @@ import android.view.View.OnLongClickListener; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.ViewTreeObserver; +import android.view.ViewGroup.MarginLayoutParams; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.WindowManager; import android.view.accessibility.AccessibilityEvent; @@ -319,6 +320,7 @@ public final class Launcher extends Activity private boolean mShowHotseat; private boolean mShowDockDivider; private boolean mHideIconLabels; + private boolean mHideDockIconLabels; private boolean mAutoRotate; private boolean mLockWorkspace; private boolean mFullscreenMode; @@ -387,6 +389,7 @@ public final class Launcher extends Activity mIconCache = app.getIconCache(); mDragController = new DragController(this); mInflater = getLayoutInflater(); + final Resources res = getResources(); // Load all preferences PreferencesProvider.load(this); @@ -404,6 +407,12 @@ public final class Launcher extends Activity mShowHotseat = PreferencesProvider.Interface.Dock.getShowDock(); mShowDockDivider = PreferencesProvider.Interface.Dock.getShowDivider() && mShowHotseat; mHideIconLabels = PreferencesProvider.Interface.Homescreen.getHideIconLabels(); + mHideDockIconLabels = PreferencesProvider.Interface.Dock.getHideIconLabels(); + boolean verticalHotseat = + res.getBoolean(R.bool.hotseat_transpose_layout_with_orientation) && + res.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; + mHideDockIconLabels = PreferencesProvider.Interface.Dock.getHideIconLabels() || + (!mShowHotseat || (verticalHotseat && !LauncherApplication.isScreenLarge())); mAutoRotate = PreferencesProvider.Interface.General.getAutoRotate(getResources().getBoolean(R.bool.allow_rotation)); mLockWorkspace = PreferencesProvider.Interface.General.getLockWorkspace(getResources().getBoolean(R.bool.lock_workspace)); mFullscreenMode = PreferencesProvider.Interface.General.getFullscreenMode(); @@ -983,6 +992,30 @@ public final class Launcher extends Activity mDockDivider.setVisibility(View.GONE); } + // Redim the hotseat and statusbar to let some extra size for the item text + if (mShowHotseat && !mHideDockIconLabels && !mHotseat.hasVerticalHotseat()) { + Resources res = getResources(); + int bottomMarginWithText = res.getDimensionPixelSize(R.dimen.button_bar_height_with_text); + // Divider + if (mDockDivider != null) { + ((MarginLayoutParams)mDockDivider.getLayoutParams()).bottomMargin = bottomMarginWithText; + } + // Divider indicator + View dockScrollingIndicator = findViewById(R.id.paged_view_indicator_dock); + if (dockScrollingIndicator != null) { + ((MarginLayoutParams)dockScrollingIndicator.getLayoutParams()).bottomMargin = bottomMarginWithText; + } + // Hotseat + mHotseat.getLayoutParams().height = res.getDimensionPixelSize(R.dimen.button_bar_height_plus_padding_with_text); + + // Workspace + mWorkspace.setPadding( + mWorkspace.getPaddingLeft(), + mWorkspace.getPaddingTop(), + mWorkspace.getPaddingRight(), + res.getDimensionPixelSize(R.dimen.workspace_bottom_padding_port_with_text)); + } + // Setup AppsCustomize mAppsCustomizeTabHost = (AppsCustomizeTabHost) findViewById(R.id.apps_customize_pane); mAppsCustomizeContent = (AppsCustomizePagedView) @@ -1048,9 +1081,7 @@ public final class Launcher extends Activity View createShortcut(int layoutResId, ViewGroup parent, ShortcutInfo info) { BubbleTextView favorite = (BubbleTextView) mInflater.inflate(layoutResId, parent, false); favorite.applyFromShortcutInfo(info, mIconCache); - if (mHideIconLabels) { - favorite.setTextVisible(false); - } + favorite.setTextVisible(!mHideIconLabels); favorite.setOnClickListener(this); favorite.setOnTouchListener(this); return favorite; @@ -2001,10 +2032,13 @@ public final class Launcher extends Activity // Create the view FolderIcon newFolder = FolderIcon.fromXml(R.layout.folder_icon, this, layout, folderInfo); - if (mHideIconLabels) { - newFolder.setTextVisible(false); - } int x = cellX, y = cellY; + if (container == LauncherSettings.Favorites.CONTAINER_HOTSEAT) { + newFolder.setTextVisible(!mHideDockIconLabels); + } else { + newFolder.setTextVisible(!mHideIconLabels); + } + if (container == LauncherSettings.Favorites.CONTAINER_HOTSEAT && getHotseat().hasVerticalHotseat()) { // Note: If the destination of the new folder is the hotseat and @@ -3636,9 +3670,7 @@ public final class Launcher extends Activity FolderIcon newFolder = FolderIcon.fromXml(R.layout.folder_icon, this, (ViewGroup) workspace.getChildAt(workspace.getCurrentPage()), (FolderInfo) item); - if (!mHideIconLabels) { - newFolder.setTextVisible(false); - } + newFolder.setTextVisible(!mHideIconLabels); workspace.addInScreen(newFolder, item.container, item.screen, item.cellX, item.cellY, 1, 1, false); break; diff --git a/src/com/cyanogenmod/trebuchet/LauncherModel.java b/src/com/cyanogenmod/trebuchet/LauncherModel.java index a3d198c..923842c 100644 --- a/src/com/cyanogenmod/trebuchet/LauncherModel.java +++ b/src/com/cyanogenmod/trebuchet/LauncherModel.java @@ -1354,6 +1354,16 @@ public class LauncherModel extends BroadcastReceiver { iconPackageIndex, iconResourceIndex, iconIndex, titleIndex); info.itemType = LauncherSettings.Favorites.ITEM_TYPE_ALLAPPS; + if (info.title == null) { + info.title = mContext.getString(R.string.all_apps_button_label); + } + intentDescription = c.getString(intentIndex); + try { + intent = Intent.parseUri(intentDescription, 0); + } catch (Exception ex) { + intent = new Intent(); + intent.setClassName(mContext.getPackageName(), Launcher.class.getName()); + } } if (info != null) { diff --git a/src/com/cyanogenmod/trebuchet/LauncherProvider.java b/src/com/cyanogenmod/trebuchet/LauncherProvider.java index af3ad8b..9f45038 100644 --- a/src/com/cyanogenmod/trebuchet/LauncherProvider.java +++ b/src/com/cyanogenmod/trebuchet/LauncherProvider.java @@ -896,11 +896,15 @@ public class LauncherProvider extends ContentProvider { private long addAllAppsButton(SQLiteDatabase db, ContentValues values) { Resources r = mContext.getResources(); + Intent intent = new Intent(); + intent.setClassName(mContext.getPackageName(), Launcher.class.getName()); + long id = generateNewId(); values.put(Favorites.TITLE, r.getString(R.string.all_apps_button_label)); values.put(Favorites.ITEM_TYPE, Favorites.ITEM_TYPE_ALLAPPS); values.put(Favorites.SPANX, 1); values.put(Favorites.SPANY, 1); + values.put(Favorites.INTENT, intent.toUri(0)); values.put(Favorites.ICON_TYPE, Favorites.ICON_TYPE_RESOURCE); values.put(Favorites.ICON_PACKAGE, mContext.getPackageName()); values.put(Favorites.ICON_RESOURCE, r.getResourceName(R.drawable.all_apps_button_icon)); diff --git a/src/com/cyanogenmod/trebuchet/Workspace.java b/src/com/cyanogenmod/trebuchet/Workspace.java index 8a5d03a..10ef99d 100644 --- a/src/com/cyanogenmod/trebuchet/Workspace.java +++ b/src/com/cyanogenmod/trebuchet/Workspace.java @@ -30,6 +30,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Bitmap; @@ -306,6 +307,7 @@ public class Workspace extends PagedView private boolean mShowHotseat; private boolean mResizeAnyWidget; private boolean mHideIconLabels; + private boolean mHideDockIconLabels; private boolean mScrollWallpaper; private int mWallpaperSize; private boolean mShowScrollingIndicator; @@ -393,6 +395,12 @@ public class Workspace extends PagedView mShowSearchBar = PreferencesProvider.Interface.Homescreen.getShowSearchBar(); mShowHotseat = PreferencesProvider.Interface.Dock.getShowDock(); mHideIconLabels = PreferencesProvider.Interface.Homescreen.getHideIconLabels(); + boolean showHotseat = PreferencesProvider.Interface.Dock.getShowDock(); + boolean verticalHotseat = + res.getBoolean(R.bool.hotseat_transpose_layout_with_orientation) && + res.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE; + mHideDockIconLabels = PreferencesProvider.Interface.Dock.getHideIconLabels() || + (!showHotseat || (verticalHotseat && !LauncherApplication.isScreenLarge())); mTransitionEffect = PreferencesProvider.Interface.Homescreen.Scrolling.getTransitionEffect( res.getString(R.string.config_workspaceDefaultTransitionEffect)); mScrollWallpaper = PreferencesProvider.Interface.Homescreen.Scrolling.getScrollWallpaper(); @@ -678,24 +686,15 @@ public class Workspace extends PagedView // Hide titles in the hotseat if (child instanceof FolderIcon) { - ((FolderIcon) child).setTextVisible(false); + ((FolderIcon) child).setTextVisible(!mHideDockIconLabels); } else if (child instanceof BubbleTextView) { - ((BubbleTextView) child).setTextVisible(false); + ((BubbleTextView) child).setTextVisible(!mHideDockIconLabels); } } else { - if (!mHideIconLabels) { - // Show titles if not in the hotseat - if (child instanceof FolderIcon) { - ((FolderIcon) child).setTextVisible(true); - } else if (child instanceof BubbleTextView) { - ((BubbleTextView) child).setTextVisible(true); - } - } else { - if (child instanceof FolderIcon) { - ((FolderIcon) child).setTextVisible(false); - } else if (child instanceof BubbleTextView) { - ((BubbleTextView) child).setTextVisible(false); - } + if (child instanceof FolderIcon) { + ((FolderIcon) child).setTextVisible(!mHideIconLabels); + } else if (child instanceof BubbleTextView) { + ((BubbleTextView) child).setTextVisible(!mHideIconLabels); } layout = (CellLayout) getChildAt(screen); @@ -3787,9 +3786,7 @@ public class Workspace extends PagedView case LauncherSettings.Favorites.ITEM_TYPE_FOLDER: view = FolderIcon.fromXml(R.layout.folder_icon, mLauncher, cellLayout, (FolderInfo) info); - if (mHideIconLabels) { - ((FolderIcon) view).setTextVisible(false); - } + ((FolderIcon) view).setTextVisible(!mHideIconLabels); break; default: throw new IllegalStateException("Unknown item type: " + info.itemType); diff --git a/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java b/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java index 1788732..912d310 100644 --- a/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java +++ b/src/com/cyanogenmod/trebuchet/preference/PreferencesProvider.java @@ -197,6 +197,9 @@ public final class PreferencesProvider { public static int getNumberIcons(int def) { return getInt("ui_dock_icons", def); } + public static boolean getHideIconLabels() { + return getBoolean("ui_dock_hide_icon_labels", true); + } public static int getIconScale(int def) { return getInt("ui_dock_icon_scale", def); } -- cgit v1.1