A unique, efficient way to browse and launch your apps

Overview

Lens Launcher

Lens Launcher is a unique, efficient way to browse and launch your apps.

Alt text

Instead of scrolling long lists or swiping through multiple pages, Lens Launcher implements two unique features:

• An Equispaced Grid that displays all of your apps, regardless of screen size or app count.

• A Graphical Fisheye Lens to quickly zoom, pan and launch apps using touch gestures.

Lens Launcher also includes a full Settings menu to tweak all aspects of the Lens; Distortion, Scaling, Icon Size, Haptic Feedback, etc.

The Graphical Fisheye Lens algorithm is derived from methods proposed by Manojit Sarkar and Marc H. Brown. Their original 1993 paper, titled Graphical Fisheye Views, can be found here: https://drive.google.com/open?id=0B6Nqy9y098RLa2pqNVFUcUhIZXM

Major contributions to Lens Launcher have been made by Rish Bhardwaj (@CreaRo)

You can download Lens Launcher on Google Play: https://play.google.com/store/apps/details?id=nickrout.lenslauncher

Build from Source

If you'd like to build from source, you may do so easily with Docker, but if you are wanting to contribute it may be better to install the build tools on your machine.

Easy Way

Building the APK is extremely easy using docker-compose, all that is needed is to run the following inside the repo's directory:

docker-compose run --rm gradle

Then download the APK inside lens-launcher/app/build/outputs/apk/app-release.apk to your phone to install.

For Development

  1. Install the latest Android SDK from Android Studio and accept the licenses.

  2. Install Java JDK 8 from Oracle.

  3. Run keytool and create a keystore following the command prompts.

  4. Generate an APK with gradlew like below:

    gradlew assembleRelease \
      -Pandroid.injected.signing.key.alias=$KEY_ALIAS \
      -Pandroid.injected.signing.store.file=$KEY_STORE_PATH \
      -Pandroid.injected.signing.store.password=$KEY_STORE_PASSWORD \
      -Pandroid.injected.signing.key.password=$KEY_PASSWORD;
