diff --git a/res/drawable-hdpi/ic_action_delete.png b/res/drawable-hdpi/ic_action_delete.png
new file mode 100644
index 000000000..878b378aa
Binary files /dev/null and b/res/drawable-hdpi/ic_action_delete.png differ
diff --git a/res/drawable-hdpi/ic_action_delete_dark.png b/res/drawable-hdpi/ic_action_delete_dark.png
new file mode 100644
index 000000000..ece5ad8d6
Binary files /dev/null and b/res/drawable-hdpi/ic_action_delete_dark.png differ
diff --git a/res/drawable-hdpi/ic_action_list.png b/res/drawable-hdpi/ic_action_list.png
new file mode 100644
index 000000000..71283ad4a
Binary files /dev/null and b/res/drawable-hdpi/ic_action_list.png differ
diff --git a/res/drawable-hdpi/ic_action_list_dark.png b/res/drawable-hdpi/ic_action_list_dark.png
new file mode 100644
index 000000000..f8688d898
Binary files /dev/null and b/res/drawable-hdpi/ic_action_list_dark.png differ
diff --git a/res/drawable-hdpi/ic_action_move.png b/res/drawable-hdpi/ic_action_move.png
new file mode 100644
index 000000000..b6576c13f
Binary files /dev/null and b/res/drawable-hdpi/ic_action_move.png differ
diff --git a/res/drawable-hdpi/ic_action_move_dark.png b/res/drawable-hdpi/ic_action_move_dark.png
new file mode 100644
index 000000000..58b5e49af
Binary files /dev/null and b/res/drawable-hdpi/ic_action_move_dark.png differ
diff --git a/res/drawable-mdpi/ic_action_delete.png b/res/drawable-mdpi/ic_action_delete.png
new file mode 100644
index 000000000..5ba245465
Binary files /dev/null and b/res/drawable-mdpi/ic_action_delete.png differ
diff --git a/res/drawable-mdpi/ic_action_delete_dark.png b/res/drawable-mdpi/ic_action_delete_dark.png
new file mode 100644
index 000000000..93483b6cb
Binary files /dev/null and b/res/drawable-mdpi/ic_action_delete_dark.png differ
diff --git a/res/drawable-mdpi/ic_action_list.png b/res/drawable-mdpi/ic_action_list.png
new file mode 100644
index 000000000..f9f8a2f9c
Binary files /dev/null and b/res/drawable-mdpi/ic_action_list.png differ
diff --git a/res/drawable-mdpi/ic_action_list_dark.png b/res/drawable-mdpi/ic_action_list_dark.png
new file mode 100644
index 000000000..e13fb118a
Binary files /dev/null and b/res/drawable-mdpi/ic_action_list_dark.png differ
diff --git a/res/drawable-mdpi/ic_action_move.png b/res/drawable-mdpi/ic_action_move.png
new file mode 100644
index 000000000..c1b96ea8e
Binary files /dev/null and b/res/drawable-mdpi/ic_action_move.png differ
diff --git a/res/drawable-mdpi/ic_action_move_dark.png b/res/drawable-mdpi/ic_action_move_dark.png
new file mode 100644
index 000000000..36101dd14
Binary files /dev/null and b/res/drawable-mdpi/ic_action_move_dark.png differ
diff --git a/res/drawable-xhdpi/ic_action_delete.png b/res/drawable-xhdpi/ic_action_delete.png
new file mode 100644
index 000000000..09ce75e29
Binary files /dev/null and b/res/drawable-xhdpi/ic_action_delete.png differ
diff --git a/res/drawable-xhdpi/ic_action_delete_dark.png b/res/drawable-xhdpi/ic_action_delete_dark.png
new file mode 100644
index 000000000..94f7c8c1c
Binary files /dev/null and b/res/drawable-xhdpi/ic_action_delete_dark.png differ
diff --git a/res/drawable-xhdpi/ic_action_list.png b/res/drawable-xhdpi/ic_action_list.png
new file mode 100644
index 000000000..c912b39aa
Binary files /dev/null and b/res/drawable-xhdpi/ic_action_list.png differ
diff --git a/res/drawable-xhdpi/ic_action_list_dark.png b/res/drawable-xhdpi/ic_action_list_dark.png
new file mode 100644
index 000000000..fd8fb3192
Binary files /dev/null and b/res/drawable-xhdpi/ic_action_list_dark.png differ
diff --git a/res/drawable-xhdpi/ic_action_move.png b/res/drawable-xhdpi/ic_action_move.png
new file mode 100644
index 000000000..8cfdeb62e
Binary files /dev/null and b/res/drawable-xhdpi/ic_action_move.png differ
diff --git a/res/drawable-xhdpi/ic_action_move_dark.png b/res/drawable-xhdpi/ic_action_move_dark.png
new file mode 100644
index 000000000..c1a72feb3
Binary files /dev/null and b/res/drawable-xhdpi/ic_action_move_dark.png differ
diff --git a/res/drawable-xxhdpi/card_bg_activated.9.png b/res/drawable-xxhdpi/card_bg_activated.9.png
new file mode 100644
index 000000000..368f0079b
Binary files /dev/null and b/res/drawable-xxhdpi/card_bg_activated.9.png differ
diff --git a/res/drawable-xxhdpi/ic_action_delete.png b/res/drawable-xxhdpi/ic_action_delete.png
new file mode 100644
index 000000000..d5952ea0c
Binary files /dev/null and b/res/drawable-xxhdpi/ic_action_delete.png differ
diff --git a/res/drawable-xxhdpi/ic_action_delete_dark.png b/res/drawable-xxhdpi/ic_action_delete_dark.png
new file mode 100644
index 000000000..0390e5782
Binary files /dev/null and b/res/drawable-xxhdpi/ic_action_delete_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_action_list.png b/res/drawable-xxhdpi/ic_action_list.png
new file mode 100644
index 000000000..a0cc3d0f5
Binary files /dev/null and b/res/drawable-xxhdpi/ic_action_list.png differ
diff --git a/res/drawable-xxhdpi/ic_action_list_dark.png b/res/drawable-xxhdpi/ic_action_list_dark.png
new file mode 100644
index 000000000..b6a366f10
Binary files /dev/null and b/res/drawable-xxhdpi/ic_action_list_dark.png differ
diff --git a/res/drawable-xxhdpi/ic_action_move.png b/res/drawable-xxhdpi/ic_action_move.png
new file mode 100644
index 000000000..7b73cf848
Binary files /dev/null and b/res/drawable-xxhdpi/ic_action_move.png differ
diff --git a/res/drawable-xxhdpi/ic_action_move_dark.png b/res/drawable-xxhdpi/ic_action_move_dark.png
new file mode 100644
index 000000000..85c4eb1f7
Binary files /dev/null and b/res/drawable-xxhdpi/ic_action_move_dark.png differ
diff --git a/res/drawable/list_item_bg.xml b/res/drawable/list_item_bg.xml
index cb2bdb9b4..3e38b8a35 100644
--- a/res/drawable/list_item_bg.xml
+++ b/res/drawable/list_item_bg.xml
@@ -24,6 +24,9 @@
+
\ No newline at end of file
diff --git a/res/layout/favorite_menu.xml b/res/layout/favorite_menu.xml
new file mode 100644
index 000000000..95cc51bc8
--- /dev/null
+++ b/res/layout/favorite_menu.xml
@@ -0,0 +1,24 @@
+
+
+
\ No newline at end of file
diff --git a/res/layout/favourite.xml b/res/layout/favourite.xml
index 75dad9766..72c895da6 100644
--- a/res/layout/favourite.xml
+++ b/res/layout/favourite.xml
@@ -13,10 +13,15 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
+ android:layout_height="fill_parent" >
+
+
+ android:cacheColorHint="@color/list_main_bg" >
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/res/xml/settings.xml b/res/menu/favorite.xml
similarity index 66%
rename from res/xml/settings.xml
rename to res/menu/favorite.xml
index e8b8e49f3..c66efbf70 100644
--- a/res/xml/settings.xml
+++ b/res/menu/favorite.xml
@@ -13,12 +13,10 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
-
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/res/menu/favorite_choice.xml b/res/menu/favorite_choice.xml
new file mode 100644
index 000000000..efd2a371b
--- /dev/null
+++ b/res/menu/favorite_choice.xml
@@ -0,0 +1,27 @@
+
+
+
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index e91a7e570..a5dbf93f5 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -292,6 +292,7 @@
感觉快要窒息了
+ 本地
标签
已复制
发送
@@ -318,6 +319,9 @@
跳页
第 %d 页
默认
+ 删除
+ 移动
+ 列表
首页
模式
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 9c81fe5af..f01a377ea 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -47,6 +47,17 @@
#ffeaccf3
@android:color/black
+ #ff616161
+ #ffff3e3e
+ #ffff923e
+ #fffff43e
+ #ff3eff6b
+ #ffb1ff3e
+ #ff3efeff
+ #ff4b3eff
+ #ffa23eff
+ #ffff3ec4
+
#ff333333
#ffaaaaaa
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 163e02471..2f7c87194 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -296,6 +296,7 @@
DISASTER
+ Local
Tag
Copyed
Send
@@ -323,6 +324,9 @@
Jump
Page %d
Default
+ Delete
+ Move
+ List
Homepage
Mode
diff --git a/src/com/hippo/ehviewer/ehclient/EhClient.java b/src/com/hippo/ehviewer/ehclient/EhClient.java
index 7544484b2..232f27f03 100644
--- a/src/com/hippo/ehviewer/ehclient/EhClient.java
+++ b/src/com/hippo/ehviewer/ehclient/EhClient.java
@@ -75,6 +75,8 @@ public class EhClient {
private static final String TAG = "EhClient";
+ public static final int FAVORITE_SLOT_NUM = 10;
+
public static final int G = 0x0;
public static final int EX = 0x1;
public static final int LOFI_460x = 0x2;
@@ -169,6 +171,19 @@ public class EhClient {
}
}
+ public static String getFavoriteUrl(int index) {
+ return getFavoriteUrl(Config.getMode(), index);
+ }
+
+ public static String getFavoriteUrl(int mode, int index) {
+ switch (mode) {
+ case EX:
+ return EX_HEADER + "favorites.php?favcat=" + index;
+ default:
+ return G_HEADER + "favorites.php?favcat=" + index;
+ }
+ }
+
public interface OnLogoutListener {
public void onSuccess();
public void onFailure(String eMsg);
@@ -1689,7 +1704,8 @@ public class EhClient {
// modifyFavorite
public interface OnModifyFavoriteListener {
- void onSuccess();
+ void onSuccess(ArrayList gis,
+ int indexPerPage, int maxPage);
void onFailure(String eMsg);
}
@@ -1706,8 +1722,14 @@ public class EhClient {
}
}
+ /**
+ *
+ * @param gids
+ * @param cat -1 for delete
+ * @param listener
+ */
public void modifyFavorite(final int[] gids, final int cat,
- final OnAddToFavoriteListener listener) {
+ final OnModifyFavoriteListener listener) {
new Thread(new Runnable() {
@Override
public void run() {
@@ -1717,7 +1739,15 @@ public class EhClient {
hp.setOnRespondListener(new HttpHelper.OnRespondListener() {
@Override
public void onSuccess(String pageContext) {
- listener.onSuccess();
+ ListParser parser = new ListParser();
+ int re = parser.parser(pageContext);
+ if (re == ListParser.ALL) {
+ listener.onSuccess(parser.giList, parser.indexPerPage, parser.maxPage);
+ } else if (re == ListParser.NOT_FOUND) {
+ listener.onSuccess(parser.giList, parser.indexPerPage, parser.maxPage);
+ } else if (re == ListParser.PARSER_ERROR) {
+ listener.onFailure("parser error"); // TODO
+ }
}
@Override
public void onFailure(String eMsg) {
diff --git a/src/com/hippo/ehviewer/ehclient/ListParser.java b/src/com/hippo/ehviewer/ehclient/ListParser.java
index 8b0a140c5..456b4b964 100644
--- a/src/com/hippo/ehviewer/ehclient/ListParser.java
+++ b/src/com/hippo/ehviewer/ehclient/ListParser.java
@@ -28,7 +28,6 @@ public class ListParser {
public static final int ALL = 0x1;
public static final int NOT_FOUND = 0x2;
- public static final int SAD_PANDA = 0x3;
public static final int PARSER_ERROR = -1;
public int indexPerPage = 25;
@@ -45,7 +44,7 @@ public class ListParser {
m = p.matcher(pageContext);
if (m.find()) {
maxPage = Integer.parseInt(m.group(1));
- } else if (pageContext.contains("No hits found")) {
+ } else if (pageContext.contains("No hits found")) {
maxPage = 0;
return NOT_FOUND;
} else {
@@ -53,7 +52,7 @@ public class ListParser {
}
giList = new ArrayList(indexPerPage);
- p = Pattern.compile(" | " // category
+ p = Pattern.compile("(?:)?(?:)? | " // category
+ "(.+?)" // posted
+ ""
+ "(?:"
diff --git a/src/com/hippo/ehviewer/network/HttpHelper.java b/src/com/hippo/ehviewer/network/HttpHelper.java
index fddf74e97..e53c566d9 100644
--- a/src/com/hippo/ehviewer/network/HttpHelper.java
+++ b/src/com/hippo/ehviewer/network/HttpHelper.java
@@ -363,6 +363,7 @@ public class HttpHelper {
sb.append(URLEncoder.encode(arg[1], "UTF-8"));
i++;
}
+ Log.d(TAG, sb.toString());
out.writeBytes(sb.toString());
out.flush();
out.close();
diff --git a/src/com/hippo/ehviewer/ui/FavouriteActivity.java b/src/com/hippo/ehviewer/ui/FavouriteActivity.java
index a304079b1..d07b3f73b 100644
--- a/src/com/hippo/ehviewer/ui/FavouriteActivity.java
+++ b/src/com/hippo/ehviewer/ui/FavouriteActivity.java
@@ -16,15 +16,25 @@
package com.hippo.ehviewer.ui;
+import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
-import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.content.res.Configuration;
+import android.content.res.Resources;
import android.graphics.Bitmap;
+import android.graphics.Path;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.ShapeDrawable;
+import android.graphics.drawable.shapes.PathShape;
import android.os.Bundle;
+import android.view.ActionMode;
import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
@@ -33,9 +43,8 @@ import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.TextView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.Toast;
+import android.widget.AdapterView.OnItemClickListener;
import com.hippo.ehviewer.AppContext;
import com.hippo.ehviewer.ImageGeterManager;
@@ -46,64 +55,40 @@ import com.hippo.ehviewer.ehclient.EhClient;
import com.hippo.ehviewer.service.DownloadService;
import com.hippo.ehviewer.service.DownloadServiceConnection;
import com.hippo.ehviewer.util.Cache;
-import com.hippo.ehviewer.util.Config;
+import com.hippo.ehviewer.util.Log;
import com.hippo.ehviewer.util.Ui;
-import com.hippo.ehviewer.widget.AlertButton;
import com.hippo.ehviewer.widget.DialogBuilder;
+import com.hippo.ehviewer.widget.FswView;
import com.hippo.ehviewer.widget.LoadImageView;
+import com.hippo.ehviewer.widget.OnFitSystemWindowsListener;
+import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
-public class FavouriteActivity extends AbstractActivity {
+public class FavouriteActivity extends AbstractSlidingActivity
+ implements ListView.MultiChoiceModeListener {
@SuppressWarnings("unused")
private static final String TAG = "FavouriteActivity";
private AppContext mAppContext;
private Data mData;
+ private Resources mResources;
+ private EhClient mClient;
- private FlAdapter flAdapter;
- private List mFavouriteLmd;
- private int longClickItemIndex;
+ private SlidingMenu mSlidingMenu;
+ private ListView mMenuList;
+
+ private ListView mListView;
+ private FlAdapter mAdapter;
+ private List mGis;
+ private Set mChoiceGids; // Store gid
+ private int mMenuIndex;
+ private String[] mFavoriteTitles;
+
+ private AlertDialog mMoveDialog;
private ImageGeterManager mImageGeterManager;
private DownloadServiceConnection mServiceConn = new DownloadServiceConnection();
- // List item long click dialog
- private AlertDialog longClickDialog;
-
- private AlertDialog setLongClickDialog() {
- return new DialogBuilder(this).setTitle(R.string.what_to_do)
- .setItems(R.array.favourite_item_long_click, new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView> arg0, View arg1,
- int position, long arg3) {
- switch (position) {
- case 0: // Remove favourite item
- mData.deleteLocalFavourite(mFavouriteLmd.get(longClickItemIndex).gid);
- flAdapter.notifyDataSetChanged();
- break;
- case 1:
- GalleryInfo lmd = mFavouriteLmd.get(longClickItemIndex);
- Intent it = new Intent(FavouriteActivity.this, DownloadService.class);
- startService(it);
- mServiceConn.getService().add(String.valueOf(lmd.gid), lmd.thumb,
- EhClient.getDetailUrl(lmd.gid, lmd.token), lmd.title);
- Toast.makeText(FavouriteActivity.this,
- getString(R.string.toast_add_download),
- Toast.LENGTH_SHORT).show();
- break;
- default:
- break;
- }
- longClickDialog.cancel();
- }
- }).setNegativeButton(android.R.string.cancel, new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- ((AlertButton)v).dialog.dismiss();
- }
- }).create();
- }
-
private class FlAdapter extends BaseAdapter {
private LayoutInflater mInflater;
@@ -113,12 +98,12 @@ public class FavouriteActivity extends AbstractActivity {
@Override
public int getCount() {
- return mFavouriteLmd.size();
+ return mGis.size();
}
@Override
public Object getItem(int arg0) {
- return mFavouriteLmd.get(arg0);
+ return mGis.get(arg0);
}
@Override
@@ -128,7 +113,7 @@ public class FavouriteActivity extends AbstractActivity {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
- GalleryInfo lmd= mFavouriteLmd.get(position);
+ GalleryInfo lmd= mGis.get(position);
if (convertView == null)
convertView = mInflater.inflate(R.layout.list_item, null);
@@ -188,8 +173,8 @@ public class FavouriteActivity extends AbstractActivity {
protected void onResume() {
super.onResume();
- if (flAdapter != null)
- flAdapter.notifyDataSetChanged();
+ if (mAdapter != null)
+ mAdapter.notifyDataSetChanged();
}
@Override
@@ -199,44 +184,157 @@ public class FavouriteActivity extends AbstractActivity {
mAppContext = (AppContext)getApplication();
mData = mAppContext.getData();
+ mResources =getResources();
mImageGeterManager = mAppContext.getImageGeterManager();
+ mClient = mAppContext.getEhClient();
Ui.translucent(this);
+ getActionBar().setDisplayHomeAsUpEnabled(true);
// Download service
Intent it = new Intent(FavouriteActivity.this, DownloadService.class);
bindService(it, mServiceConn, BIND_AUTO_CREATE);
- longClickDialog = setLongClickDialog();
+ setBehindContentView(R.layout.favorite_menu);
+ setSlidingActionBarEnabled(false);
+ mSlidingMenu = getSlidingMenu();
+ mSlidingMenu.setMode(SlidingMenu.RIGHT);
+ mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
+ mSlidingMenu.setBehindWidth(
+ mResources.getDimensionPixelOffset(R.dimen.menu_offset));
+ mSlidingMenu.setShadowDrawable(R.drawable.shadow_right);
+ mSlidingMenu.setShadowWidthRes(R.dimen.shadow_width);
- getActionBar().setDisplayHomeAsUpEnabled(true);
-
- mFavouriteLmd = mData.getAllLocalFavourites();
-
- ListView listView = (ListView)findViewById(R.id.favourite);
- flAdapter = new FlAdapter();
- listView.setAdapter(flAdapter);
- listView.setOnItemClickListener(new OnItemClickListener() {
+ mFavoriteTitles = new String[EhClient.FAVORITE_SLOT_NUM];
+ for (int i = 0; i < EhClient.FAVORITE_SLOT_NUM; i++) {
+ mFavoriteTitles[i] = "收藏 " + i;
+ }
+ mMenuIndex = 0;
+ setTitle("本地收藏"); // TODO
+ mGis = mData.getAllLocalFavourites();
+ mChoiceGids = new HashSet();
+ mListView = (ListView)findViewById(R.id.favourite);
+ mListView.setClipToPadding(false);
+ mAdapter = new FlAdapter();
+ mListView.setAdapter(mAdapter);
+ mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView> arg0, View arg1,
int position, long arg3) {
Intent intent = new Intent(FavouriteActivity.this,
MangaDetailActivity.class);
- GalleryInfo gi = mFavouriteLmd.get(position);
+ GalleryInfo gi = mGis.get(position);
intent.putExtra("url", EhClient.getDetailUrl(gi.gid, gi.token));
intent.putExtra(MangaDetailActivity.KEY_G_INFO, gi);
startActivity(intent);
}
});
- listView.setOnItemLongClickListener(new OnItemLongClickListener() {
+ mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
+ mListView.setMultiChoiceModeListener(this);
+
+ mMenuList = (ListView)findViewById(R.id.favorite_menu_list);
+ mMenuList.setClipToPadding(false);
+ mMenuList.setAdapter(new BaseAdapter() {
+ private ShapeDrawable d;
+ private ShapeDrawable createDrawable() {
+ Path path = new Path();
+ path.moveTo(50, 10);
+ path.lineTo(10, 50);
+ path.lineTo(50, 90);
+ path.lineTo(90, 50);
+ path.close();
+ ShapeDrawable d = new ShapeDrawable(new PathShape(path, 100, 100));
+ d.getPaint().setColor(0xcdffffff);
+ d.setBounds(0, 0, Ui.dp2pix(36), Ui.dp2pix(36));
+ return d;
+ }
@Override
- public boolean onItemLongClick(AdapterView> arg0, View arg1,
- int position, long arg3) {
- longClickItemIndex = position;
- longClickDialog.show();
- return true;
+ public int getCount() {
+ return EhClient.FAVORITE_SLOT_NUM + 1;
+ }
+ @Override
+ public Object getItem(int position) {
+ return null;
+ }
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ LayoutInflater li= LayoutInflater.from(FavouriteActivity.this);
+ TextView tv = (TextView)li.inflate(R.layout.menu_item, null);
+
+ if (position == 0) {
+ Drawable dr = mResources.getDrawable(R.drawable.ic_action_panda);
+ dr.setBounds(0, 0, Ui.dp2pix(36), Ui.dp2pix(36));
+ tv.setCompoundDrawables(dr, null, null, null);
+ tv.setCompoundDrawablePadding(Ui.dp2pix(8));
+ tv.setText("本地收藏"); // TODO
+ } else {
+ if (d == null)
+ d = createDrawable();
+ tv.setCompoundDrawables(d, null, null, null);
+ tv.setCompoundDrawablePadding(Ui.dp2pix(8));
+ tv.setText(mFavoriteTitles[position - 1]); // TODO
+ }
+ return tv;
}
});
+ mMenuList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view,
+ int position, long id) {
+ // If same index, do nothing
+ if (mMenuIndex == position)
+ return;
+
+ showContent();
+ mMenuIndex = position;
+ if (mMenuIndex == 0) {
+ setTitle("本地收藏"); // TODO
+ mGis = mData.getAllLocalFavourites();
+ mAdapter.notifyDataSetChanged();
+ } else {
+ setTitle(mFavoriteTitles[mMenuIndex - 1]); // TODO
+ mClient.getMangaList(EhClient.getFavoriteUrl(mMenuIndex - 1),
+ null, new EhClient.OnGetMangaListListener() {
+ @Override
+ public void onSuccess(Object checkFlag, ArrayList lmdArray,
+ int indexPerPage, int maxPage) {
+
+ mGis = lmdArray;
+ mAdapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void onFailure(Object checkFlag, String eMsg) {
+ Toast.makeText(FavouriteActivity.this, eMsg, Toast.LENGTH_SHORT).show();
+ }
+ });
+ // TODO
+ }
+ }
+ });
+
+
+ FswView alignment = (FswView)findViewById(R.id.alignment);
+ alignment.addOnFitSystemWindowsListener(new OnFitSystemWindowsListener() {
+ @Override
+ public void onfitSystemWindows(int paddingLeft, int paddingTop,
+ int paddingRight, int paddingBottom) {
+ mListView.setPadding(mListView.getPaddingLeft(), paddingTop,
+ mListView.getPaddingRight(), paddingBottom);
+ mMenuList.setPadding(mMenuList.getPaddingLeft(), paddingTop,
+ mMenuList.getPaddingRight(), paddingBottom);
+ }
+ });
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.favorite, menu);
+ return true;
}
@Override
@@ -246,6 +344,9 @@ public class FavouriteActivity extends AbstractActivity {
case android.R.id.home:
finish();
return true;
+ case R.id.action_list:
+ toggle();
+ return true;
default:
return super.onOptionsItemSelected(item);
}
@@ -257,7 +358,108 @@ public class FavouriteActivity extends AbstractActivity {
unbindService(mServiceConn);
}
- public void buttonListItemCancel(View v) {
- longClickDialog.cancel();
+
+ // ListView.MultiChoiceModeListener
+
+ @Override
+ public boolean onCreateActionMode(ActionMode mode, Menu menu) {
+ MenuInflater inflater = getMenuInflater();
+ inflater.inflate(R.menu.favorite_choice, menu);
+ mode.setTitle("Select Items"); // TODO
+ return true;
+ }
+
+ @Override
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ return true;
+ }
+
+ private AlertDialog createMoveDialog(final ActionMode mode) {
+ return new DialogBuilder(this).setTitle("移动至何处?") //
+ .setItems(mFavoriteTitles, new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view,
+ int position, long id) {
+ int[] gids = new int[mChoiceGids.size()];
+ int i = 0;
+ for (Integer gid : mChoiceGids)
+ gids[i++] = gid;
+ mClient.modifyFavorite(gids, position, new EhClient.OnModifyFavoriteListener() {
+ @Override
+ public void onSuccess(ArrayList gis,
+ int indexPerPage, int maxPage) {
+ Toast.makeText(FavouriteActivity.this,
+ "移动成功", Toast.LENGTH_SHORT).show(); // TODO
+ mGis = gis;
+ mAdapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void onFailure(String eMsg) {
+ Toast.makeText(FavouriteActivity.this,
+ "移动失败\n" + eMsg, Toast.LENGTH_SHORT).show(); // TODO
+ }
+ });
+
+ mMoveDialog.dismiss();
+ mMoveDialog = null;
+ mode.finish();
+ }
+ }).create();
+ }
+
+ @Override
+ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
+
+ switch (item.getItemId()) {
+ case R.id.action_delete:
+ if (mMenuIndex == 0) {
+ for (Integer gid : mChoiceGids)
+ mData.deleteLocalFavourite(gid);
+ mAdapter.notifyDataSetChanged();
+ } else {
+ int[] gids = new int[mChoiceGids.size()];
+ int i = 0;
+ for (Integer gid : mChoiceGids)
+ gids[i++] = gid;
+ mClient.modifyFavorite(gids, -1, new EhClient.OnModifyFavoriteListener() {
+ @Override
+ public void onSuccess(ArrayList gis, int indexPerPage,
+ int maxPage) {
+ Toast.makeText(FavouriteActivity.this,
+ "删除成功", Toast.LENGTH_SHORT).show(); // TODO
+ mGis = gis;
+ mAdapter.notifyDataSetChanged();
+ }
+ @Override
+ public void onFailure(String eMsg) {
+ Toast.makeText(FavouriteActivity.this,
+ "删除失败\n" + eMsg, Toast.LENGTH_SHORT).show(); // TODO
+ }
+ });
+ }
+ mode.finish();
+ return true;
+ case R.id.action_move:
+ mMoveDialog = createMoveDialog(mode);
+ mMoveDialog.show();
+ return true;
+ default:
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+ @Override
+ public void onDestroyActionMode(ActionMode mode) {
+ mChoiceGids.clear();
+ }
+
+ @Override
+ public void onItemCheckedStateChanged(ActionMode mode, int position,
+ long id, boolean checked) {
+ if (checked)
+ mChoiceGids.add(mGis.get(position).gid);
+ else
+ mChoiceGids.remove(mGis.get(position).gid);
}
}