summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNebojsa Cvetkovic <nebkat@gmail.com>2013-11-25 16:58:53 +0000
committerDanesh M <daneshm90@gmail.com>2014-01-24 16:24:23 -0800
commit4fd7c82ec6cab6d160f72b0355f6c5fc399b1a43 (patch)
tree637afa03fb37b22d280ec6b22df5a47d278237cb
parent2af21d644dfdb5db0a0da751937566058c0cdfc4 (diff)
downloadandroid_packages_apps_Trebuchet-4fd7c82ec6cab6d160f72b0355f6c5fc399b1a43.tar.gz
android_packages_apps_Trebuchet-4fd7c82ec6cab6d160f72b0355f6c5fc399b1a43.tar.bz2
android_packages_apps_Trebuchet-4fd7c82ec6cab6d160f72b0355f6c5fc399b1a43.zip
Workspace: Custom default screen
Change-Id: Ic90254f7758b9dbd4997a19474e455230355b772
-rw-r--r--res/drawable-hdpi/ic_default_screen.pngbin0 -> 18144 bytes
-rw-r--r--res/drawable-hdpi/ic_default_screen_pressed.pngbin0 -> 18857 bytes
-rw-r--r--res/drawable-mdpi/ic_default_screen.pngbin0 -> 17779 bytes
-rw-r--r--res/drawable-mdpi/ic_default_screen_pressed.pngbin0 -> 18202 bytes
-rw-r--r--res/drawable-xhdpi/ic_default_screen.pngbin0 -> 18388 bytes
-rw-r--r--res/drawable-xhdpi/ic_default_screen_pressed.pngbin0 -> 19556 bytes
-rw-r--r--res/drawable-xxhdpi/ic_default_screen.pngbin0 -> 19024 bytes
-rw-r--r--res/drawable-xxhdpi/ic_default_screen_pressed.pngbin0 -> 21488 bytes
-rw-r--r--res/drawable/default_screen_button.xml22
-rw-r--r--res/layout/overview_panel.xml93
-rw-r--r--res/values/cm_strings.xml3
-rw-r--r--res/values/dimens.xml1
-rw-r--r--src/com/android/launcher3/DynamicGrid.java4
-rw-r--r--src/com/android/launcher3/Launcher.java12
-rw-r--r--src/com/android/launcher3/Workspace.java61
-rw-r--r--src/com/android/launcher3/settings/SettingsProvider.java43
16 files changed, 163 insertions, 76 deletions
diff --git a/res/drawable-hdpi/ic_default_screen.png b/res/drawable-hdpi/ic_default_screen.png
new file mode 100644
index 000000000..832fdef35
--- /dev/null
+++ b/res/drawable-hdpi/ic_default_screen.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_default_screen_pressed.png b/res/drawable-hdpi/ic_default_screen_pressed.png
new file mode 100644
index 000000000..2975c6152
--- /dev/null
+++ b/res/drawable-hdpi/ic_default_screen_pressed.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_default_screen.png b/res/drawable-mdpi/ic_default_screen.png
new file mode 100644
index 000000000..431b16841
--- /dev/null
+++ b/res/drawable-mdpi/ic_default_screen.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_default_screen_pressed.png b/res/drawable-mdpi/ic_default_screen_pressed.png
new file mode 100644
index 000000000..361f023f8
--- /dev/null
+++ b/res/drawable-mdpi/ic_default_screen_pressed.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_default_screen.png b/res/drawable-xhdpi/ic_default_screen.png
new file mode 100644
index 000000000..da1e3a883
--- /dev/null
+++ b/res/drawable-xhdpi/ic_default_screen.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_default_screen_pressed.png b/res/drawable-xhdpi/ic_default_screen_pressed.png
new file mode 100644
index 000000000..b8dc28c0c
--- /dev/null
+++ b/res/drawable-xhdpi/ic_default_screen_pressed.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_default_screen.png b/res/drawable-xxhdpi/ic_default_screen.png
new file mode 100644
index 000000000..4577ad2b5
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_default_screen.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_default_screen_pressed.png b/res/drawable-xxhdpi/ic_default_screen_pressed.png
new file mode 100644
index 000000000..cf9cd10e2
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_default_screen_pressed.png
Binary files differ
diff --git a/res/drawable/default_screen_button.xml b/res/drawable/default_screen_button.xml
new file mode 100644
index 000000000..5194ad8de
--- /dev/null
+++ b/res/drawable/default_screen_button.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_focused="true" android:drawable="@drawable/ic_default_screen_pressed" />
+ <item android:state_pressed="true" android:drawable="@drawable/ic_default_screen_pressed" />
+ <item android:state_activated="true" android:drawable="@drawable/ic_default_screen_pressed" />
+ <item android:drawable="@drawable/ic_default_screen" />
+</selector>
diff --git a/res/layout/overview_panel.xml b/res/layout/overview_panel.xml
index e36004c4b..46e6e07e2 100644
--- a/res/layout/overview_panel.xml
+++ b/res/layout/overview_panel.xml
@@ -13,51 +13,70 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<LinearLayout
+<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layout_gravity="center_horizontal|bottom"
- android:paddingBottom="@dimen/overview_panel_bottom_padding">
-
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
<TextView
- android:id="@+id/wallpaper_button"
+ android:id="@+id/default_screen_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="@string/wallpaper_button_text"
+ android:layout_gravity="center_horizontal|top"
+ android:paddingTop="@dimen/overview_panel_top_padding"
+ android:text="@string/default_screen_button_text"
android:drawablePadding="4dp"
- android:drawableTop="@drawable/wallpaper_button"
+ android:drawableTop="@drawable/default_screen_button"
android:gravity="center_horizontal"
android:fontFamily="sans-serif-condensed"
android:textAllCaps="true"
android:textSize="12sp" />
- <Space
- android:layout_width="@dimen/overview_panel_buttonSpacing"
- android:layout_height="wrap_content"/>
- <TextView
- android:id="@+id/widget_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/widget_button_text"
- android:drawablePadding="4dp"
- android:gravity="center_horizontal"
- android:drawableTop="@drawable/widget_button"
- android:fontFamily="sans-serif-condensed"
- android:textAllCaps="true"
- android:textSize="12sp"/>
- <Space
- android:layout_width="@dimen/overview_panel_buttonSpacing"
- android:layout_height="wrap_content"/>
- <TextView
- android:id="@+id/settings_button"
+
+ <LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="@string/settings_button_text"
- android:drawablePadding="4dp"
- android:gravity="center_horizontal"
- android:drawableTop="@drawable/setting_button"
- android:fontFamily="sans-serif-condensed"
- android:textAllCaps="true"
- android:textSize="12sp" />
-</LinearLayout>
+ android:orientation="horizontal"
+ android:layout_gravity="center_horizontal|bottom"
+ android:paddingBottom="@dimen/overview_panel_bottom_padding">
+
+ <TextView
+ android:id="@+id/wallpaper_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/wallpaper_button_text"
+ android:drawablePadding="4dp"
+ android:drawableTop="@drawable/wallpaper_button"
+ android:gravity="center_horizontal"
+ android:fontFamily="sans-serif-condensed"
+ android:textAllCaps="true"
+ android:textSize="12sp" />
+ <Space
+ android:layout_width="@dimen/overview_panel_buttonSpacing"
+ android:layout_height="wrap_content"/>
+ <TextView
+ android:id="@+id/widget_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/widget_button_text"
+ android:drawablePadding="4dp"
+ android:gravity="center_horizontal"
+ android:drawableTop="@drawable/widget_button"
+ android:fontFamily="sans-serif-condensed"
+ android:textAllCaps="true"
+ android:textSize="12sp"/>
+ <Space
+ android:layout_width="@dimen/overview_panel_buttonSpacing"
+ android:layout_height="wrap_content"/>
+ <TextView
+ android:id="@+id/settings_button"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/settings_button_text"
+ android:drawablePadding="4dp"
+ android:gravity="center_horizontal"
+ android:drawableTop="@drawable/setting_button"
+ android:fontFamily="sans-serif-condensed"
+ android:textAllCaps="true"
+ android:textSize="12sp" />
+ </LinearLayout>
+</FrameLayout>
diff --git a/res/values/cm_strings.xml b/res/values/cm_strings.xml
index 320567826..131acc9e8 100644
--- a/res/values/cm_strings.xml
+++ b/res/values/cm_strings.xml
@@ -5,6 +5,9 @@
<!-- App version -->
<string name="application_version" translatable="false">0.1</string>
+ <!-- Text for default screen button -->
+ <string name="default_screen_button_text">Default Screen</string>
+
<!-- Settings -->
<string name="preferences_title">Settings</string>
<!-- UI -->
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index b4b2367c7..8176c8192 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -41,6 +41,7 @@
<dimen name="workspace_max_gap">16dp</dimen>
<dimen name="workspace_overscroll_drawable_padding">0dp</dimen>
<dimen name="workspace_spring_loaded_page_spacing">15dp</dimen>
+ <dimen name="overview_panel_top_padding">20dp</dimen>
<dimen name="overview_panel_bottom_padding">50dp</dimen>
<dimen name="overview_panel_buttonSpacing">60dp</dimen>
<dimen name="overview_mode_page_offset">130dp</dimen>
diff --git a/src/com/android/launcher3/DynamicGrid.java b/src/com/android/launcher3/DynamicGrid.java
index 57ddb3939..a6a143c1e 100644
--- a/src/com/android/launcher3/DynamicGrid.java
+++ b/src/com/android/launcher3/DynamicGrid.java
@@ -184,8 +184,8 @@ class DeviceProfile {
updateFromConfiguration(resources, wPx, hPx, awPx, ahPx);
// Search Bar
- searchBarVisible = SettingsProvider.getBoolean(SettingsProvider.SETTINGS_UI_HOMESCREEN_SEARCH,
- resources.getBoolean(R.bool.preferences_interface_homescreen_search_default));
+ searchBarVisible = SettingsProvider.getBoolean(context, SettingsProvider.SETTINGS_UI_HOMESCREEN_SEARCH,
+ R.bool.preferences_interface_homescreen_search_default);
searchBarSpaceMaxWidthPx = resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_max_width);
searchBarHeightPx = resources.getDimensionPixelSize(R.dimen.dynamic_grid_search_bar_height);
searchBarSpaceWidthPx = Math.min(searchBarSpaceMaxWidthPx, widthPx);
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index 1df137d1d..310ecfd64 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -380,9 +380,6 @@ public class Launcher extends Activity
super.onCreate(savedInstanceState);
- // Load all settings
- SettingsProvider.load(this);
-
LauncherAppState.setApplicationContext(getApplicationContext());
LauncherAppState app = LauncherAppState.getInstance();
@@ -1196,6 +1193,15 @@ public class Launcher extends Activity
}
});
settingsButton.setOnTouchListener(getHapticFeedbackTouchListener());
+
+ View defaultScreenButton = findViewById(R.id.default_screen_button);
+ defaultScreenButton.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View arg0) {
+ mWorkspace.onClickDefaultScreenButton();
+ }
+ });
+ defaultScreenButton.setOnTouchListener(getHapticFeedbackTouchListener());
mOverviewPanel.setAlpha(0f);
// Setup the workspace
diff --git a/src/com/android/launcher3/Workspace.java b/src/com/android/launcher3/Workspace.java
index bea8c3057..05b530984 100644
--- a/src/com/android/launcher3/Workspace.java
+++ b/src/com/android/launcher3/Workspace.java
@@ -32,7 +32,6 @@ 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;
@@ -117,8 +116,7 @@ public class Workspace extends SmoothPagedView
private final WallpaperManager mWallpaperManager;
private IBinder mWindowToken;
- private int mOriginalDefaultPage;
- private int mDefaultPage;
+ private long mDefaultScreenId;
private ShortcutAndWidgetContainer mDragSourceInternal;
private static boolean sAccessibilityEnabled;
@@ -306,7 +304,7 @@ public class Workspace extends SmoothPagedView
// With workspace, data is available straight from the get-go
setDataIsReady();
- mShowSearchBar = SettingsProvider.getBoolean(SettingsProvider.SETTINGS_UI_HOMESCREEN_SEARCH, context,
+ mShowSearchBar = SettingsProvider.getBoolean(context, SettingsProvider.SETTINGS_UI_HOMESCREEN_SEARCH,
R.bool.preferences_interface_homescreen_search_default);
mLauncher = (Launcher) context;
@@ -323,7 +321,8 @@ public class Workspace extends SmoothPagedView
res.getInteger(R.integer.config_workspaceOverviewShrinkPercentage) / 100.0f;
mOverviewModePageOffset = res.getDimensionPixelSize(R.dimen.overview_mode_page_offset);
mCameraDistance = res.getInteger(R.integer.config_cameraDistance);
- mOriginalDefaultPage = mDefaultPage = a.getInt(R.styleable.Workspace_defaultScreen, 1);
+ mDefaultScreenId = SettingsProvider.getLongCustomDefault(context,
+ SettingsProvider.SETTINGS_UI_HOMESCREEN_DEFAULT_SCREEN_ID, -1);
a.recycle();
setOnHierarchyChangeListener(this);
@@ -409,7 +408,6 @@ public class Workspace extends SmoothPagedView
*/
protected void initWorkspace() {
Context context = getContext();
- mCurrentPage = mDefaultPage;
Launcher.setScreen(mCurrentPage);
LauncherAppState app = LauncherAppState.getInstance();
DeviceProfile grid = app.getDynamicGrid().getDeviceProfile();
@@ -551,6 +549,13 @@ public class Workspace extends SmoothPagedView
mWorkspaceScreens.put(screenId, newScreen);
mScreenOrder.add(insertIndex, screenId);
addView(newScreen, insertIndex);
+
+ if (mDefaultScreenId == screenId) {
+ int defaultPage = getPageIndexForScreenId(screenId);
+ moveToScreen(defaultPage, false);
+ Launcher.setScreen(defaultPage);
+ }
+
return screenId;
}
@@ -566,9 +571,6 @@ public class Workspace extends SmoothPagedView
addFullScreenPage(customScreen);
- // Ensure that the current page and default page are maintained.
- mDefaultPage = mOriginalDefaultPage + 1;
-
// Update the custom content hint
mLauncher.updateCustomContentHintVisibility();
if (mRestorePage != INVALID_RESTORE_PAGE) {
@@ -595,9 +597,6 @@ public class Workspace extends SmoothPagedView
mCustomContentCallbacks = null;
- // Ensure that the current page and default page are maintained.
- mDefaultPage = mOriginalDefaultPage - 1;
-
// Update the custom content hint
mLauncher.updateCustomContentHintVisibility();
if (mRestorePage != INVALID_RESTORE_PAGE) {
@@ -1290,6 +1289,10 @@ public class Workspace extends SmoothPagedView
public void computeScroll() {
super.computeScroll();
mWallpaperOffset.syncWithScroll();
+
+ if (isInOverviewMode() && !isReordering(true)) {
+ updateDefaultScreenButton();
+ }
}
void showOutlines() {
@@ -1843,6 +1846,27 @@ public class Workspace extends SmoothPagedView
return getChangeStateAnimation(state, animated, 0, -1);
}
+ private void updateDefaultScreenButton() {
+ View overviewPanel = mLauncher.getOverviewPanel();
+ if (overviewPanel != null) {
+ View defaultPageButton = overviewPanel.findViewById(R.id.default_screen_button);
+ defaultPageButton.setActivated(
+ getScreenIdForPageIndex(getPageNearestToCenterOfScreen()) == mDefaultScreenId);
+ }
+ }
+
+ public void onClickDefaultScreenButton() {
+ if (!isInOverviewMode()) return;
+
+ mDefaultScreenId = getScreenIdForPageIndex(getPageNearestToCenterOfScreen());
+
+ exitOverviewMode(getPageNearestToCenterOfScreen(), true);
+
+ SettingsProvider.get(mLauncher).edit()
+ .putLong(SettingsProvider.SETTINGS_UI_HOMESCREEN_DEFAULT_SCREEN_ID, mDefaultScreenId)
+ .commit();
+ }
+
@Override
protected void getOverviewModePages(int[] range) {
int start = numCustomPages();
@@ -1857,6 +1881,10 @@ public class Workspace extends SmoothPagedView
showOutlines();
// Reordering handles its own animations, disable the automatic ones.
disableLayoutTransitions();
+
+ mLauncher.getOverviewPanel().animate()
+ .alpha(0f)
+ .start();
}
protected void onEndReordering() {
@@ -1874,6 +1902,13 @@ public class Workspace extends SmoothPagedView
// Re-enable auto layout transitions for page deletion.
enableLayoutTransitions();
+
+ // Show the default screen button
+ updateDefaultScreenButton();
+
+ mLauncher.getOverviewPanel().animate()
+ .alpha(1f)
+ .start();
}
public boolean isInOverviewMode() {
@@ -4439,7 +4474,7 @@ public class Workspace extends SmoothPagedView
}
void moveToDefaultScreen(boolean animate) {
- moveToScreen(mDefaultPage, animate);
+ moveToScreen(getPageIndexForScreenId(mDefaultScreenId), animate);
}
void moveToCustomContentScreen(boolean animate) {
diff --git a/src/com/android/launcher3/settings/SettingsProvider.java b/src/com/android/launcher3/settings/SettingsProvider.java
index fdf2757df..96da0e0a6 100644
--- a/src/com/android/launcher3/settings/SettingsProvider.java
+++ b/src/com/android/launcher3/settings/SettingsProvider.java
@@ -19,46 +19,47 @@ package com.android.launcher3.settings;
import android.content.Context;
import android.content.SharedPreferences;
-import java.util.Map;
-
public final class SettingsProvider {
public static final String SETTINGS_KEY = "com.android.launcher3_preferences";
public static final String SETTINGS_CHANGED = "settings_changed";
+ public static final String SETTINGS_UI_HOMESCREEN_DEFAULT_SCREEN_ID = "ui_homescreen_default_screen_id";
public static final String SETTINGS_UI_HOMESCREEN_SEARCH = "ui_homescreen_search";
- private static Map<String, ?> sKeyValues;
+ public static SharedPreferences get(Context context) {
+ return context.getSharedPreferences(SETTINGS_KEY, 0);
+ }
+
+ public static int getIntCustomDefault(Context context, String key, int def) {
+ return get(context).getInt(key, def);
+ }
- public static void load(Context context) {
- SharedPreferences preferences = context.getSharedPreferences(SETTINGS_KEY, 0);
- sKeyValues = preferences.getAll();
+ public static int getInt(Context context, String key, int resource) {
+ return getIntCustomDefault(context, key, context.getResources().getInteger(resource));
}
- public static int getInt(String key, int def) {
- return sKeyValues.containsKey(key) && sKeyValues.get(key) instanceof Integer ?
- (Integer) sKeyValues.get(key) : def;
+ public static long getLongCustomDefault(Context context, String key, long def) {
+ return get(context).getLong(key, def);
}
- public static int getInt(String key, Context context, int resource) {
- return getInt(key, context.getResources().getInteger(resource));
+ public static long getLong(Context context, String key, int resource) {
+ return getLongCustomDefault(context, key, context.getResources().getInteger(resource));
}
- public static boolean getBoolean(String key, boolean def) {
- return sKeyValues.containsKey(key) && sKeyValues.get(key) instanceof Boolean ?
- (Boolean) sKeyValues.get(key) : def;
+ public static boolean getBooleanCustomDefault(Context context, String key, boolean def) {
+ return get(context).getBoolean(key, def);
}
- public static boolean getBoolean(String key, Context context, int resource) {
- return getBoolean(key, context.getResources().getBoolean(resource));
+ public static boolean getBoolean(Context context, String key, int resource) {
+ return getBooleanCustomDefault(context, key, context.getResources().getBoolean(resource));
}
- public static String getString(String key, String def) {
- return sKeyValues.containsKey(key) && sKeyValues.get(key) instanceof String ?
- (String) sKeyValues.get(key) : def;
+ public static String getStringCustomDefault(Context context, String key, String def) {
+ return get(context).getString(key, def);
}
- public static String getString(String key, Context context, int resource) {
- return getString(key, context.getResources().getString(resource));
+ public static String getString(Context context, String key, int resource) {
+ return getStringCustomDefault(context, key, context.getResources().getString(resource));
}
}