com.module.R.res.love\r\n<\/code><\/pre>app 中也可以使用这个资源,但是包名为:<\/p>\r\n
com.app.R.res.love\r\n<\/code><\/pre>两者虽然对应一个资源,但是id 值很大概率上是不同的。<\/p>\r\n
那么最终打包是如何处理的呢?<\/p>","envelopePic":"","fresh":false,"id":9067,"link":"https://www.wanandroid.com/wenda/show/9067","niceDate":"2019-09-01","niceShareDate":"未知时间","origin":"","prefix":"","projectLink":"","publishTime":1567351014000,"selfVisible":0,"shareDate":null,"shareUser":"鸿洋","superChapterId":440,"superChapterName":"问答","tags":[{"name":"问答","url":"/article/list/0?cid=440"}],"title":"每日一问 关于 R.java 的生成规则,你知道多少?","type":0,"userId":2,"visible":1,"zan":15},{"apkLink":"","audit":1,"author":"xiaoyang","chapterId":440,"chapterName":"官方","collect":false,"courseId":13,"desc":"
\r\n- 为什么效果比Serializable高?<\/li>\r\n
- 为了效率损失了什么?<\/li>\r\n
- 一个对象可以序列化的关键,你认为是?<\/li>\r\n<\/ol>","envelopePic":"","fresh":false,"id":9002,"link":"https://www.wanandroid.com/wenda/show/9002","niceDate":"2019-08-26","niceShareDate":"未知时间","origin":"","prefix":"","projectLink":"","publishTime":1566748970000,"selfVisible":0,"shareDate":null,"shareUser":"鸿洋","superChapterId":440,"superChapterName":"问答","tags":[{"name":"问答","url":"/article/list/0?cid=440"}],"title":"每日一问 Parcelable 为什么效率高于 Serializable ?","type":0,"userId":2,"visible":1,"zan":31},{"apkLink":"","audit":1,"author":"xiaoyang","chapterId":440,"chapterName":"官方","collect":false,"courseId":13,"desc":"
就找个细节考察下 Gradle 相关知识吧。<\/p>\r\n
每个项目中,gradle 都会帮助我们生成一个 BuildConfig,那么:<\/p>\r\n
\r\n- 这个类有何用处?<\/li>\r\n
- 是在项目的编译期间,那个环节、如何生成的?<\/li>\r\n<\/ol>\r\n
欢迎了解多少说多少,不了解学了过来总结一下。<\/p>","envelopePic":"","fresh":false,"id":8985,"link":"https://www.wanandroid.com/wenda/show/8985","niceDate":"2019-08-20","niceShareDate":"未知时间","origin":"","prefix":"","projectLink":"","publishTime":1566314853000,"selfVisible":0,"shareDate":null,"shareUser":"鸿洋","superChapterId":440,"superChapterName":"问答","tags":[{"name":"问答","url":"/article/list/0?cid=440"}],"title":"每日一问 今天聊一下Gradle 相关,BuildConfig这个类是如何生成的?","type":0,"userId":2,"visible":1,"zan":15},{"apkLink":"","audit":1,"author":"xiaoyang","chapterId":440,"chapterName":"官方","collect":false,"courseId":13,"desc":"
很多时候大家在剖析butterknife源码的时候,更多的是讲解其中的apt等,在library中使用buttterknife的时候,会使用R2.id.xxx<\/p>\r\n
class ExampleActivity extends Activity {\r\n @BindView(R2.id.user) EditText username;\r\n @BindView(R2.id.pass) EditText password;\r\n...\r\n}\r\n<\/code><\/pre>而非R.id.xxx.<\/p>\r\n
所以今天提问是:<\/p>\r\n
\r\n- 简述butterknife 原理;<\/li>\r\n
- apt 大致开发流程;<\/li>\r\n
- 以及上面描述为何使用 R2.id.xxx ,怎么做到的。<\/li>\r\n<\/ol>\r\n
任意回答其中一点都可以。<\/p>","envelopePic":"","fresh":false,"id":8926,"link":"https://www.wanandroid.com/wenda/show/8926","niceDate":"2019-08-18","niceShareDate":"未知时间","origin":"","prefix":"","projectLink":"","publishTime":1566135745000,"selfVisible":0,"shareDate":null,"shareUser":"鸿洋","superChapterId":440,"superChapterName":"问答","tags":[{"name":"问答","url":"/article/list/0?cid=440"}],"title":"每日一问 butterknife 中的黑科技","type":0,"userId":2,"visible":0,"zan":5},{"apkLink":"","audit":1,"author":"xiaoyang","chapterId":440,"chapterName":"官方","collect":false,"courseId":13,"desc":"
都说程序员应该对位运算了如指掌,那么Android中有哪些地方用到了呢?<\/p>\r\n
可否列举一些场景。<\/p>","envelopePic":"","fresh":false,"id":8913,"link":"https://wanandroid.com/wenda/show/8913","niceDate":"2019-08-13","niceShareDate":"未知时间","origin":"","prefix":"","projectLink":"","publishTime":1565704592000,"selfVisible":0,"shareDate":null,"shareUser":"鸿洋","superChapterId":440,"superChapterName":"问答","tags":[{"name":"问答","url":"/article/list/0?cid=440"}],"title":"每日一问 Android 有哪些 位运算 的例子很值得借鉴?","type":0,"userId":2,"visible":1,"zan":4},{"apkLink":"","audit":1,"author":"xiaoyang","chapterId":440,"chapterName":"官方","collect":false,"courseId":13,"desc":"
\r\n- 你有任何想问的问题<\/li>\r\n
- 任何方向<\/li>\r\n
- 关键词<\/li>\r\n<\/ol>\r\n
都可以直接留言提出。<\/p>","envelopePic":"","fresh":false,"id":8857,"link":"https://www.wanandroid.com/wenda/show/8857","niceDate":"2019-08-12","niceShareDate":"未知时间","origin":"","prefix":"","projectLink":"","publishTime":1565575082000,"selfVisible":0,"shareDate":null,"shareUser":"鸿洋","superChapterId":440,"superChapterName":"问答","tags":[{"name":"问答","url":"/article/list/0?cid=440"}],"title":"每日一问 问答征集","type":0,"userId":2,"visible":0,"zan":10},{"apkLink":"","audit":1,"author":"xiaoyang","chapterId":440,"chapterName":"官方","collect":false,"courseId":13,"desc":"
记得曾经有位同学做贴纸应用时,有RT 的需求。<\/p>\r\n
默认事件分发为逆序,遍历子 View 为 (childCount ~ 0 ],有哪些方式可以修改这一策略,比如修改遍历方式为[0,childCount)?<\/p>\r\n
3/3<\/p>","envelopePic":"","fresh":false,"id":8852,"link":"https://www.wanandroid.com/wenda/show/8852","niceDate":"2019-08-11","niceShareDate":"未知时间","origin":"","prefix":"","projectLink":"","publishTime":1565529502000,"selfVisible":0,"shareDate":null,"shareUser":"鸿洋","superChapterId":440,"superChapterName":"问答","tags":[{"name":"问答","url":"/article/list/0?cid=440"}],"title":"每日一问 事件分发机制大家应该都熟记于心,默认事件分发是逆序的,有哪些方法可以修改分发顺序?","type":0,"userId":2,"visible":1,"zan":12}],"offset":0,"over":false,"pageCount":3,"size":20,"total":57}
*/
private CoinInfoBean coinInfo;
diff --git a/app/src/main/java/per/goweii/wanandroid/module/main/presenter/WebPresenter.java b/app/src/main/java/per/goweii/wanandroid/module/main/presenter/WebPresenter.java
index b962d3e7..992871b9 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/main/presenter/WebPresenter.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/main/presenter/WebPresenter.java
@@ -12,6 +12,7 @@
import per.goweii.basic.utils.listener.SimpleListener;
import per.goweii.rxhttp.request.base.BaseBean;
import per.goweii.rxhttp.request.exception.ExceptionHandle;
+import per.goweii.wanandroid.R;
import per.goweii.wanandroid.db.executor.ReadLaterExecutor;
import per.goweii.wanandroid.db.executor.ReadRecordExecutor;
import per.goweii.wanandroid.db.model.ReadLaterModel;
@@ -303,12 +304,12 @@ public void addReadLater(String link, String title) {
@Override
public void onResult(ReadLaterModel data) {
addReadLater(data);
- ToastMaker.showShort("已加入我的书签");
+ ToastMaker.showShort(getContext().getString(R.string.added_to_my_bookmarks));
}
}, new SimpleListener() {
@Override
public void onResult() {
- ToastMaker.showShort("加入我的书签失败");
+ ToastMaker.showShort(getContext().getString(R.string.failed_to_add_my_bookmarks));
}
});
}
@@ -319,12 +320,12 @@ public void deleteReadLater(String link) {
@Override
public void onResult() {
removeReadLater(link);
- ToastMaker.showShort("已移除我的书签");
+ ToastMaker.showShort(getContext().getString(R.string.moved_out_of_my_bookmarks));
}
}, new SimpleListener() {
@Override
public void onResult() {
- ToastMaker.showShort("移出我的书签失败");
+ ToastMaker.showShort(getContext().getString(R.string.failed_to_move_out_of_my_bookmarks));
}
});
}
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/AboutActivity.java b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/AboutActivity.java
index c6d0a5c8..0ffb05b3 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/AboutActivity.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/AboutActivity.java
@@ -5,12 +5,16 @@
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
+import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.core.view.OnApplyWindowInsetsListener;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
import butterknife.BindView;
import butterknife.OnClick;
@@ -30,6 +34,7 @@
import per.goweii.codex.encoder.CodeEncoder;
import per.goweii.codex.processor.zxing.ZXingEncodeQRCodeProcessor;
import per.goweii.wanandroid.R;
+import per.goweii.wanandroid.databinding.ActivityAboutBinding;
import per.goweii.wanandroid.module.main.dialog.CardShareDialog;
import per.goweii.wanandroid.module.main.dialog.DownloadDialog;
import per.goweii.wanandroid.module.main.model.UpdateBean;
@@ -44,7 +49,7 @@
* @date 2019/5/17
* GitHub: https://github.com/goweii
*/
-public class AboutActivity extends BaseActivity implements AboutView {
+public class AboutActivity extends BaseActivity implements AboutView {
private static final int UPDATE_TYPE_REFRESH = 1;
private static final int UPDATE_TYPE_NOTICE = 2;
private static final int UPDATE_TYPE_SHARE = 3;
@@ -73,9 +78,10 @@ public static void start(Context context) {
context.startActivity(intent);
}
+ @Nullable
@Override
- protected int getLayoutId() {
- return R.layout.activity_about;
+ protected ActivityAboutBinding initViewBinding(@NonNull LayoutInflater inflater) {
+ return ActivityAboutBinding.inflate(inflater);
}
@Nullable
@@ -92,6 +98,16 @@ public void onClick(View v) {
presenter.update(UPDATE_TYPE_SHARE);
}
});
+
+ ViewCompat.setOnApplyWindowInsetsListener(binding.getRoot(), new OnApplyWindowInsetsListener() {
+ @NonNull
+ @Override
+ public WindowInsetsCompat onApplyWindowInsets(@NonNull View v, @NonNull WindowInsetsCompat insets) {
+ final int b = insets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom;
+ binding.getRoot().setPadding(0, 0, 0, b);
+ return insets;
+ }
+ });
}
@Override
@@ -141,17 +157,13 @@ protected void onClick2(View v) {
break;
case R.id.ll_beta:
String msg = new StringBuilder()
- .append("需要申请开通内测更新的小伙伴,")
- .append("请加群(见关于作者)说明内测更新并注明玩友号(见个人资料)。")
- .append("\n")
- .append("\n")
- .append("注:内测更新须提前登录并更新到最新正式版")
+ .append(getString(R.string.apply_for_a_closed_beta_msg))
.toString();
TipDialog.with(this)
- .title("申请内测")
+ .title(getString(R.string.apply_for_a_closed_beta))
.message(msg)
.msgCenter(false)
- .yesText("知道了")
+ .yesText(getString(R.string.i_know))
.singleYesBtn()
.show();
break;
@@ -172,7 +184,7 @@ protected void onActivityResult(int requestCode, int resultCode, @Nullable Inten
public void updateSuccess(int code, UpdateBean data, int updateType) {
if (UpdateUtils.getInstance().isNewest(data)) {
tv_update.setTextColor(ResUtils.getThemeColor(getContext(), R.attr.colorTextMain));
- tv_update.setText("发现新版本" + data.getVersion_name());
+ tv_update.setText(getString(R.string.discover_the_new_version_tips, data.getVersion_name()));
switch (updateType) {
case UPDATE_TYPE_REFRESH:
break;
@@ -205,14 +217,14 @@ public void updateSuccess(int code, UpdateBean data, int updateType) {
@Override
public void updateFailed(int code, String msg, int updateType) {
tv_update.setTextColor(ResUtils.getThemeColor(getContext(), R.attr.colorTextThird));
- tv_update.setText("已是最新版");
+ tv_update.setText(getString(R.string.this_is_the_latest_version));
}
@Override
public void betaUpdateSuccess(int code, UpdateBean data, int updateType) {
if (UpdateUtils.getInstance().isNewest(data)) {
tv_update.setTextColor(ResUtils.getThemeColor(getContext(), R.attr.colorTextAccent));
- tv_update.setText("发现内测版本" + data.getVersion_name());
+ tv_update.setText(getString(R.string.discover_the_closed_beta_version_tips, data.getVersion_name()));
switch (updateType) {
case UPDATE_TYPE_REFRESH:
break;
@@ -226,12 +238,12 @@ public void betaUpdateSuccess(int code, UpdateBean data, int updateType) {
}
} else {
tv_update.setTextColor(ResUtils.getThemeColor(getContext(), R.attr.colorTextThird));
- tv_update.setText("已是最新版");
+ tv_update.setText(getString(R.string.this_is_the_latest_version));
switch (updateType) {
case UPDATE_TYPE_REFRESH:
break;
case UPDATE_TYPE_NOTICE:
- ToastMaker.showShort("已是最新版");
+ ToastMaker.showShort(getString(R.string.this_is_the_latest_version));
break;
case UPDATE_TYPE_SHARE:
break;
@@ -244,12 +256,12 @@ public void betaUpdateSuccess(int code, UpdateBean data, int updateType) {
@Override
public void betaUpdateFailed(int code, String msg, int updateType) {
tv_update.setTextColor(ResUtils.getThemeColor(getContext(), R.attr.colorTextThird));
- tv_update.setText("已是最新版");
+ tv_update.setText(getString(R.string.this_is_the_latest_version));
switch (updateType) {
case UPDATE_TYPE_REFRESH:
break;
case UPDATE_TYPE_NOTICE:
- ToastMaker.showShort("已是最新版");
+ ToastMaker.showShort(getString(R.string.this_is_the_latest_version));
break;
case UPDATE_TYPE_SHARE:
break;
@@ -308,7 +320,7 @@ public Unit invoke(View view) {
TextView tv_version = view.findViewById(R.id.layout_app_qrcode_share_tv_version);
ImageView iv_qrcode = view.findViewById(R.id.layout_app_qrcode_share_iv_qrcode);
tv_name.setText(AppInfoUtils.getAppName());
- tv_version.setText(String.format("%s(%d)", data.getVersion_name(), data.getVersion_code()));
+ tv_version.setText(getString(R.string.app_version_name_code, data.getVersion_name(), data.getVersion_code()));
new CodeEncoder(new ZXingEncodeQRCodeProcessor())
.encode(data.getUrl(), new Function1() {
@Override
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/AboutMeActivity.java b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/AboutMeActivity.java
index 691dfadc..cd5ddeb5 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/AboutMeActivity.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/AboutMeActivity.java
@@ -10,6 +10,7 @@
import android.graphics.Bitmap;
import android.net.Uri;
import android.text.TextUtils;
+import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
@@ -17,6 +18,7 @@
import android.widget.RelativeLayout;
import android.widget.TextView;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.daimajia.swipe.SwipeLayout;
@@ -41,6 +43,7 @@
import per.goweii.percentimageview.percentimageview.PercentImageView;
import per.goweii.wanandroid.BuildConfig;
import per.goweii.wanandroid.R;
+import per.goweii.wanandroid.databinding.ActivityAboutMeBinding;
import per.goweii.wanandroid.module.mine.model.AboutMeBean;
import per.goweii.wanandroid.module.mine.presenter.AboutMePresenter;
import per.goweii.wanandroid.module.mine.view.AboutMeView;
@@ -53,7 +56,7 @@
* @date 2019/5/17
* GitHub: https://github.com/goweii
*/
-public class AboutMeActivity extends BaseActivity implements AboutMeView {
+public class AboutMeActivity extends BaseActivity implements AboutMeView {
private static final int REQUEST_CODE_PERMISSION = 1;
@@ -101,9 +104,10 @@ public static void start(Context context) {
context.startActivity(intent);
}
+ @Nullable
@Override
- protected int getLayoutId() {
- return R.layout.activity_about_me;
+ protected ActivityAboutMeBinding initViewBinding(@NonNull LayoutInflater inflater) {
+ return ActivityAboutMeBinding.inflate(inflater);
}
@Nullable
@@ -118,12 +122,12 @@ protected void initView() {
@Override
public void onClick(View v) {
StringBuilder s = new StringBuilder();
- s.append("【玩口令】你的好友给你订了一份双人咖啡,户制泽条消息");
- s.append(String.format(BuildConfig.WANPWD_FORMAT, BuildConfig.WANPWD_TYPE_ABOUTME, RandomUtils.randomLetter(10)));
- s.append("打開最美玩安卓客户端即可领取品尝");
+ String content = getString(R.string.your_friend_orders_you_a_coffee_for_two);
+ String key = String.format(BuildConfig.WANPWD_FORMAT, BuildConfig.WANPWD_TYPE_ABOUTME, RandomUtils.randomLetter(10));
+ s.append(String.format(content, key));
LogUtils.d("UserPageActivity", s);
CopyUtils.copyText(s.toString());
- ToastMaker.showShort("口令已复制");
+ ToastMaker.showShort(getString(R.string.copied));
}
});
changeVisible(View.INVISIBLE, civ_icon, tv_name, tv_sign);
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/CoinActivity.java b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/CoinActivity.java
index 6721a227..cdfbc10b 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/CoinActivity.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/CoinActivity.java
@@ -2,9 +2,11 @@
import android.content.Context;
import android.content.Intent;
+import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -20,6 +22,7 @@
import per.goweii.basic.utils.listener.OnClickListener2;
import per.goweii.basic.utils.listener.SimpleListener;
import per.goweii.wanandroid.R;
+import per.goweii.wanandroid.databinding.ActivityCoinBinding;
import per.goweii.wanandroid.module.main.dialog.WebDialog;
import per.goweii.wanandroid.module.mine.adapter.CoinRecordAdapter;
import per.goweii.wanandroid.module.mine.model.CoinRecordBean;
@@ -33,7 +36,7 @@
* @date 2019/8/31
* GitHub: https://github.com/goweii
*/
-public class CoinActivity extends BaseActivity implements CoinView {
+public class CoinActivity extends BaseActivity implements CoinView {
private static final int PAGE_START = 1;
@@ -54,9 +57,10 @@ public static void start(Context context) {
context.startActivity(intent);
}
+ @Nullable
@Override
- protected int getLayoutId() {
- return R.layout.activity_coin;
+ protected ActivityCoinBinding initViewBinding(@NonNull LayoutInflater inflater) {
+ return ActivityCoinBinding.inflate(inflater);
}
@Nullable
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/CoinRankActivity.java b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/CoinRankActivity.java
index 95484ffb..43f5df85 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/CoinRankActivity.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/CoinRankActivity.java
@@ -2,8 +2,10 @@
import android.content.Context;
import android.content.Intent;
+import android.view.LayoutInflater;
import android.view.View;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -17,6 +19,7 @@
import per.goweii.basic.core.base.BaseActivity;
import per.goweii.basic.utils.listener.SimpleListener;
import per.goweii.wanandroid.R;
+import per.goweii.wanandroid.databinding.ActivityCoinRankBinding;
import per.goweii.wanandroid.module.home.activity.UserPageActivity;
import per.goweii.wanandroid.module.main.model.CoinInfoBean;
import per.goweii.wanandroid.module.mine.adapter.CoinRankAdapter;
@@ -31,7 +34,7 @@
* @date 2019/8/31
* GitHub: https://github.com/goweii
*/
-public class CoinRankActivity extends BaseActivity implements CoinRankView {
+public class CoinRankActivity extends BaseActivity implements CoinRankView {
private static final int PAGE_START = 1;
@@ -50,9 +53,10 @@ public static void start(Context context) {
context.startActivity(intent);
}
+ @Nullable
@Override
- protected int getLayoutId() {
- return R.layout.activity_coin_rank;
+ protected ActivityCoinRankBinding initViewBinding(@NonNull LayoutInflater inflater) {
+ return ActivityCoinRankBinding.inflate(inflater);
}
@Nullable
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/CollectionActivity.java b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/CollectionActivity.java
index df5b40b9..18366aaf 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/CollectionActivity.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/CollectionActivity.java
@@ -2,9 +2,11 @@
import android.content.Context;
import android.content.Intent;
+import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
@@ -13,10 +15,12 @@
import per.goweii.actionbarex.ActionBarEx;
import per.goweii.basic.core.adapter.FixedFragmentPagerAdapter;
import per.goweii.basic.core.base.BaseActivity;
+import per.goweii.basic.core.base.BasePresenter;
import per.goweii.basic.core.mvp.MvpPresenter;
import per.goweii.basic.utils.listener.SimpleCallback;
import per.goweii.wanandroid.R;
import per.goweii.wanandroid.common.Config;
+import per.goweii.wanandroid.databinding.ActivityCollectionBinding;
import per.goweii.wanandroid.module.mine.fragment.CollectionArticleFragment;
import per.goweii.wanandroid.module.mine.fragment.CollectionLinkFragment;
import per.goweii.wanandroid.utils.MagicIndicatorUtils;
@@ -27,7 +31,7 @@
* @date 2019/5/17
* GitHub: https://github.com/goweii
*/
-public class CollectionActivity extends BaseActivity {
+public class CollectionActivity extends BaseActivity {
@BindView(R.id.ab)
ActionBarEx ab;
@@ -43,14 +47,15 @@ public static void start(Context context) {
context.startActivity(intent);
}
+ @Nullable
@Override
- protected int getLayoutId() {
- return R.layout.activity_collection;
+ protected ActivityCollectionBinding initViewBinding(@NonNull LayoutInflater inflater) {
+ return ActivityCollectionBinding.inflate(inflater);
}
@Nullable
@Override
- protected MvpPresenter initPresenter() {
+ protected BasePresenter initPresenter() {
return null;
}
@@ -65,7 +70,7 @@ public void onClick(View v) {
}
});
mAdapter = new FixedFragmentPagerAdapter(getSupportFragmentManager());
- mAdapter.setTitles("文章", "网址");
+ mAdapter.setTitles(getString(R.string.article), getString(R.string.website));
mAdapter.setFragmentList(
CollectionArticleFragment.create(),
CollectionLinkFragment.create()
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/HostInterruptActivity.java b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/HostInterruptActivity.java
index 2a2d15d3..8af7e257 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/HostInterruptActivity.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/HostInterruptActivity.java
@@ -2,9 +2,11 @@
import android.content.Context;
import android.content.Intent;
+import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
@@ -13,10 +15,12 @@
import per.goweii.actionbarex.ActionBarEx;
import per.goweii.basic.core.adapter.FixedFragmentPagerAdapter;
import per.goweii.basic.core.base.BaseActivity;
+import per.goweii.basic.core.base.BasePresenter;
import per.goweii.basic.core.mvp.MvpPresenter;
import per.goweii.basic.utils.listener.SimpleCallback;
import per.goweii.wanandroid.R;
import per.goweii.wanandroid.common.Config;
+import per.goweii.wanandroid.databinding.ActivityHostInterruptBinding;
import per.goweii.wanandroid.module.mine.fragment.HostBlackFragment;
import per.goweii.wanandroid.module.mine.fragment.HostWhiteFragment;
import per.goweii.wanandroid.utils.MagicIndicatorUtils;
@@ -27,7 +31,7 @@
* @date 2019/5/17
* GitHub: https://github.com/goweii
*/
-public class HostInterruptActivity extends BaseActivity {
+public class HostInterruptActivity extends BaseActivity {
@BindView(R.id.ab)
ActionBarEx ab;
@@ -43,14 +47,15 @@ public static void start(Context context) {
context.startActivity(intent);
}
+ @Nullable
@Override
- protected int getLayoutId() {
- return R.layout.activity_host_interrupt;
+ protected ActivityHostInterruptBinding initViewBinding(@NonNull LayoutInflater inflater) {
+ return ActivityHostInterruptBinding.inflate(inflater);
}
@Nullable
@Override
- protected MvpPresenter initPresenter() {
+ protected BasePresenter initPresenter() {
return null;
}
@@ -65,7 +70,7 @@ public void onClick(View v) {
}
});
mAdapter = new FixedFragmentPagerAdapter(getSupportFragmentManager());
- mAdapter.setTitles("白名单", "黑名单");
+ mAdapter.setTitles(getString(R.string.whitelist), getString(R.string.blacklist));
mAdapter.setFragmentList(
HostWhiteFragment.create(),
HostBlackFragment.create()
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/LanguageActivity.kt b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/LanguageActivity.kt
new file mode 100644
index 00000000..8f2eb616
--- /dev/null
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/LanguageActivity.kt
@@ -0,0 +1,58 @@
+package per.goweii.wanandroid.module.mine.activity
+
+import android.content.Context
+import android.content.Intent
+import android.view.LayoutInflater
+import androidx.recyclerview.widget.LinearLayoutManager
+import per.goweii.basic.core.base.BaseActivity
+import per.goweii.basic.core.base.BasePresenter
+import per.goweii.basic.l10n.L10nManager
+import per.goweii.basic.utils.LogUtils
+import per.goweii.wanandroid.utils.recreate_anim.RecreateAnimation
+import per.goweii.wanandroid.databinding.ActivityLanguageBinding
+import per.goweii.wanandroid.module.mine.adapter.LanguageAdapter
+import java.util.Locale
+
+class LanguageActivity : BaseActivity, ActivityLanguageBinding>() {
+ companion object {
+ @JvmStatic
+ fun start(context: Context) {
+ val intent = Intent(context, LanguageActivity::class.java)
+ context.startActivity(intent)
+ }
+ }
+
+ private var adapter: LanguageAdapter? = null
+
+ override fun initViewBinding(inflater: LayoutInflater): ActivityLanguageBinding {
+ return ActivityLanguageBinding.inflate(inflater)
+ }
+
+ override fun initPresenter(): BasePresenter<*>? {
+ return null
+ }
+
+ override fun initView() {
+ val appLocale = L10nManager.getApplicationLocale()
+ val sysLocale = L10nManager.getSystemLocale(this)
+ adapter = LanguageAdapter(appLocale, sysLocale)
+ binding.rv.layoutManager = LinearLayoutManager(this)
+ binding.rv.adapter = adapter
+
+ adapter?.setOnItemClickListener { _, _, position ->
+ val locale = adapter?.getItem(position)
+ LogUtils.e("LanguageActivity", "old decorView is ${window.decorView}")
+ RecreateAnimation(
+ activity = this,
+ trigger = { L10nManager.setApplicationLocales(locale) }
+ ).start()
+ }
+ }
+
+ override fun loadData() {
+ val locales = arrayListOf()
+ locales.add(null)
+ locales.addAll(L10nManager.getSupportedLocales(this))
+ adapter?.setNewData(locales)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/MessageActivity.kt b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/MessageActivity.kt
index 091c6626..780b1440 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/MessageActivity.kt
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/MessageActivity.kt
@@ -2,9 +2,9 @@ package per.goweii.wanandroid.module.mine.activity
import android.content.Context
import android.content.Intent
+import android.view.LayoutInflater
import android.view.View
import butterknife.BindView
-import kotlinx.android.synthetic.main.activity_message.*
import per.goweii.actionbarex.ActionBarEx
import per.goweii.actionbarex.common.ActionIconView
import per.goweii.basic.core.adapter.FixedFragmentPagerAdapter
@@ -12,6 +12,7 @@ import per.goweii.basic.core.base.BaseActivity
import per.goweii.basic.core.base.BasePresenter
import per.goweii.basic.core.base.BaseView
import per.goweii.wanandroid.R
+import per.goweii.wanandroid.databinding.ActivityMessageBinding
import per.goweii.wanandroid.module.mine.fragment.MessageReadedFragment
import per.goweii.wanandroid.module.mine.fragment.MessageUnreadFragment
import per.goweii.wanandroid.utils.MagicIndicatorUtils
@@ -21,7 +22,7 @@ import per.goweii.wanandroid.utils.MagicIndicatorUtils
* @date 2019/5/17
* GitHub: https://github.com/goweii
*/
-class MessageActivity : BaseActivity>() {
+class MessageActivity : BaseActivity, ActivityMessageBinding>() {
@BindView(R.id.ab)
lateinit var ab: ActionBarEx
@@ -34,7 +35,9 @@ class MessageActivity : BaseActivity>() {
}
}
- override fun getLayoutId() = R.layout.activity_message
+ override fun initViewBinding(inflater: LayoutInflater): ActivityMessageBinding {
+ return ActivityMessageBinding.inflate(inflater)
+ }
override fun initPresenter(): BasePresenter? = null
@@ -46,13 +49,13 @@ class MessageActivity : BaseActivity>() {
}
}
val adapter = FixedFragmentPagerAdapter(supportFragmentManager)
- adapter.setTitles("新消息", "历史消息")
+ adapter.setTitles(getString(R.string.new_messages),getString(R.string.historical_messages))
adapter.setFragmentList(
MessageUnreadFragment.create(),
MessageReadedFragment.create()
)
- vp.adapter = adapter
- MagicIndicatorUtils.commonNavigator(ab.getView(R.id.mi), vp, adapter, null)
+ binding.vp.adapter = adapter
+ MagicIndicatorUtils.commonNavigator(ab.getView(R.id.mi), binding.vp, adapter, null)
}
override fun loadData() {}
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/MineShareActivity.java b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/MineShareActivity.java
index 4aa42340..d028a2ae 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/MineShareActivity.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/MineShareActivity.java
@@ -2,8 +2,10 @@
import android.content.Context;
import android.content.Intent;
+import android.view.LayoutInflater;
import android.view.View;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -24,6 +26,7 @@
import per.goweii.basic.utils.listener.SimpleListener;
import per.goweii.wanandroid.R;
import per.goweii.wanandroid.common.Config;
+import per.goweii.wanandroid.databinding.ActivityMineShareBinding;
import per.goweii.wanandroid.event.ArticleDeleteEvent;
import per.goweii.wanandroid.event.ArticleShareEvent;
import per.goweii.wanandroid.event.CollectionEvent;
@@ -43,7 +46,7 @@
* @date 2019/5/17
* GitHub: https://github.com/goweii
*/
-public class MineShareActivity extends BaseActivity implements MineShareView {
+public class MineShareActivity extends BaseActivity implements MineShareView {
public static final int PAGE_START = 1;
@@ -106,9 +109,10 @@ protected boolean isRegisterEventBus() {
return true;
}
+ @Nullable
@Override
- protected int getLayoutId() {
- return R.layout.activity_mine_share;
+ protected ActivityMineShareBinding initViewBinding(@NonNull LayoutInflater inflater) {
+ return ActivityMineShareBinding.inflate(inflater);
}
@Nullable
@@ -168,7 +172,7 @@ public void uncollect(ArticleBean item, CollectView v) {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
mAdapter.closeAll(null);
- ArticleBean item = mAdapter.getItem(position);
+ ArticleBean item = mAdapter.getArticleItem(position);
if (item == null) {
return;
}
@@ -203,7 +207,7 @@ protected void loadData() {
public void getMineShareArticleListSuccess(int code, ArticleListBean data) {
currPage = data.getCurPage() + PAGE_START;
if (data.getCurPage() == 1) {
- mAdapter.setNewData(data.getDatas());
+ mAdapter.setArticleData(data.getDatas());
mAdapter.setEnableLoadMore(true);
if (data.getDatas() == null || data.getDatas().isEmpty()) {
MultiStateUtils.toEmpty(msv);
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/OpenActivity.java b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/OpenActivity.java
index be0191ee..5080f827 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/OpenActivity.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/OpenActivity.java
@@ -3,8 +3,10 @@
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
+import android.view.LayoutInflater;
import android.view.View;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -19,8 +21,10 @@
import butterknife.BindView;
import per.goweii.basic.core.base.BaseActivity;
+import per.goweii.basic.core.base.BasePresenter;
import per.goweii.basic.core.mvp.MvpPresenter;
import per.goweii.wanandroid.R;
+import per.goweii.wanandroid.databinding.ActivityOpenBinding;
import per.goweii.wanandroid.module.mine.model.OpenEntity;
import per.goweii.wanandroid.utils.MultiStateUtils;
import per.goweii.wanandroid.utils.UrlOpenUtils;
@@ -30,7 +34,7 @@
* @date 2019/5/17
* GitHub: https://github.com/goweii
*/
-public class OpenActivity extends BaseActivity {
+public class OpenActivity extends BaseActivity {
@BindView(R.id.msv)
MultiStateView msv;
@@ -46,14 +50,15 @@ public static void start(Context context) {
context.startActivity(intent);
}
+ @Nullable
@Override
- protected int getLayoutId() {
- return R.layout.activity_open;
+ protected ActivityOpenBinding initViewBinding(@NonNull LayoutInflater inflater) {
+ return ActivityOpenBinding.inflate(inflater);
}
@Nullable
@Override
- protected MvpPresenter initPresenter() {
+ protected BasePresenter initPresenter() {
return null;
}
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/ReadLaterActivity.java b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/ReadLaterActivity.java
index 03ff419b..de3398c2 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/ReadLaterActivity.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/ReadLaterActivity.java
@@ -3,8 +3,10 @@
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
+import android.view.LayoutInflater;
import android.view.View;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -30,6 +32,7 @@
import per.goweii.basic.utils.listener.SimpleCallback;
import per.goweii.basic.utils.listener.SimpleListener;
import per.goweii.wanandroid.R;
+import per.goweii.wanandroid.databinding.ActivityReadLaterBinding;
import per.goweii.wanandroid.db.model.ReadLaterModel;
import per.goweii.wanandroid.event.ReadLaterEvent;
import per.goweii.wanandroid.module.mine.adapter.ReadLaterAdapter;
@@ -44,7 +47,7 @@
* @date 2019/5/17
* GitHub: https://github.com/goweii
*/
-public class ReadLaterActivity extends BaseActivity implements ReadLaterView {
+public class ReadLaterActivity extends BaseActivity implements ReadLaterView {
@BindView(R.id.abc)
ActionBarCommon abc;
@@ -80,9 +83,10 @@ protected boolean isRegisterEventBus() {
return true;
}
+ @Nullable
@Override
- protected int getLayoutId() {
- return R.layout.activity_read_later;
+ protected ActivityReadLaterBinding initViewBinding(@NonNull LayoutInflater inflater) {
+ return ActivityReadLaterBinding.inflate(inflater);
}
@Nullable
@@ -97,7 +101,7 @@ protected void initView() {
@Override
public void onClick(View v) {
TipDialog.with(getContext())
- .message("确定要全部删除吗?")
+ .message(R.string.are_you_sure_you_want_to_delete_them_all)
.onYes(new SimpleCallback() {
@Override
public void onResult(Void data) {
@@ -145,11 +149,11 @@ public void onItemChildClick(BaseQuickAdapter adapter, View view, int position)
break;
case R.id.tv_copy:
CopyUtils.copyText(item.getLink());
- ToastMaker.showShort("复制成功");
+ ToastMaker.showShort(getString(R.string.copied));
break;
case R.id.tv_open:
if (TextUtils.isEmpty(item.getLink())) {
- ToastMaker.showShort("链接为空");
+ ToastMaker.showShort(getString(R.string.the_link_is_empty));
break;
}
if (getContext() != null) {
@@ -240,7 +244,7 @@ public void removeReadLaterSuccess(String link) {
@Override
public void removeReadLaterFailed() {
- ToastMaker.showShort("删除失败");
+ ToastMaker.showShort(getString(R.string.deletion_failed));
}
@Override
@@ -252,6 +256,6 @@ public void removeAllReadLaterSuccess() {
@Override
public void removeAllReadLaterFailed() {
- ToastMaker.showShort("删除失败");
+ ToastMaker.showShort(getString(R.string.deletion_failed));
}
}
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/ReadRecordActivity.java b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/ReadRecordActivity.java
index d34f0ae2..f5fbf079 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/ReadRecordActivity.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/ReadRecordActivity.java
@@ -3,8 +3,10 @@
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;
+import android.view.LayoutInflater;
import android.view.View;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -30,6 +32,7 @@
import per.goweii.basic.utils.listener.SimpleCallback;
import per.goweii.basic.utils.listener.SimpleListener;
import per.goweii.wanandroid.R;
+import per.goweii.wanandroid.databinding.ActivityReadRecordBinding;
import per.goweii.wanandroid.db.model.ReadRecordModel;
import per.goweii.wanandroid.event.ReadRecordAddedEvent;
import per.goweii.wanandroid.event.ReadRecordUpdateEvent;
@@ -45,7 +48,7 @@
* @date 2019/5/17
* GitHub: https://github.com/goweii
*/
-public class ReadRecordActivity extends BaseActivity implements ReadRecordView {
+public class ReadRecordActivity extends BaseActivity implements ReadRecordView {
@BindView(R.id.abc)
ActionBarCommon abc;
@@ -112,9 +115,10 @@ protected boolean isRegisterEventBus() {
return true;
}
+ @Nullable
@Override
- protected int getLayoutId() {
- return R.layout.activity_read_record;
+ protected ActivityReadRecordBinding initViewBinding(@NonNull LayoutInflater inflater) {
+ return ActivityReadRecordBinding.inflate(inflater);
}
@Nullable
@@ -129,7 +133,7 @@ protected void initView() {
@Override
public void onClick(View v) {
TipDialog.with(getContext())
- .message("确定要全部删除吗?")
+ .message(getString(R.string.are_you_sure_you_want_to_delete_them_all))
.onYes(new SimpleCallback() {
@Override
public void onResult(Void data) {
@@ -177,11 +181,11 @@ public void onItemChildClick(BaseQuickAdapter adapter, View view, int position)
break;
case R.id.tv_copy:
CopyUtils.copyText(item.getLink());
- ToastMaker.showShort("复制成功");
+ ToastMaker.showShort(getString(R.string.copied));
break;
case R.id.tv_open:
if (TextUtils.isEmpty(item.getLink())) {
- ToastMaker.showShort("链接为空");
+ ToastMaker.showShort(getString(R.string.the_link_is_empty));
break;
}
if (getContext() != null) {
@@ -275,7 +279,7 @@ public void removeReadRecordSuccess(String link) {
@Override
public void removeReadRecordFailed() {
- ToastMaker.showShort("删除失败");
+ ToastMaker.showShort(getString(R.string.deletion_failed));
}
@Override
@@ -287,6 +291,6 @@ public void removeAllReadRecordSuccess() {
@Override
public void removeAllReadRecordFailed() {
- ToastMaker.showShort("删除失败");
+ ToastMaker.showShort(getString(R.string.deletion_failed));
}
}
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/SettingActivity.java b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/SettingActivity.java
index 62643e96..914d8b32 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/SettingActivity.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/SettingActivity.java
@@ -1,50 +1,46 @@
package per.goweii.wanandroid.module.mine.activity;
-import android.Manifest;
import android.content.Context;
import android.content.Intent;
+import android.view.LayoutInflater;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import android.widget.TextView;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatDelegate;
import androidx.appcompat.widget.SwitchCompat;
+import androidx.core.os.LocaleListCompat;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collection;
import java.util.List;
+import java.util.Locale;
+import java.util.Objects;
import butterknife.BindView;
import butterknife.OnClick;
import butterknife.OnLongClick;
-import per.goweii.anypermission.RequestListener;
-import per.goweii.anypermission.RuntimeRequester;
import per.goweii.basic.core.base.BaseActivity;
-import per.goweii.basic.core.permission.PermissionUtils;
import per.goweii.basic.ui.dialog.ListDialog;
import per.goweii.basic.ui.dialog.TipDialog;
-import per.goweii.basic.ui.dialog.UpdateDialog;
import per.goweii.basic.ui.toast.ToastMaker;
-import per.goweii.basic.utils.AppInfoUtils;
-import per.goweii.basic.utils.ResUtils;
import per.goweii.basic.utils.listener.SimpleCallback;
import per.goweii.rxhttp.request.base.BaseBean;
import per.goweii.wanandroid.R;
import per.goweii.wanandroid.common.Constant;
-import per.goweii.wanandroid.common.WanApp;
+import per.goweii.wanandroid.databinding.ActivitySettingBinding;
import per.goweii.wanandroid.event.LoginEvent;
import per.goweii.wanandroid.event.SettingChangeEvent;
-import per.goweii.wanandroid.module.main.dialog.DownloadDialog;
-import per.goweii.wanandroid.module.main.model.UpdateBean;
import per.goweii.wanandroid.module.mine.presenter.SettingPresenter;
import per.goweii.wanandroid.module.mine.view.SettingView;
import per.goweii.wanandroid.utils.DarkModeUtils;
import per.goweii.wanandroid.utils.SettingUtils;
-import per.goweii.wanandroid.utils.UpdateUtils;
import per.goweii.wanandroid.utils.UrlOpenUtils;
import per.goweii.wanandroid.utils.UserUtils;
+import per.goweii.wanandroid.utils.recreate_anim.RecreateAnimation;
import per.goweii.wanandroid.utils.web.HostInterceptUtils;
/**
@@ -52,7 +48,7 @@
* @date 2019/5/17
* GitHub: https://github.com/goweii
*/
-public class SettingActivity extends BaseActivity implements SettingView {
+public class SettingActivity extends BaseActivity implements SettingView {
@BindView(R.id.tv_theme_mode)
TextView tv_theme_mode;
@BindView(R.id.tv_show_read_later_notification_title)
@@ -84,9 +80,10 @@ public static void start(Context context) {
context.startActivity(intent);
}
+ @Nullable
@Override
- protected int getLayoutId() {
- return R.layout.activity_setting;
+ protected ActivitySettingBinding initViewBinding(@NonNull LayoutInflater inflater) {
+ return ActivitySettingBinding.inflate(inflater);
}
@Nullable
@@ -97,6 +94,7 @@ protected SettingPresenter initPresenter() {
@Override
protected void initView() {
+ updateLanguage();
updateThemeModeUI();
mShowTop = SettingUtils.getInstance().isShowTop();
sc_show_top.setChecked(mShowTop);
@@ -131,17 +129,29 @@ public void onCheckedChanged(CompoundButton v, boolean isChecked) {
}
}
+ private void updateLanguage() {
+ LocaleListCompat applicationLocales = AppCompatDelegate.getApplicationLocales();
+ if (!applicationLocales.isEmpty()) {
+ Locale locale = applicationLocales.get(0);
+ Objects.requireNonNull(locale);
+ String displayName = locale.getDisplayLanguage();
+ binding.tvLanguage.setText(displayName);
+ } else {
+ binding.tvLanguage.setText(R.string.follow_the_system);
+ }
+ }
+
private void updateThemeModeUI() {
final SettingUtils.ThemeMode themeMode = SettingUtils.getInstance().getThemeMode();
switch (themeMode) {
case FOLLOW_SYSTEM:
- tv_theme_mode.setText("跟随系统");
+ tv_theme_mode.setText(getString(R.string.follow_the_system));
break;
case LIGHT:
- tv_theme_mode.setText("亮色");
+ tv_theme_mode.setText(getString(R.string.light_mode));
break;
case DARK:
- tv_theme_mode.setText("暗色");
+ tv_theme_mode.setText(getString(R.string.dark_mode));
break;
}
}
@@ -188,6 +198,7 @@ public boolean onLongClick(View v) {
@OnClick({
+ R.id.ll_language,
R.id.rl_intercept_host, R.id.ll_theme_mode,
R.id.ll_cache, R.id.ll_about,
R.id.ll_privacy_policy, R.id.ll_logout
@@ -200,31 +211,34 @@ public void onClick(View v) {
@Override
protected void onClick2(View v) {
switch (v.getId()) {
+ case R.id.ll_language:
+ LanguageActivity.start(getContext());
+ break;
case R.id.ll_theme_mode:
final List themeModes = Arrays.asList(SettingUtils.ThemeMode.values());
final List nameList = new ArrayList<>(themeModes.size());
for (SettingUtils.ThemeMode themeMode : themeModes) {
switch (themeMode) {
case FOLLOW_SYSTEM:
- nameList.add("跟随系统");
+ nameList.add(getString(R.string.follow_the_system));
break;
case LIGHT:
- nameList.add("亮色");
+ nameList.add(getString(R.string.light_mode));
break;
case DARK:
- nameList.add("暗色");
+ nameList.add(getString(R.string.dark_mode));
break;
}
}
- SettingUtils.ThemeMode selectedThemeMode = SettingUtils.getInstance().getThemeMode();
+ final SettingUtils.ThemeMode selectedThemeMode = SettingUtils.getInstance().getThemeMode();
final int selectedPos = themeModes.indexOf(selectedThemeMode);
ListDialog.with(getContext())
.cancelable(true)
- .title("主题模式")
+ .title(getString(R.string.theme_mode))
.datas(nameList)
.currSelectPos(selectedPos)
- .listener(new ListDialog.OnItemSelectedListener() {
+ .onItemSelectedListener(new ListDialog.OnItemSelectedListener() {
@Override
public void onSelect(String data, int pos) {
if (selectedPos == pos) {
@@ -232,14 +246,25 @@ public void onSelect(String data, int pos) {
}
SettingUtils.ThemeMode themeMode = themeModes.get(pos);
SettingUtils.getInstance().setThemeMode(themeMode);
- updateThemeModeUI();
- DarkModeUtils.initDarkMode();
- v.postDelayed(new Runnable() {
+ }
+ })
+ .onDismissListener(new ListDialog.OnDismissListener() {
+ @Override
+ public void onPreDismiss(String data, int pos) {
+ }
+
+ @Override
+ public void onPostDismiss(String data, int pos) {
+ if (selectedThemeMode == SettingUtils.getInstance().getThemeMode()) {
+ return;
+ }
+ new RecreateAnimation(SettingActivity.this, new Runnable() {
@Override
public void run() {
- WanApp.restartApp();
+ DarkModeUtils.initDarkMode(SettingActivity.this);
}
- }, 300);
+ }
+ ).start();
}
})
.show();
@@ -247,12 +272,12 @@ public void run() {
case R.id.rl_intercept_host:
ListDialog.with(getContext())
.cancelable(true)
- .title("网页拦截")
+ .title(getString(R.string.web_blocking))
.datas(HostInterceptUtils.getName(HostInterceptUtils.TYPE_NOTHING),
HostInterceptUtils.getName(HostInterceptUtils.TYPE_ONLY_WHITE),
HostInterceptUtils.getName(HostInterceptUtils.TYPE_INTERCEPT_BLACK))
.currSelectPos(SettingUtils.getInstance().getUrlInterceptType())
- .listener(new ListDialog.OnItemSelectedListener() {
+ .onItemSelectedListener(new ListDialog.OnItemSelectedListener() {
@Override
public void onSelect(String data, int pos) {
tv_intercept_host.setText(HostInterceptUtils.getName(pos));
@@ -263,7 +288,7 @@ public void onSelect(String data, int pos) {
break;
case R.id.ll_cache:
TipDialog.with(getContext())
- .message("确定要清除缓存吗?")
+ .message(R.string.are_you_sure_you_want_to_clear_your_cache)
.onYes(new SimpleCallback() {
@Override
public void onResult(Void data) {
@@ -282,7 +307,7 @@ public void onResult(Void data) {
break;
case R.id.ll_logout:
TipDialog.with(getContext())
- .message("确定要退出登录吗?")
+ .message(R.string.are_you_sure_you_want_to_log_out)
.onYes(new SimpleCallback() {
@Override
public void onResult(Void data) {
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/UserInfoActivity.kt b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/UserInfoActivity.kt
index 78a040d7..b1ba9571 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/activity/UserInfoActivity.kt
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/activity/UserInfoActivity.kt
@@ -2,9 +2,10 @@ package per.goweii.wanandroid.module.mine.activity
import android.content.Context
import android.content.Intent
-import kotlinx.android.synthetic.main.activity_user_info.*
+import android.view.LayoutInflater
import per.goweii.basic.core.base.BaseActivity
import per.goweii.wanandroid.R
+import per.goweii.wanandroid.databinding.ActivityUserInfoBinding
import per.goweii.wanandroid.event.UserInfoUpdateEvent
import per.goweii.wanandroid.module.login.activity.AuthActivity
import per.goweii.wanandroid.module.login.model.UserEntity
@@ -16,7 +17,7 @@ import per.goweii.wanandroid.utils.ImageLoader
* @author CuiZhen
* @date 2020/5/27
*/
-class UserInfoActivity : BaseActivity(), UserInfoView {
+class UserInfoActivity : BaseActivity(), UserInfoView {
companion object {
@JvmStatic
@@ -25,7 +26,9 @@ class UserInfoActivity : BaseActivity(), UserInfoView {
}
}
- override fun getLayoutId(): Int = R.layout.activity_user_info
+ override fun initViewBinding(inflater: LayoutInflater): ActivityUserInfoBinding {
+ return ActivityUserInfoBinding.inflate(inflater)
+ }
override fun initPresenter(): UserInfoPresenter = UserInfoPresenter()
@@ -43,9 +46,9 @@ class UserInfoActivity : BaseActivity(), UserInfoView {
override fun mineInfoSuccess(userEntity: UserEntity) {
UserInfoUpdateEvent().post()
- ImageLoader.userIcon(civ_user_icon, userEntity.avatar ?: "")
- ImageLoader.userBlur(iv_blur, userEntity.cover ?: "")
- tv_user_name.text = userEntity.username
- tv_user_id.text = userEntity.wanid.toString()
+ ImageLoader.userIcon(binding.civUserIcon, userEntity.avatar ?: "")
+ ImageLoader.userBlur(binding.ivBlur, userEntity.cover ?: "")
+ binding.tvUserName.text = userEntity.username
+ binding.tvUserId.text = userEntity.wanid.toString()
}
}
\ No newline at end of file
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/adapter/LanguageAdapter.java b/app/src/main/java/per/goweii/wanandroid/module/mine/adapter/LanguageAdapter.java
new file mode 100644
index 00000000..ab3b24bd
--- /dev/null
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/adapter/LanguageAdapter.java
@@ -0,0 +1,45 @@
+package per.goweii.wanandroid.module.mine.adapter;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AppCompatDelegate;
+import androidx.core.app.LocaleManagerCompat;
+import androidx.core.os.LocaleListCompat;
+
+import com.chad.library.adapter.base.BaseQuickAdapter;
+import com.chad.library.adapter.base.BaseViewHolder;
+
+import java.util.Locale;
+
+import per.goweii.wanandroid.R;
+
+public class LanguageAdapter extends BaseQuickAdapter {
+ @Nullable
+ private final Locale mAppLocale;
+ @Nullable
+ private final Locale mSysLocale;
+
+ public LanguageAdapter(@Nullable Locale appLocale, @Nullable Locale sysLocale) {
+ super(R.layout.rv_item_language);
+ this.mAppLocale = appLocale;
+ this.mSysLocale = sysLocale;
+ }
+
+ @Override
+ protected void convert(@NonNull BaseViewHolder helper, @Nullable Locale item) {
+ if (item == null) {
+ helper.setText(R.id.tv_title, R.string.follow_the_system);
+ if (mSysLocale == null) {
+ helper.setVisible(R.id.tv_subtitle, false);
+ } else {
+ helper.setVisible(R.id.tv_subtitle, true);
+ helper.setText(R.id.tv_subtitle, mSysLocale.getDisplayLanguage(mSysLocale));
+ }
+ helper.setVisible(R.id.iv_checked, mAppLocale == null);
+ } else {
+ helper.setText(R.id.tv_title, item.getDisplayLanguage());
+ helper.setText(R.id.tv_subtitle, item.getDisplayLanguage(item));
+ helper.setVisible(R.id.iv_checked, item.equals(mAppLocale));
+ }
+ }
+}
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/adapter/MineShareArticleAdapter.java b/app/src/main/java/per/goweii/wanandroid/module/mine/adapter/MineShareArticleAdapter.java
index 1bf6aed9..bd71e093 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/adapter/MineShareArticleAdapter.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/adapter/MineShareArticleAdapter.java
@@ -69,7 +69,7 @@ public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
}
@Override
- protected void convert(@NonNull BaseViewHolder helper, ArticleBean item) {
+ protected void convertArticle(@NonNull BaseViewHolder helper, ArticleBean item) {
SwipeLayout sl = helper.getView(R.id.sl);
sl.addSwipeListener(new SwipeLayout.SwipeListener() {
@Override
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/CollectionArticleFragment.java b/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/CollectionArticleFragment.java
index 4f90c1de..09776987 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/CollectionArticleFragment.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/CollectionArticleFragment.java
@@ -2,7 +2,10 @@
import android.view.View;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import android.view.LayoutInflater;
+import android.view.ViewGroup;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -20,6 +23,7 @@
import per.goweii.basic.ui.toast.ToastMaker;
import per.goweii.basic.utils.listener.SimpleListener;
import per.goweii.wanandroid.R;
+import per.goweii.wanandroid.databinding.FragmentCollectionArticleBinding;
import per.goweii.wanandroid.event.CollectionEvent;
import per.goweii.wanandroid.module.main.adapter.ArticleAdapter;
import per.goweii.wanandroid.module.main.model.ArticleBean;
@@ -36,7 +40,7 @@
* @date 2019/5/17
* GitHub: https://github.com/goweii
*/
-public class CollectionArticleFragment extends BaseFragment implements RvScrollTopUtils.ScrollTop, CollectionArticleView {
+public class CollectionArticleFragment extends BaseFragment implements RvScrollTopUtils.ScrollTop, CollectionArticleView {
public static final int PAGE_START = 0;
@@ -93,9 +97,10 @@ protected boolean isRegisterEventBus() {
return true;
}
+ @Nullable
@Override
- protected int getLayoutRes() {
- return R.layout.fragment_collection_article;
+ protected FragmentCollectionArticleBinding initViewBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {
+ return FragmentCollectionArticleBinding.inflate(inflater, container, false);
}
@Nullable
@@ -127,7 +132,7 @@ public void onLoadMoreRequested() {
mAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {
@Override
public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
- ArticleBean item = mAdapter.getItem(position);
+ ArticleBean item = mAdapter.getArticleItem(position);
if (item != null) {
UrlOpenUtils.Companion.with(item).open(getContext());
}
@@ -136,7 +141,7 @@ public void onItemClick(BaseQuickAdapter adapter, View view, int position) {
mAdapter.setOnItemChildViewClickListener(new ArticleAdapter.OnItemChildViewClickListener() {
@Override
public void onCollectClick(BaseViewHolder helper, CollectView v, int position) {
- ArticleBean item = mAdapter.getItem(position);
+ ArticleBean item = mAdapter.getArticleItem(position);
if (item != null) {
presenter.uncollectArticle(item, v);
}
@@ -177,7 +182,7 @@ public void getCollectArticleListSuccess(int code, ArticleListBean data) {
}
currPage = data.getCurPage() + PAGE_START;
if (data.getCurPage() == 1) {
- mAdapter.setNewData(data.getDatas());
+ mAdapter.setArticleData(data.getDatas());
mAdapter.setEnableLoadMore(true);
if (data.getDatas() == null || data.getDatas().isEmpty()) {
MultiStateUtils.toEmpty(msv);
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/CollectionLinkFragment.java b/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/CollectionLinkFragment.java
index 1c03d389..fd70ab2e 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/CollectionLinkFragment.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/CollectionLinkFragment.java
@@ -1,9 +1,12 @@
package per.goweii.wanandroid.module.mine.fragment;
import android.text.TextUtils;
+import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewGroup;
import android.view.ViewParent;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -29,6 +32,7 @@
import per.goweii.basic.utils.listener.SimpleCallback;
import per.goweii.basic.utils.listener.SimpleListener;
import per.goweii.wanandroid.R;
+import per.goweii.wanandroid.databinding.FragmentCollectionLinkBinding;
import per.goweii.wanandroid.event.CollectionEvent;
import per.goweii.wanandroid.module.main.model.CollectionLinkBean;
import per.goweii.wanandroid.module.mine.adapter.CollectionLinkAdapter;
@@ -45,7 +49,7 @@
* @date 2019/5/17
* GitHub: https://github.com/goweii
*/
-public class CollectionLinkFragment extends BaseFragment implements RvScrollTopUtils.ScrollTop, CollectionLinkView {
+public class CollectionLinkFragment extends BaseFragment implements RvScrollTopUtils.ScrollTop, CollectionLinkView {
@BindView(R.id.msv)
MultiStateView msv;
@@ -88,9 +92,10 @@ protected boolean isRegisterEventBus() {
return true;
}
+ @Nullable
@Override
- protected int getLayoutRes() {
- return R.layout.fragment_collection_link;
+ protected FragmentCollectionLinkBinding initViewBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {
+ return FragmentCollectionLinkBinding.inflate(inflater, container, false);
}
@Nullable
@@ -133,11 +138,11 @@ public void onItemChildClick(BaseQuickAdapter adapter, View view, int position)
break;
case R.id.tv_copy:
CopyUtils.copyText(item.getLink());
- ToastMaker.showShort("复制成功");
+ ToastMaker.showShort(getString(R.string.copied));
break;
case R.id.tv_open:
if (TextUtils.isEmpty(item.getLink())) {
- ToastMaker.showShort("链接为空");
+ ToastMaker.showShort(getString(R.string.the_link_is_empty));
break;
}
if (getContext() != null) {
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/HostBlackFragment.java b/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/HostBlackFragment.java
index 62f8f22f..247e8944 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/HostBlackFragment.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/HostBlackFragment.java
@@ -2,7 +2,9 @@
import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewGroup;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -18,6 +20,7 @@
import per.goweii.basic.utils.listener.OnClickListener2;
import per.goweii.basic.utils.listener.SimpleCallback;
import per.goweii.wanandroid.R;
+import per.goweii.wanandroid.databinding.FragmentHostInterruptBinding;
import per.goweii.wanandroid.module.mine.adapter.HostInterruptAdapter;
import per.goweii.wanandroid.module.mine.dialog.AddHostDialog;
import per.goweii.wanandroid.module.mine.model.HostEntity;
@@ -30,7 +33,7 @@
* @date 2019/5/17
* GitHub: https://github.com/goweii
*/
-public class HostBlackFragment extends BaseFragment implements RvScrollTopUtils.ScrollTop {
+public class HostBlackFragment extends BaseFragment implements RvScrollTopUtils.ScrollTop {
@BindView(R.id.rv)
RecyclerView rv;
@@ -41,9 +44,10 @@ public static HostBlackFragment create() {
return new HostBlackFragment();
}
+ @Nullable
@Override
- protected int getLayoutRes() {
- return R.layout.fragment_host_interrupt;
+ protected FragmentHostInterruptBinding initViewBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {
+ return FragmentHostInterruptBinding.inflate(inflater, container, false);
}
@Nullable
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/HostWhiteFragment.java b/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/HostWhiteFragment.java
index 0f1e6e35..3cd289d0 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/HostWhiteFragment.java
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/HostWhiteFragment.java
@@ -2,7 +2,9 @@
import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewGroup;
+import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -18,6 +20,7 @@
import per.goweii.basic.utils.listener.OnClickListener2;
import per.goweii.basic.utils.listener.SimpleCallback;
import per.goweii.wanandroid.R;
+import per.goweii.wanandroid.databinding.FragmentHostInterruptBinding;
import per.goweii.wanandroid.module.mine.adapter.HostInterruptAdapter;
import per.goweii.wanandroid.module.mine.dialog.AddHostDialog;
import per.goweii.wanandroid.module.mine.model.HostEntity;
@@ -30,7 +33,7 @@
* @date 2019/5/17
* GitHub: https://github.com/goweii
*/
-public class HostWhiteFragment extends BaseFragment implements RvScrollTopUtils.ScrollTop {
+public class HostWhiteFragment extends BaseFragment implements RvScrollTopUtils.ScrollTop {
@BindView(R.id.rv)
RecyclerView rv;
@@ -41,9 +44,10 @@ public static HostWhiteFragment create() {
return new HostWhiteFragment();
}
+ @Nullable
@Override
- protected int getLayoutRes() {
- return R.layout.fragment_host_interrupt;
+ protected FragmentHostInterruptBinding initViewBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) {
+ return FragmentHostInterruptBinding.inflate(inflater, container, false);
}
@Nullable
diff --git a/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/MessageReadedFragment.kt b/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/MessageReadedFragment.kt
index 1339c85a..62d5ad88 100644
--- a/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/MessageReadedFragment.kt
+++ b/app/src/main/java/per/goweii/wanandroid/module/mine/fragment/MessageReadedFragment.kt
@@ -1,16 +1,18 @@
package per.goweii.wanandroid.module.mine.fragment
+import android.view.LayoutInflater
+import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.viewpager.widget.ViewPager
import androidx.viewpager.widget.ViewPager.OnPageChangeListener
import com.chad.library.adapter.base.BaseQuickAdapter
-import kotlinx.android.synthetic.main.fragment_message_readed.*
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import per.goweii.basic.core.base.BaseFragment
import per.goweii.basic.core.utils.SmartRefreshUtils
import per.goweii.basic.utils.listener.SimpleListener
import per.goweii.wanandroid.R
+import per.goweii.wanandroid.databinding.FragmentMessageReadedBinding
import per.goweii.wanandroid.event.MessageDeleteEvent
import per.goweii.wanandroid.module.main.model.ListBean
import per.goweii.wanandroid.module.mine.adapter.MessageReadedAdapter
@@ -24,7 +26,7 @@ import per.goweii.wanandroid.utils.UrlOpenUtils
* @author CuiZhen
* @date 2020/5/16
*/
-class MessageReadedFragment : BaseFragment(), MessageReadedView {
+class MessageReadedFragment : BaseFragment