OSDN Git Service

Dirty hack to work around context menu positioning issues on Chrome OS
authorBraden Farmer <farmerbb@gmail.com>
Sat, 20 Oct 2018 05:13:54 +0000 (23:13 -0600)
committerBraden Farmer <farmerbb@gmail.com>
Sat, 20 Oct 2018 05:13:54 +0000 (23:13 -0600)
app/src/main/java/com/farmerbb/taskbar/activity/ContextMenuActivity.java
app/src/main/java/com/farmerbb/taskbar/activity/MainActivity.java
app/src/main/res/values/dimens.xml

index cae1baa..1d72cf4 100644 (file)
@@ -200,6 +200,14 @@ public class ContextMenuActivity extends PreferenceActivity implements Preferenc
         params.width = getResources().getDimensionPixelSize(R.dimen.context_menu_width);
         params.dimAmount = 0;
 
+        if(U.isChromeOs(this) && U.getTaskbarPosition(this).contains("bottom")) {
+            SharedPreferences pref = U.getSharedPreferences(this);
+
+            if(pref.getBoolean("chrome_os_context_menu_fix", true)
+                    && !pref.getBoolean("has_caption", false))
+                params.y = params.y - getResources().getDimensionPixelSize(R.dimen.caption_offset);
+        }
+
         getWindow().setAttributes(params);
 
         if(U.isChromeOs(this) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
index 12fc86c..1befac2 100644 (file)
@@ -33,6 +33,7 @@ import android.graphics.drawable.Icon;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.Handler;
 import android.support.design.widget.Snackbar;
 import android.support.v4.content.LocalBroadcastManager;
 import android.support.v7.app.ActionBar;
@@ -67,6 +68,8 @@ public class MainActivity extends AppCompatActivity {
         }
     };
 
+    private boolean hasCaption = false;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -118,6 +121,13 @@ public class MainActivity extends AppCompatActivity {
         if(!launcherEnabled)
             LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.KILL_HOME_ACTIVITY"));
 
+        // Update caption state
+        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && U.isChromeOs(this)) {
+            getWindow().setRestrictedCaptionAreaListener(rect -> hasCaption = true);
+
+            new Handler().postDelayed(() -> pref.edit().putBoolean("has_caption", hasCaption).apply(), 500);
+        }
+
         if(BuildConfig.APPLICATION_ID.equals(BuildConfig.PAID_APPLICATION_ID)) {
             File file = new File(getFilesDir() + File.separator + "imported_successfully");
             if(freeVersionInstalled() && !file.exists()) {
@@ -286,9 +296,12 @@ public class MainActivity extends AppCompatActivity {
 
     @Override
     protected void onDestroy() {
-        super.onDestroy();
-
         LocalBroadcastManager.getInstance(this).unregisterReceiver(switchReceiver);
+
+        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && U.isChromeOs(this))
+            getWindow().setRestrictedCaptionAreaListener(null);
+
+        super.onDestroy();
     }
 
     @SuppressWarnings("deprecation")
index a16eabb..affc9c6 100644 (file)
@@ -37,4 +37,5 @@
     <dimen name="divider_size">5dp</dimen>
     <dimen name="navbar_buttons_margin">8dp</dimen>
     <dimen name="toast_y_offset">64dp</dimen>
+    <dimen name="caption_offset">48dp</dimen>
 </resources>