diff --git a/.gitignore b/.gitignore
index 5c038db904d1d3762e5118f8b5b1acd460340646..4851e9d46e1b60ea5253558f17002cc9602957c3 100755
--- a/.gitignore
+++ b/.gitignore
@@ -43,6 +43,9 @@ build/
.idea/tasks.xml
.idea/modules.xml
.idea/assetWizardSettings.xml
+.idea/markdown-navigator*
+projectFilesBackup/
+
gradle.xml
.classpath
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
index 2e191f67592c749c461215ebfb568a458e7bb541..c82ee7068f93651f72acfc3a1eefcb7a6eceb22b 100644
--- a/.idea/codeStyles/Project.xml
+++ b/.idea/codeStyles/Project.xml
@@ -12,9 +12,6 @@
-
-
-
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f318c052048262a3596bb3fdc298e4e81308d734..a4ddcad26ed00d72189f5e031e29e42bf8edfb42 100755
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -62,7 +62,7 @@
android:configChanges="keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenSize|screenLayout|smallestScreenSize"
android:launchMode="singleTask"
android:resumeWhilePausing="true"
- android:screenOrientation="nosensor"
+ android:screenOrientation="portrait"
android:stateNotNeeded="true"
android:theme="@style/HomeScreenTheme"
android:windowSoftInputMode="adjustPan">
diff --git a/app/src/main/java/foundation/e/blisslauncher/core/blur/ShaderBlurDrawable.kt b/app/src/main/java/foundation/e/blisslauncher/core/blur/ShaderBlurDrawable.kt
index 2578758dfd24c0536ee15261dba21208794ab95e..b025aebde727ed2221130183c157d8f97d3aa094 100644
--- a/app/src/main/java/foundation/e/blisslauncher/core/blur/ShaderBlurDrawable.kt
+++ b/app/src/main/java/foundation/e/blisslauncher/core/blur/ShaderBlurDrawable.kt
@@ -50,8 +50,9 @@ class ShaderBlurDrawable internal constructor(private val blurWallpaperProvider:
blurBitmap = blurWallpaperProvider.placeholder
}
blurBitmap =
- if (blurBitmap!!.height > (blurBounds.bottom.toInt() - blurBounds.top.toInt())) {
-
+ if (blurBitmap!!.height >= blurBounds.bottom &&
+ blurBitmap!!.width >= blurBounds.right
+ ) {
Bitmap.createBitmap(
blurBitmap!!,
blurBounds.left.toInt(), blurBounds.top.toInt(),
@@ -91,8 +92,11 @@ class ShaderBlurDrawable internal constructor(private val blurWallpaperProvider:
blurPath.reset()
blurPath.addRect(
- 0f, 0f,
- blurBounds.right - blurBounds.left, blurBounds.bottom - blurBounds.top, Path.Direction.CW
+ 0f,
+ 0f,
+ blurBounds.right - blurBounds.left,
+ blurBounds.bottom - blurBounds.top,
+ Path.Direction.CW
)
}
diff --git a/app/src/main/java/foundation/e/blisslauncher/core/broadcast/PackageAddedRemovedHandler.java b/app/src/main/java/foundation/e/blisslauncher/core/broadcast/PackageAddedRemovedHandler.java
index 8191b62a32c3c4b5dfdbef03f4e0f412cab634ca..6e5280833b9a16cfdb2ff4cc55a98d4ed16dda92 100644
--- a/app/src/main/java/foundation/e/blisslauncher/core/broadcast/PackageAddedRemovedHandler.java
+++ b/app/src/main/java/foundation/e/blisslauncher/core/broadcast/PackageAddedRemovedHandler.java
@@ -35,7 +35,7 @@ public class PackageAddedRemovedHandler extends BroadcastReceiver {
AppAddEvent event = new AppAddEvent(packageName, user);
EventRelay.getInstance().push(event);
- BlissLauncher.getApplication(ctx).getAppProvider().reload();
+ BlissLauncher.getApplication(ctx).getAppProvider().reload(false);
}
if ("android.intent.action.PACKAGE_CHANGED".equalsIgnoreCase(action)) {
@@ -49,12 +49,12 @@ public class PackageAddedRemovedHandler extends BroadcastReceiver {
AppChangeEvent event = new AppChangeEvent(packageName, user);
EventRelay.getInstance().push(event);
- BlissLauncher.getApplication(ctx).getAppProvider().reload();
+ BlissLauncher.getApplication(ctx).getAppProvider().reload(false);
}
if ("android.intent.action.PACKAGE_REMOVED".equals(action) && !replacing) {
AppRemoveEvent event = new AppRemoveEvent(packageName, user);
EventRelay.getInstance().push(event);
- BlissLauncher.getApplication(ctx).getAppProvider().reload();
+ BlissLauncher.getApplication(ctx).getAppProvider().reload(false);
}
if("android.intent.action.MEDIA_MOUNTED".equals(action)) {
diff --git a/app/src/main/java/foundation/e/blisslauncher/core/customviews/DockGridLayout.kt b/app/src/main/java/foundation/e/blisslauncher/core/customviews/DockGridLayout.kt
index 35d42e2109643960c8106593770d4e0d3640cc49..1baf2cc79638fb97b64b6f8c3b156b7feb065044 100755
--- a/app/src/main/java/foundation/e/blisslauncher/core/customviews/DockGridLayout.kt
+++ b/app/src/main/java/foundation/e/blisslauncher/core/customviews/DockGridLayout.kt
@@ -73,7 +73,8 @@ class DockGridLayout @JvmOverloads constructor(
}
}
- override fun setInsets(insets: WindowInsets) {
+ override fun setInsets(insets: WindowInsets?) {
+ if (insets == null) return
val deviceProfile = BlissLauncher.getApplication(mContext).deviceProfile
val lp =
layoutParams as InsettableRelativeLayout.LayoutParams
diff --git a/app/src/main/java/foundation/e/blisslauncher/core/customviews/HorizontalPager.java b/app/src/main/java/foundation/e/blisslauncher/core/customviews/HorizontalPager.java
index 20805762d3a707d7b05b937cfbff8eaeb700c6af..c7c3e81eba2891ac8efff85fde6cc8a7dde8e4c5 100755
--- a/app/src/main/java/foundation/e/blisslauncher/core/customviews/HorizontalPager.java
+++ b/app/src/main/java/foundation/e/blisslauncher/core/customviews/HorizontalPager.java
@@ -543,6 +543,7 @@ public class HorizontalPager extends ViewGroup implements Insettable {
@Override
public void setInsets(WindowInsets insets) {
+ if(insets == null) return;
InsettableRelativeLayout.LayoutParams lp = (InsettableRelativeLayout.LayoutParams) getLayoutParams();
lp.topMargin = insets.getSystemWindowInsetTop();
setLayoutParams(lp);
diff --git a/app/src/main/java/foundation/e/blisslauncher/core/customviews/InsettableScrollLayout.java b/app/src/main/java/foundation/e/blisslauncher/core/customviews/InsettableScrollLayout.java
index b052001cd3c12c8f75fff0ca5892177481f4af8f..725dbfa64a28627190b04ed7d4bd29e119919a65 100644
--- a/app/src/main/java/foundation/e/blisslauncher/core/customviews/InsettableScrollLayout.java
+++ b/app/src/main/java/foundation/e/blisslauncher/core/customviews/InsettableScrollLayout.java
@@ -24,6 +24,7 @@ public class InsettableScrollLayout extends ScrollView implements Insettable {
@Override
public void setInsets(WindowInsets insets) {
+ if(insets == null) return;
int top = getPaddingTop();
int left = getPaddingLeft();
int right = getPaddingRight();
diff --git a/app/src/main/java/foundation/e/blisslauncher/features/launcher/AppProvider.java b/app/src/main/java/foundation/e/blisslauncher/features/launcher/AppProvider.java
index 71cba2d5bbdbc498662f3220d4758d5a9d3b5790..882063d558cd7f80938995b1f475a58dfcb0d85f 100644
--- a/app/src/main/java/foundation/e/blisslauncher/features/launcher/AppProvider.java
+++ b/app/src/main/java/foundation/e/blisslauncher/features/launcher/AppProvider.java
@@ -103,8 +103,11 @@ public class AppProvider {
private boolean mStopped;
private boolean isSdCardReady;
+ private AppsRepository appsRepository;
+
private AppProvider(Context context) {
this.mContext = context;
+ this.appsRepository = AppsRepository.getAppsRepository();
isLoading = false;
initialise();
}
@@ -202,7 +205,7 @@ public class AppProvider {
synchronized (AppProvider.class) {
if (sInstance == null) {
sInstance = new AppProvider(context);
- sInstance.reload();
+ sInstance.reload(true);
}
}
}
@@ -213,12 +216,12 @@ public class AppProvider {
return mContext;
}
- public synchronized void reload() {
+ public synchronized void reload(boolean force) {
Log.d(TAG, "reload() called");
isSdCardReady = Utilities.isBootCompleted();
- if (mLauncherItems != null && mLauncherItems.size() > 0) {
+ if (!force && mLauncherItems != null && mLauncherItems.size() > 0) {
mAppsRepository.updateAppsRelay(mLauncherItems);
}
@@ -460,7 +463,6 @@ public class AppProvider {
}
private List prepareDefaultLauncherItems() {
- Log.d(TAG, "prepareDefaultLauncherItems() called " + mApplicationItems.size());
List mLauncherItems = new ArrayList<>();
List pinnedItems = new ArrayList<>();
PackageManager pm = mContext.getPackageManager();
@@ -501,10 +503,13 @@ public class AppProvider {
});
mLauncherItems.addAll(pinnedItems);
- Log.i(TAG, "prepareDefaultLauncherItems: " + mLauncherItems.size());
return mLauncherItems;
}
+ public AppsRepository getAppsRepository() {
+ return appsRepository;
+ }
+
public void clear() {
this.sInstance = null;
mLauncherItems = new ArrayList<>();
diff --git a/app/src/main/java/foundation/e/blisslauncher/features/launcher/EventsObserverImpl.java b/app/src/main/java/foundation/e/blisslauncher/features/launcher/EventsObserverImpl.java
index 15d39b25c0df6b42f371053de8262e02f2111688..d1253e3a7da1d33d488d9af6dc5c8bb3a88939dc 100644
--- a/app/src/main/java/foundation/e/blisslauncher/features/launcher/EventsObserverImpl.java
+++ b/app/src/main/java/foundation/e/blisslauncher/features/launcher/EventsObserverImpl.java
@@ -4,7 +4,6 @@ import android.util.Log;
import java.util.Calendar;
-import foundation.e.blisslauncher.BlissLauncher;
import foundation.e.blisslauncher.core.events.AppAddEvent;
import foundation.e.blisslauncher.core.events.AppChangeEvent;
import foundation.e.blisslauncher.core.events.AppRemoveEvent;
@@ -44,7 +43,7 @@ public class EventsObserverImpl implements EventRelay.EventsObserver {
launcherActivity.updateAllCalendarIcons(Calendar.getInstance());
break;
case ForceReloadEvent.TYPE:
- BlissLauncher.getApplication(launcherActivity).getAppProvider().reload();
+ launcherActivity.forceReload();
break;
}
}
diff --git a/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java b/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java
index 601ed32d5095fb75a8bfc2cc0ecd650cb54b67c7..057b6d5b31ec3657bb029031608ce62857e512b7 100755
--- a/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java
+++ b/app/src/main/java/foundation/e/blisslauncher/features/launcher/LauncherActivity.java
@@ -9,7 +9,6 @@ import android.animation.ObjectAnimator;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
-import android.app.Dialog;
import android.app.WallpaperManager;
import android.app.usage.UsageStats;
import android.appwidget.AppWidgetManager;
@@ -40,7 +39,6 @@ import android.os.UserManager;
import android.provider.Settings;
import android.text.Editable;
import android.text.TextWatcher;
-import android.util.Log;
import android.view.DragEvent;
import android.view.Gravity;
import android.view.LayoutInflater;
@@ -77,6 +75,7 @@ import com.jakewharton.rxbinding3.widget.RxTextView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
+import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
@@ -245,6 +244,7 @@ public class LauncherActivity extends AppCompatActivity implements
private Configuration oldConfig;
private WallpaperChangeReceiver wallpaperChangeReceiver;
private GestureDetectorCompat mDetector;
+ private AlertDialog enableLocationDialog;
public static LauncherActivity getLauncher(Context context) {
if (context instanceof LauncherActivity) {
@@ -358,15 +358,18 @@ public class LauncherActivity extends AppCompatActivity implements
private void createOrUpdateIconGrid() {
getCompositeDisposable().add(
- AppsRepository.getAppsRepository().getAppsRelay()
+ BlissLauncher.getApplication(this)
+ .getAppProvider()
+ .getAppsRepository()
+ .getAppsRelay()
.distinctUntilChanged()
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(new DisposableObserver>() {
@Override
public void onNext(List launcherItems) {
if (launcherItems == null || launcherItems.size() <= 0) {
- BlissLauncher.getApplication(LauncherActivity.this).getAppProvider().reload();
- } else if(!allAppsDisplayed) {
+ BlissLauncher.getApplication(LauncherActivity.this).getAppProvider().reload(true);
+ } else if (!allAppsDisplayed) {
showApps(launcherItems);
}
}
@@ -476,19 +479,36 @@ public class LauncherActivity extends AppCompatActivity implements
@Override
protected void onDestroy() {
- super.onDestroy();
+ // Unregister active receivers
TimeChangeBroadcastReceiver.unregister(this, timeChangedReceiver);
ManagedProfileBroadcastReceiver.unregister(this, managedProfileReceiver);
LocalBroadcastManager.getInstance(this).unregisterReceiver(mWeatherReceiver);
+
+ // Dispose CompositeDisposable
getCompositeDisposable().dispose();
- events.unsubscribe();
+
+ // Unsubscribe to events
+ if (events != null) {
+ events.unsubscribe();
+ }
+
+ // Dismiss Dialog if currently visible to prevent view leakage.
+ if (enableLocationDialog != null && enableLocationDialog.isShowing()) {
+ enableLocationDialog.dismiss();
+ }
+
+ // Clear AppProvider
BlissLauncher.getApplication(this).getAppProvider().clear();
+
+ // Handover to android system.
+ super.onDestroy();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
- Log.d(TAG, "onConfigurationChanged() called with: newConfig = [" + newConfig + "]");
int diff = newConfig.diff(oldConfig);
+
+ // Don't consider any other config changes as of now.
if ((diff & (CONFIG_ORIENTATION | CONFIG_SCREEN_SIZE)) != 0) {
recreate();
}
@@ -968,7 +988,6 @@ public class LauncherActivity extends AppCompatActivity implements
}
private void subscribeToEvents() {
- Log.d(TAG, "subscribeToEvents() called");
events = EventRelay.getInstance();
events.subscribe(new EventsObserverImpl(this));
}
@@ -1279,7 +1298,6 @@ public class LauncherActivity extends AppCompatActivity implements
}
return false;
});
- scrollView.post(() -> scrollView.setInsets(workspace.getRootWindowInsets()));
currentPageNumber = 1;
mHorizontalPager.setCurrentPage(currentPageNumber);
@@ -1469,7 +1487,6 @@ public class LauncherActivity extends AppCompatActivity implements
} else if (requestCode == STORAGE_PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
- Log.d(TAG, "Storage permission granted");
BlurWallpaperProvider.Companion.getInstance(getApplicationContext()).updateAsync();
}
}
@@ -1492,8 +1509,6 @@ public class LauncherActivity extends AppCompatActivity implements
private void showLocationEnableDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
- final Dialog dialog;
-
// Build and show the dialog
builder.setTitle(R.string.weather_retrieve_location_dialog_title);
builder.setMessage(R.string.weather_retrieve_location_dialog_message);
@@ -1506,8 +1521,8 @@ public class LauncherActivity extends AppCompatActivity implements
startActivityForResult(intent, REQUEST_LOCATION_SOURCE_SETTING);
});
builder.setNegativeButton(R.string.cancel, null);
- dialog = builder.create();
- dialog.show();
+ enableLocationDialog = builder.create();
+ enableLocationDialog.show();
}
@Override
@@ -3316,6 +3331,11 @@ public class LauncherActivity extends AppCompatActivity implements
}
}
+ public void forceReload() {
+ allAppsDisplayed = false;
+ BlissLauncher.getApplication(this).getAppProvider().getAppsRepository().updateAppsRelay(Collections.emptyList());
+ }
+
/**
* Adapter for folder apps.
*/