Comments
  • Increase max icon size

    Increase max icon size

    30 seems pretty low for my phone (Google Pixel). I always have it set to max, but would like to increase it a bit more because I don't have many apps on my home screen. Changing it to 45 seems to look nice.

    opened by premnirmal 3
  • [enhancement] - ability to hold and delete an app

    [enhancement] - ability to hold and delete an app

    Right now the only way to delete an app (using lens launcher) would be to go into Settings -> Apps -> and delete the app you want to. It would be nice to be able to delete the app straight from the grid

    opened by premnirmal 3
  • Fatal error: android.database.sqlite.SQLiteException: no such table: APP_PERSISTENT

    Fatal error: android.database.sqlite.SQLiteException: no such table: APP_PERSISTENT

    On app start.

    Android Studio 3.3 Build #AI-182.5107.16.33.5199772, built on December 25, 2018 JRE: 1.8.0_152-release-1248-b01 x86_64 JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o macOS 10.14.2

    2019-01-30 18:13:39.978 5901-5901/nickrout.lenslauncher E/RecyclerView: No adapter attached; skipping layout
    2019-01-30 18:13:40.008 5901-5924/nickrout.lenslauncher E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008cdf
    2019-01-30 18:13:40.010 5901-5924/nickrout.lenslauncher E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008824
    2019-01-30 18:13:42.497 5901-5901/nickrout.lenslauncher E/SQLiteLog: (1) no such table: APP_PERSISTENT
    2019-01-30 18:13:42.560 5901-5901/nickrout.lenslauncher E/AndroidRuntime: FATAL EXCEPTION: main
        Process: nickrout.lenslauncher, PID: 5901
        android.database.sqlite.SQLiteException: no such table: APP_PERSISTENT (code 1): , while compiling: SELECT * FROM APP_PERSISTENT WHERE (M_IDENTIFIER = ? ) LIMIT 1
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
            at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
            at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1318)
            at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1165)
            at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1036)
            at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1242)
            at com.orm.SugarRecord.find(SugarRecord.java:201)
            at com.orm.query.Select.first(Select.java:154)
            at nickrout.lenslauncher.model.AppPersistent.getAppVisibility(AppPersistent.java:129)
            at nickrout.lenslauncher.adapter.AppRecyclerAdapter$AppViewHolder.setAppElement(AppRecyclerAdapter.java:108)
            at nickrout.lenslauncher.adapter.AppRecyclerAdapter.onBindViewHolder(AppRecyclerAdapter.java:74)
            at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6356)
            at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6389)
            at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5335)
            at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5598)
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5440)
            at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5436)
            at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224)
            at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:556)
            at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)
            at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)
            at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170)
            at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583)
            at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3312)
            at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844)
            at android.view.View.layout(View.java:17637)
            at android.view.ViewGroup.layout(ViewGroup.java:5575)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
            at android.view.View.layout(View.java:17637)
            at android.view.ViewGroup.layout(ViewGroup.java:5575)
            at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1795)
            at android.view.View.layout(View.java:17637)
            at android.view.ViewGroup.layout(ViewGroup.java:5575)
            at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131)
            at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
            at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1391)
            at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:870)
            at android.view.View.layout(View.java:17637)
            at android.view.ViewGroup.layout(ViewGroup.java:5575)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
            at android.view.View.layout(View.java:17637)
    2019-01-30 18:13:42.577 5901-5901/nickrout.lenslauncher E/AndroidRuntime:     at android.view.ViewGroup.layout(ViewGroup.java:5575)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
            at android.view.View.layout(View.java:17637)
            at android.view.ViewGroup.layout(ViewGroup.java:5575)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
            at android.view.View.layout(View.java:17637)
            at android.view.ViewGroup.layout(ViewGroup.java:5575)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
            at android.view.View.layout(View.java:17637)
            at android.view.ViewGroup.layout(ViewGroup.java:5575)
            at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
            at com.android.internal.policy.DecorView.onLayout(DecorView.java:726)
            at android.view.View.layout(View.java:17637)
            at android.view.ViewGroup.layout(ViewGroup.java:5575)
            at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2346)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2068)
            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6337)
            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
            at android.view.Choreographer.doCallbacks(Choreographer.java:686)
            at android.view.Choreographer.doFrame(Choreographer.java:621)
            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
            at android.os.Handler.handleCallback(Handler.java:751)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:154)
            at android.app.ActivityThread.main(ActivityThread.java:6119)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
    
    
    opened by BorisB 2
  • Is there any config require to run this source code?

    Is there any config require to run this source code?

    Dear devs, I import project to Android Studio, no issue but when I run. Force close occur immediately. Here are the log: FATAL EXCEPTION: main Process: nickrout.lenslauncher, PID: 10440 android.database.sqlite.SQLiteException: no such table: APP_PERSISTENT (code 1): , while compiling: SELECT * FROM APP_PERSISTENT WHERE (M_IDENTIFIER = ? ) LIMIT 1 Error Code : 1 (SQLITE_ERROR)Caused By : SQL(query) error or missing database. (no such table: APP_PERSISTENT (code 1): , while compiling: SELECT * FROM APP_PERSISTENT WHERE (M_IDENTIFIER = ? ) LIMIT 1) ... at nickrout.lenslauncher.model.AppPersistent.getAppVisibility(AppPersistent.java:129) at nickrout.lenslauncher.adapter.AppRecyclerAdapter$AppViewHolder.setAppElement(AppRecyclerAdapter.java:108) at nickrout.lenslauncher.adapter.AppRecyclerAdapter.onBindViewHolder(AppRecyclerAdapter.java:74)

    opened by JVeverGiveUp 2
  • crash issue

    crash issue

    I faced issue when run code Could you help to check

    02-18 15:31:03.190 27242-27242/? E/AndroidRuntime: FATAL EXCEPTION: main Process: nickrout.lenslauncher, PID: 27242 android.database.sqlite.SQLiteException: no such table: APP_PERSISTENT (code 1): , while compiling: SELECT * FROM APP_PERSISTENT WHERE (M_IDENTIFIER = ? ) LIMIT 1 ################################################################# Error Code : 1 (SQLITE_ERROR) Caused By : SQL(query) error or missing database. (no such table: APP_PERSISTENT (code 1): , while compiling: SELECT * FROM APP_PERSISTENT WHERE (M_IDENTIFIER = ? ) LIMIT 1) ################################################################# at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1058) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:623) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:59) at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37) at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1454) at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1301) at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1172) at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1378) at com.orm.SugarRecord.find(SugarRecord.java:201) at com.orm.query.Select.first(Select.java:154) at nickrout.lenslauncher.model.AppPersistent.getAppVisibility(AppPersistent.java:129) at nickrout.lenslauncher.adapter.AppRecyclerAdapter$AppViewHolder.setAppElement(AppRecyclerAdapter.java:108) at nickrout.lenslauncher.adapter.AppRecyclerAdapter.onBindViewHolder(AppRecyclerAdapter.java:74) at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6308) at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6341) at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5287) at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5550) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5392) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5388) at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2149) at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:556) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1496) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:593) at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3535) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3264) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3796) at android.view.View.layout(View.java:17938) at android.view.ViewGroup.layout(ViewGroup.java:5814) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344) at android.widget.FrameLayout.onLayout(FrameLayout.java:281) at android.view.View.layout(View.java:17938) at android.view.ViewGroup.layout(ViewGroup.java:5814) at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1795) at android.view.View.layout(View.java:17938) at android.view.ViewGroup.layout(ViewGroup.java:5814) at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131) at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42) at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1375) at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:870) at an 02-18 15:31:55.790 29018-29018/nickrout.lenslauncher E/AndroidRuntime: FATAL EXCEPTION: main Process: nickrout.lenslauncher, PID: 29018 java.lang.RuntimeException: Unable to start receiver nickrout.lenslauncher.background.BroadcastReceivers$AppsLoadedReceiver: android.database.sqlite.SQLiteException: no such table: APP_PERSISTENT (code 1): , while compiling: SELECT * FROM APP_PERSISTENT WHERE (M_IDENTIFIER = ? ) LIMIT 1 ################################################################# Error Code : 1 (SQLITE_ERROR) Caused By : SQL(query) error or missing database. (no such table: APP_PERSISTENT (code 1): , while compiling: SELECT * FROM APP_PERSISTENT WHERE (M_IDENTIFIER = ? ) LIMIT 1) ################################################################# at android.app.ActivityThread.handleReceiver(ActivityThread.java:3641) at android.app.ActivityThread.access$2000(ActivityThread.java:221) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1876) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by: android.database.sqlite.SQLiteException: no such table: APP_PERSISTENT (code 1): , while compiling: SELECT * FROM APP_PERSISTENT WHERE (M_IDENTIFIER = ? ) LIMIT 1 ################################################################# Error Code : 1 (SQLITE_ERROR) Caused By : SQL(query) error or missing database. (no such table: APP_PERSISTENT (code 1): , while compiling: SELECT * FROM APP_PERSISTENT WHERE (M_IDENTIFIER = ? ) LIMIT 1) ################################################################# at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1058) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:623) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:59) at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37) at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1454) at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1301) at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1172) at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1378) at com.orm.SugarRecord.find(SugarRecord.java:201) at com.orm.query.Select.first(Select.java:154) at nickrout.lenslauncher.model.AppPersistent.getAppVisibility(AppPersistent.java:129) at nickrout.lenslauncher.ui.HomeActivity.removeHiddenApps(HomeActivity.java:106) at nickrout.lenslauncher.ui.HomeActivity.assignApps(HomeActivity.java:100) at nickrout.lenslauncher.ui.HomeActivity.update(HomeActivity.java:129) at java.util.Observable.notifyObservers(Observable.java:138) at nickrout.lenslauncher.background.LoadedObservable.updateValue(LoadedObservable.java:21) at nickrout.lenslauncher.background.LoadedObservable.update(LoadedObservable.java:26) at nickrout.lenslauncher.background.BroadcastReceivers$AppsLoadedReceiver.onReceive(BroadcastReceivers.java:36) at android.app.ActivityThread.handleReceiver(ActivityThread.java:3634) ... 8 more 02-18 15:34:30.090 31958-31958/com.fast.textoverlay.network E/AndroidRuntime: FATAL EXCEPTION: main Process: com.fast.textoverlay.network, PID: 31958 java.lang.RuntimeException: Unable to create service saschpe.textoverlay.service.TextOverlayService: java.lang.SecurityException: com.fast.textoverlay.network from uid 10408 not allowed to perform SYSTEM_ALERT_WINDOW at android.app.ActivityThread.handleCreateService(ActivityThread.java:3817) at android.app.ActivityThread.access$2100(ActivityThread.java:221) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1882) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by: java.lang.SecurityException: com.fast.textoverlay.network from uid 10408 not allowed to perform SYSTEM_ALERT_WINDOW at android.os.Parcel.readException(Parcel.java:1620) at android.os.Parcel.readException(Parcel.java:1573) at android.view.IWindowSession$Stub$Proxy.addToDisplay(IWindowSession.java:791) at android.view.ViewRootImpl.setView(ViewRootImpl.java:813) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:337) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) at saschpe.textoverlay.service.TextOverlayService.onCreate(Unknown Source) at android.app.ActivityThread.handleCreateService(ActivityThread.java:3807) at android.app.ActivityThread.access$2100(ActivityThread.java:221)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1882)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:158)  at android.app.ActivityThread.main(ActivityThread.java:7224)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  02-18 15:34:35.675 32141-32141/com.fast.textoverlay.network E/AndroidRuntime: FATAL EXCEPTION: main Process: com.fast.textoverlay.network, PID: 32141 java.lang.RuntimeException: Unable to create service saschpe.textoverlay.service.TextOverlayService: java.lang.SecurityException: com.fast.textoverlay.network from uid 10408 not allowed to perform SYSTEM_ALERT_WINDOW at android.app.ActivityThread.handleCreateService(ActivityThread.java:3817) at android.app.ActivityThread.access$2100(ActivityThread.java:221) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1882) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by: java.lang.SecurityException: com.fast.textoverlay.network from uid 10408 not allowed to perform SYSTEM_ALERT_WINDOW at android.os.Parcel.readException(Parcel.java:1620) at android.os.Parcel.readException(Parcel.java:1573) at android.view.IWindowSession$Stub$Proxy.addToDisplay(IWindowSession.java:791) at android.view.ViewRootImpl.setView(ViewRootImpl.java:813) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:337) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) at saschpe.textoverlay.service.TextOverlayService.onCreate(Unknown Source) at android.app.ActivityThread.handleCreateService(ActivityThread.java:3807) at android.app.ActivityThread.access$2100(ActivityThread.java:221)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1882)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:158)  at android.app.ActivityThread.main(ActivityThread.java:7224)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  02-18 15:39:41.205 2420-2420/nickrout.lenslauncher E/AndroidRuntime: FATAL EXCEPTION: main Process: nickrout.lenslauncher, PID: 2420 android.database.sqlite.SQLiteException: no such table: APP_PERSISTENT (code 1): , while compiling: SELECT * FROM APP_PERSISTENT WHERE (M_IDENTIFIER = ? ) LIMIT 1 ################################################################# Error Code : 1 (SQLITE_ERROR) Caused By : SQL(query) error or missing database. (no such table: APP_PERSISTENT (code 1): , while compiling: SELECT * FROM APP_PERSISTENT WHERE (M_IDENTIFIER = ? ) LIMIT 1) ################################################################# at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1058) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:623) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:59) at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37) at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1454) at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1301) at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1172) at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1378) at com.orm.SugarRecord.find(SugarRecord.java:201) at com.orm.query.Select.first(Select.java:154) at nickrout.lenslauncher.model.AppPersistent.getAppVisibility(AppPersistent.java:129) at nickrout.lenslauncher.adapter.AppRecyclerAdapter$AppViewHolder.setAppElement(AppRecyclerAdapter.java:108) at nickrout.lenslauncher.adapter.AppRecyclerAdapter.onBindViewHolder(AppRecyclerAdapter.java:74) at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6308) at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6341) at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5287) at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5550) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5392) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5388) at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2149) at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:556) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1496) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:593) at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3535) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3264) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3796) at android.view.View.layout(View.java:17938) at android.view.ViewGroup.layout(ViewGroup.java:5814) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344) at android.widget.FrameLayout.onLayout(FrameLayout.java:281) at android.view.View.layout(View.java:17938) at android.view.ViewGroup.layout(ViewGroup.java:5814) at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1795) at android.view.View.layout(View.java:17938) at android.view.ViewGroup.layout(ViewGroup.java:5814) at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131) at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42) at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1375) at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:870) at and 02-18 15:43:01.790 5174-5174/nickrout.lenslauncher E/AndroidRuntime: FATAL EXCEPTION: main Process: nickrout.lenslauncher, PID: 5174 android.database.sqlite.SQLiteException: no such table: APP_PERSISTENT (code 1): , while compiling: SELECT * FROM APP_PERSISTENT WHERE (M_IDENTIFIER = ? ) LIMIT 1 ################################################################# Error Code : 1 (SQLITE_ERROR) Caused By : SQL(query) error or missing database. (no such table: APP_PERSISTENT (code 1): , while compiling: SELECT * FROM APP_PERSISTENT WHERE (M_IDENTIFIER = ? ) LIMIT 1) ################################################################# at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1058) at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:623) at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) at android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:59) at android.database.sqlite.SQLiteQuery.(SQLiteQuery.java:37) at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1454) at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1301) at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1172) at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1378) at com.orm.SugarRecord.find(SugarRecord.java:201) at com.orm.query.Select.first(Select.java:154) at nickrout.lenslauncher.model.AppPersistent.getAppVisibility(AppPersistent.java:129) at nickrout.lenslauncher.adapter.AppRecyclerAdapter$AppViewHolder.setAppElement(AppRecyclerAdapter.java:108) at nickrout.lenslauncher.adapter.AppRecyclerAdapter.onBindViewHolder(AppRecyclerAdapter.java:74) at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6308) at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6341) at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5287) at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5550) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5392) at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5388) at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2149) at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:556) at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1496) at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:593) at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:170) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3535) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3264) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3796) at android.view.View.layout(View.java:17938) at android.view.ViewGroup.layout(ViewGroup.java:5814) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:344) at android.widget.FrameLayout.onLayout(FrameLayout.java:281) at android.view.View.layout(View.java:17938) at android.view.ViewGroup.layout(ViewGroup.java:5814) at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1795) at android.view.View.layout(View.java:17938) at android.view.ViewGroup.layout(ViewGroup.java:5814) at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:131) at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42) at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1375) at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:870) at and

    opened by davidarchi 2
  • Another fix for the google calendar icon

    Another fix for the google calendar icon

    After you install the system update for 7.1.1 on your google pixel, you'll see that the calendar icon isn't showing anymore, AGAIN. The method ContextCompat.getDrawable(Context, int) was throwing a Resources.NotFoundException. This PR fixes the issue by using PackageManager.getApplicationIcon(String) instead of ContextCompat.getDrawable(Context, int)

    opened by premnirmal 2
  • Add Instructions and Docker for Building from Source

    Add Instructions and Docker for Building from Source

    Some people may want to just generate an APK with the latest changes instead of waiting for an app store release. This makes it easier for people to accomplish that. Plus, it adds a few instructions on how to get setup if people want to help contribute.

    opened by dfrankland 2
  • [enhancement] Allow launch by shortcut

    [enhancement] Allow launch by shortcut

    If a shortcut to the launcher view of lens-launcher was added to the system-wide shortcuts list, it could be used as the app drawer view for an arbitrary launcher. For example:

    arbitrary launcher settings -> drawer settings -> use custom drawer -> shortcut -> lens-launcher-shortcut

    opened by benplumley 2
  • Touch Selection Color + New App Tag

    Touch Selection Color + New App Tag

    Added two features :

    1. Change the color of touch selection - from settings activity.
    2. 'NEW' is displayed on apps that were installed upto an hour ago. Changed model.App, created a new field saving installDate. This really helps find apps when you freshly install from playstore. Also added switch to remove this tag in the settings activity. TODO: In the next update, track openCount of each app and remove 'NEW' tag only after it is opened, and it was say installed upto 24 hours ago.
    opened by crearo 2
  • Apps draw over system bar when you open a full screen app and then go back to your launcher

    Apps draw over system bar when you open a full screen app and then go back to your launcher

    To replicate - open a fullscreen app such as Yahoo weather, Snapchat, etc. Then go back to your launcher. You'll see that the apps draw over the system bar. You need to redraw the launcher (i.e. by touch), then the apps draw correctly.

    opened by premnirmal 1
  • On the google pixel, the calendar app doesn't display in the launcher or in the app's settings

    On the google pixel, the calendar app doesn't display in the launcher or in the app's settings

    This is because it uses a dynamic icon (the icon changes the bitmap every day to display the date on it), so there is no hardcoded bitmap for the app. In order to retrieve the bitmap, you must get the drawable then convert it to a bitmap.

    opened by premnirmal 1
  • Feature request: add the possibility to use lens launcher as assist app

    Feature request: add the possibility to use lens launcher as assist app

    I use kiss launcher as my default home screen (so I can have widgets and search bar) and lens launcher as app drawer (to access quickly to all my installed apps). I think that could be very handy to have the possibility to launch lens launcher as an assistant app so swiping from the bottom of the screen I can go to the default home screen and swiping from the bottom corner I can use immediately the lens launcher

    opened by darhma 0
  • Navigation Bar

    Navigation Bar

    After update s8+ to Pie home screen make some problem, navi bar is black (was transparent) and make some frame between navi bar and icons. Its any chance to update Lens? Thanks a lot. home zoom

    opened by Korneliush 0
  • [enhancement] Rename apps

    [enhancement] Rename apps

    I would like to see the possibility to rename apps in the settings.

    I use alphabetical sorting and I use a gallery app that's named Q******* which I nonetheless want to be sorted as "Gallery."

    opened by Embridioum 0
  • Option to re-enable click animation on single touch

    Option to re-enable click animation on single touch

    To me and a couple users on Google Play, it feels weird having no animation on a single click. In fact, after the update I switched back to my default launcher and assumed it was a regression. While, perhaps I'm the exception, it'd be nice to have an option to turn that back on.

    Thanks!

    opened by MatthewScholefield 1
