├── .gitignore ├── LICENSE ├── LeanLauncher ├── build.gradle ├── proguard.cfg └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── android │ │ └── leanlauncher │ │ ├── Alarm.java │ │ ├── AllAppsList.java │ │ ├── AppFilter.java │ │ ├── AppInfo.java │ │ ├── AppWidgetResizeFrame.java │ │ ├── AppWidgetsRestoredReceiver.java │ │ ├── AppsCustomizeCellLayout.java │ │ ├── AppsCustomizePagedView.java │ │ ├── AppsCustomizeTabHost.java │ │ ├── BubbleTextView.java │ │ ├── ButtonDropTarget.java │ │ ├── CellLayout.java │ │ ├── CheckLongPressHelper.java │ │ ├── DeferredHandler.java │ │ ├── DeleteDropTarget.java │ │ ├── DeleteDropTargetBar.java │ │ ├── DeviceProfile.java │ │ ├── DragController.java │ │ ├── DragLayer.java │ │ ├── DragSource.java │ │ ├── DragView.java │ │ ├── DropTarget.java │ │ ├── DynamicGrid.java │ │ ├── FastBitmapDrawable.java │ │ ├── FastBitmapView.java │ │ ├── FirstFrameAnimatorHelper.java │ │ ├── FocusHelper.java │ │ ├── FocusIndicatorView.java │ │ ├── FocusOnlyTabWidget.java │ │ ├── HolographicOutlineHelper.java │ │ ├── IconCache.java │ │ ├── InfoDropTarget.java │ │ ├── Insettable.java │ │ ├── InsettableFrameLayout.java │ │ ├── InterruptibleInOutAnimator.java │ │ ├── ItemInfo.java │ │ ├── Launcher.java │ │ ├── LauncherAnimUtils.java │ │ ├── LauncherAnimatorUpdateListener.java │ │ ├── LauncherAppState.java │ │ ├── LauncherAppWidgetHost.java │ │ ├── LauncherAppWidgetHostView.java │ │ ├── LauncherAppWidgetInfo.java │ │ ├── LauncherApplication.java │ │ ├── LauncherFiles.java │ │ ├── LauncherModel.java │ │ ├── LauncherProvider.java │ │ ├── LauncherRootView.java │ │ ├── LauncherScroller.java │ │ ├── LauncherSettings.java │ │ ├── LauncherViewPropertyAnimator.java │ │ ├── LogDecelerateInterpolator.java │ │ ├── MainThreadExecutor.java │ │ ├── OnAlarmListener.java │ │ ├── PackageChangedReceiver.java │ │ ├── PageIndicator.java │ │ ├── PageIndicatorMarker.java │ │ ├── PagedView.java │ │ ├── PagedViewCellLayout.java │ │ ├── PagedViewCellLayoutChildren.java │ │ ├── PagedViewGridLayout.java │ │ ├── PagedViewWidget.java │ │ ├── PagedViewWidgetImageView.java │ │ ├── PagedViewWithDraggableItems.java │ │ ├── PendingAddItemInfo.java │ │ ├── PendingAppWidgetHostView.java │ │ ├── PreloadIconDrawable.java │ │ ├── SearchAppsActivity.java │ │ ├── SearchAppsArrayAdapter.java │ │ ├── SearchAppsWidgetProvider.java │ │ ├── SearchAutoCompleteTextView.java │ │ ├── SettingsActivity.java │ │ ├── ShortcutAndWidgetContainer.java │ │ ├── ShortcutInfo.java │ │ ├── SpringLoadedDragController.java │ │ ├── Utilities.java │ │ ├── WidgetPreviewLoader.java │ │ ├── Workspace.java │ │ └── compat │ │ ├── AppWidgetManagerCompat.java │ │ ├── AppWidgetManagerCompatV16.java │ │ ├── AppWidgetManagerCompatVL.java │ │ ├── LauncherActivityInfoCompat.java │ │ ├── LauncherActivityInfoCompatV16.java │ │ ├── LauncherActivityInfoCompatVL.java │ │ ├── LauncherAppsCompat.java │ │ ├── LauncherAppsCompatV16.java │ │ ├── LauncherAppsCompatVL.java │ │ ├── UserHandleCompat.java │ │ ├── UserManagerCompat.java │ │ ├── UserManagerCompatV16.java │ │ ├── UserManagerCompatV17.java │ │ └── UserManagerCompatVL.java │ └── res │ ├── anim │ ├── no_anim.xml │ └── task_open_enter.xml │ ├── drawable-hdpi │ ├── apps_customize_bg.png │ ├── bg_appwidget_error.9.png │ ├── ic_allapps.png │ ├── ic_allapps_pressed.png │ ├── ic_launcher_clear_active_holo.png │ ├── ic_launcher_clear_normal_holo.png │ ├── ic_launcher_info_active_holo.png │ ├── ic_launcher_info_normal_holo.png │ ├── ic_launcher_trashcan_active_holo.png │ ├── ic_launcher_trashcan_normal_holo.png │ ├── ic_pageindicator_current.png │ ├── ic_pageindicator_default.png │ ├── ic_setting.png │ ├── ic_setting_pressed.png │ ├── ic_wallpaper.png │ ├── ic_wallpaper_pressed.png │ ├── ic_widget.png │ ├── ic_widget_pressed.png │ ├── overscroll_glow_left.9.png │ ├── overscroll_glow_right.9.png │ ├── page_hover_left.9.png │ ├── page_hover_left_active.9.png │ ├── page_hover_right.9.png │ ├── page_hover_right_active.9.png │ ├── quantum_panel_dark.9.png │ ├── screenpanel.9.png │ ├── screenpanel_hover.9.png │ ├── virtual_preload.9.png │ ├── widget_resize_frame_holo.9.png │ ├── widget_resize_handle_bottom.png │ ├── widget_resize_handle_left.png │ ├── widget_resize_handle_right.png │ ├── widget_resize_handle_top.png │ ├── widget_tile.png │ └── workspace_bg.9.png │ ├── drawable-land-hdpi │ └── workspace_bg.9.png │ ├── drawable-land-mdpi │ └── workspace_bg.9.png │ ├── drawable-land-xhdpi │ └── workspace_bg.9.png │ ├── drawable-land-xxhdpi │ └── workspace_bg.9.png │ ├── drawable-mdpi │ ├── apps_customize_bg.png │ ├── bg_appwidget_error.9.png │ ├── ic_allapps.png │ ├── ic_allapps_pressed.png │ ├── ic_launcher_clear_active_holo.png │ ├── ic_launcher_clear_normal_holo.png │ ├── ic_launcher_info_active_holo.png │ ├── ic_launcher_info_normal_holo.png │ ├── ic_launcher_trashcan_active_holo.png │ ├── ic_launcher_trashcan_normal_holo.png │ ├── ic_pageindicator_current.png │ ├── ic_pageindicator_default.png │ ├── ic_setting.png │ ├── ic_setting_pressed.png │ ├── ic_wallpaper.png │ ├── ic_wallpaper_pressed.png │ ├── ic_widget.png │ ├── ic_widget_pressed.png │ ├── overscroll_glow_left.9.png │ ├── overscroll_glow_right.9.png │ ├── page_hover_left.9.png │ ├── page_hover_left_active.9.png │ ├── page_hover_right.9.png │ ├── page_hover_right_active.9.png │ ├── quantum_panel_dark.9.png │ ├── screenpanel.9.png │ ├── screenpanel_hover.9.png │ ├── virtual_preload.9.png │ ├── widget_resize_frame_holo.9.png │ ├── widget_resize_handle_bottom.png │ ├── widget_resize_handle_left.png │ ├── widget_resize_handle_right.png │ ├── widget_resize_handle_top.png │ ├── widget_tile.png │ └── workspace_bg.9.png │ ├── drawable-sw720dp-hdpi │ └── workspace_bg.9.png │ ├── drawable-sw720dp-mdpi │ └── workspace_bg.9.png │ ├── drawable-sw720dp-xhdpi │ └── workspace_bg.9.png │ ├── drawable-sw720dp-xxhdpi │ └── workspace_bg.9.png │ ├── drawable-xhdpi │ ├── apps_customize_bg.png │ ├── bg_appwidget_error.9.png │ ├── ic_allapps.png │ ├── ic_allapps_pressed.png │ ├── ic_launcher_clear_active_holo.png │ ├── ic_launcher_clear_normal_holo.png │ ├── ic_launcher_info_active_holo.png │ ├── ic_launcher_info_normal_holo.png │ ├── ic_launcher_trashcan_active_holo.png │ ├── ic_launcher_trashcan_normal_holo.png │ ├── ic_pageindicator_current.png │ ├── ic_pageindicator_default.png │ ├── ic_setting.png │ ├── ic_setting_pressed.png │ ├── ic_wallpaper.png │ ├── ic_wallpaper_pressed.png │ ├── ic_widget.png │ ├── ic_widget_pressed.png │ ├── overscroll_glow_left.9.png │ ├── overscroll_glow_right.9.png │ ├── page_hover_left.9.png │ ├── page_hover_left_active.9.png │ ├── page_hover_right.9.png │ ├── page_hover_right_active.9.png │ ├── quantum_panel_dark.9.png │ ├── screenpanel.9.png │ ├── screenpanel_hover.9.png │ ├── virtual_preload.9.png │ ├── widget_resize_frame_holo.9.png │ ├── widget_resize_handle_bottom.png │ ├── widget_resize_handle_left.png │ ├── widget_resize_handle_right.png │ ├── widget_resize_handle_top.png │ ├── widget_tile.png │ └── workspace_bg.9.png │ ├── drawable-xxhdpi │ ├── apps_customize_bg.png │ ├── ic_allapps.png │ ├── ic_allapps_pressed.png │ ├── ic_launcher_clear_active_holo.png │ ├── ic_launcher_clear_normal_holo.png │ ├── ic_launcher_info_active_holo.png │ ├── ic_launcher_info_normal_holo.png │ ├── ic_launcher_trashcan_active_holo.png │ ├── ic_launcher_trashcan_normal_holo.png │ ├── ic_pageindicator_current.png │ ├── ic_pageindicator_default.png │ ├── ic_setting.png │ ├── ic_setting_pressed.png │ ├── ic_wallpaper.png │ ├── ic_wallpaper_pressed.png │ ├── ic_widget.png │ ├── ic_widget_pressed.png │ ├── overscroll_glow_left.9.png │ ├── overscroll_glow_right.9.png │ ├── page_hover_left.9.png │ ├── page_hover_left_active.9.png │ ├── page_hover_right.9.png │ ├── page_hover_right_active.9.png │ ├── quantum_panel_dark.9.png │ ├── screenpanel.9.png │ ├── screenpanel_hover.9.png │ ├── virtual_preload.9.png │ ├── widget_resize_frame_holo.9.png │ ├── widget_resize_handle_bottom.png │ ├── widget_resize_handle_left.png │ ├── widget_resize_handle_right.png │ ├── widget_resize_handle_top.png │ ├── widget_tile.png │ └── workspace_bg.9.png │ ├── drawable │ ├── all_apps_button_icon.xml │ ├── focusable_view_bg.xml │ ├── info_target_selector.xml │ ├── remove_target_selector.xml │ ├── search_widget_border.xml │ ├── setting_button.xml │ ├── uninstall_target_selector.xml │ ├── wallpaper_button.xml │ └── widget_button.xml │ ├── interpolator │ ├── decelerate_quart.xml │ └── decelerate_quint.xml │ ├── layout-land │ └── launcher.xml │ ├── layout-port │ └── launcher.xml │ ├── layout-sw720dp │ └── launcher.xml │ ├── layout │ ├── all_apps_button.xml │ ├── application.xml │ ├── apps_customize_application.xml │ ├── apps_customize_pane.xml │ ├── apps_customize_widget.xml │ ├── appwidget_error.xml │ ├── appwidget_not_ready.xml │ ├── delete_drop_target_bar.xml │ ├── launcher.xml │ ├── overview_panel.xml │ ├── page_indicator.xml │ ├── page_indicator_marker.xml │ ├── search_apps.xml │ ├── search_apps_item.xml │ ├── search_apps_widget.xml │ └── workspace_screen.xml │ ├── mipmap-hdpi │ └── ic_launcher_home.png │ ├── mipmap-mdpi │ └── ic_launcher_home.png │ ├── mipmap-xhdpi │ └── ic_launcher_home.png │ ├── mipmap-xxhdpi │ └── ic_launcher_home.png │ ├── values-land │ ├── config.xml │ ├── dimens.xml │ └── styles.xml │ ├── values-port │ └── dimens.xml │ ├── values-sw340dp-port │ ├── config.xml │ └── styles.xml │ ├── values-sw340dp │ └── dimens.xml │ ├── values-sw600dp-land │ └── dimens.xml │ ├── values-sw600dp │ ├── config.xml │ └── dimens.xml │ ├── values-sw720dp-land │ └── dimens.xml │ ├── values-sw720dp-port │ └── dimens.xml │ ├── values-sw720dp │ ├── config.xml │ ├── dimens.xml │ └── styles.xml │ ├── values-v17 │ └── styles.xml │ ├── values │ ├── arrays.xml │ ├── attrs.xml │ ├── colors.xml │ ├── config.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml │ └── xml │ ├── preferences.xml │ └── search_apps_widget_provider.xml ├── README.md ├── build.gradle ├── gradlew ├── gradlew.bat ├── screenshots ├── appdrawer.png ├── busy.png ├── config.png ├── fullbusy.png ├── settings.png └── startup.png └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | db_files 2 | 3 | .DS_Store 4 | 5 | # built application files 6 | *.apk 7 | *.ap_ 8 | 9 | # files for the dex VM 10 | *.dex 11 | 12 | # Java class files 13 | *.class 14 | 15 | # generated files 16 | bin/ 17 | gen/ 18 | 19 | # Local configuration file (sdk path, etc) 20 | local.properties 21 | 22 | # Eclipse project files 23 | .classpath 24 | .project 25 | 26 | # Android Studio 27 | .idea/ 28 | .gradle 29 | gradle 30 | captures/ 31 | usage.txt 32 | mapping.txt 33 | /*/local.properties 34 | /*/out 35 | /*/*/build 36 | build 37 | /*/*/production 38 | *.iml 39 | *.iws 40 | *.ipr 41 | *~ 42 | *.swp 43 | release.keystore 44 | -------------------------------------------------------------------------------- /LeanLauncher/build.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015. Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | */ 17 | 18 | apply plugin: 'com.android.application' 19 | 20 | android { 21 | compileSdkVersion 28 22 | buildToolsVersion "28.0.2" 23 | 24 | defaultConfig { 25 | minSdkVersion 16 26 | targetSdkVersion 28 27 | versionCode System.getenv("BUILD_NUMBER") as Integer ?: 99999 // so you don't have to uninstall for dev builds 28 | versionName "1.0" + '.' + versionCode 29 | } 30 | 31 | lintOptions { 32 | checkReleaseBuilds false 33 | // Or, if you prefer, you can continue to check for errors in release builds, 34 | // but continue the build even when errors are found: 35 | abortOnError false 36 | } 37 | 38 | signingConfigs { 39 | release { 40 | storeFile file("release.keystore") 41 | keyAlias "ReleaseKey" 42 | ant.input(message: 'Enter keystore password:', addproperty: 'keystorePassword', defaultValue : '') 43 | storePassword ant.properties.keystorePassword 44 | ant.input(message: 'Enter key password:', addproperty: 'keyPassword', defaultValue : '') 45 | keyPassword ant.properties.keyPassword 46 | } 47 | } 48 | 49 | buildTypes { 50 | release { 51 | minifyEnabled true 52 | shrinkResources true 53 | debuggable false 54 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard.cfg' 55 | signingConfig signingConfigs.release 56 | zipAlignEnabled true 57 | } 58 | } 59 | } 60 | 61 | dependencies { 62 | compile 'com.android.support:support-v13:24.1.1' 63 | } 64 | 65 | -------------------------------------------------------------------------------- /LeanLauncher/proguard.cfg: -------------------------------------------------------------------------------- 1 | -keep class LeanLauncher.CellLayout { 2 | public float getBackgroundAlpha(); 3 | public void setBackgroundAlpha(float); 4 | } 5 | 6 | -keep class LeanLauncher.DragLayer$LayoutParams { 7 | public void setWidth(int); 8 | public int getWidth(); 9 | public void setHeight(int); 10 | public int getHeight(); 11 | public void setX(int); 12 | public int getX(); 13 | public void setY(int); 14 | public int getY(); 15 | } 16 | 17 | -keep class LeanLauncher.CellLayout$LayoutParams { 18 | public void setWidth(int); 19 | public int getWidth(); 20 | public void setHeight(int); 21 | public int getHeight(); 22 | public void setX(int); 23 | public int getX(); 24 | public void setY(int); 25 | public int getY(); 26 | } 27 | 28 | -keep class LeanLauncher.Workspace { 29 | public float getBackgroundAlpha(); 30 | public void setBackgroundAlpha(float); 31 | public float getChildrenOutlineAlpha(); 32 | public void setChildrenOutlineAlpha(float); 33 | } 34 | 35 | -keep class LeanLauncher.PreloadIconDrawable { 36 | public float getAnimationProgress(); 37 | public void setAnimationProgress(float); 38 | } 39 | 40 | -keep class LeanLauncher.FastBitmapDrawable { 41 | public int getBrightness(); 42 | public void setBrightness(int); 43 | } 44 | 45 | -optimizations !code/simplification/arithmetic 46 | 47 | -assumenosideeffects class android.util.Log { 48 | public static *** d(...); 49 | public static *** v(...); 50 | public static *** i(...); 51 | } 52 | 53 | -flattenpackagehierarchy 54 | -repackageclasses '' 55 | 56 | -printmapping mapping.txt 57 | -printusage usage.txt 58 | 59 | # Explicitly preserve all serialization members. The Serializable interface 60 | # is only a marker interface, so it wouldn't save them. 61 | # You can comment this out if your application doesn't use serialization. 62 | # If your code contains serializable classes that have to be backward 63 | # compatible, please refer to the manual. 64 | 65 | -keepclassmembers class * implements java.io.Serializable { 66 | static final long serialVersionUID; 67 | static final java.io.ObjectStreamField[] serialPersistentFields; 68 | private void writeObject(java.io.ObjectOutputStream); 69 | private void readObject(java.io.ObjectInputStream); 70 | java.lang.Object writeReplace(); 71 | java.lang.Object readResolve(); 72 | } 73 | 74 | -keep public class * extends android.app.Activity 75 | -keep public class * extends android.app.Application 76 | -keep public class * extends android.app.Service 77 | -keep public class * extends android.content.BroadcastReceiver 78 | -keep public class * extends android.content.ContentProvider 79 | -keep public class * extends android.preference.Preference 80 | -keep public class com.android.vending.billing.IInAppBillingService 81 | 82 | -keep public class * extends android.app.Fragment 83 | -keep public class * extends android.support.v4.app.Fragment 84 | 85 | -keep public class * extends android.view.View { 86 | public (android.content.Context); 87 | public (android.content.Context, android.util.AttributeSet); 88 | public (android.content.Context, android.util.AttributeSet, int); 89 | } 90 | 91 | -keepclasseswithmembers class * { 92 | public (android.content.Context, android.util.AttributeSet); 93 | } 94 | 95 | -keepclasseswithmembers class * { 96 | public (android.content.Context, android.util.AttributeSet, int); 97 | } 98 | 99 | -keepclassmembers class * extends android.content.Context { 100 | public void *(android.view.View); 101 | public void *(android.view.MenuItem); 102 | } 103 | 104 | # Missing annotations are harmless. 105 | -dontwarn sun.misc.Unsafe 106 | -dontwarn javax.annotation.** 107 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/Alarm.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | import android.os.Handler; 20 | 21 | public class Alarm implements Runnable{ 22 | // if we reach this time and the alarm hasn't been cancelled, call the listener 23 | private long mAlarmTriggerTime; 24 | 25 | // if we've scheduled a call to run() (ie called mHandler.postDelayed), this variable is true. 26 | // We use this to avoid having multiple pending callbacks 27 | private boolean mWaitingForCallback; 28 | 29 | private Handler mHandler; 30 | private OnAlarmListener mAlarmListener; 31 | private boolean mAlarmPending = false; 32 | 33 | public Alarm() { 34 | mHandler = new Handler(); 35 | } 36 | 37 | public void setOnAlarmListener(OnAlarmListener alarmListener) { 38 | mAlarmListener = alarmListener; 39 | } 40 | 41 | // Sets the alarm to go off in a certain number of milliseconds. If the alarm is already set, 42 | // it's overwritten and only the new alarm setting is used 43 | public void setAlarm(long millisecondsInFuture) { 44 | long currentTime = System.currentTimeMillis(); 45 | mAlarmPending = true; 46 | mAlarmTriggerTime = currentTime + millisecondsInFuture; 47 | if (!mWaitingForCallback) { 48 | mHandler.postDelayed(this, mAlarmTriggerTime - currentTime); 49 | mWaitingForCallback = true; 50 | } 51 | } 52 | 53 | public void cancelAlarm() { 54 | mAlarmTriggerTime = 0; 55 | mAlarmPending = false; 56 | } 57 | 58 | // this is called when our timer runs out 59 | public void run() { 60 | mWaitingForCallback = false; 61 | if (mAlarmTriggerTime != 0) { 62 | long currentTime = System.currentTimeMillis(); 63 | if (mAlarmTriggerTime > currentTime) { 64 | // We still need to wait some time to trigger spring loaded mode-- 65 | // post a new callback 66 | mHandler.postDelayed(this, Math.max(0, mAlarmTriggerTime - currentTime)); 67 | mWaitingForCallback = true; 68 | } else { 69 | mAlarmPending = false; 70 | if (mAlarmListener != null) { 71 | mAlarmListener.onAlarm(this); 72 | } 73 | } 74 | } 75 | } 76 | 77 | public boolean alarmPending() { 78 | return mAlarmPending; 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/AppFilter.java: -------------------------------------------------------------------------------- 1 | package com.android.leanlauncher; 2 | 3 | import android.content.ComponentName; 4 | import android.text.TextUtils; 5 | import android.util.Log; 6 | 7 | public abstract class AppFilter { 8 | 9 | private static final boolean DBG = false; 10 | private static final String TAG = "AppFilter"; 11 | 12 | public abstract boolean shouldShowApp(ComponentName app); 13 | 14 | public static AppFilter loadByName(String className) { 15 | if (TextUtils.isEmpty(className)) return null; 16 | if (DBG) Log.d(TAG, "Loading AppFilter: " + className); 17 | try { 18 | Class cls = Class.forName(className); 19 | return (AppFilter) cls.newInstance(); 20 | } catch (ClassNotFoundException e) { 21 | Log.e(TAG, "Bad AppFilter class", e); 22 | return null; 23 | } catch (InstantiationException e) { 24 | Log.e(TAG, "Bad AppFilter class", e); 25 | return null; 26 | } catch (IllegalAccessException e) { 27 | Log.e(TAG, "Bad AppFilter class", e); 28 | return null; 29 | } catch (ClassCastException e) { 30 | Log.e(TAG, "Bad AppFilter class", e); 31 | return null; 32 | } 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/AppsCustomizeCellLayout.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | import android.content.Context; 20 | import android.view.View; 21 | 22 | public class AppsCustomizeCellLayout extends CellLayout implements Page { 23 | 24 | final FocusIndicatorView mFocusHandlerView; 25 | 26 | public AppsCustomizeCellLayout(Context context) { 27 | super(context); 28 | 29 | mFocusHandlerView = new FocusIndicatorView(context); 30 | addView(mFocusHandlerView, 0); 31 | mFocusHandlerView.getLayoutParams().width = FocusIndicatorView.DEFAULT_LAYOUT_SIZE; 32 | mFocusHandlerView.getLayoutParams().height = FocusIndicatorView.DEFAULT_LAYOUT_SIZE; 33 | } 34 | 35 | @Override 36 | public void removeAllViewsOnPage() { 37 | removeAllViews(); 38 | setLayerType(LAYER_TYPE_NONE, null); 39 | } 40 | 41 | @Override 42 | public void removeViewOnPageAt(int index) { 43 | removeViewAt(index); 44 | } 45 | 46 | @Override 47 | public int getPageChildCount() { 48 | return getChildCount(); 49 | } 50 | 51 | @Override 52 | public View getChildOnPageAt(int i) { 53 | return getChildAt(i); 54 | } 55 | 56 | @Override 57 | public int indexOfChildOnPage(View v) { 58 | return indexOfChild(v); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/CheckLongPressHelper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | import android.view.View; 20 | 21 | public class CheckLongPressHelper { 22 | private View mView; 23 | private boolean mHasPerformedLongPress; 24 | private CheckForLongPress mPendingCheckForLongPress; 25 | 26 | class CheckForLongPress implements Runnable { 27 | public void run() { 28 | if ((mView.getParent() != null) && mView.hasWindowFocus() 29 | && !mHasPerformedLongPress) { 30 | if (mView.performLongClick()) { 31 | mView.setPressed(false); 32 | mHasPerformedLongPress = true; 33 | } 34 | } 35 | } 36 | } 37 | 38 | public CheckLongPressHelper(View v) { 39 | mView = v; 40 | } 41 | 42 | public void postCheckForLongPress() { 43 | mHasPerformedLongPress = false; 44 | 45 | if (mPendingCheckForLongPress == null) { 46 | mPendingCheckForLongPress = new CheckForLongPress(); 47 | } 48 | mView.postDelayed(mPendingCheckForLongPress, 49 | LauncherAppState.getInstance().getLongPressTimeout()); 50 | } 51 | 52 | public void cancelLongPress() { 53 | mHasPerformedLongPress = false; 54 | if (mPendingCheckForLongPress != null) { 55 | mView.removeCallbacks(mPendingCheckForLongPress); 56 | mPendingCheckForLongPress = null; 57 | } 58 | } 59 | 60 | public boolean hasPerformedLongPress() { 61 | return mHasPerformedLongPress; 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/DragSource.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | import android.view.View; 20 | 21 | import com.android.leanlauncher.DropTarget.DragObject; 22 | 23 | /** 24 | * Interface defining an object that can originate a drag. 25 | * 26 | */ 27 | public interface DragSource { 28 | /** 29 | * @return whether items dragged from this source supports 30 | */ 31 | boolean supportsFlingToDelete(); 32 | 33 | /** 34 | * @return whether items dragged from this source supports 'App Info' 35 | */ 36 | boolean supportsAppInfoDropTarget(); 37 | 38 | /** 39 | * @return whether items dragged from this source supports 'Delete' drop target (e.g. to remove 40 | * a shortcut. 41 | */ 42 | boolean supportsDeleteDropTarget(); 43 | 44 | /* 45 | * @return the scale of the icons over the workspace icon size 46 | */ 47 | float getIntrinsicIconScaleFactor(); 48 | 49 | /** 50 | * A callback specifically made back to the source after an item from this source has been flung 51 | * to be deleted on a DropTarget. In such a situation, this method will be called after 52 | * onDropCompleted, and more importantly, after the fling animation has completed. 53 | */ 54 | void onFlingToDeleteCompleted(); 55 | 56 | /** 57 | * A callback made back to the source after an item from this source has been dropped on a 58 | * DropTarget. 59 | */ 60 | void onDropCompleted(View target, DragObject d, boolean isFlingToDelete, boolean success); 61 | } 62 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/FastBitmapView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | import android.content.Context; 20 | import android.graphics.Bitmap; 21 | import android.graphics.Canvas; 22 | import android.graphics.Paint; 23 | import android.view.View; 24 | 25 | public class FastBitmapView extends View { 26 | 27 | private final Paint mPaint = new Paint(Paint.FILTER_BITMAP_FLAG); 28 | private Bitmap mBitmap; 29 | 30 | public FastBitmapView(Context context) { 31 | super(context); 32 | } 33 | 34 | /** 35 | * Applies the new bitmap. 36 | * @return true if the view was invalidated. 37 | */ 38 | public boolean setBitmap(Bitmap b) { 39 | if (b != mBitmap){ 40 | if (mBitmap != null) { 41 | invalidate(0, 0, mBitmap.getWidth(), mBitmap.getHeight()); 42 | } 43 | mBitmap = b; 44 | if (mBitmap != null) { 45 | invalidate(0, 0, mBitmap.getWidth(), mBitmap.getHeight()); 46 | } 47 | return true; 48 | } 49 | return false; 50 | } 51 | 52 | @Override 53 | protected void onDraw(Canvas canvas) { 54 | if (mBitmap != null) { 55 | canvas.drawBitmap(mBitmap, 0, 0, mPaint); 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/FocusOnlyTabWidget.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | import android.content.Context; 20 | import android.util.AttributeSet; 21 | import android.view.View; 22 | import android.widget.TabWidget; 23 | 24 | public class FocusOnlyTabWidget extends TabWidget { 25 | public FocusOnlyTabWidget(Context context) { 26 | super(context); 27 | } 28 | 29 | public FocusOnlyTabWidget(Context context, AttributeSet attrs) { 30 | super(context, attrs); 31 | } 32 | 33 | public FocusOnlyTabWidget(Context context, AttributeSet attrs, int defStyle) { 34 | super(context, attrs, defStyle); 35 | } 36 | 37 | public View getSelectedTab() { 38 | final int count = getTabCount(); 39 | for (int i = 0; i < count; ++i) { 40 | View v = getChildTabViewAt(i); 41 | if (v.isSelected()) { 42 | return v; 43 | } 44 | } 45 | return null; 46 | } 47 | 48 | public int getChildTabIndex(View v) { 49 | final int tabCount = getTabCount(); 50 | for (int i = 0; i < tabCount; ++i) { 51 | if (getChildTabViewAt(i) == v) { 52 | return i; 53 | } 54 | } 55 | return -1; 56 | } 57 | 58 | public void setCurrentTabToFocusedTab() { 59 | View tab = null; 60 | int index = -1; 61 | final int count = getTabCount(); 62 | for (int i = 0; i < count; ++i) { 63 | View v = getChildTabViewAt(i); 64 | if (v.hasFocus()) { 65 | tab = v; 66 | index = i; 67 | break; 68 | } 69 | } 70 | if (index > -1) { 71 | super.setCurrentTab(index); 72 | super.onFocusChange(tab, true); 73 | } 74 | } 75 | public void superOnFocusChange(View v, boolean hasFocus) { 76 | super.onFocusChange(v, hasFocus); 77 | } 78 | 79 | @Override 80 | public void onFocusChange(android.view.View v, boolean hasFocus) { 81 | if (v == this && hasFocus && getTabCount() > 0) { 82 | getSelectedTab().requestFocus(); 83 | return; 84 | } 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/Insettable.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | import android.graphics.Rect; 20 | 21 | public interface Insettable { 22 | 23 | void setInsets(Rect insets); 24 | } -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/LauncherAnimatorUpdateListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | import android.animation.ValueAnimator; 20 | import android.animation.ValueAnimator.AnimatorUpdateListener; 21 | 22 | abstract class LauncherAnimatorUpdateListener implements AnimatorUpdateListener { 23 | public void onAnimationUpdate(ValueAnimator animation) { 24 | final float b = (Float) animation.getAnimatedValue(); 25 | final float a = 1f - b; 26 | onAnimationUpdate(a, b); 27 | } 28 | 29 | abstract void onAnimationUpdate(float a, float b); 30 | } -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/LauncherAppWidgetHost.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | import android.appwidget.AppWidgetHost; 20 | import android.appwidget.AppWidgetHostView; 21 | import android.appwidget.AppWidgetProviderInfo; 22 | import android.content.Context; 23 | import android.os.TransactionTooLargeException; 24 | 25 | import java.util.ArrayList; 26 | 27 | /** 28 | * Specific {@link AppWidgetHost} that creates our {@link LauncherAppWidgetHostView} 29 | * which correctly captures all long-press events. This ensures that users can 30 | * always pick up and move widgets. 31 | */ 32 | public class LauncherAppWidgetHost extends AppWidgetHost { 33 | 34 | private final ArrayList mProviderChangeListeners = new ArrayList(); 35 | 36 | public LauncherAppWidgetHost(Launcher launcher, int hostId) { 37 | super(launcher, hostId); 38 | } 39 | 40 | @Override 41 | protected AppWidgetHostView onCreateView(Context context, int appWidgetId, 42 | AppWidgetProviderInfo appWidget) { 43 | return new LauncherAppWidgetHostView(context); 44 | } 45 | 46 | @Override 47 | public void startListening() { 48 | try { 49 | super.startListening(); 50 | } catch (Exception e) { 51 | if (e.getCause() instanceof TransactionTooLargeException) { 52 | // We're willing to let this slide. The exception is being caused by the list of 53 | // RemoteViews which is being passed back. The startListening relationship will 54 | // have been established by this point, and we will end up populating the 55 | // widgets upon bind anyway. See issue 14255011 for more context. 56 | } else { 57 | throw new RuntimeException(e); 58 | } 59 | } 60 | } 61 | 62 | @Override 63 | public void stopListening() { 64 | super.stopListening(); 65 | clearViews(); 66 | } 67 | 68 | public void addProviderChangeListener(Runnable callback) { 69 | mProviderChangeListeners.add(callback); 70 | } 71 | 72 | public void removeProviderChangeListener(Runnable callback) { 73 | mProviderChangeListeners.remove(callback); 74 | } 75 | 76 | protected void onProvidersChanged() { 77 | LauncherAppState.getInstance().getModel().bindPackagesAgain(); 78 | 79 | for (Runnable callback : mProviderChangeListeners) { 80 | callback.run(); 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/LauncherApplication.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | import android.app.Application; 20 | 21 | public class LauncherApplication extends Application { 22 | @Override 23 | public void onCreate() { 24 | super.onCreate(); 25 | LauncherAppState.setApplicationContext(this); 26 | LauncherAppState.getInstance(); 27 | } 28 | 29 | @Override 30 | public void onTerminate() { 31 | super.onTerminate(); 32 | LauncherAppState.getInstance().onTerminate(); 33 | } 34 | } -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/LauncherFiles.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015. Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | */ 17 | 18 | package com.android.leanlauncher; 19 | 20 | /** 21 | * Central list of files the Launcher writes to the application data directory. 22 | * 23 | * To add a new Launcher file, create a String constant referring to the filename, and add it to 24 | * ALL_FILES, as shown below. 25 | */ 26 | public class LauncherFiles { 27 | public static final String LAUNCHER_DB = "launcher.db"; 28 | public static final String LAUNCHER_PREFERENCES = "launcher.preferences"; 29 | public static final String SHARED_PREFERENCES_KEY = "com.android.leanlauncher.prefs"; 30 | public static final String WIDGET_PREVIEWS_DB = "widgetpreviews.db"; 31 | } 32 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/LauncherRootView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015. Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | */ 17 | 18 | package com.android.leanlauncher; 19 | 20 | import android.content.Context; 21 | import android.graphics.Rect; 22 | import android.util.AttributeSet; 23 | 24 | public class LauncherRootView extends InsettableFrameLayout { 25 | public LauncherRootView(Context context, AttributeSet attrs) { 26 | super(context, attrs); 27 | } 28 | 29 | @Override 30 | protected boolean fitSystemWindows(Rect insets) { 31 | setInsets(insets); 32 | return true; // I'll take it from here 33 | } 34 | } -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/LogDecelerateInterpolator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015. Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | */ 17 | 18 | package com.android.leanlauncher; 19 | 20 | import android.animation.TimeInterpolator; 21 | 22 | public class LogDecelerateInterpolator implements TimeInterpolator { 23 | 24 | int mBase; 25 | int mDrift; 26 | final float mLogScale; 27 | 28 | public LogDecelerateInterpolator(int base, int drift) { 29 | mBase = base; 30 | mDrift = drift; 31 | 32 | mLogScale = 1f / computeLog(1, mBase, mDrift); 33 | } 34 | 35 | static float computeLog(float t, int base, int drift) { 36 | return (float) -Math.pow(base, -t) + 1 + (drift * t); 37 | } 38 | 39 | @Override 40 | public float getInterpolation(float t) { 41 | return computeLog(t, mBase, mDrift) * mLogScale; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/MainThreadExecutor.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | import android.os.Handler; 20 | import android.os.Looper; 21 | 22 | import java.util.List; 23 | import java.util.concurrent.AbstractExecutorService; 24 | import java.util.concurrent.TimeUnit; 25 | 26 | /** 27 | * An executor service that executes its tasks on the main thread. 28 | * 29 | * Shutting down this executor is not supported. 30 | */ 31 | public class MainThreadExecutor extends AbstractExecutorService { 32 | 33 | private Handler mHandler = new Handler(Looper.getMainLooper()); 34 | 35 | @Override 36 | public void execute(Runnable runnable) { 37 | if (Looper.getMainLooper() == Looper.myLooper()) { 38 | runnable.run(); 39 | } else { 40 | mHandler.post(runnable); 41 | } 42 | } 43 | 44 | /** 45 | * Not supported and throws an exception when used. 46 | */ 47 | @Override 48 | @Deprecated 49 | public void shutdown() { 50 | throw new UnsupportedOperationException(); 51 | } 52 | 53 | /** 54 | * Not supported and throws an exception when used. 55 | */ 56 | @Override 57 | @Deprecated 58 | public List shutdownNow() { 59 | throw new UnsupportedOperationException(); 60 | } 61 | 62 | @Override 63 | public boolean isShutdown() { 64 | return false; 65 | } 66 | 67 | @Override 68 | public boolean isTerminated() { 69 | return false; 70 | } 71 | 72 | /** 73 | * Not supported and throws an exception when used. 74 | */ 75 | @Override 76 | @Deprecated 77 | public boolean awaitTermination(long l, TimeUnit timeUnit) throws InterruptedException { 78 | throw new UnsupportedOperationException(); 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/OnAlarmListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015. Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | */ 17 | 18 | package com.android.leanlauncher; 19 | 20 | public interface OnAlarmListener { 21 | void onAlarm(Alarm alarm); 22 | } 23 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/PackageChangedReceiver.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015. Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | */ 17 | 18 | package com.android.leanlauncher; 19 | 20 | import android.content.BroadcastReceiver; 21 | import android.content.Context; 22 | import android.content.Intent; 23 | 24 | public class PackageChangedReceiver extends BroadcastReceiver { 25 | @Override 26 | public void onReceive(final Context context, Intent intent) { 27 | final String packageName = intent.getData().getSchemeSpecificPart(); 28 | 29 | if (packageName == null || packageName.length() == 0) { 30 | // they sent us a bad intent 31 | return; 32 | } 33 | // in rare cases the receiver races with the application to set up LauncherAppState 34 | LauncherAppState.setApplicationContext(context.getApplicationContext()); 35 | LauncherAppState app = LauncherAppState.getInstance(); 36 | WidgetPreviewLoader.removePackageFromDb(app.getWidgetPreviewCacheDb(), packageName); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/PageIndicatorMarker.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | import android.content.Context; 20 | import android.content.res.Resources; 21 | import android.util.AttributeSet; 22 | import android.widget.FrameLayout; 23 | import android.widget.ImageView; 24 | 25 | public class PageIndicatorMarker extends FrameLayout { 26 | @SuppressWarnings("unused") 27 | private static final String TAG = "PageIndicator"; 28 | 29 | private static final int MARKER_FADE_DURATION = 175; 30 | 31 | private ImageView mActiveMarker; 32 | private ImageView mInactiveMarker; 33 | private boolean mIsActive = false; 34 | 35 | public PageIndicatorMarker(Context context) { 36 | this(context, null); 37 | } 38 | 39 | public PageIndicatorMarker(Context context, AttributeSet attrs) { 40 | this(context, attrs, 0); 41 | } 42 | 43 | public PageIndicatorMarker(Context context, AttributeSet attrs, int defStyle) { 44 | super(context, attrs, defStyle); 45 | } 46 | 47 | protected void onFinishInflate() { 48 | mActiveMarker = (ImageView) findViewById(R.id.active); 49 | mInactiveMarker = (ImageView) findViewById(R.id.inactive); 50 | } 51 | 52 | void setMarkerDrawables(int activeResId, int inactiveResId) { 53 | Resources r = getResources(); 54 | mActiveMarker.setImageDrawable(r.getDrawable(activeResId)); 55 | mInactiveMarker.setImageDrawable(r.getDrawable(inactiveResId)); 56 | } 57 | 58 | void activate(boolean immediate) { 59 | if (immediate) { 60 | mActiveMarker.animate().cancel(); 61 | mActiveMarker.setAlpha(1f); 62 | mActiveMarker.setScaleX(1f); 63 | mActiveMarker.setScaleY(1f); 64 | mInactiveMarker.animate().cancel(); 65 | mInactiveMarker.setAlpha(0f); 66 | } else { 67 | mActiveMarker.animate() 68 | .alpha(1f) 69 | .scaleX(1f) 70 | .scaleY(1f) 71 | .setDuration(MARKER_FADE_DURATION).start(); 72 | mInactiveMarker.animate() 73 | .alpha(0f) 74 | .setDuration(MARKER_FADE_DURATION).start(); 75 | } 76 | mIsActive = true; 77 | } 78 | 79 | void inactivate(boolean immediate) { 80 | if (immediate) { 81 | mInactiveMarker.animate().cancel(); 82 | mInactiveMarker.setAlpha(1f); 83 | mActiveMarker.animate().cancel(); 84 | mActiveMarker.setAlpha(0f); 85 | mActiveMarker.setScaleX(0.5f); 86 | mActiveMarker.setScaleY(0.5f); 87 | } else { 88 | mInactiveMarker.animate().alpha(1f) 89 | .setDuration(MARKER_FADE_DURATION).start(); 90 | mActiveMarker.animate() 91 | .alpha(0f) 92 | .scaleX(0.5f) 93 | .scaleY(0.5f) 94 | .setDuration(MARKER_FADE_DURATION).start(); 95 | } 96 | mIsActive = false; 97 | } 98 | 99 | boolean isActive() { 100 | return mIsActive; 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/PagedViewWidgetImageView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | import android.content.Context; 20 | import android.graphics.Canvas; 21 | import android.util.AttributeSet; 22 | import android.widget.ImageView; 23 | 24 | public class PagedViewWidgetImageView extends ImageView { 25 | public boolean mAllowRequestLayout = true; 26 | 27 | public PagedViewWidgetImageView(Context context, AttributeSet attrs) { 28 | super(context, attrs); 29 | } 30 | 31 | public void requestLayout() { 32 | if (mAllowRequestLayout) { 33 | super.requestLayout(); 34 | } 35 | } 36 | 37 | @Override 38 | protected void onDraw(Canvas canvas) { 39 | canvas.save(); 40 | canvas.clipRect(getScrollX() + getPaddingLeft(), 41 | getScrollY() + getPaddingTop(), 42 | getScrollX() + getRight() - getLeft() - getPaddingRight(), 43 | getScrollY() + getBottom() - getTop() - getPaddingBottom()); 44 | 45 | super.onDraw(canvas); 46 | canvas.restore(); 47 | 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/PendingAddItemInfo.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | import android.appwidget.AppWidgetHostView; 20 | import android.appwidget.AppWidgetProviderInfo; 21 | import android.content.ComponentName; 22 | import android.content.pm.ActivityInfo; 23 | import android.os.Bundle; 24 | import android.os.Parcelable; 25 | 26 | /** 27 | * We pass this object with a drag from the customization tray 28 | */ 29 | class PendingAddItemInfo extends ItemInfo { 30 | /** 31 | * The component that will be created. 32 | */ 33 | ComponentName componentName; 34 | } 35 | 36 | class PendingAddShortcutInfo extends PendingAddItemInfo { 37 | 38 | ActivityInfo shortcutActivityInfo; 39 | 40 | public PendingAddShortcutInfo(ActivityInfo activityInfo) { 41 | shortcutActivityInfo = activityInfo; 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | return "Shortcut: " + shortcutActivityInfo.packageName; 47 | } 48 | } 49 | 50 | class PendingAddWidgetInfo extends PendingAddItemInfo { 51 | int minWidth; 52 | int minHeight; 53 | int minResizeWidth; 54 | int minResizeHeight; 55 | int previewImage; 56 | int icon; 57 | AppWidgetProviderInfo info; 58 | AppWidgetHostView boundWidget; 59 | Bundle bindOptions = null; 60 | 61 | // Any configuration data that we want to pass to a configuration activity when 62 | // starting up a widget 63 | String mimeType; 64 | Parcelable configurationData; 65 | 66 | public PendingAddWidgetInfo(AppWidgetProviderInfo i, String dataMimeType, Parcelable data) { 67 | itemType = LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET; 68 | this.info = i; 69 | componentName = i.provider; 70 | minWidth = i.minWidth; 71 | minHeight = i.minHeight; 72 | minResizeWidth = i.minResizeWidth; 73 | minResizeHeight = i.minResizeHeight; 74 | previewImage = i.previewImage; 75 | icon = i.icon; 76 | if (dataMimeType != null && data != null) { 77 | mimeType = dataMimeType; 78 | configurationData = data; 79 | } 80 | } 81 | 82 | // Copy constructor 83 | public PendingAddWidgetInfo(PendingAddWidgetInfo copy) { 84 | minWidth = copy.minWidth; 85 | minHeight = copy.minHeight; 86 | minResizeWidth = copy.minResizeWidth; 87 | minResizeHeight = copy.minResizeHeight; 88 | previewImage = copy.previewImage; 89 | icon = copy.icon; 90 | info = copy.info; 91 | boundWidget = copy.boundWidget; 92 | mimeType = copy.mimeType; 93 | configurationData = copy.configurationData; 94 | componentName = copy.componentName; 95 | itemType = copy.itemType; 96 | spanX = copy.spanX; 97 | spanY = copy.spanY; 98 | minSpanX = copy.minSpanX; 99 | minSpanY = copy.minSpanY; 100 | bindOptions = copy.bindOptions == null ? null : (Bundle) copy.bindOptions.clone(); 101 | } 102 | 103 | @Override 104 | public String toString() { 105 | return "Widget: " + componentName.toShortString(); 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/SearchAppsActivity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015. Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | */ 17 | 18 | package com.android.leanlauncher; 19 | 20 | import android.app.Activity; 21 | import android.os.Bundle; 22 | 23 | import com.android.leanlauncher.compat.LauncherActivityInfoCompat; 24 | import com.android.leanlauncher.compat.LauncherAppsCompat; 25 | import com.android.leanlauncher.compat.UserHandleCompat; 26 | 27 | import java.util.ArrayList; 28 | import java.util.List; 29 | 30 | /** 31 | * Created by krajeswa on 11/15/15. 32 | */ 33 | public class SearchAppsActivity extends Activity { 34 | @Override 35 | protected void onCreate(Bundle savedInstanceState) { 36 | super.onCreate(savedInstanceState); 37 | 38 | setContentView(R.layout.search_apps); 39 | 40 | SearchAppsArrayAdapter adapter = new SearchAppsArrayAdapter(this, 41 | LauncherAppState.getInstance().getModel().getAllApps()); 42 | 43 | SearchAutoCompleteTextView searchBar = (SearchAutoCompleteTextView) findViewById(R.id.et_search_apps); 44 | searchBar.setSearchActivity(this); 45 | searchBar.setAdapter(adapter); 46 | } 47 | 48 | @Override 49 | protected void onResume() { 50 | super.onResume(); 51 | 52 | Utilities.showStatusbar(getWindow(), this); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/SearchAppsWidgetProvider.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015. Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | */ 17 | 18 | package com.android.leanlauncher; 19 | 20 | import android.app.PendingIntent; 21 | import android.appwidget.AppWidgetManager; 22 | import android.appwidget.AppWidgetProvider; 23 | import android.content.Context; 24 | import android.content.Intent; 25 | import android.widget.RemoteViews; 26 | 27 | /** 28 | * Created by krajeswa on 11/15/15. 29 | */ 30 | public class SearchAppsWidgetProvider extends AppWidgetProvider { 31 | @Override 32 | public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 33 | for (int appWidgetId : appWidgetIds) { 34 | Intent intent = new Intent(context, SearchAppsActivity.class); 35 | intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 36 | PendingIntent searchIntent = PendingIntent.getActivity(context, 0, intent, 0); 37 | 38 | RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.search_apps_widget); 39 | views.setOnClickPendingIntent(R.id.stub_search_apps, searchIntent); 40 | 41 | appWidgetManager.updateAppWidget(appWidgetId, views); 42 | } 43 | 44 | super.onUpdate(context, appWidgetManager, appWidgetIds); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/SearchAutoCompleteTextView.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015. Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | */ 17 | 18 | package com.android.leanlauncher; 19 | 20 | import android.app.Activity; 21 | import android.content.Context; 22 | import android.util.AttributeSet; 23 | import android.view.KeyEvent; 24 | import android.view.inputmethod.InputMethodManager; 25 | import android.widget.AutoCompleteTextView; 26 | 27 | /** 28 | * Copyright (C) 2015 krajeswa 29 | */ 30 | public class SearchAutoCompleteTextView extends AutoCompleteTextView { 31 | private Activity searchActivity; 32 | 33 | public SearchAutoCompleteTextView(Context context, AttributeSet attrs) { 34 | super(context, attrs); 35 | } 36 | 37 | public void setSearchActivity(Activity searchActivity) { 38 | this.searchActivity = searchActivity; 39 | } 40 | 41 | @Override 42 | public boolean onKeyPreIme(int keyCode, KeyEvent event) { 43 | if (keyCode == KeyEvent.KEYCODE_BACK) { 44 | // User has pressed Back key. So hide the keyboard 45 | InputMethodManager mgr = (InputMethodManager) 46 | getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 47 | mgr.hideSoftInputFromWindow(this.getWindowToken(), 0); 48 | 49 | searchActivity.onBackPressed(); 50 | } 51 | return false; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/SpringLoadedDragController.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher; 18 | 19 | public class SpringLoadedDragController implements OnAlarmListener { 20 | // how long the user must hover over a mini-screen before it unshrinks 21 | final long ENTER_SPRING_LOAD_HOVER_TIME = 500; 22 | final long ENTER_SPRING_LOAD_CANCEL_HOVER_TIME = 950; 23 | final long EXIT_SPRING_LOAD_HOVER_TIME = 200; 24 | 25 | Alarm mAlarm; 26 | 27 | // the screen the user is currently hovering over, if any 28 | private CellLayout mScreen; 29 | private Launcher mLauncher; 30 | 31 | public SpringLoadedDragController(Launcher launcher) { 32 | mLauncher = launcher; 33 | mAlarm = new Alarm(); 34 | mAlarm.setOnAlarmListener(this); 35 | } 36 | 37 | public void cancel() { 38 | mAlarm.cancelAlarm(); 39 | } 40 | 41 | // Set a new alarm to expire for the screen that we are hovering over now 42 | public void setAlarm(CellLayout cl) { 43 | mAlarm.cancelAlarm(); 44 | mAlarm.setAlarm((cl == null) ? ENTER_SPRING_LOAD_CANCEL_HOVER_TIME : 45 | ENTER_SPRING_LOAD_HOVER_TIME); 46 | mScreen = cl; 47 | } 48 | 49 | // this is called when our timer runs out 50 | public void onAlarm(Alarm alarm) { 51 | if (mScreen != null) { 52 | // Snap to the screen that we are hovering over now 53 | // Workspace w = mLauncher.getWorkspace(); 54 | // int page = w.indexOfChild(mScreen); 55 | // if (page != w.getCurrentPage()) { 56 | // w.snapToPage(page); 57 | // } 58 | } else { 59 | mLauncher.getDragController().cancelDrag(); 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/compat/AppWidgetManagerCompat.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher.compat; 18 | 19 | import android.app.Activity; 20 | import android.appwidget.AppWidgetHost; 21 | import android.appwidget.AppWidgetManager; 22 | import android.appwidget.AppWidgetProviderInfo; 23 | import android.content.Context; 24 | import android.graphics.Bitmap; 25 | import android.graphics.drawable.Drawable; 26 | import android.os.Bundle; 27 | 28 | import com.android.leanlauncher.IconCache; 29 | import com.android.leanlauncher.Utilities; 30 | 31 | import java.util.List; 32 | 33 | public abstract class AppWidgetManagerCompat { 34 | 35 | private static final Object sInstanceLock = new Object(); 36 | private static AppWidgetManagerCompat sInstance; 37 | 38 | 39 | public static AppWidgetManagerCompat getInstance(Context context) { 40 | synchronized (sInstanceLock) { 41 | if (sInstance == null) { 42 | if (Utilities.isLmpOrAbove()) { 43 | sInstance = new AppWidgetManagerCompatVL(context.getApplicationContext()); 44 | } else { 45 | sInstance = new AppWidgetManagerCompatV16(context.getApplicationContext()); 46 | } 47 | } 48 | return sInstance; 49 | } 50 | } 51 | 52 | final AppWidgetManager mAppWidgetManager; 53 | final Context mContext; 54 | 55 | AppWidgetManagerCompat(Context context) { 56 | mContext = context; 57 | mAppWidgetManager = AppWidgetManager.getInstance(context); 58 | } 59 | 60 | public AppWidgetProviderInfo getAppWidgetInfo(int appWidgetId) { 61 | return mAppWidgetManager.getAppWidgetInfo(appWidgetId); 62 | } 63 | 64 | public abstract List getAllProviders(); 65 | 66 | public abstract String loadLabel(AppWidgetProviderInfo info); 67 | 68 | public abstract boolean bindAppWidgetIdIfAllowed( 69 | int appWidgetId, AppWidgetProviderInfo info, Bundle options); 70 | 71 | public abstract UserHandleCompat getUser(AppWidgetProviderInfo info); 72 | 73 | public abstract void startConfigActivity(AppWidgetProviderInfo info, int widgetId, 74 | Activity activity, AppWidgetHost host, int requestCode); 75 | 76 | public abstract Drawable loadPreview(AppWidgetProviderInfo info); 77 | } 78 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/compat/AppWidgetManagerCompatV16.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher.compat; 18 | 19 | import android.app.Activity; 20 | import android.appwidget.AppWidgetHost; 21 | import android.appwidget.AppWidgetManager; 22 | import android.appwidget.AppWidgetProviderInfo; 23 | import android.content.Context; 24 | import android.content.Intent; 25 | import android.graphics.Bitmap; 26 | import android.graphics.drawable.Drawable; 27 | import android.os.Build; 28 | import android.os.Bundle; 29 | 30 | import com.android.leanlauncher.IconCache; 31 | import com.android.leanlauncher.Utilities; 32 | 33 | import java.util.List; 34 | 35 | class AppWidgetManagerCompatV16 extends AppWidgetManagerCompat { 36 | 37 | AppWidgetManagerCompatV16(Context context) { 38 | super(context); 39 | } 40 | 41 | @Override 42 | public List getAllProviders() { 43 | return mAppWidgetManager.getInstalledProviders(); 44 | } 45 | 46 | @Override 47 | public String loadLabel(AppWidgetProviderInfo info) { 48 | return info.label.trim(); 49 | } 50 | 51 | @Override 52 | public boolean bindAppWidgetIdIfAllowed(int appWidgetId, AppWidgetProviderInfo info, 53 | Bundle options) { 54 | if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { 55 | return mAppWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId, info.provider); 56 | } else { 57 | return mAppWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId, info.provider, options); 58 | } 59 | } 60 | 61 | @Override 62 | public UserHandleCompat getUser(AppWidgetProviderInfo info) { 63 | return UserHandleCompat.myUserHandle(); 64 | } 65 | 66 | @Override 67 | public void startConfigActivity(AppWidgetProviderInfo info, int widgetId, Activity activity, 68 | AppWidgetHost host, int requestCode) { 69 | Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE); 70 | intent.setComponent(info.configure); 71 | intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId); 72 | Utilities.startActivityForResultSafely(activity, intent, requestCode); 73 | } 74 | 75 | @Override 76 | public Drawable loadPreview(AppWidgetProviderInfo info) { 77 | return mContext.getPackageManager().getDrawable( 78 | info.provider.getPackageName(), info.previewImage, null); 79 | } 80 | 81 | } 82 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/compat/AppWidgetManagerCompatVL.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher.compat; 18 | 19 | import android.annotation.TargetApi; 20 | import android.app.Activity; 21 | import android.appwidget.AppWidgetHost; 22 | import android.appwidget.AppWidgetProviderInfo; 23 | import android.content.ActivityNotFoundException; 24 | import android.content.Context; 25 | import android.content.pm.PackageManager; 26 | import android.content.res.Resources; 27 | import android.graphics.Bitmap; 28 | import android.graphics.Canvas; 29 | import android.graphics.Color; 30 | import android.graphics.Rect; 31 | import android.graphics.drawable.BitmapDrawable; 32 | import android.graphics.drawable.Drawable; 33 | import android.os.Build; 34 | import android.os.Bundle; 35 | import android.os.UserHandle; 36 | import android.os.UserManager; 37 | import android.view.View; 38 | import android.widget.Toast; 39 | 40 | import com.android.leanlauncher.IconCache; 41 | import com.android.leanlauncher.R; 42 | 43 | import java.util.ArrayList; 44 | import java.util.List; 45 | 46 | @TargetApi(Build.VERSION_CODES.LOLLIPOP) 47 | class AppWidgetManagerCompatVL extends AppWidgetManagerCompat { 48 | 49 | private final UserManager mUserManager; 50 | private final PackageManager mPm; 51 | 52 | AppWidgetManagerCompatVL(Context context) { 53 | super(context); 54 | mPm = context.getPackageManager(); 55 | mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); 56 | } 57 | 58 | @Override 59 | public List getAllProviders() { 60 | ArrayList providers = new ArrayList(); 61 | for (UserHandle user : mUserManager.getUserProfiles()) { 62 | providers.addAll(mAppWidgetManager.getInstalledProvidersForProfile(user)); 63 | } 64 | return providers; 65 | } 66 | 67 | @Override 68 | public String loadLabel(AppWidgetProviderInfo info) { 69 | return info.loadLabel(mPm); 70 | } 71 | 72 | @Override 73 | public boolean bindAppWidgetIdIfAllowed(int appWidgetId, AppWidgetProviderInfo info, 74 | Bundle options) { 75 | return mAppWidgetManager.bindAppWidgetIdIfAllowed( 76 | appWidgetId, info.getProfile(), info.provider, options); 77 | } 78 | 79 | @Override 80 | public UserHandleCompat getUser(AppWidgetProviderInfo info) { 81 | return UserHandleCompat.fromUser(info.getProfile()); 82 | } 83 | 84 | @Override 85 | public void startConfigActivity(AppWidgetProviderInfo info, int widgetId, Activity activity, 86 | AppWidgetHost host, int requestCode) { 87 | try { 88 | host.startAppWidgetConfigureActivityForResult(activity, widgetId, 0, requestCode, null); 89 | } catch (ActivityNotFoundException | SecurityException e) { 90 | Toast.makeText(activity, R.string.activity_not_found, Toast.LENGTH_SHORT).show(); 91 | } 92 | } 93 | 94 | @Override 95 | public Drawable loadPreview(AppWidgetProviderInfo info) { 96 | return info.loadPreviewImage(mContext, 0); 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/compat/LauncherActivityInfoCompat.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher.compat; 18 | 19 | import android.content.ComponentName; 20 | import android.content.pm.ApplicationInfo; 21 | import android.graphics.drawable.Drawable; 22 | 23 | public abstract class LauncherActivityInfoCompat { 24 | 25 | LauncherActivityInfoCompat() { 26 | } 27 | 28 | public abstract ComponentName getComponentName(); 29 | public abstract UserHandleCompat getUser(); 30 | public abstract CharSequence getLabel(); 31 | public abstract Drawable getIcon(int density); 32 | public abstract ApplicationInfo getApplicationInfo(); 33 | public abstract long getFirstInstallTime(); 34 | public abstract Drawable getBadgedIcon(int density); 35 | } 36 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/compat/LauncherActivityInfoCompatV16.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher.compat; 18 | 19 | import android.content.ComponentName; 20 | import android.content.Context; 21 | import android.content.pm.ApplicationInfo; 22 | import android.content.pm.PackageManager.NameNotFoundException; 23 | import android.content.pm.ActivityInfo; 24 | import android.content.pm.PackageManager; 25 | import android.content.pm.PackageInfo; 26 | import android.content.pm.ResolveInfo; 27 | import android.content.res.Resources; 28 | import android.graphics.drawable.Drawable; 29 | 30 | 31 | public class LauncherActivityInfoCompatV16 extends LauncherActivityInfoCompat { 32 | private ActivityInfo mActivityInfo; 33 | private ComponentName mComponentName; 34 | private PackageManager mPm; 35 | 36 | LauncherActivityInfoCompatV16(Context context, ResolveInfo info) { 37 | super(); 38 | this.mActivityInfo = info.activityInfo; 39 | mComponentName = new ComponentName(mActivityInfo.packageName, mActivityInfo.name); 40 | mPm = context.getPackageManager(); 41 | } 42 | 43 | public ComponentName getComponentName() { 44 | return mComponentName; 45 | } 46 | 47 | public UserHandleCompat getUser() { 48 | return UserHandleCompat.myUserHandle(); 49 | } 50 | 51 | public CharSequence getLabel() { 52 | return mActivityInfo.loadLabel(mPm); 53 | } 54 | 55 | public Drawable getIcon(int density) { 56 | Drawable d = null; 57 | if (mActivityInfo.getIconResource() != 0) { 58 | Resources resources; 59 | try { 60 | resources = mPm.getResourcesForApplication(mActivityInfo.packageName); 61 | } catch (PackageManager.NameNotFoundException e) { 62 | resources = null; 63 | } 64 | if (resources != null) { 65 | try { 66 | d = resources.getDrawableForDensity(mActivityInfo.getIconResource(), density); 67 | } catch (Resources.NotFoundException e) { 68 | // Return default icon below. 69 | } 70 | } 71 | } 72 | if (d == null) { 73 | Resources resources = Resources.getSystem(); 74 | d = resources.getDrawableForDensity(android.R.mipmap.sym_def_app_icon, density); 75 | } 76 | return d; 77 | } 78 | 79 | public ApplicationInfo getApplicationInfo() { 80 | return mActivityInfo.applicationInfo; 81 | } 82 | 83 | public long getFirstInstallTime() { 84 | try { 85 | PackageInfo info = mPm.getPackageInfo(mActivityInfo.packageName, 0); 86 | return info != null ? info.firstInstallTime : 0; 87 | } catch (NameNotFoundException e) { 88 | return 0; 89 | } 90 | } 91 | 92 | public String getName() { 93 | return mActivityInfo.name; 94 | } 95 | 96 | public Drawable getBadgedIcon(int density) { 97 | return getIcon(density); 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/compat/LauncherActivityInfoCompatVL.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher.compat; 18 | 19 | import android.content.ComponentName; 20 | import android.content.pm.ApplicationInfo; 21 | import android.content.pm.LauncherActivityInfo; 22 | import android.graphics.drawable.Drawable; 23 | 24 | public class LauncherActivityInfoCompatVL extends LauncherActivityInfoCompat { 25 | private LauncherActivityInfo mLauncherActivityInfo; 26 | 27 | LauncherActivityInfoCompatVL(LauncherActivityInfo launcherActivityInfo) { 28 | super(); 29 | mLauncherActivityInfo = launcherActivityInfo; 30 | } 31 | 32 | public ComponentName getComponentName() { 33 | return mLauncherActivityInfo.getComponentName(); 34 | } 35 | 36 | public UserHandleCompat getUser() { 37 | return UserHandleCompat.fromUser(mLauncherActivityInfo.getUser()); 38 | } 39 | 40 | public CharSequence getLabel() { 41 | return mLauncherActivityInfo.getLabel(); 42 | } 43 | 44 | public Drawable getIcon(int density) { 45 | return mLauncherActivityInfo.getIcon(density); 46 | } 47 | 48 | public ApplicationInfo getApplicationInfo() { 49 | return mLauncherActivityInfo.getApplicationInfo(); 50 | } 51 | 52 | public long getFirstInstallTime() { 53 | return mLauncherActivityInfo.getFirstInstallTime(); 54 | } 55 | 56 | public Drawable getBadgedIcon(int density) { 57 | return mLauncherActivityInfo.getBadgedIcon(density); 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/compat/UserHandleCompat.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher.compat; 18 | 19 | import android.content.Intent; 20 | import android.os.Build; 21 | import android.os.UserHandle; 22 | 23 | import com.android.leanlauncher.Utilities; 24 | 25 | public class UserHandleCompat { 26 | private UserHandle mUser; 27 | 28 | private UserHandleCompat(UserHandle user) { 29 | mUser = user; 30 | } 31 | 32 | private UserHandleCompat() { 33 | } 34 | 35 | public static UserHandleCompat myUserHandle() { 36 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 37 | return new UserHandleCompat(android.os.Process.myUserHandle()); 38 | } else { 39 | return new UserHandleCompat(); 40 | } 41 | } 42 | 43 | public static UserHandleCompat fromUser(UserHandle user) { 44 | if (user == null) { 45 | return null; 46 | } else { 47 | return new UserHandleCompat(user); 48 | } 49 | } 50 | 51 | UserHandle getUser() { 52 | return mUser; 53 | } 54 | 55 | @Override 56 | public String toString() { 57 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 58 | return mUser.toString(); 59 | } else { 60 | return ""; 61 | } 62 | } 63 | 64 | @Override 65 | public boolean equals(Object other) { 66 | if (!(other instanceof UserHandleCompat)) { 67 | return false; 68 | } 69 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 70 | return mUser.equals(((UserHandleCompat) other).mUser); 71 | } else { 72 | return true; 73 | } 74 | } 75 | 76 | @Override 77 | public int hashCode() { 78 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 79 | return mUser.hashCode(); 80 | } else { 81 | return 0; 82 | } 83 | } 84 | 85 | /** 86 | * Adds {@link UserHandle} to the intent in for L or above. 87 | * Pre-L the launcher doesn't support showing apps for multiple 88 | * profiles so this is a no-op. 89 | */ 90 | public void addToIntent(Intent intent, String name) { 91 | if (Utilities.isLmpOrAbove() && mUser != null) { 92 | intent.putExtra(name, mUser); 93 | } 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/compat/UserManagerCompat.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher.compat; 18 | 19 | import android.content.Context; 20 | import android.graphics.drawable.Drawable; 21 | import android.os.Build; 22 | 23 | import com.android.leanlauncher.Utilities; 24 | 25 | import java.util.List; 26 | 27 | public abstract class UserManagerCompat { 28 | protected UserManagerCompat() { 29 | } 30 | 31 | public static UserManagerCompat getInstance(Context context) { 32 | if (Utilities.isLmpOrAbove()) { 33 | return new UserManagerCompatVL(context); 34 | } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 35 | return new UserManagerCompatV17(context); 36 | } else { 37 | return new UserManagerCompatV16(); 38 | } 39 | } 40 | 41 | public abstract List getUserProfiles(); 42 | public abstract long getSerialNumberForUser(UserHandleCompat user); 43 | public abstract UserHandleCompat getUserForSerialNumber(long serialNumber); 44 | public abstract Drawable getBadgedDrawableForUser(Drawable unbadged, UserHandleCompat user); 45 | public abstract CharSequence getBadgedLabelForUser(CharSequence label, UserHandleCompat user); 46 | } 47 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/compat/UserManagerCompatV16.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher.compat; 18 | 19 | import android.graphics.drawable.Drawable; 20 | 21 | import java.util.ArrayList; 22 | import java.util.List; 23 | 24 | public class UserManagerCompatV16 extends UserManagerCompat { 25 | 26 | UserManagerCompatV16() { 27 | } 28 | 29 | public List getUserProfiles() { 30 | List profiles = new ArrayList(1); 31 | profiles.add(UserHandleCompat.myUserHandle()); 32 | return profiles; 33 | } 34 | 35 | public UserHandleCompat getUserForSerialNumber(long serialNumber) { 36 | return UserHandleCompat.myUserHandle(); 37 | } 38 | 39 | public Drawable getBadgedDrawableForUser(Drawable unbadged, 40 | UserHandleCompat user) { 41 | return unbadged; 42 | } 43 | 44 | public long getSerialNumberForUser(UserHandleCompat user) { 45 | return 0; 46 | } 47 | 48 | public CharSequence getBadgedLabelForUser(CharSequence label, UserHandleCompat user) { 49 | return label; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/compat/UserManagerCompatV17.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.android.leanlauncher.compat; 18 | 19 | import android.content.Context; 20 | import android.os.UserManager; 21 | 22 | public class UserManagerCompatV17 extends UserManagerCompatV16 { 23 | protected UserManager mUserManager; 24 | 25 | UserManagerCompatV17(Context context) { 26 | mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE); 27 | } 28 | 29 | public long getSerialNumberForUser(UserHandleCompat user) { 30 | return mUserManager.getSerialNumberForUser(user.getUser()); 31 | } 32 | 33 | public UserHandleCompat getUserForSerialNumber(long serialNumber) { 34 | return UserHandleCompat.fromUser(mUserManager.getUserForSerialNumber(serialNumber)); 35 | } 36 | } 37 | 38 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/java/com/android/leanlauncher/compat/UserManagerCompatVL.java: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * Copyright (C) 2015 Kumaresan Rajeswaran 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | package com.android.leanlauncher.compat; 19 | 20 | import android.content.Context; 21 | import android.content.pm.PackageManager; 22 | import android.graphics.drawable.Drawable; 23 | import android.os.UserHandle; 24 | 25 | import java.util.ArrayList; 26 | import java.util.Collections; 27 | import java.util.List; 28 | 29 | public class UserManagerCompatVL extends UserManagerCompatV17 { 30 | private final PackageManager mPm; 31 | 32 | UserManagerCompatVL(Context context) { 33 | super(context); 34 | mPm = context.getPackageManager(); 35 | } 36 | 37 | @Override 38 | public List getUserProfiles() { 39 | List users = mUserManager.getUserProfiles(); 40 | if (users == null) { 41 | return Collections.EMPTY_LIST; 42 | } 43 | ArrayList compatUsers = new ArrayList( 44 | users.size()); 45 | for (UserHandle user : users) { 46 | compatUsers.add(UserHandleCompat.fromUser(user)); 47 | } 48 | return compatUsers; 49 | } 50 | 51 | @Override 52 | public Drawable getBadgedDrawableForUser(Drawable unbadged, UserHandleCompat user) { 53 | return mPm.getUserBadgedIcon(unbadged, user.getUser()); 54 | } 55 | 56 | @Override 57 | public CharSequence getBadgedLabelForUser(CharSequence label, UserHandleCompat user) { 58 | if (user == null) { 59 | return label; 60 | } 61 | return mPm.getUserBadgedLabel(label, user.getUser()); 62 | } 63 | } 64 | 65 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/anim/no_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 19 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/anim/task_open_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | 23 | 28 | 29 | 34 | 35 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/apps_customize_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/apps_customize_bg.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/bg_appwidget_error.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/bg_appwidget_error.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_allapps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_allapps.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_allapps_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_allapps_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_launcher_clear_active_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_launcher_clear_active_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_launcher_clear_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_launcher_clear_normal_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_launcher_info_active_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_launcher_info_active_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_launcher_info_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_launcher_info_normal_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_launcher_trashcan_active_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_launcher_trashcan_active_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_launcher_trashcan_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_launcher_trashcan_normal_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_pageindicator_current.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_pageindicator_current.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_pageindicator_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_pageindicator_default.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_setting.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_setting_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_setting_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_wallpaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_wallpaper.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_wallpaper_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_wallpaper_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_widget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_widget.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/ic_widget_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/ic_widget_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/overscroll_glow_left.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/overscroll_glow_left.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/overscroll_glow_right.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/overscroll_glow_right.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/page_hover_left.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/page_hover_left.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/page_hover_left_active.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/page_hover_left_active.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/page_hover_right.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/page_hover_right.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/page_hover_right_active.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/page_hover_right_active.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/quantum_panel_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/quantum_panel_dark.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/screenpanel.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/screenpanel.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/screenpanel_hover.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/screenpanel_hover.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/virtual_preload.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/virtual_preload.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/widget_resize_frame_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/widget_resize_frame_holo.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/widget_resize_handle_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/widget_resize_handle_bottom.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/widget_resize_handle_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/widget_resize_handle_left.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/widget_resize_handle_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/widget_resize_handle_right.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/widget_resize_handle_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/widget_resize_handle_top.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/widget_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/widget_tile.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-hdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-hdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-land-hdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-land-hdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-land-mdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-land-mdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-land-xhdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-land-xhdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-land-xxhdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-land-xxhdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/apps_customize_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/apps_customize_bg.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/bg_appwidget_error.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/bg_appwidget_error.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_allapps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_allapps.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_allapps_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_allapps_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_launcher_clear_active_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_launcher_clear_active_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_launcher_clear_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_launcher_clear_normal_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_launcher_info_active_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_launcher_info_active_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_launcher_info_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_launcher_info_normal_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_launcher_trashcan_active_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_launcher_trashcan_active_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_launcher_trashcan_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_launcher_trashcan_normal_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_pageindicator_current.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_pageindicator_current.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_pageindicator_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_pageindicator_default.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_setting.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_setting_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_setting_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_wallpaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_wallpaper.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_wallpaper_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_wallpaper_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_widget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_widget.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/ic_widget_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/ic_widget_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/overscroll_glow_left.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/overscroll_glow_left.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/overscroll_glow_right.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/overscroll_glow_right.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/page_hover_left.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/page_hover_left.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/page_hover_left_active.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/page_hover_left_active.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/page_hover_right.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/page_hover_right.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/page_hover_right_active.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/page_hover_right_active.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/quantum_panel_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/quantum_panel_dark.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/screenpanel.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/screenpanel.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/screenpanel_hover.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/screenpanel_hover.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/virtual_preload.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/virtual_preload.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/widget_resize_frame_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/widget_resize_frame_holo.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/widget_resize_handle_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/widget_resize_handle_bottom.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/widget_resize_handle_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/widget_resize_handle_left.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/widget_resize_handle_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/widget_resize_handle_right.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/widget_resize_handle_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/widget_resize_handle_top.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/widget_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/widget_tile.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-mdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-mdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-sw720dp-hdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-sw720dp-hdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-sw720dp-mdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-sw720dp-mdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-sw720dp-xhdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-sw720dp-xhdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-sw720dp-xxhdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-sw720dp-xxhdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/apps_customize_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/apps_customize_bg.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/bg_appwidget_error.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/bg_appwidget_error.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_allapps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_allapps.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_allapps_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_allapps_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_launcher_clear_active_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_launcher_clear_active_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_launcher_clear_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_launcher_clear_normal_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_launcher_info_active_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_launcher_info_active_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_launcher_info_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_launcher_info_normal_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_launcher_trashcan_active_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_launcher_trashcan_active_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_launcher_trashcan_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_launcher_trashcan_normal_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_pageindicator_current.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_pageindicator_current.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_pageindicator_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_pageindicator_default.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_setting.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_setting_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_setting_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_wallpaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_wallpaper.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_wallpaper_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_wallpaper_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_widget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_widget.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/ic_widget_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/ic_widget_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/overscroll_glow_left.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/overscroll_glow_left.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/overscroll_glow_right.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/overscroll_glow_right.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/page_hover_left.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/page_hover_left.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/page_hover_left_active.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/page_hover_left_active.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/page_hover_right.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/page_hover_right.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/page_hover_right_active.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/page_hover_right_active.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/quantum_panel_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/quantum_panel_dark.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/screenpanel.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/screenpanel.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/screenpanel_hover.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/screenpanel_hover.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/virtual_preload.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/virtual_preload.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/widget_resize_frame_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/widget_resize_frame_holo.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/widget_resize_handle_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/widget_resize_handle_bottom.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/widget_resize_handle_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/widget_resize_handle_left.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/widget_resize_handle_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/widget_resize_handle_right.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/widget_resize_handle_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/widget_resize_handle_top.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/widget_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/widget_tile.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xhdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xhdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/apps_customize_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/apps_customize_bg.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_allapps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_allapps.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_allapps_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_allapps_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_launcher_clear_active_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_launcher_clear_active_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_launcher_clear_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_launcher_clear_normal_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_launcher_info_active_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_launcher_info_active_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_launcher_info_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_launcher_info_normal_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_launcher_trashcan_active_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_launcher_trashcan_active_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_launcher_trashcan_normal_holo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_launcher_trashcan_normal_holo.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_pageindicator_current.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_pageindicator_current.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_pageindicator_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_pageindicator_default.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_setting.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_setting_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_setting_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_wallpaper.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_wallpaper.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_wallpaper_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_wallpaper_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_widget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_widget.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/ic_widget_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/ic_widget_pressed.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/overscroll_glow_left.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/overscroll_glow_left.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/overscroll_glow_right.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/overscroll_glow_right.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/page_hover_left.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/page_hover_left.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/page_hover_left_active.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/page_hover_left_active.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/page_hover_right.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/page_hover_right.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/page_hover_right_active.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/page_hover_right_active.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/quantum_panel_dark.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/quantum_panel_dark.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/screenpanel.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/screenpanel.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/screenpanel_hover.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/screenpanel_hover.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/virtual_preload.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/virtual_preload.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/widget_resize_frame_holo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/widget_resize_frame_holo.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/widget_resize_handle_bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/widget_resize_handle_bottom.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/widget_resize_handle_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/widget_resize_handle_left.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/widget_resize_handle_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/widget_resize_handle_right.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/widget_resize_handle_top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/widget_resize_handle_top.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/widget_tile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/widget_tile.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable-xxhdpi/workspace_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/drawable-xxhdpi/workspace_bg.9.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable/all_apps_button_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable/focusable_view_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable/info_target_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable/remove_target_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable/search_widget_border.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 21 | 26 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable/setting_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable/uninstall_target_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable/wallpaper_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/drawable/widget_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/interpolator/decelerate_quart.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/interpolator/decelerate_quint.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 22 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout-land/launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 26 | 27 | 31 | 32 | 39 | 40 | 43 | 44 | 49 | 50 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout-port/launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 25 | 26 | 30 | 31 | 32 | 39 | 40 | 43 | 44 | 46 | 51 | 52 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout-sw720dp/launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 26 | 27 | 31 | 32 | 33 | 40 | 41 | 44 | 45 | 47 | 48 | 53 | 54 | 59 | 60 | 61 | 62 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/all_apps_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 20 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/application.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 21 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/apps_customize_application.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 22 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/apps_customize_pane.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 20 | 21 | 27 | 28 | 33 | 39 | 45 | 46 | 55 | 56 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/appwidget_error.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 30 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/appwidget_not_ready.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 21 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/delete_drop_target_bar.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 23 | 24 | 25 | 26 | 33 | 34 | 35 | 42 | 43 | 44 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 25 | 26 | 30 | 31 | 32 | 39 | 40 | 43 | 44 | 46 | 51 | 52 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/overview_panel.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 23 | 24 | 36 | 37 | 49 | 50 | 62 | 63 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/page_indicator.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 21 | 22 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/page_indicator_marker.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 21 | 28 | 38 | 39 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/search_apps.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 23 | 24 | 42 | 43 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/search_apps_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 27 | 28 | 40 | 41 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/search_apps_widget.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 24 | 25 | 37 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/layout/workspace_screen.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 23 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/mipmap-hdpi/ic_launcher_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/mipmap-hdpi/ic_launcher_home.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/mipmap-mdpi/ic_launcher_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/mipmap-mdpi/ic_launcher_home.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/mipmap-xhdpi/ic_launcher_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/mipmap-xhdpi/ic_launcher_home.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/mipmap-xxhdpi/ic_launcher_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/LeanLauncher/src/main/res/mipmap-xxhdpi/ic_launcher_home.png -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-land/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 20 | false 21 | 22 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 0dip 20 | 20dip 21 | 24dp 22 | 23 | 24 | 48dp 25 | 3 26 | 2 27 | 28 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-land/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 21 | 22 | 23 | 31 | 32 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-port/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 2 20 | 3 21 | 22 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-sw340dp-port/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-sw340dp-port/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 21 | 22 | 27 | 28 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-sw340dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 17 | 18 | 19 | 20 | 21 | 20dp 22 | 16sp 23 | 24 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-sw600dp-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 0dip 20 | 20dip 21 | 22 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-sw600dp/config.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | true 20 | 21 | 22 | -1000 23 | 24 | 26 | 27 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-sw600dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 64dp 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-sw720dp-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 4 20 | 2 21 | 22 | 24 | 100dip 25 | 26 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-sw720dp-port/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 19 | 0dip 20 | 20dip 21 | 22 | 24 | 40dp 25 | 20dp 26 | 27 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-sw720dp/config.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | true 20 | true 21 | 22 | 23 | 24 | 90 25 | 26 | 27 | 28 | false 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-sw720dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 16 | 17 | 18 | 72dp 19 | 20 | 21 | 8dip 22 | 8dip 23 | 24 | 26 | 0dp 27 | 0dp 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-sw720dp/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 21 | 22 | 30 | 31 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values-v17/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | 23 | 24 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values/arrays.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 20 | 21 | 23 | #DAFF0000 24 | #DA0099CC 25 | 26 | #80c6c5c5 27 | 28 | #FCCC 29 | 30 | #FFF 31 | 32 | #FFFFFFFF 33 | #FF374248 34 | 35 | 36 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 19 | 20 | 21 | 22 | 35 | 36 | 45 | 46 | 63 | 64 | 71 | 72 | 73 | 76 | 77 | 80 | 81 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/xml/preferences.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | 26 | 27 | 33 | 34 | 42 | 43 | 48 | 49 | -------------------------------------------------------------------------------- /LeanLauncher/src/main/res/xml/search_apps_widget_provider.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 31 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015. Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | */ 17 | 18 | buildscript { 19 | repositories { 20 | jcenter() 21 | google() 22 | } 23 | dependencies { 24 | classpath 'com.android.tools.build:gradle:3.1.4' 25 | } 26 | } 27 | 28 | allprojects { 29 | repositories { 30 | jcenter() 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /screenshots/appdrawer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/screenshots/appdrawer.png -------------------------------------------------------------------------------- /screenshots/busy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/screenshots/busy.png -------------------------------------------------------------------------------- /screenshots/config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/screenshots/config.png -------------------------------------------------------------------------------- /screenshots/fullbusy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/screenshots/fullbusy.png -------------------------------------------------------------------------------- /screenshots/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/screenshots/settings.png -------------------------------------------------------------------------------- /screenshots/startup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/krajeswaran/LeanLauncher/9ef53ee6821be37c890b77dbc233edb24f47d7f8/screenshots/startup.png -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015. Kumaresan Rajeswaran 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | * 16 | */ 17 | 18 | include ':LeanLauncher' 19 | --------------------------------------------------------------------------------