From 416c626ec178f5dcab393f3887436d4c4c32a9ef Mon Sep 17 00:00:00 2001 From: Florens Douwes Date: Thu, 10 Apr 2014 22:24:32 +0200 Subject: [PATCH] The slidingpanelayout dimensions are now manually defined. There were some problems with slidingpanelayout on some devices. These were caused by the right pane being bigger than the screen width. Now there is a manual check to see if this is a tablet layout, and change the widths of the panes correctly, just like Hangouts does. --- Chan/res/layout/activity_base.xml | 4 +- .../chan/ui/activity/BoardActivity.java | 110 ++++++++++++------ .../ui/activity/WatchSettingsActivity.java | 4 +- .../floens/chan/ui/adapter/PostAdapter.java | 2 +- .../src/org/floens/chan/ui/view/PostView.java | 2 +- Chan/src/org/floens/chan/utils/Utils.java | 15 ++- 6 files changed, 91 insertions(+), 46 deletions(-) diff --git a/Chan/res/layout/activity_base.xml b/Chan/res/layout/activity_base.xml index b589a651..059dacab 100644 --- a/Chan/res/layout/activity_base.xml +++ b/Chan/res/layout/activity_base.xml @@ -10,13 +10,13 @@ diff --git a/Chan/src/org/floens/chan/ui/activity/BoardActivity.java b/Chan/src/org/floens/chan/ui/activity/BoardActivity.java index fdf7041d..b9681c64 100644 --- a/Chan/src/org/floens/chan/ui/activity/BoardActivity.java +++ b/Chan/src/org/floens/chan/ui/activity/BoardActivity.java @@ -11,6 +11,7 @@ import org.floens.chan.core.model.Pin; import org.floens.chan.core.model.Post; import org.floens.chan.service.WatchService; import org.floens.chan.ui.fragment.ThreadFragment; +import org.floens.chan.utils.Utils; import android.app.ActionBar; import android.app.AlertDialog; @@ -22,10 +23,13 @@ import android.net.Uri; import android.os.Bundle; import android.support.v4.app.ActionBarDrawerToggle; import android.text.TextUtils; +import android.util.DisplayMetrics; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.ViewGroup.LayoutParams; import android.widget.ArrayAdapter; +import android.widget.FrameLayout; public class BoardActivity extends BaseActivity implements ActionBar.OnNavigationListener { private Loadable boardLoadable = new Loadable(); @@ -49,16 +53,13 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio ft.replace(R.id.right_pane, threadFragment); ft.commitAllowingStateLoss(); + updatePaneState(); updateActionBarState(); final ActionBar actionBar = getActionBar(); actionBar.setListNavigationCallbacks( - new ArrayAdapter( - actionBar.getThemedContext(), - R.layout.board_select_spinner, - android.R.id.text1, - ChanApplication.getBoardManager().getMyBoardsKeys() - ), this); + new ArrayAdapter(actionBar.getThemedContext(), R.layout.board_select_spinner, + android.R.id.text1, ChanApplication.getBoardManager().getMyBoardsKeys()), this); Intent startIntent = getIntent(); Uri startUri = startIntent.getData(); @@ -111,8 +112,9 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio @Override protected void initDrawer() { - pinDrawerListener = new ActionBarDrawerToggle(this, pinDrawer, - R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {}; + pinDrawerListener = new ActionBarDrawerToggle(this, pinDrawer, R.drawable.ic_drawer, R.string.drawer_open, + R.string.drawer_close) { + }; super.initDrawer(); } @@ -141,6 +143,44 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio super.onConfigurationChanged(newConfig); pinDrawerListener.onConfigurationChanged(newConfig); updateActionBarState(); + + updatePaneState(); + } + + private void updatePaneState() { + DisplayMetrics metrics = new DisplayMetrics(); + getWindowManager().getDefaultDisplay().getMetrics(metrics); + int width = metrics.widthPixels; + + FrameLayout left = (FrameLayout) findViewById(R.id.left_pane); + FrameLayout right = (FrameLayout) findViewById(R.id.right_pane); + + LayoutParams leftParams = left.getLayoutParams(); + LayoutParams rightParams = right.getLayoutParams(); + + // Content view dp's: + // Nexus 4 is 384 x 640 dp + // Nexus 7 is 600 x 960 dp + // Nexus 10 is 800 x 1280 dp + + if (width < Utils.dp(800)) { + if (width < Utils.dp(400)) { + leftParams.width = width - Utils.dp(30); + } else { + leftParams.width = width - Utils.dp(150); + } + rightParams.width = width; + } else { + leftParams.width = Utils.dp(300); + rightParams.width = width - Utils.dp(300); + } + + left.setLayoutParams(leftParams); + right.setLayoutParams(rightParams); + + threadPane.requestLayout(); + left.requestLayout(); + right.requestLayout(); } @Override @@ -235,7 +275,7 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio return true; } - switch(item.getItemId()) { + switch (item.getItemId()) { case R.id.action_reload_board: case R.id.action_reload_tablet_board: boardFragment.reload(); @@ -300,7 +340,8 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio } private void startLoadingBoard(Loadable loadable) { - if (loadable.mode == Loadable.Mode.INVALID) return; + if (loadable.mode == Loadable.Mode.INVALID) + return; boardLoadable = loadable; @@ -313,7 +354,8 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio } private void startLoadingThread(Loadable loadable) { - if (loadable.mode == Loadable.Mode.INVALID) return; + if (loadable.mode == Loadable.Mode.INVALID) + return; Pin pin = ChanApplication.getPinnedManager().findPinByLoadable(loadable); if (pin != null) { @@ -341,6 +383,7 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio /** * Handle opening from an external url. + * * @param startUri */ private void handleIntentURI(Uri startUri) { @@ -374,7 +417,8 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio try { no = Integer.parseInt(parts.get(2)); - } catch (NumberFormatException e) {} + } catch (NumberFormatException e) { + } if (no >= 0 && ChanApplication.getBoardManager().getBoardExists(rawBoard)) { boardSetByIntent = true; @@ -391,31 +435,26 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio } private void handleIntentURIFallback(final String url) { - new AlertDialog.Builder(this) - .setTitle(R.string.open_unknown_title) - .setMessage(R.string.open_unknown) - .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // Cancel button - finish(); - } - }) - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - // Ok button - showUrlOpenPicker(url); - } - }) - .setCancelable(false) - .create() - .show(); + new AlertDialog.Builder(this).setTitle(R.string.open_unknown_title).setMessage(R.string.open_unknown) + .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Cancel button + finish(); + } + }).setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // Ok button + showUrlOpenPicker(url); + } + }).setCancelable(false).create().show(); } /** - * Set the visual selector to the board. If the user has not set the board as a favorite, - * return false. + * Set the visual selector to the board. If the user has not set the board + * as a favorite, return false. + * * @param boardValue * @return true if spinner was set, false otherwise */ @@ -437,6 +476,3 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio } } } - - - diff --git a/Chan/src/org/floens/chan/ui/activity/WatchSettingsActivity.java b/Chan/src/org/floens/chan/ui/activity/WatchSettingsActivity.java index 9a59be3d..1db89e83 100644 --- a/Chan/src/org/floens/chan/ui/activity/WatchSettingsActivity.java +++ b/Chan/src/org/floens/chan/ui/activity/WatchSettingsActivity.java @@ -39,7 +39,7 @@ public class WatchSettingsActivity extends Activity implements OnCheckedChangeLi watchSwitch = (Switch) menu.findItem(R.id.enable_watch_switch).getActionView(); watchSwitch.setOnCheckedChangeListener(this); - watchSwitch.setPadding(0, 0, Utils.dp(this, 14), 0); + watchSwitch.setPadding(0, 0, Utils.dp(14), 0); setEnabled(ChanPreferences.getWatchEnabled()); @@ -90,7 +90,7 @@ public class WatchSettingsActivity extends Activity implements OnCheckedChangeLi public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle savedInstanceState) { LinearLayout container = new LinearLayout(inflater.getContext()); - int p = Utils.dp(inflater.getContext(), 14); + int p = Utils.dp(14); container.setPadding(p, p, p, p); TextView text = new TextView(inflater.getContext()); diff --git a/Chan/src/org/floens/chan/ui/adapter/PostAdapter.java b/Chan/src/org/floens/chan/ui/adapter/PostAdapter.java index d8ec0ced..6fd3ebd6 100644 --- a/Chan/src/org/floens/chan/ui/adapter/PostAdapter.java +++ b/Chan/src/org/floens/chan/ui/adapter/PostAdapter.java @@ -92,7 +92,7 @@ public class PostAdapter extends BaseAdapter { view.init(threadManager, listView, this); int padding = context.getResources().getDimensionPixelSize(R.dimen.general_padding); view.setPadding(padding, padding, padding, padding); - int height = Utils.dp(context, 48f); + int height = Utils.dp(48f); view.setHeight(height); view.setGravity(Gravity.CENTER); return view; diff --git a/Chan/src/org/floens/chan/ui/view/PostView.java b/Chan/src/org/floens/chan/ui/view/PostView.java index 170d3b76..c0730766 100644 --- a/Chan/src/org/floens/chan/ui/view/PostView.java +++ b/Chan/src/org/floens/chan/ui/view/PostView.java @@ -316,7 +316,7 @@ public class PostView extends LinearLayout implements View.OnClickListener, View lastSeen = new View(context); lastSeen.setBackgroundColor(0xffff0000); - right.addView(lastSeen, new LayoutParams(LayoutParams.MATCH_PARENT, Utils.dp(context, 6f))); + right.addView(lastSeen, new LayoutParams(LayoutParams.MATCH_PARENT, Utils.dp(6f))); full.addView(right, matchWrapParams); diff --git a/Chan/src/org/floens/chan/utils/Utils.java b/Chan/src/org/floens/chan/utils/Utils.java index c82d0d89..2999a142 100644 --- a/Chan/src/org/floens/chan/utils/Utils.java +++ b/Chan/src/org/floens/chan/utils/Utils.java @@ -1,22 +1,31 @@ package org.floens.chan.utils; +import org.floens.chan.ChanApplication; + import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Looper; -import android.util.TypedValue; +import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; public class Utils { + private static DisplayMetrics displayMetrics; + public final static ViewGroup.LayoutParams MATCH_PARAMS = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); public final static ViewGroup.LayoutParams WRAP_PARAMS = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); public final static ViewGroup.LayoutParams MATCH_WRAP_PARAMS = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); public final static ViewGroup.LayoutParams WRAP_MATCH_PARAMS = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT); - public static int dp(Context context, float dp) { - return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics()); + public static int dp(float dp) { +// return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics()); + if (displayMetrics == null) { + displayMetrics = ChanApplication.getInstance().getResources().getDisplayMetrics(); + } + + return (int) (dp * displayMetrics.density); } /**