Owner
Nick Rout
Developer Relations Engineer at Google 🇿🇦
Nick Rout
A boiler plate that can be re-used to start android apps

Agile Boiler Plate The main task at the innovation labs of Avast is to find new ideas to work on, prototype these ideas, and quickly implement them. A

Abed Almoradi 45 Sep 19, 2022
An application for runners and cyclists. Allows you to monitor your physical activity, weight and receive reminders about workouts.

An application for runners and cyclists. Allows you to monitor your physical activity, weight and receive reminders about workouts.

Just_Amalll 3 Feb 7, 2022
Android Library to help you with your runtime Permissions.

PermissionHelper Android Library to help you with your runtime Permissions. Demo Android M Watch it in action. Pre M Watch it in action. Nexus 6 (M) N

Kosh Sergani 1.2k Dec 14, 2022
Android library that manages your app's cached data with ease.

Teller Android library that makes your apps faster. Teller facilitates the downloading, saving, and reading of the cached data of your app. Keep your

Levi Bostian 14 Apr 2, 2022
The BitbucketWatcher is a helpful tool to keep up to date with updates on your repo.

The BitbucketWatcher is a helpful tool to keep up to date with updates on your repo. The Watcher tracks new PullRequests, status changes on code reviews, merged branches and forgotten branches.

