diff --git a/res/layout/gallery_list_detail_item.xml b/res/layout/gallery_list_detail_item.xml index 068e8e187..455f44cf3 100644 --- a/res/layout/gallery_list_detail_item.xml +++ b/res/layout/gallery_list_detail_item.xml @@ -66,7 +66,7 @@ style="@style/CardSubtitle" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginBottom="5dp" + android:layout_marginBottom="8dp" android:paddingBottom="2dp" android:paddingLeft="8dp" android:paddingRight="8dp" diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml index bdfc4fc23..dcccead6d 100644 --- a/res/xml/display_settings.xml +++ b/res/xml/display_settings.xml @@ -74,7 +74,7 @@ android:title="@string/list_mode_title" android:entries="@array/list_mode_entries" android:entryValues="@array/list_mode_entry_values" - android:defaultValue="1" + android:defaultValue="0" android:summary="%s" /> mProperties; + + public FormData() { + mProperties = new LinkedHashMap(); + } + + public void setProperty(String key, String value) { + mProperties.put(key, value); + } + + public void clearProperty(String key) { + mProperties.remove(key); + } + + public void clearAllProperties() { + mProperties.clear(); + } + + /** + * Put information to target OutputStream. + * + * @param os Target OutputStream + * @throws IOException + */ + public abstract void output(OutputStream os) throws IOException; + + public void doOutPut(OutputStream os) throws IOException { + StringBuilder sb = new StringBuilder(); + for (String key : mProperties.keySet()) + sb.append(key).append(": ").append(mProperties.get(key)).append("\r\n"); + sb.append("\r\n"); + os.write(sb.toString().getBytes()); + output(os); + } + } + + public static class StringData extends FormData { + private final String mStr; + + public StringData(String str) { + mStr = str; + } + + @Override + public void output(OutputStream os) throws IOException { + os.write(mStr.getBytes()); + os.write("\r\n".getBytes()); + } + } + + public static class BitmapData extends FormData { + private final Bitmap mBitmap; + + public BitmapData(Bitmap bmp) { + mBitmap = bmp; + setProperty("Content-Type", "image/jpeg"); + } + + @Override + public void output(OutputStream os) throws IOException { + mBitmap.compress(Bitmap.CompressFormat.JPEG, 80, os); //TODO I need a better quality + os.write("\r\n".getBytes()); + } + } + + public static class FileData extends FormData { + private final File mFile; + + public FileData(File file) { + mFile = file; + setProperty("Content-Type", + URLConnection.guessContentTypeFromName(file.getName())); + } + + @Override + public void output(OutputStream os) throws IOException { + Util.copy(new FileInputStream(mFile), os, 1024); + os.write("\r\n".getBytes()); + } + } + + private class PostFormDataHelper extends GetStringHelper { + private static final String BOUNDARY = "------WebKitFormBoundary7eDB0hDQ91s22Tkf"; + + private final FormData[] mDatas; + + + public PostFormDataHelper(String url, FormData[] datas) { + super(url); + mDatas = datas; + } + + @Override + public void onBeforeConnect(HttpURLConnection conn) throws Exception { + super.onBeforeConnect(conn); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setUseCaches(false); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundary7eDB0hDQ91s22Tkf"); + + DataOutputStream out = new DataOutputStream(conn.getOutputStream()); + + for (FormData data : mDatas) { + out.write(BOUNDARY.getBytes()); + out.write("\r\n".getBytes()); + data.doOutPut(out); + } + out.write(BOUNDARY.getBytes()); + out.write("--".getBytes()); + + out.flush(); + out.close(); + } + } + private class GetImageHelper implements RequestHelper { private final String mUrl; @@ -692,6 +815,16 @@ public class HttpHelper { return (String)requst(new PostJsonHelper(url, json)); } + /** + * Post form data, multipart/form-data + * @param url + * @param datas + * @return + */ + public String postFormData(String url, FormData[] datas) { + return (String)requst(new PostFormDataHelper(url, datas)); + } + /** * Get image * @param url diff --git a/src/com/hippo/ehviewer/ui/SettingsActivity.java b/src/com/hippo/ehviewer/ui/SettingsActivity.java index d14c38550..755276ff8 100644 --- a/src/com/hippo/ehviewer/ui/SettingsActivity.java +++ b/src/com/hippo/ehviewer/ui/SettingsActivity.java @@ -72,7 +72,7 @@ import com.readystatesoftware.systembartint.SystemBarTintManager.SystemBarConfig public class SettingsActivity extends AbstractPreferenceActivity { @SuppressWarnings("unused") - private static String TAG = "Settings"; + private static String TAG = SettingsActivity.class.getSimpleName(); public static final String KEY_FRAGMENT = "FRAGMENT"; public static final int DEFAULT = -0x1; @@ -101,7 +101,7 @@ public class SettingsActivity extends AbstractPreferenceActivity { mListView.setPadding(mListView.getPaddingLeft(), mSystemBarConfig.getStatusBarHeight() + mSystemBarConfig.getActionBarHeight(), - originPaddingRight + mSystemBarConfig.getNavigationBarWidth(), + originPaddingRight, originPaddingBottom); break; } @@ -145,17 +145,6 @@ public class SettingsActivity extends AbstractPreferenceActivity { originPaddingBottom = mListView.getPaddingBottom(); adjustPadding(); - - /* - switch (savedInstanceState.getInt(KEY_FRAGMENT, DEFAULT)) { - case DISPLAY: - this.star.startPreferenceFragment(fragment, true); - break; - case DATA: - break; - case ABOUT: - break; - }*/ } @Override @@ -261,7 +250,7 @@ public class SettingsActivity extends AbstractPreferenceActivity { case Ui.ORIENTATION_LANDSCAPE: mListView.setPadding(mListView.getPaddingLeft(), mSystemBarConfig.getStatusBarHeight() + mSystemBarConfig.getActionBarHeight(), - originPaddingRight + mSystemBarConfig.getNavigationBarWidth(), + originPaddingRight, originPaddingBottom); break; } diff --git a/src/com/hippo/ehviewer/util/Config.java b/src/com/hippo/ehviewer/util/Config.java index 7bac7b2bd..274f08dbd 100644 --- a/src/com/hippo/ehviewer/util/Config.java +++ b/src/com/hippo/ehviewer/util/Config.java @@ -312,7 +312,7 @@ public class Config { /****** Display ******/ private static final String KEY_LIST_MODE = "list_mode"; - private static final String DEFAULT_LIST_MODE = "1"; + private static final String DEFAULT_LIST_MODE = "0"; private static final String KEY_LIST_THUMB_COLUMNS_PORTRAIT = "list_thumb_columns_portrait"; private static final int DEFAULT_LIST_THUMB_COLUMNS_PORTRAIT = 3; diff --git a/src/com/hippo/ehviewer/widget/SimpleGridLayout.java b/src/com/hippo/ehviewer/widget/SimpleGridLayout.java index 61b3a2b3b..f04868be3 100644 --- a/src/com/hippo/ehviewer/widget/SimpleGridLayout.java +++ b/src/com/hippo/ehviewer/widget/SimpleGridLayout.java @@ -48,6 +48,7 @@ public class SimpleGridLayout extends ViewGroup { public SimpleGridLayout(Context context) { super(context); + init(); } public SimpleGridLayout(Context context, AttributeSet attrs) { @@ -56,6 +57,7 @@ public class SimpleGridLayout extends ViewGroup { public SimpleGridLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); + init(); TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.SimpleGridLayout, defStyle, 0); @@ -81,9 +83,15 @@ public class SimpleGridLayout extends ViewGroup { typedArray.recycle(); } + public void init() { + setWillNotDraw(true); + } + public void setItemMargin(int itemMargin) { - mItemMargin = itemMargin; - requestLayout(); + if (mItemMargin != itemMargin) { + mItemMargin = itemMargin; + requestLayout(); + } } public void setColumnCount(int columnCount) {