使用原生 Toast 样式
This commit is contained in:
1 parent
0e125738e2
commit
a98cd0bc79
31 files changed
+454
-505
No files matched your search
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 965 B |
Binary file not shown.
|
After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
@@ -1,80 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2014 Hippo Seven
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/manga_detail_scrollview"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:clipToPadding="false"
|
||||
android:fadingEdge="vertical"
|
||||
android:scrollbars="vertical" >
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/manga_detail"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<include
|
||||
android:id="@+id/detail_header"
|
||||
layout="@layout/detail_header" />
|
||||
|
||||
<View
|
||||
android:id="@+id/colorful_bar"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="2.0dp" />
|
||||
|
||||
<!-- TODO maybe viewstub and is better -->
|
||||
|
||||
<include
|
||||
android:id="@+id/manga_detail_normal"
|
||||
layout="@layout/detail_normal"
|
||||
android:visibility="gone" />
|
||||
|
||||
<include
|
||||
android:id="@+id/manga_detail_offensive"
|
||||
layout="@layout/detail_offensive"
|
||||
android:visibility="gone" />
|
||||
|
||||
<include
|
||||
android:id="@+id/manga_detail_pining"
|
||||
layout="@layout/detail_pining"
|
||||
android:visibility="gone" />
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="0dip"
|
||||
android:layout_weight="1" >
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/detail_wait"
|
||||
style="@style/ProgressBar.Large"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/detail_refresh"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:text="@string/refresh"
|
||||
android:visibility="gone" />
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
||||
@@ -1,105 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2014 Hippo Seven
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="vertical" >
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="6.0dp"
|
||||
android:layout_marginLeft="12.0dp"
|
||||
android:layout_marginRight="12.0dp"
|
||||
android:layout_marginTop="6.0dp" >
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="horizontal" >
|
||||
|
||||
<RatingBar
|
||||
android:id="@+id/detail_rate"
|
||||
style="@style/RatingBarSmall"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true" />
|
||||
|
||||
<TextSwitcher
|
||||
android:id="@+id/detail_average_people"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerVertical="true"
|
||||
android:layout_marginLeft="6.0dp"
|
||||
android:layout_toRightOf="@id/detail_rate"
|
||||
android:inAnimation="@anim/push_up_in"
|
||||
android:outAnimation="@anim/push_up_out" >
|
||||
</TextSwitcher>
|
||||
</RelativeLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/detail_posted"
|
||||
style="@style/DetailSubtitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_alignParentTop="true" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/detail_language"
|
||||
style="@style/DetailSubtitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentLeft="true"
|
||||
android:layout_below="@id/detail_posted"
|
||||
android:layout_marginTop="2.0dp" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/detail_pages_size"
|
||||
style="@style/DetailSubtitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_below="@id/detail_posted"
|
||||
android:layout_marginTop="2.0dp" />
|
||||
</RelativeLayout>
|
||||
|
||||
<View
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="1.0dp"
|
||||
android:background="@color/divider" />
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/tags_layout"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:orientation="vertical" >
|
||||
</LinearLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/divider"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="1.0dp"
|
||||
android:background="@color/divider" />
|
||||
|
||||
<include
|
||||
android:id="@+id/page_list"
|
||||
layout="@layout/preview_list"
|
||||
android:visibility="gone" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -0,0 +1,37 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
/* //device/apps/common/res/layout/transient_notification.xml
|
||||
**
|
||||
** Copyright 2006, The Android Open Source Project
|
||||
**
|
||||
** Licensed under the Apache License, Version 2.0 (the "License");
|
||||
** you may not use this file except in compliance with the License.
|
||||
** You may obtain a copy of the License at
|
||||
**
|
||||
** http://www.apache.org/licenses/LICENSE-2.0
|
||||
**
|
||||
** Unless required by applicable law or agreed to in writing, software
|
||||
** distributed under the License is distributed on an "AS IS" BASIS,
|
||||
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
** See the License for the specific language governing permissions and
|
||||
** limitations under the License.
|
||||
*/
|
||||
-->
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:background="@drawable/toast_frame">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/message"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:textAppearance="@style/TextAppearance.Toast"
|
||||
android:textColor="@color/primary_text_light"
|
||||
android:shadowColor="#BB000000"
|
||||
android:shadowRadius="2.75" />
|
||||
|
||||
</LinearLayout>
|
||||
@@ -1,61 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Copyright (C) 2014 Hippo Seven
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="24.0dp"
|
||||
android:paddingRight="24.0dp" >
|
||||
|
||||
<!-- TODO I have no idear how to make some space in left and right when message is long -->
|
||||
<LinearLayout
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:minHeight="60.0dp"
|
||||
android:minWidth="100.0dp"
|
||||
android:background="@android:color/holo_purple" >
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/icon"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:paddingLeft="16dip"
|
||||
android:paddingStart="16dip" />
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="0dip"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1" >
|
||||
|
||||
<TextView
|
||||
android:id="@+id/message"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_centerInParent="true"
|
||||
android:paddingLeft="16dip"
|
||||
android:paddingStart="16dip"
|
||||
android:paddingRight="16dip"
|
||||
android:paddingEnd="16dip"
|
||||
android:paddingTop="18.0dp"
|
||||
android:paddingBottom="18.0dp"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="16sp" />
|
||||
|
||||
</RelativeLayout>
|
||||
</LinearLayout>
|
||||
</FrameLayout>
|
||||
|
||||
@@ -80,11 +80,9 @@
|
||||
android:layout_marginLeft="8.0dp"
|
||||
android:text="@string/logout" />
|
||||
|
||||
<ProgressBar
|
||||
<com.hippo.ehviewer.widget.MaterialProgress
|
||||
android:id="@+id/wait"
|
||||
style="?android:attr/progressBarStyleLarge"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/MaterialProgress"
|
||||
android:layout_centerInParent="true" />
|
||||
</RelativeLayout>
|
||||
|
||||
|
||||
+17
-20
@@ -115,7 +115,6 @@
|
||||
</style>
|
||||
|
||||
<!-- Text -->
|
||||
|
||||
<style name="TextAppearance.CardTitle">
|
||||
<item name="android:textSize">@dimen/text_little_large</item>
|
||||
</style>
|
||||
@@ -171,26 +170,24 @@
|
||||
<item name="android:paddingRight">8dp</item>
|
||||
</style>
|
||||
|
||||
<style name="SearchCategory">
|
||||
<item name="android:paddingTop">2dp</item>
|
||||
<item name="android:paddingBottom">2dp</item>
|
||||
<item name="android:gravity">center</item>
|
||||
<item name="android:singleLine">true</item>
|
||||
<item name="android:ellipsize">marquee</item>
|
||||
<item name="android:textColor">@color/primary_text_light</item>
|
||||
<style name="TextAppearance.SearchCategory">
|
||||
<item name="@android:textColor">@color/primary_text_light</item>
|
||||
<item name="@android:textStyle">bold</item>
|
||||
<item name="@android:singleLine">true</item>
|
||||
</style>
|
||||
|
||||
<style name="RatingBarSmall">
|
||||
<item name="android:background">@null</item>
|
||||
<item name="android:layout_width">wrap_content</item>
|
||||
<item name="android:layout_height">wrap_content</item>
|
||||
<item name="android:button">@null</item>
|
||||
<item name="android:maxHeight">@dimen/rating_bar_small_height</item>
|
||||
<item name="android:progressDrawable">@drawable/ratingbar_small</item>
|
||||
<item name="android:minHeight">@dimen/rating_bar_small_height</item>
|
||||
<item name="android:thumb">@null</item>
|
||||
<item name="android:numStars">5</item>
|
||||
<item name="android:stepSize">0.5</item>
|
||||
<item name="android:isIndicator">true</item>
|
||||
<style name="SearchCategory">
|
||||
<item name="@android:textAppearance">@style/TextAppearance.SearchCategory</item>
|
||||
<item name="@android:paddingTop">4dp</item>
|
||||
<item name="@android:paddingBottom">4dp</item>
|
||||
<item name="@android:gravity">center</item>
|
||||
<item name="@android:ellipsize">marquee</item>
|
||||
</style>
|
||||
|
||||
<style name="TextAppearance.Toast">
|
||||
<item name="@android:textSize">@dimen/text_little_large</item>
|
||||
<item name="@android:textStyle">normal</item>
|
||||
<item name="@android:fontFamily">sans-serif-condensed</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
||||
@@ -34,7 +34,7 @@ import com.hippo.ehviewer.util.Download;
|
||||
import com.hippo.ehviewer.util.Favorite;
|
||||
import com.hippo.ehviewer.util.ThreadPool;
|
||||
import com.hippo.ehviewer.util.Ui;
|
||||
import com.hippo.ehviewer.widget.SuperToast;
|
||||
import com.hippo.ehviewer.widget.MaterialToast;
|
||||
|
||||
public class AppContext extends Application implements UncaughtExceptionHandler {
|
||||
|
||||
@@ -62,7 +62,7 @@ public class AppContext extends Application implements UncaughtExceptionHandler
|
||||
Download.init(this);
|
||||
Favorite.init(this);
|
||||
Data.createInstance(this);
|
||||
SuperToast.setContext(this);
|
||||
MaterialToast.setContext(this);
|
||||
|
||||
// Do catch error prepare
|
||||
mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
|
||||
|
||||
@@ -71,8 +71,11 @@ public class GallerysDownloader implements Runnable {
|
||||
mContext = context;
|
||||
mGalleryInfo = galleryInfo;
|
||||
mPageIndex = startIndex;
|
||||
|
||||
|
||||
|
||||
mDownloadDir = new File(Config.getDownloadPath(),
|
||||
Utils.rightFileName(mGalleryInfo.gid + '-' + mGalleryInfo.title));
|
||||
Utils.standardizeFilename(mGalleryInfo.gid + '-' + mGalleryInfo.title));
|
||||
mDownloadDir.mkdirs();
|
||||
// TODO What if these is a file with the same name
|
||||
|
||||
@@ -81,6 +84,9 @@ public class GallerysDownloader implements Runnable {
|
||||
mRequstPage = new LinkedList<Integer>();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public void start() {
|
||||
mMainThread.start();
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ public class ImageLoader {
|
||||
}
|
||||
|
||||
private class ImageDownloader {
|
||||
private static final int MAX_DOWNLOAD_THREADS = 3;
|
||||
private static final int MAX_DOWNLOAD_THREADS = 5;
|
||||
private final Stack<LoadTask> mDownloadTasks;
|
||||
private int mWorkingThreadNum = 0;
|
||||
private final Object mLock;
|
||||
|
||||
@@ -1143,7 +1143,7 @@ public class EhClient {
|
||||
}
|
||||
|
||||
//Create folder
|
||||
File folder = new File(Config.getDownloadPath() + File.separatorChar + Utils.rightFileName(curDownloadInfo.title)); // TODO For title contain invailed char
|
||||
File folder = new File(Config.getDownloadPath() + File.separatorChar + Utils.standardizeFilename(curDownloadInfo.title)); // TODO For title contain invailed char
|
||||
if (!folder.mkdirs() && !folder.isDirectory()) {
|
||||
listener.onDownloadMangaOver(curDownloadInfo.gid, false);
|
||||
curDownloadInfo.status = DownloadInfo.FAILED;
|
||||
|
||||
@@ -157,7 +157,7 @@ public class HttpHelper {
|
||||
return SAD_PANDA_ERROR;
|
||||
|
||||
else if (e instanceof GetBodyException)
|
||||
return "Sad Panda"; // TODO
|
||||
return "Null"; // TODO
|
||||
|
||||
else
|
||||
return e.getClass().getSimpleName() + ": " +e.getMessage();
|
||||
@@ -624,6 +624,7 @@ public class HttpHelper {
|
||||
@Override
|
||||
public Object onAfterConnect(HttpURLConnection conn)
|
||||
throws Exception {
|
||||
// TODO If read out of time, bitmap might be incomplete.
|
||||
Bitmap bmp = BitmapFactory.decodeStream(conn.getInputStream(), null, Ui.getBitmapOpt());
|
||||
if (bmp == null)
|
||||
throw new GetBodyException();
|
||||
|
||||
@@ -40,7 +40,7 @@ import com.hippo.ehviewer.util.Utils;
|
||||
import com.hippo.ehviewer.widget.AlertButton;
|
||||
import com.hippo.ehviewer.widget.ColorPickerView;
|
||||
import com.hippo.ehviewer.widget.DialogBuilder;
|
||||
import com.hippo.ehviewer.widget.SuperToast;
|
||||
import com.hippo.ehviewer.widget.MaterialToast;
|
||||
|
||||
public class ColorPreference extends Preference implements Preference.OnPreferenceClickListener {
|
||||
|
||||
@@ -208,8 +208,7 @@ public class ColorPreference extends Preference implements Preference.OnPreferen
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
((AlertButton)v).dialog.dismiss();
|
||||
new SuperToast(R.string.restart_to_take_effect).show();
|
||||
|
||||
MaterialToast.showToast(R.string.restart_to_take_effect);
|
||||
int color = getColor() | 0xff000000;
|
||||
Config.setThemeColor(color);
|
||||
setColor(color);
|
||||
|
||||
@@ -28,7 +28,7 @@ import com.hippo.ehviewer.R;
|
||||
import com.hippo.ehviewer.util.Config;
|
||||
import com.hippo.ehviewer.widget.AlertButton;
|
||||
import com.hippo.ehviewer.widget.DialogBuilder;
|
||||
import com.hippo.ehviewer.widget.SuperToast;
|
||||
import com.hippo.ehviewer.widget.MaterialToast;
|
||||
|
||||
public class NumberOfColumnsPreference extends Preference
|
||||
implements Preference.OnPreferenceClickListener {
|
||||
@@ -114,7 +114,7 @@ public class NumberOfColumnsPreference extends Preference
|
||||
throw new Exception();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
new SuperToast(R.string.invalid_input, SuperToast.ERROR).show();
|
||||
MaterialToast.showToast(R.string.invalid_input);
|
||||
}
|
||||
}
|
||||
}).create().show();
|
||||
|
||||
@@ -34,9 +34,9 @@ import com.hippo.ehviewer.cache.ImageCache;
|
||||
import com.hippo.ehviewer.data.GalleryInfo;
|
||||
import com.hippo.ehviewer.ehclient.EhClient;
|
||||
import com.hippo.ehviewer.ehclient.ListParser;
|
||||
import com.hippo.ehviewer.widget.MaterialToast;
|
||||
import com.hippo.ehviewer.widget.PullViewGroup;
|
||||
import com.hippo.ehviewer.widget.RefreshTextView;
|
||||
import com.hippo.ehviewer.widget.SuperToast;
|
||||
|
||||
public abstract class AbstractGalleryActivity extends AbstractSlidingActivity
|
||||
implements PullViewGroup.OnFooterRefreshListener,
|
||||
@@ -277,7 +277,6 @@ public abstract class AbstractGalleryActivity extends AbstractSlidingActivity
|
||||
mRefreshTextView.setDefaultRefresh("点击重试", new RefreshTextView.OnRefreshListener() { // TODO
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
mRefreshTextView.setRefreshing(true);
|
||||
retry();
|
||||
}
|
||||
});
|
||||
@@ -487,7 +486,7 @@ public abstract class AbstractGalleryActivity extends AbstractSlidingActivity
|
||||
default:
|
||||
mRefreshTextView.setRefreshing(false);
|
||||
mRefreshTextView.setVisibility(View.GONE);
|
||||
new SuperToast(eMsg, SuperToast.ERROR).show();
|
||||
MaterialToast.showToast(eMsg);
|
||||
}
|
||||
mPullViewGroup.setAnyRefreshComplete(false);
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@ public class DownloadActivity extends AbstractActivity {
|
||||
case 1: // Remove info item
|
||||
mServiceConn.getService().cancel(Download.getKey(longClickItemIndex));
|
||||
mDlAdapter.notifyDataSetChanged();
|
||||
File dir = new File(Config.getDownloadPath(), Utils.rightFileName(Download.get(longClickItemIndex).title));
|
||||
File dir = new File(Config.getDownloadPath(), Utils.standardizeFilename(Download.get(longClickItemIndex).title));
|
||||
try {
|
||||
Utils.deleteContents(dir);
|
||||
} catch (IOException e) {
|
||||
|
||||
@@ -67,10 +67,10 @@ import com.hippo.ehviewer.widget.ActionableToastBar;
|
||||
import com.hippo.ehviewer.widget.ActionableToastBar.ActionClickedListener;
|
||||
import com.hippo.ehviewer.widget.DialogBuilder;
|
||||
import com.hippo.ehviewer.widget.LoadImageView;
|
||||
import com.hippo.ehviewer.widget.MaterialToast;
|
||||
import com.hippo.ehviewer.widget.ProgressDialogBulider;
|
||||
import com.hippo.ehviewer.widget.PullViewGroup;
|
||||
import com.hippo.ehviewer.widget.RatingView;
|
||||
import com.hippo.ehviewer.widget.SuperToast;
|
||||
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
|
||||
|
||||
public class FavouriteActivity extends AbstractGalleryActivity
|
||||
@@ -276,9 +276,7 @@ public class FavouriteActivity extends AbstractGalleryActivity
|
||||
|
||||
// Check login
|
||||
if (!mClient.isLogin()) {
|
||||
SuperToast superToast = new SuperToast("未检测到登陆状态,仅可使用本地收藏。由于开发者的问题,本地收藏不可靠,请尽快登陆,将本地收藏转移至账户中的收藏。"); // TODO
|
||||
superToast.setDuration(SuperToast.LENGTH_LONG);
|
||||
superToast.show();
|
||||
MaterialToast.showToast("未检测到登陆状态,仅可使用本地收藏。由于开发者的问题,本地收藏不可靠,请尽快登陆,将本地收藏转移至账户中的收藏。");// TODO
|
||||
}
|
||||
|
||||
// TODO Should show default favourite
|
||||
@@ -428,7 +426,7 @@ public class FavouriteActivity extends AbstractGalleryActivity
|
||||
mPdb = null;
|
||||
mProgressDialog.dismiss();
|
||||
mProgressDialog = null;
|
||||
new SuperToast(R.string.move_successfully).show();
|
||||
MaterialToast.showToast(R.string.move_successfully);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -439,7 +437,7 @@ public class FavouriteActivity extends AbstractGalleryActivity
|
||||
public void onItemClick(AdapterView<?> parent, View view,
|
||||
int position, long id) {
|
||||
if (mMenuIndex == position) {
|
||||
new SuperToast(R.string.dst_src_same, SuperToast.WARNING).show();
|
||||
MaterialToast.showToast(R.string.dst_src_same);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -572,7 +570,7 @@ public class FavouriteActivity extends AbstractGalleryActivity
|
||||
mLastModifyGiList = gis;
|
||||
mLastModifyPageNum = pageNum;
|
||||
refresh();
|
||||
new SuperToast(mSuccStr).show();
|
||||
MaterialToast.showToast(mSuccStr);
|
||||
|
||||
// add to local
|
||||
if (mToLocal)
|
||||
|
||||
@@ -45,7 +45,7 @@ import com.hippo.ehviewer.network.Downloader;
|
||||
import com.hippo.ehviewer.util.Config;
|
||||
import com.hippo.ehviewer.util.Log;
|
||||
import com.hippo.ehviewer.util.Utils;
|
||||
import com.hippo.ehviewer.widget.SuperToast;
|
||||
import com.hippo.ehviewer.widget.MaterialToast;
|
||||
|
||||
public class GalleryActivity extends AbstractActivity {
|
||||
private final String TAG = "MangaActivity";
|
||||
@@ -197,9 +197,8 @@ public class GalleryActivity extends AbstractActivity {
|
||||
retryTimes++;
|
||||
int targetPage = (Integer)checkFlag;
|
||||
if (retryTimes < maxRetry) {
|
||||
new SuperToast(eMsg + " " +
|
||||
String.format(getString(R.string.em_retry_times), retryTimes),
|
||||
SuperToast.WARNING).show(); // TODO
|
||||
MaterialToast.showToast(eMsg + " " +
|
||||
String.format(getString(R.string.em_retry_times), retryTimes)); // TODO
|
||||
if (targetPage == firstPage - 1 &&
|
||||
getPrePage == true) {
|
||||
mEhClient.getMangaUrl(allPrePageUrl, targetPage, new MangaUrlGetListener());
|
||||
@@ -213,10 +212,10 @@ public class GalleryActivity extends AbstractActivity {
|
||||
if (targetPage == firstPage - 1 &&
|
||||
getPrePage == true) {
|
||||
getPrePage = false;
|
||||
new SuperToast(R.string.retry_max_pre, SuperToast.WARNING).show();
|
||||
MaterialToast.showToast(R.string.retry_max_pre);
|
||||
}
|
||||
else {
|
||||
new SuperToast(R.string.retry_max_next, SuperToast.WARNING).show();
|
||||
MaterialToast.showToast(R.string.retry_max_next);
|
||||
mStop = true;
|
||||
}
|
||||
mImageSet.changeState(targetPage, ImageSet.STATE_FAIL);
|
||||
@@ -275,7 +274,7 @@ public class GalleryActivity extends AbstractActivity {
|
||||
lastPage = firstPage;
|
||||
gid = intent.getIntExtra("gid", 0);
|
||||
title = intent.getStringExtra("title");
|
||||
mFolder = new File(Config.getDownloadPath(), Utils.rightFileName(title));
|
||||
mFolder = new File(Config.getDownloadPath(), Utils.standardizeFilename(title));
|
||||
if (mFolder.isFile())
|
||||
mFolder.delete();
|
||||
mFolder.mkdirs();
|
||||
@@ -283,17 +282,6 @@ public class GalleryActivity extends AbstractActivity {
|
||||
|
||||
mImageSet = new ImageSet(this, gid, mFolder, pageSum, firstPage, lastPage, null);
|
||||
GalleryView isv = new GalleryView(getApplicationContext(), mImageSet, firstPage);
|
||||
isv.setOnEdgeListener(new GalleryView.OnEdgeListener() {
|
||||
@Override
|
||||
public void onLastPageEdge() {
|
||||
new SuperToast(R.string.last_page).show();
|
||||
}
|
||||
@Override
|
||||
public void onFirstPageEdge() {
|
||||
new SuperToast(R.string.first_page).show();
|
||||
}
|
||||
});
|
||||
|
||||
isv.setOnTapTextListener(new GalleryView.OnTapTextListener() {
|
||||
@Override
|
||||
public void onTapText(int index) {
|
||||
|
||||
@@ -89,12 +89,12 @@ import com.hippo.ehviewer.widget.DialogBuilder;
|
||||
import com.hippo.ehviewer.widget.LinkifyTextView;
|
||||
import com.hippo.ehviewer.widget.LoadImageView;
|
||||
import com.hippo.ehviewer.widget.MaterialProgress;
|
||||
import com.hippo.ehviewer.widget.MaterialToast;
|
||||
import com.hippo.ehviewer.widget.ProgressiveRatingBar;
|
||||
import com.hippo.ehviewer.widget.RefreshTextView;
|
||||
import com.hippo.ehviewer.widget.ResponedScrollView;
|
||||
import com.hippo.ehviewer.widget.SimpleGridLayout;
|
||||
import com.hippo.ehviewer.widget.SuperButton;
|
||||
import com.hippo.ehviewer.widget.SuperToast;
|
||||
import com.hippo.ehviewer.windowsanimate.WindowsAnimate;
|
||||
|
||||
public class GalleryDetailActivity extends AbstractActivity
|
||||
@@ -103,7 +103,7 @@ public class GalleryDetailActivity extends AbstractActivity
|
||||
View.OnTouchListener , ViewSwitcher.ViewFactory,
|
||||
ProgressiveRatingBar.OnUserRateListener, PreviewList.PreviewHolder,
|
||||
View.OnLayoutChangeListener, AdapterView.OnItemClickListener,
|
||||
AdapterView.OnItemLongClickListener {
|
||||
AdapterView.OnItemLongClickListener, RefreshTextView.OnRefreshListener {
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private static final String TAG = GalleryDetailActivity.class.getSimpleName();
|
||||
@@ -431,6 +431,7 @@ public class GalleryDetailActivity extends AbstractActivity
|
||||
mPreviewFront.setOnClickListener(this);
|
||||
mPreviewRefresh.setOnClickListener(this);
|
||||
mReply.setOnClickListener(this);
|
||||
mRefreshText.setDefaultRefresh("点击重试", this);
|
||||
|
||||
doPreLayout();
|
||||
|
||||
@@ -450,10 +451,18 @@ public class GalleryDetailActivity extends AbstractActivity
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
private void doPreLayout() {
|
||||
private void getDetailInfo() {
|
||||
String detailUrl = mClient.getDetailUrl(
|
||||
mGalleryInfo.gid, mGalleryInfo.token);
|
||||
if (mGalleryInfo instanceof GalleryDetail)
|
||||
mClient.getGDetail(detailUrl, (GalleryDetail)mGalleryInfo, new GDetailGetListener());
|
||||
else if (mGalleryInfo instanceof LofiGalleryDetail)
|
||||
mClient.getLGDetail(detailUrl, (LofiGalleryDetail)mGalleryInfo, new GLDetailGetListener());
|
||||
else if (mGalleryInfo instanceof ApiGalleryDetail)
|
||||
; // TODO
|
||||
}
|
||||
|
||||
private void doPreLayout() {
|
||||
mRefreshText.setRefreshing(true);
|
||||
|
||||
if (mGalleryInfo.title != null) {
|
||||
@@ -468,12 +477,7 @@ public class GalleryDetailActivity extends AbstractActivity
|
||||
mUploader.setText(mGalleryInfo.uploader);
|
||||
}
|
||||
|
||||
if (mGalleryInfo instanceof GalleryDetail)
|
||||
mClient.getGDetail(detailUrl, (GalleryDetail)mGalleryInfo, new GDetailGetListener());
|
||||
else if (mGalleryInfo instanceof LofiGalleryDetail)
|
||||
mClient.getLGDetail(detailUrl, (LofiGalleryDetail)mGalleryInfo, new GLDetailGetListener());
|
||||
else if (mGalleryInfo instanceof ApiGalleryDetail)
|
||||
; // TODO
|
||||
getDetailInfo();
|
||||
}
|
||||
|
||||
private String getRatingText(float rating) {
|
||||
@@ -797,6 +801,11 @@ public class GalleryDetailActivity extends AbstractActivity
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRefresh() {
|
||||
getDetailInfo();
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings("deprecation")
|
||||
public void onClick(View v) {
|
||||
@@ -809,7 +818,7 @@ public class GalleryDetailActivity extends AbstractActivity
|
||||
mServiceConn.getService().add(String.valueOf(mGalleryInfo.gid), mGalleryInfo.thumb,
|
||||
EhClient.getDetailUrl(mGalleryInfo.gid, mGalleryInfo.token, 0, Config.getMode()),
|
||||
mGalleryInfo.title);
|
||||
new SuperToast(R.string.toast_add_download).show();
|
||||
MaterialToast.showToast(R.string.toast_add_download);
|
||||
} else if (v == mReadButton) {
|
||||
//mData.addRead(mGalleryInfo);
|
||||
if (mGalleryInfo instanceof GalleryDetail) {
|
||||
@@ -853,7 +862,7 @@ public class GalleryDetailActivity extends AbstractActivity
|
||||
if (isCheckmark) {
|
||||
int rating = (int)(mRating.getRating() * 2 + 0.5);
|
||||
if (rating <= 0 || rating > 10) {
|
||||
new SuperToast(R.string.invalid_rating, SuperToast.ERROR).show();
|
||||
MaterialToast.showToast(R.string.invalid_rating);
|
||||
return;
|
||||
}
|
||||
mClient.rate(mGalleryInfo.gid, mGalleryInfo.token, rating, new EhClient.OnRateListener() {
|
||||
@@ -866,7 +875,7 @@ public class GalleryDetailActivity extends AbstractActivity
|
||||
@Override
|
||||
public void onFailure(String eMsg) {
|
||||
mRatingText.setText("评分失败"); // TODO
|
||||
new SuperToast(eMsg, SuperToast.WARNING).show();
|
||||
MaterialToast.showToast(eMsg);
|
||||
}
|
||||
});
|
||||
mRatingText.setText("感谢评分"); // TODO
|
||||
@@ -930,7 +939,7 @@ public class GalleryDetailActivity extends AbstractActivity
|
||||
}
|
||||
@Override
|
||||
public void onFailure(String eMsg) {
|
||||
new SuperToast(eMsg, SuperToast.WARNING).show();
|
||||
MaterialToast.showToast(eMsg);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -1072,7 +1081,7 @@ public class GalleryDetailActivity extends AbstractActivity
|
||||
case 0:
|
||||
ClipboardManager cm = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
cm.setPrimaryClip(ClipData.newPlainText(null, c.comment));
|
||||
new SuperToast(R.string.copyed).show();
|
||||
MaterialToast.showToast(R.string.copyed);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
@@ -1129,8 +1138,7 @@ public class GalleryDetailActivity extends AbstractActivity
|
||||
|
||||
@Override
|
||||
public void onFailure(String eMsg) {
|
||||
// TODO
|
||||
new SuperToast(eMsg, SuperToast.ERROR).show();
|
||||
mRefreshText.setEmesg(eMsg, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1146,8 +1154,7 @@ public class GalleryDetailActivity extends AbstractActivity
|
||||
|
||||
@Override
|
||||
public void onFailure(String eMsg) {
|
||||
// TODO
|
||||
new SuperToast(eMsg, SuperToast.ERROR).show();
|
||||
mRefreshText.setEmesg(eMsg, true);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1189,7 +1196,7 @@ public class GalleryDetailActivity extends AbstractActivity
|
||||
|
||||
int page = (Integer)checkFlag;
|
||||
if (page == mCurPreviewPage) {
|
||||
new SuperToast(eMsg, SuperToast.WARNING).show();
|
||||
MaterialToast.showToast(eMsg);
|
||||
mPreviewWait.setVisibility(View.GONE);
|
||||
mPreviewRefresh.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@@ -32,7 +32,6 @@ import com.hippo.ehviewer.gallery.data.DownloadImageSet;
|
||||
import com.hippo.ehviewer.gallery.ui.GLRootView;
|
||||
import com.hippo.ehviewer.util.Config;
|
||||
import com.hippo.ehviewer.util.Utils;
|
||||
import com.hippo.ehviewer.widget.SuperToast;
|
||||
|
||||
public class GalleryDownloadActivity extends AbstractActivity {
|
||||
private static final String TAG = "MangaDownloadActivity";
|
||||
@@ -76,20 +75,10 @@ public class GalleryDownloadActivity extends AbstractActivity {
|
||||
int endIndex = intent.getIntExtra(KEY_END_INDEX, 0);
|
||||
GLRootView glrv= (GLRootView)findViewById(R.id.gl_root_view);
|
||||
|
||||
File folder = new File(Config.getDownloadPath(), Utils.rightFileName(title));
|
||||
File folder = new File(Config.getDownloadPath(), Utils.standardizeFilename(title));
|
||||
folder.mkdirs();
|
||||
mDownloadImageSet = new DownloadImageSet(this, gid, folder, size, 0, endIndex, null);
|
||||
GalleryView isv = new GalleryView(getApplicationContext(), mDownloadImageSet, 0);
|
||||
isv.setOnEdgeListener(new GalleryView.OnEdgeListener() {
|
||||
@Override
|
||||
public void onLastPageEdge() {
|
||||
new SuperToast(R.string.last_page).show();
|
||||
}
|
||||
@Override
|
||||
public void onFirstPageEdge() {
|
||||
new SuperToast(R.string.first_page).show();
|
||||
}
|
||||
});
|
||||
glrv.setContentPane(isv);
|
||||
|
||||
// Avoid error when use Movie
|
||||
|
||||
@@ -89,10 +89,10 @@ import com.hippo.ehviewer.widget.AlertButton;
|
||||
import com.hippo.ehviewer.widget.CategoryTable;
|
||||
import com.hippo.ehviewer.widget.DialogBuilder;
|
||||
import com.hippo.ehviewer.widget.LoadImageView;
|
||||
import com.hippo.ehviewer.widget.MaterialToast;
|
||||
import com.hippo.ehviewer.widget.PrefixEditText;
|
||||
import com.hippo.ehviewer.widget.RatingView;
|
||||
import com.hippo.ehviewer.widget.SuperDialogUtil;
|
||||
import com.hippo.ehviewer.widget.SuperToast;
|
||||
import com.hippo.ehviewer.widget.TagListView;
|
||||
import com.hippo.ehviewer.widget.TagsAdapter;
|
||||
import com.hippo.ehviewer.windowsanimate.WindowsAnimate;
|
||||
@@ -220,7 +220,7 @@ public class GalleryListActivity extends AbstractGalleryActivity
|
||||
@Override
|
||||
public void onFailure(String eMsg) {
|
||||
setUserPanel();
|
||||
new SuperToast(eMsg, SuperToast.ERROR).show();
|
||||
MaterialToast.showToast(eMsg);
|
||||
if (!GalleryListActivity.this.isFinishing())
|
||||
loginDialog.show();
|
||||
}
|
||||
@@ -234,11 +234,11 @@ public class GalleryListActivity extends AbstractGalleryActivity
|
||||
setUserPanel();
|
||||
break;
|
||||
case EhClient.NO_AVATAR:
|
||||
new SuperToast("无头像").show(); // TODO
|
||||
MaterialToast.showToast("无头像"); // TODO
|
||||
break;
|
||||
case EhClient.GET_AVATAR_ERROR:
|
||||
default:
|
||||
new SuperToast("获取头像失败", SuperToast.ERROR).show(); // TODO
|
||||
MaterialToast.showToast("获取头像失败"); // TODO
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -503,10 +503,10 @@ public class GalleryListActivity extends AbstractGalleryActivity
|
||||
String filePath = (String)mSearchImageText.getText();
|
||||
File file = new File(filePath);
|
||||
if (!file.exists()) {
|
||||
new SuperToast("图片不存在", SuperToast.ERROR).show();
|
||||
MaterialToast.showToast("图片不存在");
|
||||
} else {
|
||||
if (!file.canRead()) {
|
||||
new SuperToast("图片不可读", SuperToast.ERROR).show();
|
||||
MaterialToast.showToast("图片不可读");
|
||||
} else {
|
||||
|
||||
CheckBox similar = (CheckBox)view.findViewById(R.id.checkboxSimilar);
|
||||
@@ -543,7 +543,7 @@ public class GalleryListActivity extends AbstractGalleryActivity
|
||||
startService(it);
|
||||
mServiceConn.getService().add(String.valueOf(gi.gid), gi.thumb,
|
||||
mClient.getDetailUrl(gi.gid, gi.token), gi.title);
|
||||
new SuperToast(R.string.toast_add_download).show();
|
||||
MaterialToast.showToast(R.string.toast_add_download);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -581,7 +581,7 @@ public class GalleryListActivity extends AbstractGalleryActivity
|
||||
if (targetPage < 0 || targetPage >= getPageNum())
|
||||
throw new Exception();
|
||||
} catch(Exception e) {
|
||||
new SuperToast(R.string.toast_invalid_page, SuperToast.ERROR).show();
|
||||
MaterialToast.showToast(R.string.toast_invalid_page);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -622,9 +622,9 @@ public class GalleryListActivity extends AbstractGalleryActivity
|
||||
public void onClick(View v) {
|
||||
String key = et.getText().toString();
|
||||
if (key.length() == 0)
|
||||
new SuperToast(R.string.tag_name_empty, SuperToast.WARNING).show();
|
||||
MaterialToast.showToast(R.string.tag_name_empty);
|
||||
else if (listMenuTag.contains(key) && !key.equals(oldStr))
|
||||
new SuperToast(R.string.tag_name_empty, SuperToast.WARNING).show();
|
||||
MaterialToast.showToast(R.string.tag_name_empty);
|
||||
else {
|
||||
((AlertButton)v).dialog.dismiss();
|
||||
if (listener != null) {
|
||||
@@ -1346,7 +1346,7 @@ public class GalleryListActivity extends AbstractGalleryActivity
|
||||
public void onBackPressed() {
|
||||
if (System.currentTimeMillis() - curBackTime > BACK_PRESSED_INTERVAL) {
|
||||
curBackTime = System.currentTimeMillis();
|
||||
new SuperToast(R.string.exit_tip).show();
|
||||
MaterialToast.showToast(R.string.exit_tip);
|
||||
} else
|
||||
finish();
|
||||
}
|
||||
@@ -1576,8 +1576,8 @@ public class GalleryListActivity extends AbstractGalleryActivity
|
||||
listener.onSuccess(mAdapter, taskStamp, gis, gis.size() == 0 ? 0 : 1);
|
||||
// Show update time
|
||||
if (timeStamp != -1 && Config.getShowPopularUpdateTime())
|
||||
new SuperToast(String.format(getString(R.string.popular_update_time),
|
||||
AppContext.sFormatter.format(timeStamp))).show();
|
||||
MaterialToast.showToast(String.format(getString(R.string.popular_update_time),
|
||||
AppContext.sFormatter.format(timeStamp)));
|
||||
}
|
||||
@Override
|
||||
public void onFailure(String eMsg) {
|
||||
|
||||
@@ -66,8 +66,8 @@ import com.hippo.ehviewer.widget.AlertButton;
|
||||
import com.hippo.ehviewer.widget.CategoryTable;
|
||||
import com.hippo.ehviewer.widget.DialogBuilder;
|
||||
import com.hippo.ehviewer.widget.FileExplorerView;
|
||||
import com.hippo.ehviewer.widget.MaterialToast;
|
||||
import com.hippo.ehviewer.widget.SuperDialogUtil;
|
||||
import com.hippo.ehviewer.widget.SuperToast;
|
||||
|
||||
public class SettingsActivity extends AbstractPreferenceActivity {
|
||||
@SuppressWarnings("unused")
|
||||
@@ -236,7 +236,7 @@ public class SettingsActivity extends AbstractPreferenceActivity {
|
||||
Config.screenOriPre2Value(Integer.parseInt((String) newValue)));
|
||||
|
||||
} else if (KEY_RANDOM_THEME_COLOR.equals(key)) {
|
||||
new SuperToast(R.string.restart_to_take_effect).show();
|
||||
MaterialToast.showToast(R.string.restart_to_take_effect);
|
||||
mThemeColor.setEnabled(!(Boolean)newValue);
|
||||
}
|
||||
|
||||
@@ -594,7 +594,7 @@ public class SettingsActivity extends AbstractPreferenceActivity {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (!fileExplorerView.canWrite())
|
||||
new SuperToast(R.string.cur_dir_not_writable, SuperToast.WARNING).show();
|
||||
MaterialToast.showToast(R.string.cur_dir_not_writable);
|
||||
else {
|
||||
String downloadPath = fileExplorerView.getCurPath();
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ import com.hippo.ehviewer.data.Data;
|
||||
import com.hippo.ehviewer.data.GalleryInfo;
|
||||
import com.hippo.ehviewer.ehclient.EhClient;
|
||||
import com.hippo.ehviewer.widget.DialogBuilder;
|
||||
import com.hippo.ehviewer.widget.SuperToast;
|
||||
import com.hippo.ehviewer.widget.MaterialToast;
|
||||
|
||||
public class Favorite {
|
||||
|
||||
@@ -61,18 +61,18 @@ public class Favorite {
|
||||
break;
|
||||
case -1:
|
||||
Data.getInstance().addLocalFavourite(gi);
|
||||
new SuperToast(R.string.toast_add_favourite).show();
|
||||
MaterialToast.showToast(R.string.toast_add_favourite);
|
||||
break;
|
||||
default:
|
||||
EhClient.getInstance().addToFavorite(gi.gid,
|
||||
gi.token, defaultFavorite, null, new EhClient.OnAddToFavoriteListener() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
new SuperToast(R.string.toast_add_favourite).show();
|
||||
MaterialToast.showToast(R.string.toast_add_favourite);
|
||||
}
|
||||
@Override
|
||||
public void onFailure(String eMsg) {
|
||||
new SuperToast(R.string.failed_to_add).show();
|
||||
MaterialToast.showToast(R.string.failed_to_add);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -100,18 +100,18 @@ public class Favorite {
|
||||
switch (position) {
|
||||
case 0:
|
||||
Data.getInstance().addLocalFavourite(gi);
|
||||
new SuperToast(R.string.toast_add_favourite).show();
|
||||
MaterialToast.showToast(R.string.toast_add_favourite);
|
||||
break;
|
||||
default:
|
||||
EhClient.getInstance().addToFavorite(gi.gid,
|
||||
gi.token, position - 1, null, new EhClient.OnAddToFavoriteListener() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
new SuperToast(R.string.toast_add_favourite).show();
|
||||
MaterialToast.showToast(R.string.toast_add_favourite);
|
||||
}
|
||||
@Override
|
||||
public void onFailure(String eMsg) {
|
||||
new SuperToast(R.string.failed_to_add).show();
|
||||
MaterialToast.showToast(R.string.failed_to_add);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -35,8 +35,7 @@ public final class Theme {
|
||||
private static final int[] DARK_COLOR_TABLE = {
|
||||
0xffe51c23, 0xffe91e63, 0xff9c27b0,
|
||||
0xff673ab7, 0xff3f51b5, 0xff5677fc,
|
||||
0xff03a9f4, 0xff009688, 0xff259b24,
|
||||
0xff8bc34a, 0xff795548, 0xff607d8b
|
||||
0xff03a9f4, 0xff009688, 0xff259b24
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -34,7 +34,7 @@ import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.view.View;
|
||||
|
||||
public class Utils {
|
||||
public final class Utils {
|
||||
@SuppressWarnings("unused")
|
||||
private static String TAG = "Util";
|
||||
|
||||
@@ -269,17 +269,31 @@ public class Utils {
|
||||
}
|
||||
}
|
||||
|
||||
private static final String[] ESCAPE_CHARATER_LIST = {
|
||||
"&",
|
||||
"<",
|
||||
">",
|
||||
""",
|
||||
"'",
|
||||
"×"
|
||||
};
|
||||
|
||||
private static final String[] UNESCAPE_CHARATER_LIST = {
|
||||
"&",
|
||||
"<",
|
||||
">",
|
||||
"\"",
|
||||
"'",
|
||||
"×"
|
||||
};
|
||||
|
||||
/**
|
||||
* Mostly title and url need it
|
||||
* @param str
|
||||
* @return
|
||||
*/
|
||||
public static final String htmlUnsescape(String str) {
|
||||
return str.replace("&", "&")
|
||||
.replace("<", "<")
|
||||
.replace(">", ">")
|
||||
.replace(""", "\"")
|
||||
.replace("'", "'");
|
||||
public static String htmlUnsescape(String str) {
|
||||
return replaceEach(str, ESCAPE_CHARATER_LIST, UNESCAPE_CHARATER_LIST);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -287,9 +301,10 @@ public class Utils {
|
||||
* @param name
|
||||
* @return
|
||||
*/
|
||||
public static final String rightFileName(String name) {
|
||||
name = name.replaceAll("[\\\\|/|:|*|?|\"|<|>|\\|]", "");
|
||||
return name.length() > 255 ? name.substring(0, 255) : name;
|
||||
public static String standardizeFilename(String name) {
|
||||
name = name.replaceAll("[\\\\/:*?\"<>\\|]", "");
|
||||
name = name.length() > 255 ? name.substring(0, 255) : name;
|
||||
return name.replaceAll("^[\\s]+", "").replace("[\\s]+$", "");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -300,7 +315,7 @@ public class Utils {
|
||||
* @param separator
|
||||
* @return
|
||||
*/
|
||||
public static final String join(final Object[] array,
|
||||
public static String join(final Object[] array,
|
||||
final Object separator) {
|
||||
final StringBuilder sb = new StringBuilder(array.length * 16);
|
||||
for (int i = 0; i < array.length; i++) {
|
||||
@@ -311,7 +326,226 @@ public class Utils {
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
public static final boolean int2boolean(int integer) {
|
||||
/**
|
||||
* <p>
|
||||
* Replaces all occurrences of Strings within another String.
|
||||
* </p>
|
||||
*
|
||||
* <p>
|
||||
* A {@code null} reference passed to this method is a no-op, or if
|
||||
* any "search string" or "string to replace" is null, that replace will be
|
||||
* ignored. This will not repeat. For repeating replaces, call the
|
||||
* overloaded method.
|
||||
* </p>
|
||||
*
|
||||
* <pre>
|
||||
* StringUtils.replaceEach(null, *, *) = null
|
||||
* StringUtils.replaceEach("", *, *) = ""
|
||||
* StringUtils.replaceEach("aba", null, null) = "aba"
|
||||
* StringUtils.replaceEach("aba", new String[0], null) = "aba"
|
||||
* StringUtils.replaceEach("aba", null, new String[0]) = "aba"
|
||||
* StringUtils.replaceEach("aba", new String[]{"a"}, null) = "aba"
|
||||
* StringUtils.replaceEach("aba", new String[]{"a"}, new String[]{""}) = "b"
|
||||
* StringUtils.replaceEach("aba", new String[]{null}, new String[]{"a"}) = "aba"
|
||||
* StringUtils.replaceEach("abcde", new String[]{"ab", "d"}, new String[]{"w", "t"}) = "wcte"
|
||||
* (example of how it does not repeat)
|
||||
* StringUtils.replaceEach("abcde", new String[]{"ab", "d"}, new String[]{"d", "t"}) = "dcte"
|
||||
* </pre>
|
||||
*
|
||||
* @param text
|
||||
* text to search and replace in, no-op if null
|
||||
* @param searchList
|
||||
* the Strings to search for, no-op if null
|
||||
* @param replacementList
|
||||
* the Strings to replace them with, no-op if null
|
||||
* @return the text with any replacements processed, {@code null} if
|
||||
* null String input
|
||||
* @throws IllegalArgumentException
|
||||
* if the lengths of the arrays are not the same (null is ok,
|
||||
* and/or size 0)
|
||||
*/
|
||||
// Get from org.apache.commons.lang3.StringUtils
|
||||
public static String replaceEach(final String text, final String[] searchList, final String[] replacementList) {
|
||||
return replaceEach(text, searchList, replacementList, false, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* Replaces all occurrences of Strings within another String.
|
||||
* </p>
|
||||
*
|
||||
* <p>
|
||||
* A {@code null} reference passed to this method is a no-op, or if
|
||||
* any "search string" or "string to replace" is null, that replace will be
|
||||
* ignored.
|
||||
* </p>
|
||||
*
|
||||
* <pre>
|
||||
* StringUtils.replaceEach(null, *, *, *) = null
|
||||
* StringUtils.replaceEach("", *, *, *) = ""
|
||||
* StringUtils.replaceEach("aba", null, null, *) = "aba"
|
||||
* StringUtils.replaceEach("aba", new String[0], null, *) = "aba"
|
||||
* StringUtils.replaceEach("aba", null, new String[0], *) = "aba"
|
||||
* StringUtils.replaceEach("aba", new String[]{"a"}, null, *) = "aba"
|
||||
* StringUtils.replaceEach("aba", new String[]{"a"}, new String[]{""}, *) = "b"
|
||||
* StringUtils.replaceEach("aba", new String[]{null}, new String[]{"a"}, *) = "aba"
|
||||
* StringUtils.replaceEach("abcde", new String[]{"ab", "d"}, new String[]{"w", "t"}, *) = "wcte"
|
||||
* (example of how it repeats)
|
||||
* StringUtils.replaceEach("abcde", new String[]{"ab", "d"}, new String[]{"d", "t"}, false) = "dcte"
|
||||
* StringUtils.replaceEach("abcde", new String[]{"ab", "d"}, new String[]{"d", "t"}, true) = "tcte"
|
||||
* StringUtils.replaceEach("abcde", new String[]{"ab", "d"}, new String[]{"d", "ab"}, *) = IllegalStateException
|
||||
* </pre>
|
||||
*
|
||||
* @param text
|
||||
* text to search and replace in, no-op if null
|
||||
* @param searchList
|
||||
* the Strings to search for, no-op if null
|
||||
* @param replacementList
|
||||
* the Strings to replace them with, no-op if null
|
||||
* @param repeat if true, then replace repeatedly
|
||||
* until there are no more possible replacements or timeToLive < 0
|
||||
* @param timeToLive
|
||||
* if less than 0 then there is a circular reference and endless
|
||||
* loop
|
||||
* @return the text with any replacements processed, {@code null} if
|
||||
* null String input
|
||||
* @throws IllegalStateException
|
||||
* if the search is repeating and there is an endless loop due
|
||||
* to outputs of one being inputs to another
|
||||
* @throws IllegalArgumentException
|
||||
* if the lengths of the arrays are not the same (null is ok,
|
||||
* and/or size 0)
|
||||
*/
|
||||
// Get from org.apache.commons.lang3.StringUtils
|
||||
private static String replaceEach(
|
||||
final String text, final String[] searchList, final String[] replacementList, final boolean repeat, final int timeToLive) {
|
||||
|
||||
// mchyzer Performance note: This creates very few new objects (one major goal)
|
||||
// let me know if there are performance requests, we can create a harness to measure
|
||||
|
||||
if (text == null || text.isEmpty() || searchList == null ||
|
||||
searchList.length == 0 || replacementList == null || replacementList.length == 0) {
|
||||
return text;
|
||||
}
|
||||
|
||||
// if recursing, this shouldn't be less than 0
|
||||
if (timeToLive < 0) {
|
||||
throw new IllegalStateException("Aborting to protect against StackOverflowError - " +
|
||||
"output of one loop is the input of another");
|
||||
}
|
||||
|
||||
final int searchLength = searchList.length;
|
||||
final int replacementLength = replacementList.length;
|
||||
|
||||
// make sure lengths are ok, these need to be equal
|
||||
if (searchLength != replacementLength) {
|
||||
throw new IllegalArgumentException("Search and Replace array lengths don't match: "
|
||||
+ searchLength
|
||||
+ " vs "
|
||||
+ replacementLength);
|
||||
}
|
||||
|
||||
// keep track of which still have matches
|
||||
final boolean[] noMoreMatchesForReplIndex = new boolean[searchLength];
|
||||
|
||||
// index on index that the match was found
|
||||
int textIndex = -1;
|
||||
int replaceIndex = -1;
|
||||
int tempIndex = -1;
|
||||
|
||||
// index of replace array that will replace the search string found
|
||||
// NOTE: logic duplicated below START
|
||||
for (int i = 0; i < searchLength; i++) {
|
||||
if (noMoreMatchesForReplIndex[i] || searchList[i] == null ||
|
||||
searchList[i].isEmpty() || replacementList[i] == null) {
|
||||
continue;
|
||||
}
|
||||
tempIndex = text.indexOf(searchList[i]);
|
||||
|
||||
// see if we need to keep searching for this
|
||||
if (tempIndex == -1) {
|
||||
noMoreMatchesForReplIndex[i] = true;
|
||||
} else {
|
||||
if (textIndex == -1 || tempIndex < textIndex) {
|
||||
textIndex = tempIndex;
|
||||
replaceIndex = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
// NOTE: logic mostly below END
|
||||
|
||||
// no search strings found, we are done
|
||||
if (textIndex == -1) {
|
||||
return text;
|
||||
}
|
||||
|
||||
int start = 0;
|
||||
|
||||
// get a good guess on the size of the result buffer so it doesn't have to double if it goes over a bit
|
||||
int increase = 0;
|
||||
|
||||
// count the replacement text elements that are larger than their corresponding text being replaced
|
||||
for (int i = 0; i < searchList.length; i++) {
|
||||
if (searchList[i] == null || replacementList[i] == null) {
|
||||
continue;
|
||||
}
|
||||
final int greater = replacementList[i].length() - searchList[i].length();
|
||||
if (greater > 0) {
|
||||
increase += 3 * greater; // assume 3 matches
|
||||
}
|
||||
}
|
||||
// have upper-bound at 20% increase, then let Java take over
|
||||
increase = Math.min(increase, text.length() / 5);
|
||||
|
||||
final StringBuilder buf = new StringBuilder(text.length() + increase);
|
||||
|
||||
while (textIndex != -1) {
|
||||
|
||||
for (int i = start; i < textIndex; i++) {
|
||||
buf.append(text.charAt(i));
|
||||
}
|
||||
buf.append(replacementList[replaceIndex]);
|
||||
|
||||
start = textIndex + searchList[replaceIndex].length();
|
||||
|
||||
textIndex = -1;
|
||||
replaceIndex = -1;
|
||||
tempIndex = -1;
|
||||
// find the next earliest match
|
||||
// NOTE: logic mostly duplicated above START
|
||||
for (int i = 0; i < searchLength; i++) {
|
||||
if (noMoreMatchesForReplIndex[i] || searchList[i] == null ||
|
||||
searchList[i].isEmpty() || replacementList[i] == null) {
|
||||
continue;
|
||||
}
|
||||
tempIndex = text.indexOf(searchList[i], start);
|
||||
|
||||
// see if we need to keep searching for this
|
||||
if (tempIndex == -1) {
|
||||
noMoreMatchesForReplIndex[i] = true;
|
||||
} else {
|
||||
if (textIndex == -1 || tempIndex < textIndex) {
|
||||
textIndex = tempIndex;
|
||||
replaceIndex = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
// NOTE: logic duplicated above END
|
||||
|
||||
}
|
||||
final int textLength = text.length();
|
||||
for (int i = start; i < textLength; i++) {
|
||||
buf.append(text.charAt(i));
|
||||
}
|
||||
final String result = buf.toString();
|
||||
if (!repeat) {
|
||||
return result;
|
||||
}
|
||||
|
||||
return replaceEach(result, searchList, replacementList, repeat, timeToLive - 1);
|
||||
}
|
||||
|
||||
public static boolean int2boolean(int integer) {
|
||||
return integer == 0 ? false : true;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Hippo Seven
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.hippo.ehviewer.widget;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.hippo.ehviewer.R;
|
||||
|
||||
public class MaterialToast extends Toast {
|
||||
|
||||
private static Context sContext;
|
||||
|
||||
public static void setContext(Context context) {
|
||||
sContext = context;
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
public MaterialToast(String mesg) {
|
||||
super(sContext);
|
||||
init(mesg);
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
public MaterialToast(int resId) {
|
||||
this(sContext.getString(resId));
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
private void init(String mesg) {
|
||||
View v = LayoutInflater.from(sContext)
|
||||
.inflate(R.layout.material_toast, null);
|
||||
TextView tv = (TextView)v.findViewById(R.id.message);
|
||||
tv.setText(mesg);
|
||||
setView(v);
|
||||
setDuration(LENGTH_SHORT);
|
||||
}
|
||||
|
||||
public static final void showToast(String mesg) {
|
||||
new MaterialToast(mesg).show();
|
||||
}
|
||||
|
||||
public static final void showToast(int resId) {
|
||||
new MaterialToast(resId).show();
|
||||
}
|
||||
}
|
||||
@@ -69,8 +69,13 @@ public class RefreshTextView extends TextView
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (!mIsRefreshing && mListener != null)
|
||||
if (mIsRefreshing)
|
||||
return;
|
||||
|
||||
if (mListener != null)
|
||||
mListener.onRefresh();
|
||||
|
||||
setRefreshing(true);
|
||||
}
|
||||
|
||||
public void setRefreshing(boolean refreshing) {
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2014 Hippo Seven
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.hippo.ehviewer.widget;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.hippo.ehviewer.R;
|
||||
import com.hippo.ehviewer.util.Config;
|
||||
import com.hippo.ehviewer.util.Theme;
|
||||
|
||||
public class SuperToast extends Toast {
|
||||
|
||||
public static final int NONE = 0;
|
||||
public static final int WARNING = 1;
|
||||
public static final int ERROR = 2;
|
||||
|
||||
private LinearLayout mMainView;
|
||||
private ImageView mIcon;
|
||||
private TextView mMessage;
|
||||
|
||||
private static Context sContext;
|
||||
|
||||
public static void setContext(Context context) {
|
||||
sContext = context;
|
||||
}
|
||||
|
||||
public SuperToast() {
|
||||
super(sContext);
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
public SuperToast(int strResId) {
|
||||
this();
|
||||
setMessage(strResId);
|
||||
}
|
||||
|
||||
public SuperToast(String mesg) {
|
||||
this();
|
||||
setMessage(mesg);
|
||||
}
|
||||
|
||||
public SuperToast(int strResId, int type) {
|
||||
this(strResId);
|
||||
setTypeIcon(type);
|
||||
}
|
||||
|
||||
public SuperToast(String mesg, int type) {
|
||||
this(mesg);
|
||||
setTypeIcon(type);
|
||||
}
|
||||
|
||||
@SuppressLint("InflateParams")
|
||||
private void init() {
|
||||
FrameLayout view = (FrameLayout)LayoutInflater.from(sContext)
|
||||
.inflate(R.layout.super_toast, null);
|
||||
mMainView = (LinearLayout)view.getChildAt(0);
|
||||
// Set random color
|
||||
mMainView.setBackgroundColor(Config.getRandomThemeColor() ? Theme.getRandomDarkColor() : Config.getThemeColor());
|
||||
mIcon = (ImageView)mMainView.findViewById(R.id.icon);
|
||||
mMessage = (TextView)mMainView.findViewById(R.id.message);
|
||||
|
||||
mIcon.setVisibility(View.GONE);
|
||||
|
||||
setDuration(Toast.LENGTH_SHORT);
|
||||
setView(view);
|
||||
}
|
||||
|
||||
public SuperToast setTypeIcon(int type) {
|
||||
switch(type) {
|
||||
case WARNING:
|
||||
setIcon(R.drawable.ic_warning);
|
||||
break;
|
||||
case ERROR:
|
||||
setIcon(R.drawable.ic_error);
|
||||
break;
|
||||
case NONE:
|
||||
default:
|
||||
// nop
|
||||
break;
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public SuperToast setIcon(int resId) {
|
||||
return setIcon(sContext.getResources().getDrawable(resId));
|
||||
}
|
||||
|
||||
public SuperToast setIcon(Drawable drawable) {
|
||||
mIcon.setVisibility(View.VISIBLE);
|
||||
mIcon.setImageDrawable(drawable);
|
||||
return this;
|
||||
}
|
||||
|
||||
public SuperToast setMessage(int resId) {
|
||||
return setMessage(sContext.getResources().getString(resId));
|
||||
}
|
||||
|
||||
public SuperToast setMessage(CharSequence text) {
|
||||
mMessage.setText(text);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user