OSDN Git Service

The overflow menu should not show as an icon on devices with a physical
authorjruesga <jorge@ruesga.com>
Fri, 26 Oct 2012 18:36:17 +0000 (20:36 +0200)
committerjruesga <jorge@ruesga.com>
Fri, 26 Oct 2012 18:36:17 +0000 (20:36 +0200)
menu button (issue #14)

res/layout/history.xml
src/com/cyanogenmod/filemanager/activities/HistoryActivity.java
src/com/cyanogenmod/filemanager/activities/NavigationActivity.java
src/com/cyanogenmod/filemanager/util/AndroidHelper.java [new file with mode: 0644]

index d4cd34b..3291e12 100644 (file)
     android:layout_height="match_parent"
     android:layout_alignParentTop="true" />
 
+  <View
+    android:id="@+id/history_status"
+    android:layout_width="match_parent"
+    android:layout_height="1dp"
+    android:layout_alignParentBottom="true"
+    android:visibility="invisible"/>
+
 </RelativeLayout>
\ No newline at end of file
index 186e6dd..f4cc633 100644 (file)
@@ -37,6 +37,7 @@ import com.cyanogenmod.filemanager.adapters.HistoryAdapter;
 import com.cyanogenmod.filemanager.adapters.SimpleMenuListAdapter;
 import com.cyanogenmod.filemanager.model.History;
 import com.cyanogenmod.filemanager.ui.widgets.ButtonItem;
+import com.cyanogenmod.filemanager.util.AndroidHelper;
 import com.cyanogenmod.filemanager.util.DialogHelper;
 
 import java.util.ArrayList;
@@ -57,6 +58,8 @@ public class HistoryActivity extends Activity implements OnItemClickListener {
     private boolean mIsEmpty;
     private boolean mIsClearHistory;
 
+    private View mOptionsAnchorView;
+
     /**
      * Intent extra parameter for the history data.
      */
@@ -117,7 +120,11 @@ public class HistoryActivity extends Activity implements OnItemClickListener {
         ButtonItem configuration = (ButtonItem)customTitle.findViewById(R.id.ab_button1);
         configuration.setImageResource(R.drawable.ic_holo_light_overflow);
         configuration.setContentDescription(getString(R.string.actionbar_button_overflow_cd));
-        configuration.setVisibility(View.VISIBLE);
+
+        View status = findViewById(R.id.history_status);
+        boolean showOptionsMenu = AndroidHelper.showOptionsMenu(getApplicationContext());
+        configuration.setVisibility(showOptionsMenu ? View.VISIBLE : View.GONE);
+        this.mOptionsAnchorView = showOptionsMenu ? configuration : status;
 
         getActionBar().setCustomView(customTitle);
     }
@@ -170,7 +177,7 @@ public class HistoryActivity extends Activity implements OnItemClickListener {
         switch (keyCode) {
             case KeyEvent.KEYCODE_MENU:
                 if (!this.mIsEmpty) {
-                    showOverflowPopUp(findViewById(R.id.ab_button1));
+                    showOverflowPopUp(this.mOptionsAnchorView);
                 }
                 return true;
             case KeyEvent.KEYCODE_BACK:
index 24a6446..ccfd2f7 100644 (file)
@@ -75,6 +75,7 @@ import com.cyanogenmod.filemanager.ui.widgets.NavigationView;
 import com.cyanogenmod.filemanager.ui.widgets.NavigationView.OnNavigationRequestMenuListener;
 import com.cyanogenmod.filemanager.ui.widgets.NavigationView.OnNavigationSelectionChangedListener;
 import com.cyanogenmod.filemanager.ui.widgets.SelectionView;
+import com.cyanogenmod.filemanager.util.AndroidHelper;
 import com.cyanogenmod.filemanager.util.CommandHelper;
 import com.cyanogenmod.filemanager.util.DialogHelper;
 import com.cyanogenmod.filemanager.util.ExceptionUtil;
@@ -241,6 +242,8 @@ public class NavigationActivity extends Activity
     private boolean mExitFlag = false;
     private long mExitBackTimeout = -1;
 
+    private View mOptionsAnchorView;
+
     /**
      * @hide
      */
@@ -451,6 +454,12 @@ public class NavigationActivity extends Activity
                 }
             }
         });
+
+        // Have overflow menu?
+        View overflow = findViewById(R.id.ab_overflow);
+        boolean showOptionsMenu = AndroidHelper.showOptionsMenu(getApplicationContext());
+        overflow.setVisibility(showOptionsMenu ? View.VISIBLE : View.GONE);
+        this.mOptionsAnchorView = showOptionsMenu ? overflow : this.mActionBar;
     }
 
     /**
@@ -606,7 +615,7 @@ public class NavigationActivity extends Activity
     @Override
     public boolean onKeyUp(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_MENU) {
-            showOverflowPopUp(findViewById(R.id.ab_overflow));
+            showOverflowPopUp(this.mOptionsAnchorView);
             return true;
         }
         if (keyCode == KeyEvent.KEYCODE_BACK) {
diff --git a/src/com/cyanogenmod/filemanager/util/AndroidHelper.java b/src/com/cyanogenmod/filemanager/util/AndroidHelper.java
new file mode 100644 (file)
index 0000000..2cee5c7
--- /dev/null
@@ -0,0 +1,38 @@
+/**
+ * 
+ */
+package com.cyanogenmod.filemanager.util;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.view.ViewConfiguration;
+
+/**
+ * A helper class with useful methods for deal with android.
+ */
+public final class AndroidHelper {
+
+    /**
+     * Method that returns if the device is a tablet
+     * 
+     * @param ctx The current context
+     * @return boolean If device is a table
+     */
+    public static boolean isTablet(Context ctx) {
+        Configuration configuration = ctx.getResources().getConfiguration();
+        return (configuration.screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK)
+                >= Configuration.SCREENLAYOUT_SIZE_LARGE;
+    }
+    
+    /**
+    * Method that returns if an option menu has to be displayed
+    *
+    * @param ctx The current context
+    * @return boolean If an option menu has to be displayed
+    */
+    public static boolean showOptionsMenu(Context ctx) {
+        // Show overflow button?
+        return !ViewConfiguration.get(ctx).hasPermanentMenuKey();
+    }
+
+}