OSDN Git Service

Fix crashes on Android-x86 related to FloatingActionButton
authorBraden Farmer <farmerbb@gmail.com>
Tue, 29 Oct 2019 00:54:49 +0000 (18:54 -0600)
committerBraden Farmer <farmerbb@gmail.com>
Tue, 29 Oct 2019 00:54:49 +0000 (18:54 -0600)
app/src/main/java/com/farmerbb/taskbar/activity/HomeActivityDelegate.java
app/src/main/java/com/farmerbb/taskbar/util/FABWrapper.java [new file with mode: 0644]
app/src/main/res/drawable/tb_circle.xml [new file with mode: 0644]
app/src/main/res/values/dimens.xml

index adc2fe5..68b0c14 100644 (file)
@@ -34,7 +34,6 @@ import android.os.Bundle;
 import android.os.Handler;
 import android.os.UserHandle;
 import android.os.UserManager;
-import android.support.design.widget.FloatingActionButton;
 import android.support.v4.content.ContextCompat;
 import android.support.v4.content.LocalBroadcastManager;
 import android.support.v4.graphics.ColorUtils;
@@ -68,6 +67,7 @@ import com.farmerbb.taskbar.util.AppEntry;
 import com.farmerbb.taskbar.util.CompatUtils;
 import com.farmerbb.taskbar.util.DesktopIconInfo;
 import com.farmerbb.taskbar.util.DisplayInfo;
+import com.farmerbb.taskbar.util.FABWrapper;
 import com.farmerbb.taskbar.util.FreeformHackHelper;
 import com.farmerbb.taskbar.util.IconCache;
 import com.farmerbb.taskbar.util.LauncherHelper;
@@ -89,7 +89,7 @@ public class HomeActivityDelegate extends AppCompatActivity implements UIHost {
 
     private FrameLayout layout;
     private GridLayout desktopIcons;
-    private FloatingActionButton fab;
+    private FABWrapper fab;
 
     private boolean forceTaskbarStart = false;
     private AlertDialog dialog;
@@ -545,13 +545,13 @@ public class HomeActivityDelegate extends AppCompatActivity implements UIHost {
 
     private void initDesktopIcons() {
         desktopIcons = new GridLayout(this);
-        fab = new FloatingActionButton(this);
+        fab = new FABWrapper(this);
 
         updateMargins();
         refreshDesktopIcons();
 
         fab.setImageResource(R.drawable.ic_done_black_24dp);
-        fab.setOnClickListener(v -> {
+        fab.view.setOnClickListener(v -> {
             iconArrangeMode = false;
             fab.hide();
             refreshDesktopIcons();
@@ -560,7 +560,7 @@ public class HomeActivityDelegate extends AppCompatActivity implements UIHost {
         if(!iconArrangeMode) fab.hide();
 
         layout.addView(desktopIcons, 0);
-        layout.addView(fab, 1);
+        layout.addView(fab.view, 1);
     }
 
     private void refreshDesktopIcons() {
@@ -752,7 +752,7 @@ public class HomeActivityDelegate extends AppCompatActivity implements UIHost {
                 return;
             }
 
-            fab.setBackgroundTintList(
+            fab.view.setBackgroundTintList(
                     ColorStateList.valueOf(ColorUtils.setAlphaComponent(U.getAccentColor(this), 255)));
 
             iconArrangeMode = true;
@@ -801,7 +801,7 @@ public class HomeActivityDelegate extends AppCompatActivity implements UIHost {
 
         params2.gravity = Gravity.BOTTOM | Gravity.END;
         params2.setMargins(left, top, right, bottom);
-        fab.setLayoutParams(params2);
+        fab.view.setLayoutParams(params2);
     }
 
     private int getIndex(DesktopIconInfo info) {
diff --git a/app/src/main/java/com/farmerbb/taskbar/util/FABWrapper.java b/app/src/main/java/com/farmerbb/taskbar/util/FABWrapper.java
new file mode 100644 (file)
index 0000000..a321cc6
--- /dev/null
@@ -0,0 +1,63 @@
+/* Copyright 2019 Braden Farmer
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.farmerbb.taskbar.util;
+
+import android.content.Context;
+import android.support.design.widget.FloatingActionButton;
+import android.support.v4.content.ContextCompat;
+import android.view.View;
+import android.widget.ImageView;
+
+import com.farmerbb.taskbar.BuildConfig;
+import com.farmerbb.taskbar.R;
+
+public class FABWrapper {
+    public View view;
+
+    public FABWrapper(Context context) {
+        view = !context.getPackageName().equals(BuildConfig.ANDROIDX86_APPLICATION_ID)
+                ? new ImageView(context)
+                : new FloatingActionButton(context);
+
+        if(view instanceof ImageView) {
+            view.setBackground(ContextCompat.getDrawable(context, R.drawable.tb_circle));
+
+            int padding = context.getResources().getDimensionPixelSize(R.dimen.tb_fake_fab_padding);
+            view.setPadding(padding, padding, padding, padding);
+        }
+    }
+
+    public void setImageResource(int resource) {
+        if(view instanceof FloatingActionButton)
+            ((FloatingActionButton) view).setImageResource(resource);
+        else if(view instanceof ImageView)
+            ((ImageView) view).setImageResource(resource);
+    }
+
+    public void show() {
+        if(view instanceof FloatingActionButton)
+            ((FloatingActionButton) view).show();
+        else if(view instanceof ImageView)
+            view.setVisibility(View.VISIBLE);
+    }
+
+    public void hide() {
+        if(view instanceof FloatingActionButton)
+            ((FloatingActionButton) view).hide();
+        else if(view instanceof ImageView)
+            view.setVisibility(View.GONE);
+    }
+}
diff --git a/app/src/main/res/drawable/tb_circle.xml b/app/src/main/res/drawable/tb_circle.xml
new file mode 100644 (file)
index 0000000..a8dcef7
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval">
+    <solid android:color="@android:color/white" />
+    <size
+        android:height="56dp"
+        android:width="56dp" />
+</shape>
\ No newline at end of file
index 649f439..24a52e3 100644 (file)
@@ -40,4 +40,5 @@
     <dimen name="caption_offset">48dp</dimen>
     <dimen name="desktop_icon_fab_margin">16dp</dimen>
     <dimen name="systray_size">180dp</dimen>
+    <dimen name="tb_fake_fab_padding">16dp</dimen>
 </resources>