This commit is contained in:
seven332 committed 2016-02-04 00:59:14 +08:00
1 parent f3a7bcbfd3
commit 705dd16541
37 files changed
+624 -597

No files matched your search

-2
View File
@@ -58,7 +58,6 @@ clean {
dependencies {
compile project(':anani')
compile project(':beerbelly')
compile project(':cardsalon')
compile project(':conaco')
compile project(':easyrecyclerview')
compile project(':hotspot')
@@ -72,7 +71,6 @@ dependencies {
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:customtabs:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.h6ah4i.android.materialshadowninepatch:materialshadowninepatch:0.6.5'
compile 'de.greenrobot:greendao:2.0.0'
compile 'org.ccil.cowan.tagsoup:tagsoup:1.2.1'
}
@@ -18,6 +18,9 @@ package com.hippo.ehviewer;
import junit.framework.TestCase;
import java.net.MalformedURLException;
import java.net.URL;
public class DumpTest extends TestCase {
@@ -26,4 +29,22 @@ public class DumpTest extends TestCase {
System.out.println(str.replaceAll("\\d+(\\.\\d+)?", "12"));
}
public void testDumpURL() {
String str1 = "http://exhentai.org/?f_doujinshi=1&f_manga=0&f_artistcg=0&f_gamecg=1&f_western=1&f_non-h=1&f_imageset=0&f_cosplay=0&f_asianporn=1&f_misc=1&f_search=&f_apply=Apply+Filter";
String str2 = "http://exhentai.org/3?f_search=hentai&f_apply=Apply+Filter";
try {
URL url = new URL(str2);
System.out.println(url.getHost());
System.out.println(url.getPath());
System.out.println(url.getQuery());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
+1 -1
View File
@@ -33,7 +33,7 @@
android:name="com.hippo.ehviewer.ui.MainActivity"
android:configChanges="screenSize|uiMode"
android:theme="@style/AppTheme.Main"
android:launchMode="singleTask">
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
@@ -31,7 +31,7 @@ import com.hippo.network.StatusCodeException;
import com.hippo.okhttp.CookieDB;
import com.hippo.scene.SceneApplication;
import com.hippo.text.Html;
import com.hippo.utils.ReadableTime;
import com.hippo.util.ReadableTime;
import com.hippo.yorozuya.IntIdGenerator;
import java.io.File;
@@ -0,0 +1,120 @@
/*
* Copyright 2016 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;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Bundle;
import android.support.customtabs.CustomTabsIntent;
import android.text.TextUtils;
import android.widget.Toast;
import com.hippo.ehviewer.client.data.ListUrlBuilder;
import com.hippo.ehviewer.client.parser.GalleryDetailUrlParser;
import com.hippo.ehviewer.client.parser.GalleryListUrlParser;
import com.hippo.ehviewer.ui.MainActivity;
import com.hippo.ehviewer.ui.scene.GalleryDetailScene;
import com.hippo.ehviewer.ui.scene.GalleryListScene;
import com.hippo.scene.StageActivity;
import com.hippo.util.CustomTabsHelper;
public final class OpenUrlHelper {
private OpenUrlHelper() {
}
public static void openUrl(Activity activity, String url, boolean inApp, boolean customTabs) {
if (TextUtils.isEmpty(url)) {
return;
}
Intent intent;
Uri uri = Uri.parse(url);
if (inApp) {
ListUrlBuilder listUrlBuilder = GalleryListUrlParser.parse(url);
if (listUrlBuilder != null) {
Bundle args = new Bundle();
args.putString(GalleryListScene.KEY_ACTION, GalleryListScene.ACTION_LIST_URL_BUILDER);
args.putParcelable(GalleryListScene.KEY_LIST_URL_BUILDER, listUrlBuilder);
intent = new Intent(activity, MainActivity.class);
intent.putExtra(StageActivity.KEY_SCENE_NAME, GalleryListScene.class.getName());
intent.putExtra(StageActivity.KEY_SCENE_ARGS, args);
activity.startActivity(intent);
return;
}
int gid = -1;
String token = null;
int page = -1;
GalleryDetailUrlParser.Result result1 = GalleryDetailUrlParser.parse(url);
if (result1 != null) {
gid = result1.gid;
token = result1.token;
} else {
/* TODO
GalleryUrlParser.Result result2 = GalleryUrlParser.parse(url);
if (result2 != null) {
gid = result2.gid;
token = result2.token;
page = result2.index;
}
*/
}
if (gid != -1 && token != null) {
Bundle args = new Bundle();
args.putString(GalleryDetailScene.KEY_ACTION, GalleryDetailScene.ACTION_GID_TOKEN);
args.putInt(GalleryDetailScene.KEY_GID, gid);
args.putString(GalleryDetailScene.KEY_TOKEN, token);
args.putInt(GalleryDetailScene.KEY_PAGE, page);
intent = new Intent(activity, MainActivity.class);
intent.putExtra(StageActivity.KEY_SCENE_NAME, GalleryDetailScene.class.getName());
intent.putExtra(StageActivity.KEY_SCENE_ARGS, args);
activity.startActivity(intent);
return;
}
}
// CustomTabs
if (customTabs) {
String packageName = CustomTabsHelper.getPackageNameToUseFixed(activity);
if (packageName != null) {
new CustomTabsIntent.Builder()
.setToolbarColor(activity.getResources().getColor(R.color.colorPrimary))
.setShowTitle(true)
.build()
.launchUrl(activity, uri);
return;
}
}
// Intent.ACTION_VIEW
intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
PackageManager pm = activity.getPackageManager();
ResolveInfo ri = pm.resolveActivity(intent, 0);
if (ri != null) {
activity.startActivity(intent);
return;
}
Toast.makeText(activity, R.string.error_cant_find_activity, Toast.LENGTH_SHORT).show();
}
}
@@ -20,12 +20,23 @@ public class EhUrl {
public static final String DOMAIN_EX = "exhentai.org";
public static final String DOMAIN_E = "e-hentai.org";
public static final String DOMAIN_G = "g.e-hentai.org";
public static final String DOMAIN_LOFI = "lofi.e-hentai.org";
public static final String HOST_EX = "http://" + DOMAIN_EX + "/";
public static final String API_SIGN_IN = "http://forums.e-hentai.org/index.php?act=Login&CODE=01";
public static String getGalleryDetailUrl(int gid, String token) {
return HOST_EX + "g/" + gid + '/' + token;
return getGalleryDetailUrl(gid, token, 0);
}
public static String getGalleryDetailUrl(int gid, String token, int index) {
StringBuilder sb = new StringBuilder(HOST_EX);
sb.append("g/").append(gid).append('/').append(token);
if (index != 0) {
sb.append("/?p=").append(index);
}
return sb.toString();
}
}
@@ -19,16 +19,19 @@ package com.hippo.ehviewer.client.data;
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.IntDef;
import android.text.TextUtils;
import com.hippo.ehviewer.client.EhConfig;
import com.hippo.ehviewer.client.EhUrl;
import com.hippo.ehviewer.client.EhUtils;
import com.hippo.ehviewer.widget.AdvanceSearchTable;
import com.hippo.network.UrlBuilder;
import com.hippo.yorozuya.StringUtils;
import java.io.UnsupportedEncodingException;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.net.URLDecoder;
import java.net.URLEncoder;
public class ListUrlBuilder implements Cloneable, Parcelable {
@@ -144,16 +147,149 @@ public class ListUrlBuilder implements Cloneable, Parcelable {
mMinRating = lub.mMinRating;
}
/*
public void set(QuickSearch quickSearch) {
mMode = quickSearch.mode;
mPageIndex = 0;
mCategory = quickSearch.category;
mKeyword = quickSearch.keyword;
mAdvanceSearch = quickSearch.advancedSearch;
mMinRating = quickSearch.minRating;
/**
* @param query xxx=yyy&mmm=nnn
*/
// TODO page
public void setQuery(String query) {
reset();
if (TextUtils.isEmpty(query)) {
return;
}
String[] querys = StringUtils.split(query, '&');
boolean apply = false;
int category = 0;
String keyword = null;
boolean enableAdvanceSearch = false;
int advanceSearch = 0;
boolean enableMinRating = false;
int minRating = 0;
for (int i = 0, size = querys.length; i < size; i++) {
String str = querys[i];
int index = str.indexOf('=');
if (index < 0) {
continue;
}
String key = str.substring(0, index);
String value = str.substring(index + 1);
if ("f_doujinshi".equals(key)) {
if ("1".equals(value)) {
category |= EhConfig.DOUJINSHI;
}
} else if ("f_manga".equals(key)) {
if ("1".equals(value)) {
category |= EhConfig.MANGA;
}
} else if ("f_artistcg".equals(key)) {
if ("1".equals(value)) {
category |= EhConfig.ARTIST_CG;
}
} else if ("f_gamecg".equals(key)) {
if ("1".equals(value)) {
category |= EhConfig.GAME_CG;
}
} else if ("f_western".equals(key)) {
if ("1".equals(value)) {
category |= EhConfig.WESTERN;
}
} else if ("f_non-h".equals(key)) {
if ("1".equals(value)) {
category |= EhConfig.NON_H;
}
} else if ("f_imageset".equals(key)) {
if ("1".equals(value)) {
category |= EhConfig.IMAGE_SET;
}
} else if ("f_cosplay".equals(key)) {
if ("1".equals(value)) {
category |= EhConfig.COSPLAY;
}
} else if ("f_asianporn".equals(key)) {
if ("1".equals(value)) {
category |= EhConfig.ASIAN_PORN;
}
} else if ("f_misc".equals(key)) {
if ("1".equals(value)) {
category |= EhConfig.MISC;
}
} else if ("f_search".equals(key)) {
try {
keyword = URLDecoder.decode(value, "utf-8");
} catch (UnsupportedEncodingException e) {
// Ignore
}
} else if ("advsearch".equals(key)) {
if ("1".equals(value)) {
enableAdvanceSearch = true;
}
} else if ("f_sname".equals(key)) {
if ("on".equals(value)) {
advanceSearch |= AdvanceSearchTable.SNAME;
}
} else if ("f_stags".equals(key)) {
if ("on".equals(value)) {
advanceSearch |= AdvanceSearchTable.STAGS;
}
} else if ("f_sdesc".equals(key)) {
if ("on".equals(value)) {
advanceSearch |= AdvanceSearchTable.SDESC;
}
} else if ("f_storr".equals(key)) {
if ("on".equals(value)) {
advanceSearch |= AdvanceSearchTable.STORR;
}
} else if ("f_sto".equals(key)) {
if ("on".equals(value)) {
advanceSearch |= AdvanceSearchTable.STO;
}
} else if ("f_sdt1".equals(key)) {
if ("on".equals(value)) {
advanceSearch |= AdvanceSearchTable.SDT1;
}
} else if ("f_sdt2".equals(key)) {
if ("on".equals(value)) {
advanceSearch |= AdvanceSearchTable.SDT2;
}
} else if ("f_sh".equals(key)) {
if ("on".equals(value)) {
advanceSearch |= AdvanceSearchTable.SH;
}
} else if ("f_sr".equals(key)) {
if ("on".equals(value)) {
enableMinRating = true;
}
} else if ("f_srdd".equals(key)) {
try {
minRating = Integer.parseInt(value);
} catch (NumberFormatException e) {
// Ignore
}
} else if ("f_apply".equals(key)) {
if ("Apply+Filter".equals(value)) {
apply = true;
}
}
}
if (!apply) {
return;
}
mCategory = category;
mKeyword = keyword;
if (enableAdvanceSearch) {
mAdvanceSearch = advanceSearch;
if (enableMinRating) {
mMinRating = minRating;
} else {
mMinRating = -1;
}
} else {
mAdvanceSearch = -1;
}
}
*/
public String build() {
switch (mMode) {
@@ -220,6 +356,7 @@ public class ListUrlBuilder implements Cloneable, Parcelable {
} catch (UnsupportedEncodingException e) {
// Empty
}
sb.append('/').append(mPageIndex);
return sb.toString();
}
}
@@ -257,7 +257,7 @@ public class GalleryDetailParser {
LargePreviewSet largePreviewSet = new LargePreviewSet();
while (m.find()) {
largePreviewSet.addItem(ParserUtils.parseInt(m.group(2)),
largePreviewSet.addItem(ParserUtils.parseInt(m.group(2)) - 1,
ParserUtils.trim(m.group(3)), ParserUtils.trim(m.group(1)));
}
return largePreviewSet;
@@ -16,14 +16,21 @@
package com.hippo.ehviewer.client.parser;
import com.hippo.ehviewer.client.EhUrl;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class GalleryDetailUrlParser {
/**
* Like http://exhentai.org/g/1234567/a1b2c3d4e5<br>
*
*/
public final class GalleryDetailUrlParser {
public static final Pattern URL_PATTERN = Pattern.compile("/(\\d+)/(\\w+)");
public static final Pattern URL_PATTERN = Pattern.compile("http://(?:" +
EhUrl.DOMAIN_EX + "|" + EhUrl.DOMAIN_G + "|" + EhUrl.DOMAIN_LOFI + ")/g/(\\d+)/(\\w+)");
public static Result parser(String url) {
public static Result parse(String url) {
if (url == null) {
return null;
}
@@ -0,0 +1,135 @@
/*
* Copyright 2016 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.client.parser;
import android.text.TextUtils;
import com.hippo.ehviewer.client.EhUrl;
import com.hippo.ehviewer.client.EhUtils;
import com.hippo.ehviewer.client.data.ListUrlBuilder;
import com.hippo.yorozuya.Utilities;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
public final class GalleryListUrlParser {
private static final String[] INVALID_HOSTS = {EhUrl.DOMAIN_EX, EhUrl.DOMAIN_G, EhUrl.DOMAIN_LOFI};
private static final String PATH_NORMAL = "/";
private static final String PATH_UPLOADER = "/uploader/";
private static final String PATH_TAG = "/tag/";
public static ListUrlBuilder parse(String urlStr) {
URL url;
try {
url = new URL(urlStr);
} catch (MalformedURLException e) {
return null;
}
if (!Utilities.contain(INVALID_HOSTS, url.getHost())) {
return null;
}
String path = url.getPath();
if (path == null) {
return null;
}
if (PATH_NORMAL.equals(path) || path.length() == 0) {
ListUrlBuilder builder = new ListUrlBuilder();
builder.setQuery(url.getQuery());
return builder;
} else if (path.startsWith(PATH_UPLOADER)) {
return parseUploader(path);
} else if (path.startsWith(PATH_TAG)) {
return parseTag(path);
} else if (path.startsWith("/")) {
int category;
try {
category = Integer.parseInt(path.substring(1));
} catch (NumberFormatException e) {
return null;
}
ListUrlBuilder builder = new ListUrlBuilder();
builder.setQuery(url.getQuery());
builder.setCategory(category);
return builder;
} else {
return null;
}
}
// TODO get page
private static ListUrlBuilder parseUploader(String path) {
String uploader;
int prefixLength = PATH_UPLOADER.length();
int index = path.indexOf('/', prefixLength);
if (index < 0) {
uploader = path.substring(prefixLength);
} else {
uploader = path.substring(prefixLength, index);
}
try {
uploader = URLDecoder.decode(uploader, "utf-8");
} catch (UnsupportedEncodingException e) {
return null;
}
if (TextUtils.isEmpty(uploader)) {
return null;
}
ListUrlBuilder builder = new ListUrlBuilder();
builder.setMode(ListUrlBuilder.MODE_UPLOADER);
builder.setKeyword(EhUtils.getSpecifyUploaderKeyword(uploader));
return builder;
}
// TODO get page
private static ListUrlBuilder parseTag(String path) {
String tag;
int prefixLength = PATH_TAG.length();
int index = path.indexOf('/', prefixLength);
if (index < 0) {
tag = path.substring(prefixLength);
} else {
tag = path.substring(prefixLength, index);
}
try {
tag = URLDecoder.decode(tag, "utf-8");
} catch (UnsupportedEncodingException e) {
return null;
}
if (TextUtils.isEmpty(tag)) {
return null;
}
ListUrlBuilder builder = new ListUrlBuilder();
builder.setMode(ListUrlBuilder.MODE_TAG);
builder.setKeyword(tag);
return builder;
}
}
@@ -0,0 +1,54 @@
/*
* Copyright 2016 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.client.parser;
import com.hippo.ehviewer.client.EhUrl;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Like http://exhentai.org/s/91ea4b6d89/901103-12
*/
public final class GalleryUrlParser {
public static final Pattern URL_PATTERN = Pattern.compile("http://(?:" +
EhUrl.DOMAIN_EX + "|" + EhUrl.DOMAIN_G + "|" + EhUrl.DOMAIN_LOFI + ")/s/(\\w+)/(\\d+)-(\\d+)");
public static Result parse(String url) {
if (url == null) {
return null;
}
Matcher m = URL_PATTERN.matcher(url);
if (m.find()) {
Result result = new Result();
result.gid = Integer.parseInt(m.group(2));
result.token = m.group(1);
result.index = Integer.parseInt(m.group(3)) - 1;
return result;
} else {
return null;
}
}
public static class Result {
public int gid;
public String token;
public int index;
}
}
@@ -38,9 +38,9 @@ import com.hippo.ehviewer.client.data.GalleryComment;
import com.hippo.rippleold.RippleSalon;
import com.hippo.text.Html;
import com.hippo.text.URLImageGetter;
import com.hippo.utils.OpenUrlHelper;
import com.hippo.utils.ReadableTime;
import com.hippo.utils.TextUrl;
import com.hippo.ehviewer.OpenUrlHelper;
import com.hippo.util.ReadableTime;
import com.hippo.util.TextUrl;
import com.hippo.vector.VectorDrawable;
import com.hippo.widget.LinkifyTextView;
import com.hippo.yorozuya.LayoutUtils;
@@ -141,7 +141,7 @@ public final class GalleryCommentsScene extends ToolbarScene
commentHolder.comment.clearCurrentSpan();
if (span instanceof URLSpan) {
OpenUrlHelper.openUrl(getContext(), ((URLSpan) span).getURL(), true);
OpenUrlHelper.openUrl(getActivity(), ((URLSpan) span).getURL(), true, true);
return true;
}
}
@@ -35,6 +35,7 @@ import android.widget.ScrollView;
import android.widget.TextView;
import com.hippo.ehviewer.EhApplication;
import com.hippo.ehviewer.OpenUrlHelper;
import com.hippo.ehviewer.R;
import com.hippo.ehviewer.client.EhCacheKeyFactory;
import com.hippo.ehviewer.client.EhClient;
@@ -52,9 +53,9 @@ import com.hippo.scene.SceneFragment;
import com.hippo.scene.StageActivity;
import com.hippo.text.Html;
import com.hippo.text.URLImageGetter;
import com.hippo.utils.ApiHelper;
import com.hippo.utils.ExceptionUtils;
import com.hippo.utils.ReadableTime;
import com.hippo.util.ApiHelper;
import com.hippo.util.ExceptionUtils;
import com.hippo.util.ReadableTime;
import com.hippo.vector.AnimatedVectorDrawable;
import com.hippo.vector.VectorDrawable;
import com.hippo.widget.AutoWrapLayout;
@@ -74,6 +75,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
public static final String KEY_GALLERY_INFO = "gallery_info";
public static final String KEY_GID = "gid";
public static final String KEY_TOKEN = "token";
public static final String KEY_PAGE = "page";
private static final String KEY_GALLERY_DETAIL = "gallery_detail";
private static final String KEY_REQUEST_ID = "request_id";
@@ -638,7 +640,7 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
LoadImageView image = (LoadImageView) view.findViewById(R.id.image);
image.load(EhCacheKeyFactory.getLargePreviewKey(gd.gid, index), imageUrl, true);
TextView text = (TextView) view.findViewById(R.id.text);
text.setText(String.format(Locale.US, "%d", index));
text.setText(String.format(Locale.US, "%d", index + 1));
}
}
@@ -711,7 +713,10 @@ public class GalleryDetailScene extends BaseScene implements View.OnClickListene
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_open_in_other_app:
// TODO
String url = getGalleryDetailUrl();
if (url != null) {
OpenUrlHelper.openUrl(getActivity(), url, false, false);
}
break;
}
return true;
@@ -69,7 +69,7 @@ import com.hippo.scene.SceneApplication;
import com.hippo.scene.SceneFragment;
import com.hippo.scene.StageActivity;
import com.hippo.scene.TransitionHelper;
import com.hippo.utils.ApiHelper;
import com.hippo.util.ApiHelper;
import com.hippo.vector.VectorDrawable;
import com.hippo.view.ViewTransition;
import com.hippo.widget.ContentLayout;
@@ -171,6 +171,7 @@ public final class GalleryListScene extends BaseScene
onUpdateUrlBuilder();
mHelper.refresh();
setState(STATE_NORMAL);
mSearchBarMoveHelper.showSearchBar();
}
@Override
@@ -41,8 +41,7 @@ import com.hippo.ehviewer.client.EhClient;
import com.hippo.ehviewer.client.EhCookieStore;
import com.hippo.ehviewer.client.EhRequest;
import com.hippo.rippleold.RippleSalon;
import com.hippo.utils.ExceptionUtils;
import com.hippo.widget.CardButton;
import com.hippo.util.ExceptionUtils;
public final class LoginScene extends BaseScene implements EditText.OnEditorActionListener,
View.OnClickListener {
@@ -52,8 +51,8 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi
private TextInputLayout mPasswordLayout;
private EditText mUsername;
private EditText mPassword;
private CardButton mRegister;
private CardButton mSignIn;
private View mRegister;
private View mSignIn;
private TextView mSignInViaWebview;
private TextView mSignInViaCookies;
private TextView mSkipSigningIn;
@@ -88,8 +87,8 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi
mUsername = mUsernameLayout.getEditText();
mPasswordLayout = (TextInputLayout) loginForm.findViewById(R.id.password_layout);
mPassword = mPasswordLayout.getEditText();
mRegister = (CardButton) loginForm.findViewById(R.id.register);
mSignIn = (CardButton) loginForm.findViewById(R.id.sign_in);
mRegister = loginForm.findViewById(R.id.register);
mSignIn = loginForm.findViewById(R.id.sign_in);
mSignInViaWebview = (TextView) loginForm.findViewById(R.id.sign_in_via_webview);
mSignInViaCookies = (TextView) loginForm.findViewById(R.id.sign_in_via_cookies);
mSkipSigningIn = (TextView) loginForm.findViewById(R.id.skip_signing_in);
@@ -106,10 +105,8 @@ public final class LoginScene extends BaseScene implements EditText.OnEditorActi
mSignInViaCookies.setOnClickListener(this);
mSkipSigningIn.setOnClickListener(this);
mRegister.setRawBackgroundDrawable(
RippleSalon.generateRippleDrawable(true, mRegister.getBackground()));
mSignIn.setRawBackgroundDrawable(
RippleSalon.generateRippleDrawable(true, mSignIn.getBackground()));
RippleSalon.addRipple(mRegister, true);
RippleSalon.addRipple(mSignIn, true);
return view;
}
@@ -28,13 +28,12 @@ import com.hippo.ehviewer.Settings;
import com.hippo.ehviewer.client.EhUtils;
import com.hippo.rippleold.RippleSalon;
import com.hippo.vector.VectorDrawable;
import com.hippo.widget.CardButton;
import com.hippo.widget.SimpleImageView;
public final class WarningScene extends BaseScene implements View.OnClickListener {
private CardButton mCancel;
private CardButton mOk;
private View mCancel;
private View mOk;
@Nullable
@Override
@@ -43,8 +42,8 @@ public final class WarningScene extends BaseScene implements View.OnClickListene
View view = inflater.inflate(R.layout.scene_warning, container, false);
SimpleImageView alert = (SimpleImageView) view.findViewById(R.id.icon_alert);
mCancel = (CardButton) view.findViewById(R.id.cancel);
mOk = (CardButton) view.findViewById(R.id.ok);
mCancel = view.findViewById(R.id.cancel);
mOk = view.findViewById(R.id.ok);
Drawable drawable = VectorDrawable.create(getContext(), R.drawable.ic_alert);
alert.setDrawable(drawable);
@@ -52,10 +51,8 @@ public final class WarningScene extends BaseScene implements View.OnClickListene
mCancel.setOnClickListener(this);
mOk.setOnClickListener(this);
mCancel.setRawBackgroundDrawable(
RippleSalon.generateRippleDrawable(true, mCancel.getBackground()));
mOk.setRawBackgroundDrawable(
RippleSalon.generateRippleDrawable(true, mOk.getBackground()));
RippleSalon.addRipple(mCancel, true);
RippleSalon.addRipple(mOk, true);
return view;
}
@@ -37,11 +37,11 @@ import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.hippo.anani.SimpleAnimatorListener;
import com.hippo.cardsalon.CardView;
import com.hippo.ehviewer.R;
import com.hippo.view.ViewTransition;
import com.hippo.widget.SimpleImageView;
@@ -52,7 +52,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SearchBar extends CardView implements View.OnClickListener,
public class SearchBar extends FrameLayout implements View.OnClickListener,
TextView.OnEditorActionListener, TextWatcher,
SearchEditText.SearchEditTextListener {
@@ -108,6 +108,8 @@ public class SearchBar extends CardView implements View.OnClickListener,
}
private void init(Context context) {
setBackgroundResource(R.drawable.card_white_2dp);
mSearchDatabase = SearchDatabase.getInstance(getContext());
LayoutInflater inflater = LayoutInflater.from(context);
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.hippo.utils;
package com.hippo.util;
import android.app.Activity;
import android.content.ActivityNotFoundException;
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.hippo.utils;
package com.hippo.util;
import android.os.Build;
@@ -12,7 +12,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
package com.hippo.utils;
package com.hippo.util;
import android.content.Context;
import android.content.Intent;
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.hippo.utils;
package com.hippo.util;
import android.content.Context;
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.hippo.utils;
package com.hippo.util;
import android.content.Context;
import android.content.res.Resources;
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.hippo.utils;
package com.hippo.util;
import android.text.Spannable;
import android.text.SpannableString;
@@ -1,97 +0,0 @@
/*
* Copyright 2015 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.utils;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.support.customtabs.CustomTabsIntent;
import android.text.TextUtils;
import com.hippo.ehviewer.R;
public final class OpenUrlHelper {
private OpenUrlHelper() {
}
public static void openUrl(Context context, String url, boolean checkNMB) {
if (TextUtils.isEmpty(url)) {
return;
}
Intent intent;
Uri uri = Uri.parse(url);
/*
// Is nmb url
if (checkNMB) {
NMBUriParser.PostResult result = NMBUriParser.parsePostUri(uri);
if (result.site != null && result.id != null) {
intent = new Intent(context, PostActivity.class);
intent.setAction(PostActivity.ACTION_SITE_ID);
intent.putExtra(PostActivity.KEY_SITE, result.site.getId());
intent.putExtra(PostActivity.KEY_ID, result.id);
if (!(context instanceof Activity)) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
context.startActivity(intent);
return;
}
}
*/
// CustomTabs
if (context instanceof Activity) {
String packageName = CustomTabsHelper.getPackageNameToUseFixed(context);
if (packageName != null) {
new CustomTabsIntent.Builder()
.setToolbarColor(context.getResources().getColor(R.color.colorPrimary))
.setShowTitle(true)
.build()
.launchUrl((Activity) context, uri);
return;
}
}
// Intent.ACTION_VIEW
intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
PackageManager pm = context.getPackageManager();
ResolveInfo ri = pm.resolveActivity(intent, 0);
if (ri != null) {
if (!(context instanceof Activity)) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
context.startActivity(intent);
return;
}
/*
// Use WebViewActivity
intent = new Intent(context, WebViewActivity.class);
intent.putExtra(WebViewActivity.KEY_URL, url);
if (!(context instanceof Activity)) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
}
context.startActivity(intent);
*/
}
}
@@ -1,109 +0,0 @@
package com.hippo.widget;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.Button;
import com.hippo.cardsalon.CardHelper;
import com.hippo.cardsalon.CardViewDelegate;
public class CardButton extends Button implements CardViewDelegate {
private CardHelper mCardHelper;
public CardButton(Context context) {
super(context);
init(context, null);
}
public CardButton(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public CardButton(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
private void init(Context context, AttributeSet attrs) {
mCardHelper = new CardHelper(this);
mCardHelper.initialize(context, attrs);
}
@Override
public void setBackgroundResource(int resid) {
// Empty
}
@SuppressWarnings("deprecation")
@Override
public void setBackgroundDrawable(Drawable drawable) {
// Empty
}
@Override
public void setCardPadding(int left, int top, int right, int bottom) {
if (mCardHelper != null) {
mCardHelper.setPadding(left, top, right, bottom);
}
}
@SuppressWarnings("deprecation")
@Override
public void setRawBackgroundDrawable(Drawable drawable) {
super.setBackgroundDrawable(drawable);
}
@Override
public void setCardRadius(float radius) {
mCardHelper.setCardRadius(radius);
}
@Override
public float getCardRadius() {
return mCardHelper.getCardRadius();
}
@Override
public void setCardBackgroundColor(ColorStateList color) {
mCardHelper.setCardBackgroundColor(color);
}
@Override
public ColorStateList getCardBackgroundColor() {
return mCardHelper.getCardBackgroundColor();
}
@Override
public void setCardBoundSize(float size) {
mCardHelper.setCardBoundSize(size);
}
@Override
public float getCardBoundSize() {
return mCardHelper.getCardBoundSize();
}
@Override
public void setCardBoundColor(ColorStateList color) {
mCardHelper.setCardBoundColor(color);
}
@Override
public ColorStateList getCardBoundColor() {
return mCardHelper.getCardBoundColor();
}
@Override
public void setCardElevation(float elevation) {
mCardHelper.setCardElevation(elevation);
}
@Override
public float getCardElevation() {
return mCardHelper.getCardElevation();
}
}
@@ -1,109 +0,0 @@
package com.hippo.widget;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import com.hippo.cardsalon.CardHelper;
import com.hippo.cardsalon.CardViewDelegate;
public class CardLinearLayout extends LinearLayout implements CardViewDelegate {
private CardHelper mCardHelper;
public CardLinearLayout(Context context) {
super(context);
init(context, null);
}
public CardLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public CardLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
private void init(Context context, AttributeSet attrs) {
mCardHelper = new CardHelper(this);
mCardHelper.initialize(context, attrs);
}
@Override
public void setBackgroundResource(int resid) {
// Empty
}
@SuppressWarnings("deprecation")
@Override
public void setBackgroundDrawable(Drawable drawable) {
// Empty
}
@Override
public void setCardPadding(int left, int top, int right, int bottom) {
if (mCardHelper != null) {
mCardHelper.setPadding(left, top, right, bottom);
}
}
@SuppressWarnings("deprecation")
@Override
public void setRawBackgroundDrawable(Drawable drawable) {
super.setBackgroundDrawable(drawable);
}
@Override
public void setCardRadius(float radius) {
mCardHelper.setCardRadius(radius);
}
@Override
public float getCardRadius() {
return mCardHelper.getCardRadius();
}
@Override
public void setCardBackgroundColor(ColorStateList color) {
mCardHelper.setCardBackgroundColor(color);
}
@Override
public ColorStateList getCardBackgroundColor() {
return mCardHelper.getCardBackgroundColor();
}
@Override
public void setCardBoundSize(float size) {
mCardHelper.setCardBoundSize(size);
}
@Override
public float getCardBoundSize() {
return mCardHelper.getCardBoundSize();
}
@Override
public void setCardBoundColor(ColorStateList color) {
mCardHelper.setCardBoundColor(color);
}
@Override
public ColorStateList getCardBoundColor() {
return mCardHelper.getCardBoundColor();
}
@Override
public void setCardElevation(float elevation) {
mCardHelper.setCardElevation(elevation);
}
@Override
public float getCardElevation() {
return mCardHelper.getCardElevation();
}
}
@@ -1,125 +0,0 @@
/*
* Copyright 2016 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.widget;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.RelativeLayout;
import com.hippo.cardsalon.CardHelper;
import com.hippo.cardsalon.CardViewDelegate;
public class CardRelativeLayout extends RelativeLayout implements CardViewDelegate {
private CardHelper mCardHelper;
public CardRelativeLayout(Context context) {
super(context);
init(context, null);
}
public CardRelativeLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public CardRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
private void init(Context context, AttributeSet attrs) {
mCardHelper = new CardHelper(this);
mCardHelper.initialize(context, attrs);
}
@Override
public void setBackgroundResource(int resid) {
// Empty
}
@SuppressWarnings("deprecation")
@Override
public void setBackgroundDrawable(Drawable drawable) {
// Empty
}
@Override
public void setCardPadding(int left, int top, int right, int bottom) {
if (mCardHelper != null) {
mCardHelper.setPadding(left, top, right, bottom);
}
}
@SuppressWarnings("deprecation")
@Override
public void setRawBackgroundDrawable(Drawable drawable) {
super.setBackgroundDrawable(drawable);
}
@Override
public void setCardRadius(float radius) {
mCardHelper.setCardRadius(radius);
}
@Override
public float getCardRadius() {
return mCardHelper.getCardRadius();
}
@Override
public void setCardBackgroundColor(ColorStateList color) {
mCardHelper.setCardBackgroundColor(color);
}
@Override
public ColorStateList getCardBackgroundColor() {
return mCardHelper.getCardBackgroundColor();
}
@Override
public void setCardBoundSize(float size) {
mCardHelper.setCardBoundSize(size);
}
@Override
public float getCardBoundSize() {
return mCardHelper.getCardBoundSize();
}
@Override
public void setCardBoundColor(ColorStateList color) {
mCardHelper.setCardBoundColor(color);
}
@Override
public ColorStateList getCardBoundColor() {
return mCardHelper.getCardBoundColor();
}
@Override
public void setCardElevation(float elevation) {
mCardHelper.setCardElevation(elevation);
}
@Override
public float getCardElevation() {
return mCardHelper.getCardElevation();
}
}
@@ -34,7 +34,7 @@ import com.hippo.easyrecyclerview.FastScroller;
import com.hippo.easyrecyclerview.HandlerDrawable;
import com.hippo.easyrecyclerview.LayoutManagerUtils;
import com.hippo.ehviewer.R;
import com.hippo.utils.ExceptionUtils;
import com.hippo.util.ExceptionUtils;
import com.hippo.vector.VectorDrawable;
import com.hippo.view.ViewTransition;
import com.hippo.widget.refreshlayout.RefreshLayout;
@@ -119,16 +119,14 @@
</LinearLayout>
<com.hippo.widget.CardLinearLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
<LinearLayout
android:id="@+id/action_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/keyline_margin"
android:layout_marginRight="@dimen/keyline_margin"
android:orientation="horizontal"
app:cardElevation="2dp"
app:forceNoElevation="true">
android:background="@drawable/card_white_2dp">
<TextView
android:id="@+id/download"
@@ -154,6 +152,6 @@
android:textColor="@color/colorAccent"
android:text="@string/read"/>
</com.hippo.widget.CardLinearLayout>
</LinearLayout>
</FrameLayout>
</LinearLayout>
+63 -72
View File
@@ -14,88 +14,79 @@
~ limitations under the License.
-->
<com.h6ah4i.android.materialshadowninepatch.MaterialShadowContainerView
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/ms9_DefaultShadowStyleCompatOnly"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:ms9_shadowTranslationZ="2dp"
app:ms9_affectsDisplayedPosition="false">
android:background="@drawable/card_white_2dp">
<RelativeLayout
<com.hippo.widget.LoadImageView
android:id="@+id/thumb"
android:layout_width="@dimen/list_thumb_width"
android:layout_height="@dimen/list_thumb_height"
app:retryType="click"/>
<TextView
android:id="@+id/title"
style="@style/CardTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:background="@android:color/white">
android:layout_alignParentTop="true"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="4dp"
android:layout_toRightOf="@id/thumb"/>
<com.hippo.widget.LoadImageView
android:id="@+id/thumb"
android:layout_width="@dimen/list_thumb_width"
android:layout_height="@dimen/list_thumb_height"
app:retryType="click"/>
<TextView
android:id="@+id/uploader"
style="@style/CardMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/title"
android:layout_below="@id/title"
android:layout_marginTop="2dp"/>
<TextView
android:id="@+id/title"
style="@style/CardTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="4dp"
android:layout_toRightOf="@id/thumb"/>
<com.hippo.ehviewer.widget.SimpleRatingView
android:id="@+id/rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/title"
android:layout_below="@id/uploader"
android:layout_marginTop="2dp"/>
<TextView
android:id="@+id/uploader"
style="@style/CardMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/title"
android:layout_below="@id/title"
android:layout_marginTop="2dp"/>
<TextView
android:id="@+id/category"
style="@style/CardMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/title"
android:layout_alignBottom="@id/thumb"
android:layout_marginBottom="8dp"
android:paddingBottom="2dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="2dp"
android:textColor="@android:color/white"
android:textAllCaps="true"/>
<com.hippo.ehviewer.widget.SimpleRatingView
android:id="@+id/rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/title"
android:layout_below="@id/uploader"
android:layout_marginTop="2dp"/>
<TextView
android:id="@+id/posted"
style="@style/CardMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/thumb"
android:layout_alignParentRight="true"
android:layout_marginRight="6dp"
android:layout_marginBottom="4dp"/>
<TextView
android:id="@+id/category"
style="@style/CardMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/title"
android:layout_alignBottom="@id/thumb"
android:layout_marginBottom="8dp"
android:paddingBottom="2dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="2dp"
android:textColor="@android:color/white"
android:textAllCaps="true"/>
<TextView
android:id="@+id/simple_language"
style="@style/CardMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/posted"
android:layout_alignParentRight="true"
android:layout_marginRight="6dp"/>
<TextView
android:id="@+id/posted"
style="@style/CardMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/thumb"
android:layout_alignParentRight="true"
android:layout_marginRight="6dp"
android:layout_marginBottom="4dp"/>
<TextView
android:id="@+id/simple_language"
style="@style/CardMessage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/posted"
android:layout_alignParentRight="true"
android:layout_marginRight="6dp"/>
</RelativeLayout>
</com.h6ah4i.android.materialshadowninepatch.MaterialShadowContainerView>
</RelativeLayout>
@@ -46,8 +46,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/list_search_bar_margin"
android:layout_marginRight="@dimen/list_search_bar_margin"
android:layout_marginTop="8dp"
app:forceNoElevation="true"/>
android:layout_marginTop="8dp"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
+4 -5
View File
@@ -84,12 +84,11 @@
android:layout_weight="1"/>
<LinearLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.hippo.widget.CardButton
<TextView
android:id="@+id/register"
style="@style/CardButton"
android:layout_width="0dp"
@@ -98,9 +97,9 @@
android:layout_margin="@dimen/keyline_margin"
android:text="@string/register"
android:textColor="@android:color/white"
app:cardBackgroundColor="@color/purple_500"/>
android:background="@drawable/card_purple_2dp"/>
<com.hippo.widget.CardButton
<TextView
android:id="@+id/sign_in"
style="@style/CardButton"
android:layout_width="0dp"
@@ -109,7 +108,7 @@
android:layout_margin="@dimen/keyline_margin"
android:text="@string/sign_in"
android:textColor="@android:color/white"
app:cardBackgroundColor="@color/teal_500"/>
android:background="@drawable/card_teal_2dp"/>
</LinearLayout>
+4 -6
View File
@@ -56,15 +56,13 @@
</com.hippo.widget.MaxSizeContainer>
<LinearLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<com.hippo.widget.CardButton
<TextView
android:id="@+id/cancel"
style="@style/CardButton"
android:layout_width="0dp"
@@ -73,9 +71,9 @@
android:layout_margin="@dimen/keyline_margin"
android:text="@android:string/cancel"
android:textColor="@android:color/white"
app:cardBackgroundColor="@color/purple_500"/>
android:background="@drawable/card_purple_2dp"/>
<com.hippo.widget.CardButton
<TextView
android:id="@+id/ok"
style="@style/CardButton"
android:layout_width="0dp"
@@ -84,7 +82,7 @@
android:layout_margin="@dimen/keyline_margin"
android:text="@android:string/ok"
android:textColor="@android:color/white"
app:cardBackgroundColor="@color/teal_500"/>
android:background="@drawable/card_teal_2dp"/>
</LinearLayout>
</LinearLayout>
+4 -8
View File
@@ -14,13 +14,11 @@
~ limitations under the License.
-->
<com.hippo.cardsalon.CardView
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:auto="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
auto:forceNoElevation="true">
android:background="@drawable/card_white_2dp">
<LinearLayout
android:layout_width="match_parent"
@@ -28,8 +26,7 @@
android:orientation="vertical"
android:paddingLeft="@dimen/search_category_padding_h"
android:paddingRight="@dimen/search_category_padding_h"
android:paddingBottom="@dimen/search_category_padding_v"
tools:ignore="RtlHardcoded">
android:paddingBottom="@dimen/search_category_padding_v">
<TextView
android:id="@+id/category_title"
@@ -44,5 +41,4 @@
android:layout_height="wrap_content"/>
</LinearLayout>
</com.hippo.cardsalon.CardView>
</FrameLayout>
+2 -1
View File
@@ -43,7 +43,8 @@
<style name="CardButton">
<item name="android:minWidth">88dp</item>
<item name="android:minHeight">48dp</item>
<item name="forceNoElevation">true</item>
<item name="android:gravity">center</item>
<item name="android:background">@drawable/card_white_2dp</item>
</style>
<style name="TextAppearance.CardTitle">
+1 -1
View File
@@ -1 +1 @@
include ':anani', ':app', 'beerbelly', 'cardsalon', 'conaco', ':daogenerator', ':easyrecyclerview', 'hotspot', ':okhttp3', 'rippleold', 'unifile', 'vector', 'yorozuya'
include ':anani', ':app', 'beerbelly', 'conaco', ':daogenerator', ':easyrecyclerview', 'hotspot', ':okhttp3', 'rippleold', 'unifile', 'vector', 'yorozuya'
Submodule yorozuya updated: cd9bd4ca50...41fa892da2.