Loading app/build.gradle +2 −1 Original line number Original line Diff line number Diff line Loading @@ -77,7 +77,8 @@ android { dependencies { dependencies { implementation 'me.relex:circleindicator:1.2.2@aar' implementation 'me.relex:circleindicator:1.2.2@aar' implementation 'uk.co.chrisjenx:calligraphy:2.3.0' implementation 'io.github.inflationx:calligraphy3:3.1.1' implementation 'io.github.inflationx:viewpump:1.0.0' apiNougatImplementation 'org.cyanogenmod:platform.sdk:6.0' apiNougatImplementation 'org.cyanogenmod:platform.sdk:6.0' apiOreoImplementation files('libs/lineage-sdk.jar') apiOreoImplementation files('libs/lineage-sdk.jar') Loading app/src/main/java/foundation/e/blisslauncher/BlissLauncher.java +9 −4 Original line number Original line Diff line number Diff line Loading @@ -8,7 +8,9 @@ import foundation.e.blisslauncher.core.DeviceProfile; import foundation.e.blisslauncher.core.IconsHandler; import foundation.e.blisslauncher.core.IconsHandler; import foundation.e.blisslauncher.core.customviews.WidgetHost; import foundation.e.blisslauncher.core.customviews.WidgetHost; import foundation.e.blisslauncher.features.launcher.AppProvider; import foundation.e.blisslauncher.features.launcher.AppProvider; import uk.co.chrisjenx.calligraphy.CalligraphyConfig; import io.github.inflationx.calligraphy3.CalligraphyConfig; import io.github.inflationx.calligraphy3.CalligraphyInterceptor; import io.github.inflationx.viewpump.ViewPump; public class BlissLauncher extends Application { public class BlissLauncher extends Application { private IconsHandler iconsPackHandler; private IconsHandler iconsPackHandler; Loading @@ -25,9 +27,12 @@ public class BlissLauncher extends Application { public void onCreate() { public void onCreate() { super.onCreate(); super.onCreate(); CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() ViewPump.init(ViewPump.builder() .addInterceptor(new CalligraphyInterceptor( new CalligraphyConfig.Builder() .setDefaultFontPath("Roboto-Regular.ttf") .setDefaultFontPath("Roboto-Regular.ttf") .setFontAttrId(R.attr.fontPath) .setFontAttrId(R.attr.fontPath) .build())) .build()); .build()); sAppWidgetManager = AppWidgetManager.getInstance(getApplicationContext()); sAppWidgetManager = AppWidgetManager.getInstance(getApplicationContext()); Loading app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java +82 −42 Original line number Original line Diff line number Diff line package foundation.e.blisslauncher.features.launcher; package foundation.e.blisslauncher.features.launcher; import static android.view.View.GONE; import static android.view.View.VISIBLE; import android.Manifest; import android.Manifest; import android.animation.Animator; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorListenerAdapter; Loading Loading @@ -139,6 +136,7 @@ import foundation.e.blisslauncher.features.weather.WeatherUtils; import foundation.e.blisslauncher.features.widgets.WidgetManager; import foundation.e.blisslauncher.features.widgets.WidgetManager; import foundation.e.blisslauncher.features.widgets.WidgetViewBuilder; import foundation.e.blisslauncher.features.widgets.WidgetViewBuilder; import foundation.e.blisslauncher.features.widgets.WidgetsActivity; import foundation.e.blisslauncher.features.widgets.WidgetsActivity; import io.github.inflationx.viewpump.ViewPumpContextWrapper; import io.reactivex.Observable; import io.reactivex.Observable; import io.reactivex.ObservableSource; import io.reactivex.ObservableSource; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers; Loading @@ -146,7 +144,9 @@ import io.reactivex.disposables.CompositeDisposable; import io.reactivex.observers.DisposableObserver; import io.reactivex.observers.DisposableObserver; import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers; import me.relex.circleindicator.CircleIndicator; import me.relex.circleindicator.CircleIndicator; import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; import static android.view.View.GONE; import static android.view.View.VISIBLE; public class LauncherActivity extends AppCompatActivity implements public class LauncherActivity extends AppCompatActivity implements AutoCompleteAdapter.OnSuggestionClickListener, OnSwipeDownListener { AutoCompleteAdapter.OnSuggestionClickListener, OnSwipeDownListener { Loading Loading @@ -200,6 +200,8 @@ public class LauncherActivity extends AppCompatActivity implements private FrameLayout swipeSearchContainer; private FrameLayout swipeSearchContainer; private RelativeLayout workspace; private RelativeLayout workspace; private View backgroundLayer; private View backgroundLayer; private View scrollCornerRight; private View scrollCornerLeft; private BroadcastReceiver mWeatherReceiver = new BroadcastReceiver() { private BroadcastReceiver mWeatherReceiver = new BroadcastReceiver() { @Override @Override Loading Loading @@ -293,6 +295,8 @@ public class LauncherActivity extends AppCompatActivity implements workspace = mLauncherView.findViewById(R.id.workspace); workspace = mLauncherView.findViewById(R.id.workspace); mHorizontalPager = mLauncherView.findViewById(R.id.pages_container); mHorizontalPager = mLauncherView.findViewById(R.id.pages_container); backgroundLayer = mLauncherView.findViewById(R.id.background_layer); backgroundLayer = mLauncherView.findViewById(R.id.background_layer); scrollCornerLeft = mLauncherView.findViewById(R.id.scroll_corner_left); scrollCornerRight = mLauncherView.findViewById(R.id.scroll_corner_right); statusBarHeight = 0; statusBarHeight = 0; int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { if (resourceId > 0) { Loading @@ -310,6 +314,11 @@ public class LauncherActivity extends AppCompatActivity implements maxDistanceForFolderCreation = (int) (0.45f * mDeviceProfile.iconSizePx); maxDistanceForFolderCreation = (int) (0.45f * mDeviceProfile.iconSizePx); scrollCorner = mDeviceProfile.iconDrawablePaddingPx / 2; scrollCorner = mDeviceProfile.iconDrawablePaddingPx / 2; scrollCornerLeft.getLayoutParams().width = scrollCorner; ((RelativeLayout.LayoutParams) scrollCornerLeft.getLayoutParams()).topMargin = (int) (statusBarHeight + Utilities.pxFromDp(8, this)); scrollCornerRight.getLayoutParams().width = scrollCorner; ((RelativeLayout.LayoutParams) scrollCornerRight.getLayoutParams()).topMargin = (int) (statusBarHeight + Utilities.pxFromDp(8, this)); wobbleAnimation = AnimationUtils.loadAnimation(this, R.anim.wobble); wobbleAnimation = AnimationUtils.loadAnimation(this, R.anim.wobble); wobbleReverseAnimation = AnimationUtils.loadAnimation(this, R.anim.wobble_reverse); wobbleReverseAnimation = AnimationUtils.loadAnimation(this, R.anim.wobble_reverse); getWindow().getDecorView().setSystemUiVisibility( getWindow().getDecorView().setSystemUiVisibility( Loading Loading @@ -356,7 +365,7 @@ public class LauncherActivity extends AppCompatActivity implements } } protected void attachBaseContext(Context context) { protected void attachBaseContext(Context context) { super.attachBaseContext(CalligraphyContextWrapper.wrap(context)); super.attachBaseContext(ViewPumpContextWrapper.wrap(context)); } } public CompositeDisposable getCompositeDisposable() { public CompositeDisposable getCompositeDisposable() { Loading Loading @@ -2106,6 +2115,20 @@ public class LauncherActivity extends AppCompatActivity implements if (mWobblingCountDownTimer != null) { if (mWobblingCountDownTimer != null) { mWobblingCountDownTimer.cancel(); mWobblingCountDownTimer.cancel(); } } AnimatorSet animatorSet = new AnimatorSet(); animatorSet.play(ObjectAnimator.ofFloat(scrollCornerLeft, View.ALPHA, 1f)) .with(ObjectAnimator.ofFloat(scrollCornerRight, View.ALPHA, 1f)); animatorSet.setDuration(100); animatorSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { super.onAnimationStart(animation); scrollCornerRight.setVisibility(VISIBLE); scrollCornerLeft.setVisibility(VISIBLE); } }); animatorSet.start(); } else if (dragEvent.getAction() == DragEvent.ACTION_DRAG_LOCATION) { } else if (dragEvent.getAction() == DragEvent.ACTION_DRAG_LOCATION) { cX = dragEvent.getX() - dragShadowBuilder.xOffset; cX = dragEvent.getX() - dragShadowBuilder.xOffset; cY = mHorizontalPager.getY() + dragEvent.getY() cY = mHorizontalPager.getY() + dragEvent.getY() Loading @@ -2123,11 +2146,41 @@ public class LauncherActivity extends AppCompatActivity implements return true; return true; } } GridLayout page = pages.get(getCurrentAppsPageNumber()); GridLayout page = pages.get(getCurrentAppsPageNumber()); if (cX < mDeviceProfile.availableWidthPx - scrollCorner if ((cX - mDeviceProfile.iconSizePx / 10) > mDeviceProfile.availableWidthPx - 2 * scrollCorner) { && cX > scrollCorner) { if (getCurrentAppsPageNumber() + 1 < pages.size()) { mHorizontalPager.scrollRight(300); } else if (getCurrentAppsPageNumber() + 1 == pages.size() && getGridFromPage(page).getChildCount() > 1) { GridLayout layout = preparePage(); pages.add(layout); ImageView dot = new ImageView(LauncherActivity.this); dot.setImageDrawable(getDrawable(R.drawable.dot_off)); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( getResources().getDimensionPixelSize( R.dimen.dotSize), getResources().getDimensionPixelSize( R.dimen.dotSize) ); dot.setLayoutParams(params); mIndicator.addView(dot); mHorizontalPager.addView(layout); } } else if ((cX + mDeviceProfile.iconSizePx / 10) < 2 * scrollCorner) { if (getCurrentAppsPageNumber() == 0) { return true; } if (getCurrentAppsPageNumber() - 1 >= 0) { mHorizontalPager.scrollLeft(300); } else if (getCurrentAppsPageNumber() + 1 == pages.size() - 2 && getGridFromPage(pages.get(pages.size() - 1)).getChildCount() <= 0) { mIndicator.removeViewAt(pages.size()); mHorizontalPager.removeViewAt(pages.size()); pages.remove(pages.size() - 1); } } else { int index = getIndex(page, cX, cY); int index = getIndex(page, cX, cY); // If hovering over self, ignore drag/drop // If hovering over self, ignore drag/drop Loading Loading @@ -2184,40 +2237,6 @@ public class LauncherActivity extends AppCompatActivity implements mReorderAlarm.setOnAlarmListener(reorderAlarmListener); mReorderAlarm.setOnAlarmListener(reorderAlarmListener); mReorderAlarm.setAlarm(REORDER_TIMEOUT); mReorderAlarm.setAlarm(REORDER_TIMEOUT); } } } else { if (cX > mDeviceProfile.availableWidthPx - scrollCorner) { if (getCurrentAppsPageNumber() + 1 < pages.size()) { mHorizontalPager.scrollRight(300); } else if (getCurrentAppsPageNumber() + 1 == pages.size() && getGridFromPage(page).getChildCount() > 1) { GridLayout layout = preparePage(); pages.add(layout); ImageView dot = new ImageView(LauncherActivity.this); dot.setImageDrawable(getDrawable(R.drawable.dot_off)); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( getResources().getDimensionPixelSize( R.dimen.dotSize), getResources().getDimensionPixelSize( R.dimen.dotSize) ); dot.setLayoutParams(params); mIndicator.addView(dot); mHorizontalPager.addView(layout); } } else if (cX < scrollCorner) { if (getCurrentAppsPageNumber() == 0) { return true; } if (getCurrentAppsPageNumber() - 1 >= 0) { mHorizontalPager.scrollLeft(300); } else if (getCurrentAppsPageNumber() + 1 == pages.size() - 2 && getGridFromPage(pages.get(pages.size() - 1)).getChildCount() <= 0) { mIndicator.removeViewAt(pages.size()); mHorizontalPager.removeViewAt(pages.size()); pages.remove(pages.size() - 1); } } } } } else if (dragEvent.getAction() == DragEvent.ACTION_DROP) { } else if (dragEvent.getAction() == DragEvent.ACTION_DROP) { cleanupReorder(true); cleanupReorder(true); Loading Loading @@ -2272,6 +2291,27 @@ public class LauncherActivity extends AppCompatActivity implements isDragging = false; isDragging = false; } } AnimatorSet animatorSet = new AnimatorSet(); animatorSet.play(ObjectAnimator.ofFloat(scrollCornerLeft, View.ALPHA, 0f)) .with(ObjectAnimator.ofFloat(scrollCornerRight, View.ALPHA, 0f)); animatorSet.setDuration(100); animatorSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationCancel(Animator animation) { super.onAnimationCancel(animation); scrollCornerRight.setVisibility(GONE); scrollCornerLeft.setVisibility(GONE); } @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); scrollCornerRight.setVisibility(GONE); scrollCornerLeft.setVisibility(GONE); } }); animatorSet.start(); if (movingApp.getVisibility() != VISIBLE) { if (movingApp.getVisibility() != VISIBLE) { movingApp.setVisibility(View.VISIBLE); movingApp.setVisibility(View.VISIBLE); } } Loading app/src/main/res/layout/activity_main.xml +20 −0 Original line number Original line Diff line number Diff line Loading @@ -14,6 +14,26 @@ android:alpha="0" android:alpha="0" android:background="@color/dark_grey_44" /> android:background="@color/dark_grey_44" /> <View android:id="@+id/scroll_corner_left" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_above="@+id/dock" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:background="#88FFFFFF" android:visibility="gone"/> <View android:id="@+id/scroll_corner_right" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_above="@+id/dock" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" android:background="#88FFFFFF" android:visibility="gone"/> <foundation.e.blisslauncher.core.customviews.HorizontalPager <foundation.e.blisslauncher.core.customviews.HorizontalPager android:id="@+id/pages_container" android:id="@+id/pages_container" android:layout_width="match_parent" android:layout_width="match_parent" Loading Loading
app/build.gradle +2 −1 Original line number Original line Diff line number Diff line Loading @@ -77,7 +77,8 @@ android { dependencies { dependencies { implementation 'me.relex:circleindicator:1.2.2@aar' implementation 'me.relex:circleindicator:1.2.2@aar' implementation 'uk.co.chrisjenx:calligraphy:2.3.0' implementation 'io.github.inflationx:calligraphy3:3.1.1' implementation 'io.github.inflationx:viewpump:1.0.0' apiNougatImplementation 'org.cyanogenmod:platform.sdk:6.0' apiNougatImplementation 'org.cyanogenmod:platform.sdk:6.0' apiOreoImplementation files('libs/lineage-sdk.jar') apiOreoImplementation files('libs/lineage-sdk.jar') Loading
app/src/main/java/foundation/e/blisslauncher/BlissLauncher.java +9 −4 Original line number Original line Diff line number Diff line Loading @@ -8,7 +8,9 @@ import foundation.e.blisslauncher.core.DeviceProfile; import foundation.e.blisslauncher.core.IconsHandler; import foundation.e.blisslauncher.core.IconsHandler; import foundation.e.blisslauncher.core.customviews.WidgetHost; import foundation.e.blisslauncher.core.customviews.WidgetHost; import foundation.e.blisslauncher.features.launcher.AppProvider; import foundation.e.blisslauncher.features.launcher.AppProvider; import uk.co.chrisjenx.calligraphy.CalligraphyConfig; import io.github.inflationx.calligraphy3.CalligraphyConfig; import io.github.inflationx.calligraphy3.CalligraphyInterceptor; import io.github.inflationx.viewpump.ViewPump; public class BlissLauncher extends Application { public class BlissLauncher extends Application { private IconsHandler iconsPackHandler; private IconsHandler iconsPackHandler; Loading @@ -25,9 +27,12 @@ public class BlissLauncher extends Application { public void onCreate() { public void onCreate() { super.onCreate(); super.onCreate(); CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() ViewPump.init(ViewPump.builder() .addInterceptor(new CalligraphyInterceptor( new CalligraphyConfig.Builder() .setDefaultFontPath("Roboto-Regular.ttf") .setDefaultFontPath("Roboto-Regular.ttf") .setFontAttrId(R.attr.fontPath) .setFontAttrId(R.attr.fontPath) .build())) .build()); .build()); sAppWidgetManager = AppWidgetManager.getInstance(getApplicationContext()); sAppWidgetManager = AppWidgetManager.getInstance(getApplicationContext()); Loading
app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java +82 −42 Original line number Original line Diff line number Diff line package foundation.e.blisslauncher.features.launcher; package foundation.e.blisslauncher.features.launcher; import static android.view.View.GONE; import static android.view.View.VISIBLE; import android.Manifest; import android.Manifest; import android.animation.Animator; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorListenerAdapter; Loading Loading @@ -139,6 +136,7 @@ import foundation.e.blisslauncher.features.weather.WeatherUtils; import foundation.e.blisslauncher.features.widgets.WidgetManager; import foundation.e.blisslauncher.features.widgets.WidgetManager; import foundation.e.blisslauncher.features.widgets.WidgetViewBuilder; import foundation.e.blisslauncher.features.widgets.WidgetViewBuilder; import foundation.e.blisslauncher.features.widgets.WidgetsActivity; import foundation.e.blisslauncher.features.widgets.WidgetsActivity; import io.github.inflationx.viewpump.ViewPumpContextWrapper; import io.reactivex.Observable; import io.reactivex.Observable; import io.reactivex.ObservableSource; import io.reactivex.ObservableSource; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers; Loading @@ -146,7 +144,9 @@ import io.reactivex.disposables.CompositeDisposable; import io.reactivex.observers.DisposableObserver; import io.reactivex.observers.DisposableObserver; import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers; import me.relex.circleindicator.CircleIndicator; import me.relex.circleindicator.CircleIndicator; import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; import static android.view.View.GONE; import static android.view.View.VISIBLE; public class LauncherActivity extends AppCompatActivity implements public class LauncherActivity extends AppCompatActivity implements AutoCompleteAdapter.OnSuggestionClickListener, OnSwipeDownListener { AutoCompleteAdapter.OnSuggestionClickListener, OnSwipeDownListener { Loading Loading @@ -200,6 +200,8 @@ public class LauncherActivity extends AppCompatActivity implements private FrameLayout swipeSearchContainer; private FrameLayout swipeSearchContainer; private RelativeLayout workspace; private RelativeLayout workspace; private View backgroundLayer; private View backgroundLayer; private View scrollCornerRight; private View scrollCornerLeft; private BroadcastReceiver mWeatherReceiver = new BroadcastReceiver() { private BroadcastReceiver mWeatherReceiver = new BroadcastReceiver() { @Override @Override Loading Loading @@ -293,6 +295,8 @@ public class LauncherActivity extends AppCompatActivity implements workspace = mLauncherView.findViewById(R.id.workspace); workspace = mLauncherView.findViewById(R.id.workspace); mHorizontalPager = mLauncherView.findViewById(R.id.pages_container); mHorizontalPager = mLauncherView.findViewById(R.id.pages_container); backgroundLayer = mLauncherView.findViewById(R.id.background_layer); backgroundLayer = mLauncherView.findViewById(R.id.background_layer); scrollCornerLeft = mLauncherView.findViewById(R.id.scroll_corner_left); scrollCornerRight = mLauncherView.findViewById(R.id.scroll_corner_right); statusBarHeight = 0; statusBarHeight = 0; int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { if (resourceId > 0) { Loading @@ -310,6 +314,11 @@ public class LauncherActivity extends AppCompatActivity implements maxDistanceForFolderCreation = (int) (0.45f * mDeviceProfile.iconSizePx); maxDistanceForFolderCreation = (int) (0.45f * mDeviceProfile.iconSizePx); scrollCorner = mDeviceProfile.iconDrawablePaddingPx / 2; scrollCorner = mDeviceProfile.iconDrawablePaddingPx / 2; scrollCornerLeft.getLayoutParams().width = scrollCorner; ((RelativeLayout.LayoutParams) scrollCornerLeft.getLayoutParams()).topMargin = (int) (statusBarHeight + Utilities.pxFromDp(8, this)); scrollCornerRight.getLayoutParams().width = scrollCorner; ((RelativeLayout.LayoutParams) scrollCornerRight.getLayoutParams()).topMargin = (int) (statusBarHeight + Utilities.pxFromDp(8, this)); wobbleAnimation = AnimationUtils.loadAnimation(this, R.anim.wobble); wobbleAnimation = AnimationUtils.loadAnimation(this, R.anim.wobble); wobbleReverseAnimation = AnimationUtils.loadAnimation(this, R.anim.wobble_reverse); wobbleReverseAnimation = AnimationUtils.loadAnimation(this, R.anim.wobble_reverse); getWindow().getDecorView().setSystemUiVisibility( getWindow().getDecorView().setSystemUiVisibility( Loading Loading @@ -356,7 +365,7 @@ public class LauncherActivity extends AppCompatActivity implements } } protected void attachBaseContext(Context context) { protected void attachBaseContext(Context context) { super.attachBaseContext(CalligraphyContextWrapper.wrap(context)); super.attachBaseContext(ViewPumpContextWrapper.wrap(context)); } } public CompositeDisposable getCompositeDisposable() { public CompositeDisposable getCompositeDisposable() { Loading Loading @@ -2106,6 +2115,20 @@ public class LauncherActivity extends AppCompatActivity implements if (mWobblingCountDownTimer != null) { if (mWobblingCountDownTimer != null) { mWobblingCountDownTimer.cancel(); mWobblingCountDownTimer.cancel(); } } AnimatorSet animatorSet = new AnimatorSet(); animatorSet.play(ObjectAnimator.ofFloat(scrollCornerLeft, View.ALPHA, 1f)) .with(ObjectAnimator.ofFloat(scrollCornerRight, View.ALPHA, 1f)); animatorSet.setDuration(100); animatorSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { super.onAnimationStart(animation); scrollCornerRight.setVisibility(VISIBLE); scrollCornerLeft.setVisibility(VISIBLE); } }); animatorSet.start(); } else if (dragEvent.getAction() == DragEvent.ACTION_DRAG_LOCATION) { } else if (dragEvent.getAction() == DragEvent.ACTION_DRAG_LOCATION) { cX = dragEvent.getX() - dragShadowBuilder.xOffset; cX = dragEvent.getX() - dragShadowBuilder.xOffset; cY = mHorizontalPager.getY() + dragEvent.getY() cY = mHorizontalPager.getY() + dragEvent.getY() Loading @@ -2123,11 +2146,41 @@ public class LauncherActivity extends AppCompatActivity implements return true; return true; } } GridLayout page = pages.get(getCurrentAppsPageNumber()); GridLayout page = pages.get(getCurrentAppsPageNumber()); if (cX < mDeviceProfile.availableWidthPx - scrollCorner if ((cX - mDeviceProfile.iconSizePx / 10) > mDeviceProfile.availableWidthPx - 2 * scrollCorner) { && cX > scrollCorner) { if (getCurrentAppsPageNumber() + 1 < pages.size()) { mHorizontalPager.scrollRight(300); } else if (getCurrentAppsPageNumber() + 1 == pages.size() && getGridFromPage(page).getChildCount() > 1) { GridLayout layout = preparePage(); pages.add(layout); ImageView dot = new ImageView(LauncherActivity.this); dot.setImageDrawable(getDrawable(R.drawable.dot_off)); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( getResources().getDimensionPixelSize( R.dimen.dotSize), getResources().getDimensionPixelSize( R.dimen.dotSize) ); dot.setLayoutParams(params); mIndicator.addView(dot); mHorizontalPager.addView(layout); } } else if ((cX + mDeviceProfile.iconSizePx / 10) < 2 * scrollCorner) { if (getCurrentAppsPageNumber() == 0) { return true; } if (getCurrentAppsPageNumber() - 1 >= 0) { mHorizontalPager.scrollLeft(300); } else if (getCurrentAppsPageNumber() + 1 == pages.size() - 2 && getGridFromPage(pages.get(pages.size() - 1)).getChildCount() <= 0) { mIndicator.removeViewAt(pages.size()); mHorizontalPager.removeViewAt(pages.size()); pages.remove(pages.size() - 1); } } else { int index = getIndex(page, cX, cY); int index = getIndex(page, cX, cY); // If hovering over self, ignore drag/drop // If hovering over self, ignore drag/drop Loading Loading @@ -2184,40 +2237,6 @@ public class LauncherActivity extends AppCompatActivity implements mReorderAlarm.setOnAlarmListener(reorderAlarmListener); mReorderAlarm.setOnAlarmListener(reorderAlarmListener); mReorderAlarm.setAlarm(REORDER_TIMEOUT); mReorderAlarm.setAlarm(REORDER_TIMEOUT); } } } else { if (cX > mDeviceProfile.availableWidthPx - scrollCorner) { if (getCurrentAppsPageNumber() + 1 < pages.size()) { mHorizontalPager.scrollRight(300); } else if (getCurrentAppsPageNumber() + 1 == pages.size() && getGridFromPage(page).getChildCount() > 1) { GridLayout layout = preparePage(); pages.add(layout); ImageView dot = new ImageView(LauncherActivity.this); dot.setImageDrawable(getDrawable(R.drawable.dot_off)); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( getResources().getDimensionPixelSize( R.dimen.dotSize), getResources().getDimensionPixelSize( R.dimen.dotSize) ); dot.setLayoutParams(params); mIndicator.addView(dot); mHorizontalPager.addView(layout); } } else if (cX < scrollCorner) { if (getCurrentAppsPageNumber() == 0) { return true; } if (getCurrentAppsPageNumber() - 1 >= 0) { mHorizontalPager.scrollLeft(300); } else if (getCurrentAppsPageNumber() + 1 == pages.size() - 2 && getGridFromPage(pages.get(pages.size() - 1)).getChildCount() <= 0) { mIndicator.removeViewAt(pages.size()); mHorizontalPager.removeViewAt(pages.size()); pages.remove(pages.size() - 1); } } } } } else if (dragEvent.getAction() == DragEvent.ACTION_DROP) { } else if (dragEvent.getAction() == DragEvent.ACTION_DROP) { cleanupReorder(true); cleanupReorder(true); Loading Loading @@ -2272,6 +2291,27 @@ public class LauncherActivity extends AppCompatActivity implements isDragging = false; isDragging = false; } } AnimatorSet animatorSet = new AnimatorSet(); animatorSet.play(ObjectAnimator.ofFloat(scrollCornerLeft, View.ALPHA, 0f)) .with(ObjectAnimator.ofFloat(scrollCornerRight, View.ALPHA, 0f)); animatorSet.setDuration(100); animatorSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationCancel(Animator animation) { super.onAnimationCancel(animation); scrollCornerRight.setVisibility(GONE); scrollCornerLeft.setVisibility(GONE); } @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); scrollCornerRight.setVisibility(GONE); scrollCornerLeft.setVisibility(GONE); } }); animatorSet.start(); if (movingApp.getVisibility() != VISIBLE) { if (movingApp.getVisibility() != VISIBLE) { movingApp.setVisibility(View.VISIBLE); movingApp.setVisibility(View.VISIBLE); } } Loading
app/src/main/res/layout/activity_main.xml +20 −0 Original line number Original line Diff line number Diff line Loading @@ -14,6 +14,26 @@ android:alpha="0" android:alpha="0" android:background="@color/dark_grey_44" /> android:background="@color/dark_grey_44" /> <View android:id="@+id/scroll_corner_left" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_above="@+id/dock" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:background="#88FFFFFF" android:visibility="gone"/> <View android:id="@+id/scroll_corner_right" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_above="@+id/dock" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" android:background="#88FFFFFF" android:visibility="gone"/> <foundation.e.blisslauncher.core.customviews.HorizontalPager <foundation.e.blisslauncher.core.customviews.HorizontalPager android:id="@+id/pages_container" android:id="@+id/pages_container" android:layout_width="match_parent" android:layout_width="match_parent" Loading