null 4 Jan 10, 2022
Make your IDE play Wilhelm Scream effect when you are using unsafe !! operator in Kotlin

Make your IDE play Wilhelm Scream effect when you are using unsafe !! operator in Kotlin

Mikhail Levchenko 78 Nov 15, 2022
A Utility to Add all of your installed steam games to the Start Launcher for Windows

Steam Start Launcher The Steam Start launcher is a small tool that will scan your computer for isntalled steam games and create a shortcut for each ga

null 1 Dec 1, 2021
Throw your friends out!

ThrowIt-Mirai 丢人插件 简单高效的 “丢人” 插件 把你的群友丢出去吧 使用方法: 将插件置于plugin目录下, 并安装chat-command插件 使用插件需要权限 pers.moe.throwit-mirai:command.丢 perm permit m* pers.moe.t

Moe 25 Oct 24, 2022
Use your old Android device as an OctoPrint server.

Use your old Android device as an OctoPrint server.

Feelfree (Filip) 1k Dec 31, 2022
****. Use the native and support library variants instead - https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html. An android library that makes it easy to add custom fonts to edittexts and textviews

Add to your project Add this line to your dependencies in build.gradle compile 'in.workarounds.typography:typography:0.0.8' Using the views There are

Workarounds 43 Nov 6, 2021
SL4A brings scripting languages to Android by allowing you to edit and execute scripts and interactive interpreters directly on the Android device.

