Tweaking folder cling to support large folders.
Change-Id: I3c500463fba8db71807ad4fc27c6923f3e1d0770
This commit is contained in:
@@ -20,39 +20,29 @@
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="10dp"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:layout_marginTop="40dp"
|
||||
android:layout_marginBottom="20dp">
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginBottom="10dp">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
<LinearLayout
|
||||
android:paddingLeft="20dp"
|
||||
android:paddingRight="20dp"
|
||||
android:paddingTop="20dp"
|
||||
android:paddingBottom="20dp"
|
||||
android:orientation="vertical"
|
||||
android:background="@drawable/cling">
|
||||
<TextView
|
||||
style="@style/ClingTitleText"
|
||||
android:id="@+id/folder_cling_title"
|
||||
android:text="@string/folder_cling_title" />
|
||||
<TextView
|
||||
style="@style/ClingText"
|
||||
android:id="@+id/folder_cling_create_folder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="20dp"
|
||||
android:paddingRight="20dp"
|
||||
android:paddingTop="20dp"
|
||||
android:paddingBottom="20dp"
|
||||
android:orientation="vertical"
|
||||
android:background="@drawable/cling">
|
||||
<TextView
|
||||
style="@style/ClingTitleText"
|
||||
android:id="@+id/folder_cling_title"
|
||||
android:text="@string/folder_cling_title" />
|
||||
<TextView
|
||||
style="@style/ClingText"
|
||||
android:id="@+id/folder_cling_create_folder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/folder_cling_create_folder" />
|
||||
</LinearLayout>
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:src="@drawable/cling_arrow_down" />
|
||||
android:text="@string/folder_cling_create_folder" />
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
<Button
|
||||
|
||||
@@ -57,6 +57,11 @@
|
||||
<!-- The Workspace cling must appear under the AppsCustomizePagedView below to ensure
|
||||
that it is still visible during the transition to AllApps and doesn't overlay on
|
||||
top of that view. -->
|
||||
<FrameLayout
|
||||
android:id="@+id/cling_scrim"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone" />
|
||||
<include layout="@layout/first_run_cling"
|
||||
android:id="@+id/first_run_cling"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -20,39 +20,29 @@
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginStart="20dp"
|
||||
android:layout_marginEnd="20dp"
|
||||
android:layout_marginStart="15dp"
|
||||
android:layout_marginEnd="15dp"
|
||||
android:layout_marginTop="10dp"
|
||||
android:layout_marginBottom="10dp">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
<LinearLayout
|
||||
android:paddingLeft="20dp"
|
||||
android:paddingRight="20dp"
|
||||
android:paddingTop="20dp"
|
||||
android:paddingBottom="20dp"
|
||||
android:orientation="vertical"
|
||||
android:background="@drawable/cling">
|
||||
<TextView
|
||||
style="@style/ClingTitleText"
|
||||
android:id="@+id/folder_cling_title"
|
||||
android:text="@string/folder_cling_title" />
|
||||
<TextView
|
||||
style="@style/ClingText"
|
||||
android:id="@+id/folder_cling_create_folder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="20dp"
|
||||
android:paddingRight="20dp"
|
||||
android:paddingTop="20dp"
|
||||
android:paddingBottom="20dp"
|
||||
android:orientation="vertical"
|
||||
android:background="@drawable/cling">
|
||||
<TextView
|
||||
style="@style/ClingTitleText"
|
||||
android:id="@+id/folder_cling_title"
|
||||
android:text="@string/folder_cling_title" />
|
||||
<TextView
|
||||
style="@style/ClingText"
|
||||
android:id="@+id/folder_cling_create_folder"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/folder_cling_create_folder" />
|
||||
</LinearLayout>
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:src="@drawable/cling_arrow_down" />
|
||||
android:text="@string/folder_cling_create_folder" />
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
<Button
|
||||
|
||||
@@ -64,6 +64,11 @@
|
||||
<!-- The Workspace cling must appear under the AppsCustomizePagedView below to ensure
|
||||
that it is still visible during the transition to AllApps and doesn't overlay on
|
||||
top of that view. -->
|
||||
<FrameLayout
|
||||
android:id="@+id/cling_scrim"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone" />
|
||||
<include layout="@layout/first_run_cling"
|
||||
android:id="@+id/first_run_cling"
|
||||
android:layout_width="match_parent"
|
||||
@@ -74,7 +79,6 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone" />
|
||||
|
||||
<include layout="@layout/folder_cling"
|
||||
android:id="@+id/folder_cling"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -36,5 +36,5 @@
|
||||
<color name="folder_items_text_color">#FF333333</color>
|
||||
<color name="outline_color">#FFFFFFFF</color>
|
||||
|
||||
<color name="first_run_cling_circle_background_color">#FF83AEE8</color>
|
||||
<color name="first_run_cling_circle_background_color">#FF8BB4E9</color>
|
||||
</resources>
|
||||
|
||||
@@ -228,7 +228,7 @@ s -->
|
||||
<!-- The title text for the workspace cling [CHAR_LIMIT=none] -->
|
||||
<string name="first_run_cling_title">Welcome!</string>
|
||||
<!-- The description of how to use the workspace [CHAR_LIMIT=none] -->
|
||||
<string name="first_run_cling_description">Make yourself at Home</string>
|
||||
<string name="first_run_cling_description">Make yourself at Home.</string>
|
||||
<!-- The description of how to use the workspace [CHAR_LIMIT=none] -->
|
||||
<string name="first_run_cling_custom_content_hint"></string>
|
||||
<!-- The description of how to use the workspace [CHAR_LIMIT=none] -->
|
||||
@@ -238,15 +238,15 @@ s -->
|
||||
<!-- The title text for the workspace cling [CHAR_LIMIT=none] -->
|
||||
<string name="workspace_cling_title">Organize your space</string>
|
||||
<!-- The description of how to use the workspace [CHAR_LIMIT=none] -->
|
||||
<string name="workspace_cling_move_item">Touch & hold background to manage wallpaper, widgets and settings</string>
|
||||
<string name="workspace_cling_move_item">Touch & hold background to manage wallpaper, widgets and settings.</string>
|
||||
<!-- The title text for the All Apps cling [CHAR_LIMIT=none] -->
|
||||
<string name="all_apps_cling_title">Choose some apps</string>
|
||||
<!-- The description of how to pick up and add an item to the workspace [CHAR_LIMIT=none] -->
|
||||
<string name="all_apps_cling_add_item">To add an app to your Home screen, touch & hold it.</string>
|
||||
<!-- The title text for the Folder cling [CHAR_LIMIT=none] -->
|
||||
<string name="folder_cling_title">Create new folders for your apps</string>
|
||||
<string name="folder_cling_title">Here\'s a folder</string>
|
||||
<!-- The description of how to create a folder [CHAR_LIMIT=none] -->
|
||||
<string name="folder_cling_create_folder">Touch & hold an app, then move it on top of another app icon</string>
|
||||
<string name="folder_cling_create_folder">To create one like this, touch & hold an app, then move it over another.</string>
|
||||
<!-- The text on the button to dismiss a cling [CHAR_LIMIT=none] -->
|
||||
<string name="cling_dismiss">OK</string>
|
||||
<!-- Error message on dummy custom cling layout [DO NOT TRANSLATE] -->
|
||||
|
||||
@@ -70,6 +70,9 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi
|
||||
private Paint mBubblePaint;
|
||||
private Paint mDotPaint;
|
||||
|
||||
private View mScrimView;
|
||||
private int mBackgroundColor;
|
||||
|
||||
private final Rect mInsets = new Rect();
|
||||
|
||||
public Cling(Context context) {
|
||||
@@ -91,9 +94,11 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi
|
||||
|
||||
}
|
||||
|
||||
void init(Launcher l, int[] positionData) {
|
||||
void init(Launcher l, View scrim) {
|
||||
if (!mIsInitialized) {
|
||||
mLauncher = l;
|
||||
mScrimView = scrim;
|
||||
mBackgroundColor = 0xdd000000;
|
||||
setOnLongClickListener(this);
|
||||
|
||||
mErasePaint = new Paint();
|
||||
@@ -128,10 +133,7 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi
|
||||
content.animate()
|
||||
.alpha(1f)
|
||||
.setDuration(duration)
|
||||
.setListener(new AnimatorListenerAdapter() {
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
};
|
||||
})
|
||||
.setListener(null)
|
||||
.start();
|
||||
setAlpha(1f);
|
||||
} else {
|
||||
@@ -142,11 +144,24 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi
|
||||
.alpha(1f)
|
||||
.setInterpolator(new AccelerateInterpolator())
|
||||
.setDuration(duration)
|
||||
.setListener(null)
|
||||
.start();
|
||||
} else {
|
||||
setAlpha(1f);
|
||||
}
|
||||
}
|
||||
|
||||
// Show the scrim if necessary
|
||||
if (mScrimView != null) {
|
||||
mScrimView.setVisibility(View.VISIBLE);
|
||||
mScrimView.setAlpha(0f);
|
||||
mScrimView.animate()
|
||||
.alpha(1f)
|
||||
.setDuration(duration)
|
||||
.setListener(null)
|
||||
.start();
|
||||
}
|
||||
|
||||
setFocusableInTouchMode(true);
|
||||
post(new Runnable() {
|
||||
public void run() {
|
||||
@@ -160,26 +175,42 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi
|
||||
if (mDrawIdentifier.equals(FIRST_RUN_PORTRAIT) ||
|
||||
mDrawIdentifier.equals(FIRST_RUN_LANDSCAPE)) {
|
||||
View content = getContent();
|
||||
ObjectAnimator anim = LauncherAnimUtils.ofFloat(content, "alpha", 0f);
|
||||
anim.setDuration(duration);
|
||||
anim.addListener(new AnimatorListenerAdapter() {
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
// We are about to trigger the workspace cling, so don't do anything else
|
||||
setVisibility(View.GONE);
|
||||
postCb.run();
|
||||
};
|
||||
});
|
||||
anim.start();
|
||||
content.animate()
|
||||
.alpha(0f)
|
||||
.setDuration(duration)
|
||||
.setListener(new AnimatorListenerAdapter() {
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
// We are about to trigger the workspace cling, so don't do anything else
|
||||
setVisibility(View.GONE);
|
||||
postCb.run();
|
||||
};
|
||||
})
|
||||
.start();
|
||||
} else {
|
||||
ObjectAnimator anim = LauncherAnimUtils.ofFloat(this, "alpha", 0f);
|
||||
anim.setDuration(duration);
|
||||
anim.addListener(new AnimatorListenerAdapter() {
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
setVisibility(View.GONE);
|
||||
postCb.run();
|
||||
};
|
||||
});
|
||||
anim.start();
|
||||
animate()
|
||||
.alpha(0f)
|
||||
.setDuration(duration)
|
||||
.setListener(new AnimatorListenerAdapter() {
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
// We are about to trigger the workspace cling, so don't do anything else
|
||||
setVisibility(View.GONE);
|
||||
postCb.run();
|
||||
};
|
||||
})
|
||||
.start();
|
||||
}
|
||||
|
||||
// Show the scrim if necessary
|
||||
if (mScrimView != null) {
|
||||
mScrimView.animate()
|
||||
.alpha(0f)
|
||||
.setDuration(duration)
|
||||
.setListener(new AnimatorListenerAdapter() {
|
||||
public void onAnimationEnd(Animator animation) {
|
||||
mScrimView.setVisibility(View.GONE);
|
||||
};
|
||||
})
|
||||
.start();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -188,6 +219,12 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi
|
||||
mIsInitialized = false;
|
||||
}
|
||||
|
||||
void bringScrimToFront() {
|
||||
if (mScrimView != null) {
|
||||
mScrimView.bringToFront();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setInsets(Rect insets) {
|
||||
mInsets.set(insets);
|
||||
@@ -262,13 +299,12 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi
|
||||
// Draw the background
|
||||
Bitmap eraseBg = null;
|
||||
Canvas eraseCanvas = null;
|
||||
if (mBackground != null) {
|
||||
if (mScrimView != null) {
|
||||
// Skip drawing the background
|
||||
mScrimView.setBackgroundColor(mBackgroundColor);
|
||||
} else if (mBackground != null) {
|
||||
mBackground.setBounds(0, 0, getMeasuredWidth(), getMeasuredHeight());
|
||||
mBackground.draw(canvas);
|
||||
} else if (mDrawIdentifier.equals(FOLDER_PORTRAIT) ||
|
||||
mDrawIdentifier.equals(FOLDER_LANDSCAPE) ||
|
||||
mDrawIdentifier.equals(FOLDER_LARGE)) {
|
||||
canvas.drawColor(0xcc000000);
|
||||
} else if (mDrawIdentifier.equals(WORKSPACE_PORTRAIT) ||
|
||||
mDrawIdentifier.equals(WORKSPACE_LANDSCAPE) ||
|
||||
mDrawIdentifier.equals(WORKSPACE_LARGE)) {
|
||||
@@ -276,9 +312,9 @@ public class Cling extends FrameLayout implements Insettable, View.OnLongClickLi
|
||||
eraseBg = Bitmap.createBitmap(getMeasuredWidth(), getMeasuredHeight(),
|
||||
Bitmap.Config.ARGB_8888);
|
||||
eraseCanvas = new Canvas(eraseBg);
|
||||
eraseCanvas.drawColor(0xdd000000);
|
||||
eraseCanvas.drawColor(mBackgroundColor);
|
||||
} else {
|
||||
canvas.drawColor(0xdd000000);
|
||||
canvas.drawColor(mBackgroundColor);
|
||||
}
|
||||
|
||||
// Draw everything else
|
||||
|
||||
@@ -453,8 +453,9 @@ public class Folder extends LinearLayout implements DragSource, View.OnClickList
|
||||
setLayerType(LAYER_TYPE_NONE, null);
|
||||
Cling cling = mLauncher.showFirstRunFoldersCling();
|
||||
if (cling != null) {
|
||||
cling.bringToFront();
|
||||
cling.bringScrimToFront();
|
||||
bringToFront();
|
||||
cling.bringToFront();
|
||||
}
|
||||
setFocusOnFirstChild();
|
||||
}
|
||||
|
||||
@@ -274,7 +274,7 @@ public class Launcher extends Activity
|
||||
private boolean mUserPresent = true;
|
||||
private boolean mVisible = false;
|
||||
private boolean mAttached = false;
|
||||
private static final boolean DISABLE_CLINGS = true;
|
||||
private static final boolean DISABLE_CLINGS = false;
|
||||
private static final boolean DISABLE_CUSTOM_CLINGS = true;
|
||||
|
||||
private static LocaleConfiguration sLocaleConfiguration = null;
|
||||
@@ -4064,11 +4064,15 @@ public class Launcher extends Activity
|
||||
return true;
|
||||
}
|
||||
|
||||
private Cling initCling(int clingId, int[] positionData, boolean animate,
|
||||
private Cling initCling(int clingId, int scrimId, boolean animate,
|
||||
boolean dimNavBarVisibilty) {
|
||||
final Cling cling = (Cling) findViewById(clingId);
|
||||
Cling cling = (Cling) findViewById(clingId);
|
||||
View scrim = null;
|
||||
if (scrimId > 0) {
|
||||
scrim = findViewById(R.id.scrim);
|
||||
}
|
||||
if (cling != null) {
|
||||
cling.init(this, positionData);
|
||||
cling.init(this, scrim);
|
||||
cling.show(animate, SHOW_CLING_DURATION);
|
||||
|
||||
if (dimNavBarVisibilty) {
|
||||
@@ -4087,7 +4091,6 @@ public class Launcher extends Activity
|
||||
final Runnable cleanUpClingCb = new Runnable() {
|
||||
public void run() {
|
||||
cling.cleanup();
|
||||
/*
|
||||
// We should update the shared preferences on a background thread
|
||||
new Thread("dismissClingThread") {
|
||||
public void run() {
|
||||
@@ -4096,7 +4099,6 @@ public class Launcher extends Activity
|
||||
editor.commit();
|
||||
}
|
||||
}.start();
|
||||
*/
|
||||
if (postAnimationCb != null) {
|
||||
postAnimationCb.run();
|
||||
}
|
||||
@@ -4177,7 +4179,7 @@ public class Launcher extends Activity
|
||||
ccHint.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
initCling(R.id.first_run_cling, null, false, true);
|
||||
initCling(R.id.first_run_cling, 0, false, true);
|
||||
} else {
|
||||
removeCling(R.id.first_run_cling);
|
||||
}
|
||||
@@ -4194,7 +4196,7 @@ public class Launcher extends Activity
|
||||
// Enable the clings only if they have not been dismissed before
|
||||
if (isClingsEnabled() &&
|
||||
!mSharedPrefs.getBoolean(Cling.WORKSPACE_CLING_DISMISSED_KEY, false)) {
|
||||
initCling(R.id.workspace_cling, null, false, true);
|
||||
initCling(R.id.workspace_cling, 0, false, true);
|
||||
} else {
|
||||
removeCling(R.id.workspace_cling);
|
||||
}
|
||||
@@ -4203,7 +4205,8 @@ public class Launcher extends Activity
|
||||
// Enable the clings only if they have not been dismissed before
|
||||
if (isClingsEnabled() &&
|
||||
!mSharedPrefs.getBoolean(Cling.FOLDER_CLING_DISMISSED_KEY, false)) {
|
||||
Cling cling = initCling(R.id.folder_cling, null, true, true);
|
||||
Cling cling = initCling(R.id.folder_cling, R.id.cling_scrim,
|
||||
true, true);
|
||||
return cling;
|
||||
} else {
|
||||
removeCling(R.id.folder_cling);
|
||||
|
||||
Reference in New Issue
Block a user