#Scripting Layer for Android (SL4A) SL4A brings scripting languages to Android by allowing you to edit and execute scripts and interactive interpreter

Damon Kohler 2.3k Dec 23, 2022
A curated list of standards, tests and benchmarks that can be used for testing and evaluating dev-tools

A curated list of standards, tests and benchmarks that can be used for testing and evaluating dev tools Contribution Add the description of the benchm

null 13 Dec 16, 2022
A gradle plugin for getting java lambda support in java 6, 7 and android

Gradle Retrolambda Plugin This plugin will automatically build your java or android project with retrolambda, giving you lambda goodness on java 6 or

Evan Tatarka 5.3k Jan 5, 2023
A Job Queue specifically written for Android to easily schedule jobs (tasks) that run in the background, improving UX and application stability.

Development in this repository is stopped. Future development continues on https://github.com/yigit/android-priority-jobqueue ========================

Path Mobile Inc Pte. Ltd. 2.4k Dec 9, 2022
An android library for displaying fps from the choreographer and percentage of time with two or more frames dropped

DEPRECATED TinyDancer is deprecated. No more development will be taking place. Check out the Google Android developer documentation for UI performance

Friendly Robot 1.9k Jan 3, 2023
📄The reliable, generic, fast and flexible logging framework for Android

logback-android v2.0.0 Overview logback-android brings the power of logback to Android. This library provides a highly configurable logging framework

Tony Trinh 1.1k Jan 8, 2023
It makes a preview from an url, grabbing all the information such as title, relevant texts and images. This a version for Android of my web link preview https://github.com/LeonardoCardoso/Link-Preview

LeoCardz Link Preview for Android It makes a preview from an url, grabbing all the information such as title, relevant texts and images. Visual Exampl

Leonardo Cardoso 420 Nov 19, 2022
A plug and play ;) android library for displaying a "rate this app" dialog

Easy Rating Dialog This lib provides a simple way to display an alert dialog for rating app. Default conditions to show: User opened the app more than

Fernando Martínez 111 Dec 30, 2022
AudioPlayerView is an Android view that loads audio from an url and have basic playback tools.

AudioPlayerView AudioPlayerView is an Android view that loads audio from an url and have basic playback tools. It makes use of the Android MediaPlayer

Hugo Matilla 86 Nov 29, 2022