Compare commits

...

42 Commits
v3.1 ... v3.1.1

Author SHA1 Message Date
c208e7f72d 3.1.1封包(0.0) 2018-02-07 21:00:05 +08:00
8722d0a65b 更改BaseList的数据传递和刷新方式 2018-02-07 19:29:47 +08:00
54f044dfa0 修复部分bug 2018-02-07 14:43:40 +08:00
b854a6dfef WebFragment onActivityResult 数据非空判断 2018-02-06 15:42:57 +08:00
badb99da59 tinker 版本升为3.1.1 准备打补丁包 2018-02-05 15:23:32 +08:00
30d99dbe54 修复切换社区时问答页面销毁导致无法更新问题 2018-02-05 15:12:39 +08:00
c44c4e8b2d 修复切换社区时问答页面销毁导致无法更新问题 2018-02-05 15:12:24 +08:00
656b2f469b NormalActivity getMenuItem 非空判断 2018-02-05 15:04:07 +08:00
39e17842cc bug修复 2018-02-05 14:23:31 +08:00
57f7c0bb31 .gitignore增加选项 2018-02-03 17:51:27 +08:00
76b03fa68b list大小判断 2018-02-03 17:47:41 +08:00
c99d6fb16f 适配开启不保留活动模式(未完全适配 只是尽量让app不要崩) 2018-02-03 17:34:00 +08:00
d29ccc0aca toast context判断 禁止context.getString 操作 2018-02-03 10:16:27 +08:00
bf51be498b ImageUtils 非空问题 2018-02-01 16:02:28 +08:00
6d941975e2 toast禁止使用context 2018-02-01 15:27:29 +08:00
0e075d28a5 imageUtils kotlin非空问题 2018-01-31 14:25:40 +08:00
4b5e6b574f 修复列表刷新FooterViewHolder的方式 以及调整邀请达人FooterViewHolder的间距 2018-01-31 10:56:20 +08:00
fc79581f8c NavigationTitle空处理 MessageDetailActivity继承NormalActivity 2018-01-30 20:48:32 +08:00
6176c47e2f 修复已知bug,debug状态关闭数据上报,release增加tinker开发设备(channel:GH_TEST) 2018-01-30 19:45:56 +08:00
9abe0eb158 Merge branch 'dev' of gitlab.ghzhushou.com:halo/assistant-android into dev 2018-01-30 16:30:13 +08:00
4d7cedb8a6 解决社区游戏选择分页后数据异常问题,解决问题详情无法分页问题 2018-01-30 16:28:34 +08:00
2b02fe06ac Merge remote-tracking branch 'origin/dev' into dev 2018-01-30 11:34:27 +08:00
cd5f530fc6 Add todo. 2018-01-30 11:34:04 +08:00
b9085c7091 修复最新礼包无法下拉刷新问题,appbar在触控屏幕时禁止open/close,部分Fragment commit 替换成commitAllowingStateLoss 2018-01-30 10:38:26 +08:00
679ee71f89 修复channel脚本路劲问题,打tinker基础包 2018-01-28 16:10:12 +08:00
536f0e038a Activity 相关跳转(内部/外部)增加NormalActivity兼容 2018-01-28 15:34:13 +08:00
b087e35b30 修复问答-问题由于调整顺序可能会造成的闪退问题,修复社区-问题由于切换社区造成的数据异常 2018-01-28 14:33:30 +08:00
db3df649ce 优化下载超过100%问题 2018-01-26 16:51:47 +08:00
bb708277b1 修改昵称违规toast文案 2018-01-26 15:43:24 +08:00
c3b694dc6c 优化下载进度超过100%问题 登录相关增加错误toast 2018-01-26 15:34:21 +08:00
b9ff0b1c88 修复下载相关无法即时刷新页面问题 2018-01-25 19:06:04 +08:00
0e791133dd gradle internal publish 2018-01-24 18:12:01 +08:00
b4f760d69f 社区问题加载... 2018-01-24 18:02:55 +08:00
9bba3c9560 修复问答社区切换时造成数据异常问题 2018-01-24 17:59:49 +08:00
bcd61e87d3 修改草稿后重新刷新我的草稿列表 2018-01-24 11:28:15 +08:00
e8c0e523e6 光环助手V3.1 RELEASE(20180123-1205)测试汇总 2018-01-24 10:53:10 +08:00
af9e9a87b4 去除KEY_DATA, NormalActivity增加适配规则 2018-01-23 17:32:48 +08:00
2d1bb6435f 修复安装/卸载后游戏插件化区域无法更新问题 2018-01-23 14:50:41 +08:00
5680b8508d 问题详情标题去除行数限制 调整标签顺序 2018-01-23 11:00:21 +08:00
df0e9197dc 对话详情回复字数限制,答案/回答详情标题间距修改 2018-01-23 10:21:00 +08:00
79964160ff 发现页面入口点击统计 问答问题修改后刷新问题详情页面 2018-01-22 17:28:45 +08:00
0d46554b66 光环助手V3.1 RELEASE(20180118-2020)测试汇总(完成部分) 2018-01-22 16:07:07 +08:00
134 changed files with 848 additions and 797 deletions

3
.gitignore vendored
View File

@ -6,4 +6,5 @@ local.properties
.DS_Store
captures/
build/
release-app/
release-app/
scripts/apk-channel/

View File

@ -62,4 +62,5 @@
- 明确 MVVM 中 Repository 及其衍生类的具体实现方式
- 将实现细节从 View(Fragment、Activity) 剥离并以 MVVM 结构改造
- 将 ListViewModel 所对应的 ListRepository 合并到 ListViewModel 中
- 依照光环助手界面功能以大模块 - 小模块的方式去修改包结构,包内文件建议以包名摘要作为前缀
- 依照光环助手界面功能以大模块 - 小模块的方式去修改包结构,包内文件建议以包名摘要作为前缀
- 使用 RxJava 的 Debounce 和 Map 操作优化搜索触发机制 参考资料:[1](https://proandroiddev.com/building-an-autocompleting-edittext-using-rxjava-f69c5c3f5a40),[2](https://medium.com/@kurtisnusbaum/rxandroid-basics-part-2-6e877af352)

View File

@ -34,8 +34,8 @@ public class DataUtils {
*/
public static void init(final Application context, String channel) {
// 神烦这些SDK上报debug就不开了
if (!DEBUG) return;
// // 神烦这些SDK上报debug就不开了
// if (DEBUG) return;
//TalkingData
try {

View File

@ -32,7 +32,6 @@ import java.util.List;
import butterknife.ButterKnife;
import pub.devrel.easypermissions.EasyPermissions;
import static com.gh.common.util.EntranceUtils.KEY_DATA;
import static com.gh.common.util.EntranceUtils.KEY_ENTRANCE;
public abstract class BaseActivity extends BaseToolBarActivity implements EasyPermissions.PermissionCallbacks {
@ -78,9 +77,6 @@ public abstract class BaseActivity extends BaseToolBarActivity implements EasyPe
EventBus.getDefault().register(this);
ButterKnife.bind(this);
mEntrance = getIntent().getStringExtra(KEY_ENTRANCE);
if (getIntent().getBundleExtra(KEY_DATA) != null) {
mEntrance = getIntent().getBundleExtra(KEY_DATA).getString(KEY_ENTRANCE);
}
}
@Override
@ -127,7 +123,7 @@ public abstract class BaseActivity extends BaseToolBarActivity implements EasyPe
@Override
public void onConfirm() {
if (FileUtils.isEmptyFile(showDialog.getPath())) {
toast(getString(R.string.install_failure_hint));
toast(R.string.install_failure_hint);
} else {
startActivity(PackageUtils.getUninstallIntent(BaseActivity.this, showDialog.getPath()));
}

View File

@ -37,7 +37,11 @@ public abstract class BaseRecyclerViewHolder<T> extends RecyclerView.ViewHolder
@Override
public void onClick(View view) {
mListClickListener.onListClick(view, getAdapterPosition(), mData);
try {
mListClickListener.onListClick(view, getAdapterPosition(), mData);
} catch (Exception e) {
e.printStackTrace();
}
}
}

View File

@ -14,7 +14,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.gh.base.BaseToolBarActivity;
import com.gh.base.OnListClickListener;
import com.gh.base.OnRequestCallBackListener;
import com.gh.gamecenter.eventbus.EBMiPush;
@ -34,7 +33,6 @@ import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import static com.gh.common.util.EntranceUtils.KEY_DATA;
import static com.gh.common.util.EntranceUtils.KEY_ENTRANCE;
/**
@ -87,15 +85,6 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
handleOnClick(v);
}
protected void setNavigationTitle(@StringRes int res) {
setNavigationTitle(getString(res));
}
protected void setNavigationTitle(String title) {
if (getActivity() instanceof BaseToolBarActivity) {
((BaseToolBarActivity) getActivity()).setNavigationTitle(title);
}
}
protected void initView(View view) {
}
@ -114,9 +103,6 @@ public abstract class BaseFragment<T> extends Fragment implements OnRequestCallB
super.onCreate(savedInstanceState);
final Intent intent = getActivity().getIntent();
mEntrance = intent.getStringExtra(KEY_ENTRANCE);
if (intent.getBundleExtra(KEY_DATA) != null) {
mEntrance = intent.getBundleExtra(KEY_DATA).getString(KEY_ENTRANCE);
}
isEverPause = false;
EventBus.getDefault().register(this);

View File

@ -68,11 +68,6 @@ public abstract class BaseFragment_ViewPager extends NormalFragment implements D
mViewPager = (ViewPager) view.findViewById(getViewPagerId());
mViewPager.setOffscreenPageLimit(mFragmentsList.size());
mViewPager.setAdapter(mAdapter);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (mCheckedIndex < mFragmentsList.size()) {
mViewPager.setCurrentItem(mCheckedIndex, false);
}
@ -117,10 +112,15 @@ public abstract class BaseFragment_ViewPager extends NormalFragment implements D
}
List<Fragment> fragments = getChildFragmentManager().getFragments();
if (fragments != null) {
Fragment curFragment = fragments.get(mViewPager.getCurrentItem());
curFragment.onActivityResult(requestCode, resultCode, data);
for (Fragment fragment : fragments) {
fragment.onActivityResult(requestCode, resultCode, data);
}
}
}
public int getCurrentItem() {
return mViewPager != null ? mViewPager.getCurrentItem() : 0;
}
}

View File

@ -2,7 +2,6 @@ package com.gh.common.util;
import android.content.Context;
import com.gh.gamecenter.R;
import com.lightgame.utils.Utils;
import org.json.JSONObject;
@ -37,7 +36,7 @@ public class AskErrorResponseUtils {
Utils.toast(context, "用户的评论被墙(黑名单)");
break;
default:
Utils.toast(context, context.getString(R.string.request_failure_normal_hint));
Utils.toast(context, "网络错误");
break;
}
} else if (code == 403) {
@ -88,7 +87,7 @@ public class AskErrorResponseUtils {
Utils.toast(context, "已经关注过了");
break;
default:
Utils.toast(context, context.getString(R.string.request_failure_normal_hint));
Utils.toast(context, "网络错误");
break;
}
} else if (code == 401 && errorCode == 404001) {

View File

@ -61,9 +61,10 @@ public class DownloadItemUtils {
gameEntity.setEntryMap(entryMap);
}
entryMap.put(platform, downloadEntity);
if (!DownloadStatus.pause.equals(DownloadManager.getInstance(context).getStatus(downloadEntity.getUrl()))) {
adapter.notifyItemChanged(index);
}
adapter.notifyItemChanged(index);
// if (!DownloadStatus.pause.equals(DownloadManager.getInstance(context).getStatus(downloadEntity.getUrl()))) {
// adapter.notifyItemChanged(index);
// }
} else {
if (!queue.contains(platform)) {
queue.offer(platform);
@ -266,6 +267,7 @@ public class DownloadItemUtils {
} else if (status.equals(DownloadStatus.pause)
|| status.equals(DownloadStatus.timeout)
|| status.equals(DownloadStatus.neterror)) {
Utils.log("=============AAAA::" + status);
holder.gameProgressbar.setProgress((int) (downloadEntity.getPercent() * 10));
if (isShowPlatform && platform != null) {
holder.gameDownloadSpeed.setText(String.format("%s - 暂停", platform));
@ -439,7 +441,7 @@ public class DownloadItemUtils {
if (downloadEntity != null) {
final String path = downloadEntity.getPath();
if (FileUtils.isEmptyFile(path)) {
Utils.toast(context, context.getString(R.string.install_failure_hint));
Utils.toast(context, R.string.install_failure_hint);
DownloadManager.getInstance(context).cancel(downloadEntity.getUrl());
if (gameEntity.getEntryMap() != null) {
gameEntity.getEntryMap().remove(apkEntity.getPlatform());

View File

@ -76,12 +76,12 @@ public class EntranceUtils {
if (!TextUtils.isEmpty(to)) {
Class<?> clazz = ClassUtils.forName(to);
if (clazz != null) {
if (NormalFragment.class.isAssignableFrom(clazz)) { // todo
if (NormalFragment.class.isAssignableFrom(clazz)) { // 兼容NormalFragment
NormalActivity.startFragment(context, (Class<? extends NormalFragment>) clazz, bundle);
} else {
Intent intent1 = new Intent(context, clazz);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent1.putExtra(KEY_DATA, bundle);
intent1.putExtras(bundle);
context.startActivity(intent1);
}
}

View File

@ -173,7 +173,9 @@ public class GetLoginDataUtils {
}
public void WCLofinCallBack(JSONObject content) {
mLoginListener.OnLoginData(content, LoginTag.wechat);
if (mLoginListener != null) {
mLoginListener.OnLoginData(content, LoginTag.wechat);
}
}
public void onWeiboCallback(int requestCode, int resultCode, Intent data) {

View File

@ -7,6 +7,7 @@ import android.graphics.drawable.ColorDrawable
import android.net.Uri
import android.support.annotation.DrawableRes
import android.support.v4.content.ContextCompat
import android.text.TextUtils
import com.facebook.common.executors.CallerThreadExecutor
import com.facebook.drawee.backends.pipeline.Fresco
import com.facebook.drawee.controller.BaseControllerListener
@ -22,6 +23,7 @@ import com.gh.common.constant.Config
import com.gh.gamecenter.R
import com.gh.gamecenter.manager.UserManager
import com.gh.gamecenter.retrofit.Response
import com.lightgame.config.CommonDebug
import com.lightgame.download.FileUtils
import com.lightgame.utils.Utils
import org.json.JSONObject
@ -36,28 +38,29 @@ import java.net.HttpURLConnection
class ImageUtils private constructor() {
// 自适应图片宽高
fun display(simpleDraweeView: SimpleDraweeView, url: String?, width: Int) {
fun display(simpleDraweeView: SimpleDraweeView?, url: String?, width: Int) {
val listener = object : BaseControllerListener<ImageInfo>() {
override fun onFinalImageSet(id: String?, imageInfo: ImageInfo?, animatable: Animatable?) {
if (imageInfo == null) {
return
}
val layoutParams = simpleDraweeView.layoutParams
val layoutParams = simpleDraweeView?.layoutParams
val scale = imageInfo.height.toFloat() / imageInfo.width.toFloat()
layoutParams.height = (width * scale).toInt()
simpleDraweeView.layoutParams = layoutParams
layoutParams?.height = (width * scale).toInt()
simpleDraweeView?.layoutParams = layoutParams
}
}
simpleDraweeView.controller = Fresco.newDraweeControllerBuilder()
simpleDraweeView?.controller = Fresco.newDraweeControllerBuilder()
.setUri(url)
.setControllerListener(listener)
.build()
}
// 设置缩放类型,设置按压状态下的叠加图
fun display(resources: Resources, simpleDraweeView: SimpleDraweeView,
scaleType: ScalingUtils.ScaleType, url: String?) {
val context = simpleDraweeView.context
fun display(resources: Resources?, simpleDraweeView: SimpleDraweeView?,
scaleType: ScalingUtils.ScaleType?, url: String?) {
if (simpleDraweeView == null) return
val context = simpleDraweeView.context ?: return
simpleDraweeView.hierarchy = GenericDraweeHierarchyBuilder(resources)
.setFadeDuration(500)
.setPressedStateOverlay(ColorDrawable(ContextCompat.getColor(context, R.color.pressed_bg)))
@ -70,8 +73,9 @@ class ImageUtils private constructor() {
}
// 设置占位符
fun display(resources: Resources, simpleDraweeView: SimpleDraweeView, url: String?, placeholderImage: Int) {
val context = simpleDraweeView.context
fun display(resources: Resources?, simpleDraweeView: SimpleDraweeView?, url: String?, placeholderImage: Int) {
if (simpleDraweeView == null) return
val context = simpleDraweeView.context ?: return
simpleDraweeView.hierarchy = GenericDraweeHierarchyBuilder(resources)
.setFadeDuration(500)
.setPressedStateOverlay(ColorDrawable(ContextCompat.getColor(context, R.color.pressed_bg)))
@ -83,9 +87,9 @@ class ImageUtils private constructor() {
}
// 图片下载监听和设置低高分辨率图片
fun display(simpleDraweeView: SimpleDraweeView, url: String?, lowUrl: String?,
fun display(simpleDraweeView: SimpleDraweeView?, url: String?, lowUrl: String?,
listener: ControllerListener<in ImageInfo>) {
simpleDraweeView.controller = Fresco.newDraweeControllerBuilder()
simpleDraweeView?.controller = Fresco.newDraweeControllerBuilder()
.setImageRequest(ImageRequest.fromUri(url))
.setControllerListener(listener)
.setLowResImageRequest(ImageRequest.fromUri(lowUrl)) // 低分辨率图片
@ -93,7 +97,7 @@ class ImageUtils private constructor() {
}
// 获取bitmap
fun display(context: Context, url: String?, dataSubscriber: BaseBitmapDataSubscriber) {
fun display(context: Context?, url: String?, dataSubscriber: BaseBitmapDataSubscriber) {
val imageRequest = ImageRequestBuilder
.newBuilderWithSource(Uri.parse(url))
.setProgressiveRenderingEnabled(true)
@ -169,7 +173,8 @@ class ImageUtils private constructor() {
})
}
fun postImage(context: Context, picturePath: String, listener: OnPostImageListener) {
fun postImage(context: Context?, picturePath: String?, listener: OnPostImageListener) {
if (context == null || TextUtils.isEmpty(picturePath)) return
Observable.create(Observable.OnSubscribe<JSONObject> { subscriber ->
val path = context.getCacheDir().path + File.separator + System.currentTimeMillis() + ".jpg"
if (BitmapUtils.savePicture(path, picturePath, 200000)) {
@ -181,6 +186,9 @@ class ImageUtils private constructor() {
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object : Response<JSONObject>() {
override fun onResponse(response: JSONObject?) {
if (CommonDebug.IS_DEBUG) {
Utils.log("postImage:onResponse=>" + response.toString())
}
listener.postSuccess(response)
}
@ -193,7 +201,6 @@ class ImageUtils private constructor() {
}
interface OnPostImageListener {
fun postSuccess(response: JSONObject?)

View File

@ -271,6 +271,12 @@ public class LoginUtils {
case 403001:
Utils.toast(context, "设备异常,获取验证码失败,请更换登陆方式或明天再试");
break;
case 403202:
Utils.toast(context, "403202");
break;
case 400213:
Utils.toast(context, "昵称违规");
break;
default:
Utils.toast(context, "未知错误");
break;

View File

@ -86,7 +86,7 @@ public class MessageShareUtils {
@Override
public void onCancel() {
Utils.toast(mContext, mContext.getString(R.string.share_cancel_hint));
Utils.toast(mContext, R.string.share_cancel_hint);
}
};
// 适配快传成绩单分享

View File

@ -44,7 +44,7 @@ public class PostCommentUtils {
listener.postSuccess(response);
}
} else {
Utils.toast(context, context.getString(R.string.post_failure_hint));
Utils.toast(context, R.string.post_failure_hint);
}
}

View File

@ -101,17 +101,17 @@ public class ShareUtils {
public IUiListener QqShareListener = new IUiListener() {
@Override
public void onComplete(Object o) {
Utils.toast(mContext, mContext.getString(R.string.share_success_hint));
Utils.toast(mContext, R.string.share_success_hint);
}
@Override
public void onError(UiError uiError) {
Utils.toast(mContext, mContext.getString(R.string.share_fail_hint));
Utils.toast(mContext, R.string.share_fail_hint);
}
@Override
public void onCancel() {
Utils.toast(mContext, mContext.getString(R.string.share_cancel_hint));
Utils.toast(mContext, R.string.share_cancel_hint);
}
};
@ -215,7 +215,7 @@ public class ShareUtils {
//QQ分享
private void qqShare() {
Utils.toast(mContext, mContext.getString(R.string.share_skip));
Utils.toast(mContext, R.string.share_skip);
Bundle params = new Bundle();
switch (mShareType) {
@ -243,7 +243,7 @@ public class ShareUtils {
//微信好友分享
private void wechatShare() {
Utils.toast(mContext, mContext.getString(R.string.share_skip));
Utils.toast(mContext, R.string.share_skip);
WXWebpageObject webpage = new WXWebpageObject();
WXMediaMessage msg = new WXMediaMessage(webpage);
webpage.webpageUrl = shareUrl;
@ -345,7 +345,7 @@ public class ShareUtils {
//QQ空间分享
private void qZoneShare() {
Utils.toast(mContext, mContext.getString(R.string.share_skip));
Utils.toast(mContext, R.string.share_skip);
Bundle params = new Bundle();
switch (mShareType) {
@ -377,7 +377,7 @@ public class ShareUtils {
//微信朋友圈分享
private void wechatMomentsShare() {
Utils.toast(mContext, mContext.getString(R.string.share_skip));
Utils.toast(mContext, R.string.share_skip);
WXWebpageObject webpage = new WXWebpageObject();
WXMediaMessage msg = new WXMediaMessage(webpage);

View File

@ -207,11 +207,7 @@ public class TabIndicatorView extends View implements TabLayout.OnTabSelectedLis
+ " ViewPagerCount=>" + mViewPager.getAdapter().getCount());
}
if (tab.getPosition() != mViewPager.getCurrentItem())
try {
mViewPager.setCurrentItem(tab.getPosition());
} catch (Exception e) {
e.printStackTrace();
}
mViewPager.setCurrentItem(tab.getPosition());
} else {
generatePath(tab.getPosition(), 0);
invalidate();

View File

@ -128,12 +128,13 @@ public class DownloadManager implements DownloadStatusListener {
String url = (String) msg.obj;
switch (msg.what) {
case DownloadConfig.CONTINUE_DOWNLOAD_TASK:
if (System.currentTimeMillis() - lastTimeMap.get(url) >= 1000) {
resume(url);
if (lastTimeMap.get(url) != null && System.currentTimeMillis() - lastTimeMap.get(url) >= 1000) {
DownloadEntity downloadEntity = getDownloadEntityByUrl(url);
if (downloadEntity != null) add(downloadEntity);
}
break;
case DownloadConfig.PAUSE_DOWNLOAD_TASK:
if (System.currentTimeMillis() - lastTimeMap.get(url) >= 1000) {
if (lastTimeMap.get(url) != null && System.currentTimeMillis() - lastTimeMap.get(url) >= 1000) {
pause(url);
}
break;
@ -412,32 +413,6 @@ public class DownloadManager implements DownloadStatusListener {
mHandler.sendMessageDelayed(msg, delayMillis);
}
/**
* 根据url恢复下载 //TODO 这个可以删除的全都在add判断add的时候不需要关注任务真实状态
*
* @param url
*/
@Deprecated
void resume(String url) {
DownloadEntity entry = getDownloadEntityByUrl(url);
// 暂停任务后,把文件删除,然后点继续,文件不存在,需要重新加入下载队列进行下载
if (checkDownloadEntryRecordValidate(url)) {
Utils.toast(mContext, "文件不存在!已重新加入下载队列");
add(entry);
} else {
if (entry != null) {
if (isFileCompleted(url)) {
entry.setStatus(DownloadStatus.done);
DataChanger.INSTANCE.notifyDataChanged(entry);
} else if (!isTaskDownloading(url)) {
mContext.startService(getIntent(entry, DownloadStatus.resume));
}
}
}
Utils.log(DownloadManager.class.getSimpleName(), "resume");
}
/**
* 根据url取消下载并删除已下载的文件
*

View File

@ -593,7 +593,7 @@ public class ChooseReceiverActivity extends BaseActivity implements View.OnClick
// 连接失败-动画
private void connFailedAnimView() {
getSupportActionBar().show();
Utils.toast(ChooseReceiverActivity.this, "连接失败");
toast("连接失败");
if (mScaleAnimation != null) {
mScaleAnimation.cancel();
}

View File

@ -23,11 +23,6 @@ public class CommonActivity extends BaseToolBarActivity implements ToolbarContro
}
@Override
public void setNavigationTitle(CharSequence res) {
}
@Override
public void setToolbarMenu(int res) {

View File

@ -21,6 +21,10 @@ public class DownloadManagerActivity extends NormalActivity {
public static final String TAG = "DownloadManagerActivity";
@Override
protected Intent provideNormalIntent() {
return getIntent(this, DownloadFragment.class);
}
public static Intent getDownloadMangerIntent(Context context, String url, String entrance) {
// Intent intent = new Intent(context, DownloadManagerActivity.class);

View File

@ -471,6 +471,7 @@ public class FileSenderActivity extends BaseActivity implements FileSenderAdapte
@Override
public void OnCancelPosition(int position) {
if (position >= mFileSenderList.size()) return;
FileSender fileSender = mFileSenderList.get(position);
Utils.log("发送方准备取消发送" + position);
if (fileSender != null && fileSender.isRunning()) {

View File

@ -1,6 +1,7 @@
package com.gh.gamecenter;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import com.gh.common.util.EntranceUtils;
@ -13,6 +14,12 @@ import com.gh.gamecenter.gamedetail.GameDetailFragment;
*/
public class GameDetailActivity extends NormalActivity {
@Override
protected Intent provideNormalIntent() {
return getIntent(this, GameDetailFragment.class);
}
/**
* 启动游戏详情页面
*/

View File

@ -59,7 +59,6 @@ import com.gh.gamecenter.manager.GameManager;
import com.gh.gamecenter.manager.InstallManager;
import com.gh.gamecenter.manager.PackageManager;
import com.gh.gamecenter.manager.UpdateManager;
import com.gh.gamecenter.manager.UserManager;
import com.gh.gamecenter.normal.NormalFragment;
import com.gh.gamecenter.retrofit.ObservableUtil;
import com.gh.gamecenter.retrofit.Response;
@ -104,7 +103,6 @@ import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.schedulers.Schedulers;
import static com.gh.common.util.EntranceUtils.KEY_DATA;
import static com.gh.common.util.EntranceUtils.KEY_TO;
import static com.gh.gamecenter.fragment.MainWrapperFragment.INDEX_PERSONAL;
@ -115,6 +113,9 @@ public class MainActivity extends BaseActivity {
public final static String EB_MAINACTIVITY_TAG = "MainActivity";
public final static String EB_SKIP_GAMEFRAGMENT = "GameFragment";
private MainWrapperFragment mMainWrapperFragment;
private SharedPreferences sp;
private InstallManager mInstallManager;
@ -127,7 +128,7 @@ public class MainActivity extends BaseActivity {
public void run() {
if (getIntent() != null && getIntent().getExtras() != null && !isSkipped) {
isSkipped = true;
Bundle bundle = getIntent().getBundleExtra(KEY_DATA);
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
String to = bundle.getString(KEY_TO);
if (!TextUtils.isEmpty(to)) {
@ -147,7 +148,7 @@ public class MainActivity extends BaseActivity {
NormalActivity.startFragment(MainActivity.this, (Class<? extends NormalFragment>) clazz, bundle);
} else {
Intent skipIntent = new Intent(MainActivity.this, clazz);
skipIntent.putExtra(KEY_DATA, bundle);
skipIntent.putExtras(bundle);
startActivity(skipIntent);
}
}
@ -357,6 +358,9 @@ public class MainActivity extends BaseActivity {
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean("isSkipped", isSkipped);
if (mMainWrapperFragment != null) {
outState.putInt(BaseFragment_ViewPager.ARGS_INDEX, mMainWrapperFragment.getCurrentItem());
}
}
@Override
@ -646,7 +650,14 @@ public class MainActivity extends BaseActivity {
isSkipped = savedInstanceState.getBoolean("isSkipped");
}
replaceFragment(new MainWrapperFragment());
mMainWrapperFragment = new MainWrapperFragment();
if (savedInstanceState != null) {
mMainWrapperFragment.setArguments(savedInstanceState);
} else if (getIntent() != null) {
Bundle extras = getIntent().getExtras();
mMainWrapperFragment.setArguments(extras);
}
replaceFragment(mMainWrapperFragment);
mInstallManager = new InstallManager(getApplicationContext());
@ -673,7 +684,7 @@ public class MainActivity extends BaseActivity {
getSuggestionType();
final String message = Config.getExceptionMsg(this);
if (!TextUtils.isEmpty(UserManager.getInstance().getToken()) && !TextUtils.isEmpty(message)) {
if (!TextUtils.isEmpty(message)) {
Config.setExceptionMsg(this, null);
AppUncaughtHandler.reportException(this, new Throwable(message));
DialogUtils.showWarningDialog(this, "发生闪退", "光环助手刚刚发生了闪退,马上反馈以帮助我们更好地修复问题?(只需简单描述你刚才的操作)"

View File

@ -8,14 +8,13 @@ import com.gh.gamecenter.entity.CommentEntity;
import com.gh.gamecenter.entity.ConcernEntity;
import com.gh.gamecenter.message.MessageDetailFragment;
import com.halo.assistant.HaloApp;
import com.halo.assistant.ui.IntentFactory;
/**
* Created by khy on 2016/11/8.
* 消息详情界面(评论详情)
*/
@Deprecated
public class MessageDetailActivity extends CommonActivity {
public class MessageDetailActivity extends NormalActivity {
// 评论回复
public static Intent getMessageDetailIntent(Context context, CommentEntity entity, String newsId) {
@ -25,10 +24,7 @@ public class MessageDetailActivity extends CommonActivity {
intent.putExtra("openSoftInput", true);
intent.putExtra(CommentEntity.TAG, entity);
return new IntentFactory.Builder(context)
.setArgs(intent.getExtras())
.setActivity(MessageDetailActivity.class)
.setFragment(MessageDetailFragment.class).build();
return getIntent(context, MessageDetailFragment.class, intent.getExtras());
}
public static Intent getIntentByEntity(Context context, ConcernEntity concernEntity, String entrance) {
@ -37,10 +33,7 @@ public class MessageDetailActivity extends CommonActivity {
HaloApp.put(ConcernEntity.TAG, concernEntity);
intent.putExtra(EntranceUtils.KEY_ENTRANCE, entrance);
// return intent;
return new IntentFactory.Builder(context)
.setArgs(intent.getExtras())
.setActivity(MessageDetailActivity.class)
.setFragment(MessageDetailFragment.class).build();
return getIntent(context, MessageDetailFragment.class, intent.getExtras());
}
public static Intent getIntentById(Context context, String newsId, Integer commentNum, Boolean openSoftInput, String entrance) {
@ -50,10 +43,7 @@ public class MessageDetailActivity extends CommonActivity {
intent.putExtra("commentNum", commentNum);
intent.putExtra("openSoftInput", openSoftInput);
// return intent;
return new IntentFactory.Builder(context)
.setArgs(intent.getExtras())
.setActivity(MessageDetailActivity.class)
.setFragment(MessageDetailFragment.class).build();
return getIntent(context, MessageDetailFragment.class, intent.getExtras());
}
}

View File

@ -269,9 +269,7 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
newsId = getIntent().getStringExtra(EntranceUtils.KEY_NEWSID);
mIsCollectionNews = getIntent().getBooleanExtra(KEY_COLLECTIONNEWS, false);
if (getIntent().getBundleExtra(EntranceUtils.KEY_DATA) != null) {
newsId = getIntent().getBundleExtra(EntranceUtils.KEY_DATA).getString(EntranceUtils.KEY_NEWSID);
}
if (newsId == null) {
mNewsEntity = getIntent().getParcelableExtra(NewsEntity.TAG);
if (mNewsEntity != null) {
@ -576,13 +574,13 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
newsDetailEntity.getUserData().setArticleFavorite(false);
mNewsCollection.setEnabled(true);
mNewsCollection.setImageResource(R.drawable.menu_ic_collect_unselect);
toast(getString(R.string.collection_cancel));
toast(R.string.collection_cancel);
}
@Override
public void onError() {
mNewsCollection.setEnabled(true);
toast(getString(R.string.collection_cancel_failure));
toast(R.string.collection_cancel_failure);
}
});
@ -602,13 +600,13 @@ public class NewsDetailActivity extends BaseActivity implements OnClickListener,
userData.setArticleFavorite(true);
mNewsCollection.setEnabled(true);
mNewsCollection.setImageResource(R.drawable.menu_ic_collect_select);
toast(getString(R.string.collection_success));
toast(R.string.collection_success);
}
@Override
public void onError() {
mNewsCollection.setEnabled(true);
toast(getString(R.string.collection_failure));
toast(R.string.collection_failure);
}
});
}

View File

@ -11,6 +11,7 @@ import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
@ -36,6 +37,11 @@ public class NormalActivity extends BaseActivity implements ToolbarController, T
public static final String NORMAL_FRAGMENT_NAME = "normalFragmentName";
public static final String NORMAL_FRAGMENT_BUNDLE = "normalFragmentBundle";
// 针对部分跳转不符合NormalActivity规则的额外处理主要绑定NormalFragment
protected Intent provideNormalIntent() {
return null;
}
@Deprecated
protected static Intent getIntent(Context context, Class<? extends NormalFragment> t) {
Intent intent = new Intent(context, NormalActivity.class);
@ -91,7 +97,7 @@ public class NormalActivity extends BaseActivity implements ToolbarController, T
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null && getIntent() != null) {
if (getIntent() != null) {
handleIntent(getIntent());
}
// setSupportActionBar(mNormalToolbar); // 替换actionBar后 toolBar无法控制
@ -113,23 +119,34 @@ public class NormalActivity extends BaseActivity implements ToolbarController, T
private void handleIntent(Intent intent) {
String fraName = intent.getStringExtra(NORMAL_FRAGMENT_NAME);
Bundle bundle = intent.getBundleExtra(NORMAL_FRAGMENT_BUNDLE);
if (TextUtils.isEmpty(fraName)) return;
if (TextUtils.isEmpty(fraName)) {
if (provideNormalIntent() == null) {
return;
}
fraName = provideNormalIntent().getStringExtra(NORMAL_FRAGMENT_NAME);
if (bundle == null) bundle = getIntent().getExtras();
if (TextUtils.isEmpty(fraName)) return;
}
mTargetFragment = Fragment.instantiate(this, fraName, bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.normal_content, mTargetFragment).commitNowAllowingStateLoss();
}
@Override
public void setNavigationTitle(@StringRes int res) {
if (mNormalTitle == null) return;
mNormalTitle.setText(res);
}
@Override
public void setNavigationTitle(CharSequence res) {
mNormalTitle.setText(res);
public void setNavigationTitle(String res) {
if (mNormalTitle == null) return;
if (res != null)
mNormalTitle.setText(res);
}
@Override
public void setToolbarMenu(@MenuRes int res) {
if (mNormalToolbar == null) return;
mNormalToolbar.inflateMenu(res);
mNormalToolbar.setOnMenuItemClickListener(this);
@ -145,6 +162,7 @@ public class NormalActivity extends BaseActivity implements ToolbarController, T
@Override
public MenuItem getMenuItem(int res) {
if (mNormalToolbar == null) return null; //后续页面做好判断
return mNormalToolbar.getMenu().findItem(res);
}
@ -163,4 +181,11 @@ public class NormalActivity extends BaseActivity implements ToolbarController, T
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (mTargetFragment instanceof NormalFragment) {
((NormalFragment) mTargetFragment).onTouchEvent(ev);
}
return super.dispatchTouchEvent(ev);
}
}

View File

@ -32,7 +32,7 @@ public class QuestionsDetailActivity extends BaseActivity implements FragmentMan
public static final String QUESTIONS_DETAIL_FOLD = "fold";
public static final String QUESTIONS_DETAIL = "questions_detail";
private static final int QUESTIONS_DETAIL_ANSWER_REQUEST = 110;
public static final int QUESTIONS_DETAIL_ANSWER_REQUEST = 110;
private View mShareIv;
@ -69,9 +69,6 @@ public class QuestionsDetailActivity extends BaseActivity implements FragmentMan
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mQuestionsId = getIntent().getStringExtra(EntranceUtils.KEY_QUESTIONS_ID);
if (getIntent().getBundleExtra(EntranceUtils.KEY_DATA) != null) {
mQuestionsId = getIntent().getBundleExtra(EntranceUtils.KEY_DATA).getString(EntranceUtils.KEY_QUESTIONS_ID);
}
getSupportFragmentManager().addOnBackStackChangedListener(this);
show(QUESTIONS_DETAIL);

View File

@ -266,7 +266,7 @@ public class SearchActivity extends BaseActivity {
default:
break;
}
transaction.commit();
transaction.commitAllowingStateLoss();
}
@Subscribe(threadMode = ThreadMode.MAIN)

View File

@ -64,10 +64,9 @@ public class SkipActivity extends BaseActivity {
}
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(KEY_ENTRANCE, ENTRANCE_BROWSER);
Bundle bundle = new Bundle();
bundle.putString(KEY_ENTRANCE, ENTRANCE_BROWSER);
if (host != null) {
switch (host) {
case HOST_ARTICLE:

View File

@ -20,6 +20,7 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.gh.base.BaseActivity;
import com.gh.base.fragment.BaseFragment_ViewPager;
import com.gh.common.util.DialogUtils;
import com.gh.common.util.PackageUtils;
import com.gh.common.util.PlatformUtils;
@ -28,6 +29,7 @@ import com.gh.common.util.TimestampUtils;
import com.gh.common.util.TokenUtils;
import com.gh.download.DownloadManager;
import com.gh.gamecenter.eventbus.EBReuse;
import com.gh.gamecenter.fragment.MainWrapperFragment;
import com.gh.gamecenter.manager.FilterManager;
import com.gh.gamecenter.retrofit.JSONObjectResponse;
import com.gh.gamecenter.retrofit.RetrofitManager;
@ -52,8 +54,6 @@ import pub.devrel.easypermissions.EasyPermissions;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import static com.gh.common.util.EntranceUtils.KEY_DATA;
/**
* 引导页面
*/
@ -89,7 +89,7 @@ public class SplashScreenActivity extends BaseActivity {
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(KEY_DATA, bundle);
intent.putExtras(bundle);
return intent;
}
@ -167,12 +167,12 @@ public class SplashScreenActivity extends BaseActivity {
// 跳转到主界面
private void launch() {
Bundle bundle = getIntent().getExtras();
if (getIntent().getBundleExtra(KEY_DATA) != null) {
bundle = getIntent().getBundleExtra(KEY_DATA);
}
Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
intent.putExtra(KEY_DATA, bundle);
if (isNewFirstLaunch) {
if (bundle == null) bundle = new Bundle();
intent.putExtra(BaseFragment_ViewPager.ARGS_INDEX, MainWrapperFragment.INDEX_ASK);
}
if (bundle != null) intent.putExtras(bundle);
startActivity(intent);
finish();
}

View File

@ -1,6 +1,7 @@
package com.gh.gamecenter;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import com.gh.common.util.EntranceUtils;
@ -13,6 +14,11 @@ import com.gh.gamecenter.subject.SubjectWrapperFragment;
@Deprecated
public class SubjectActivity extends NormalActivity {
@Override
protected Intent provideNormalIntent() {
return getIntent(this, SubjectWrapperFragment.class);
}
/**
* 启动专题页面
*/

View File

@ -171,7 +171,7 @@ public class SuggestionActivity extends BaseActivity implements SuggestTypeAdapt
File file = new File(picturePath);
if (file.length() > 8 * 1024 * 1024) {
toast(getString(R.string.suggestion_pic_hint));
toast(R.string.suggestion_pic_hint);
} else {
String newPath = getCacheDir() + File.separator + System.currentTimeMillis() + ".jpg";
Observable.create((Observable.OnSubscribe<Boolean>)
@ -208,12 +208,6 @@ public class SuggestionActivity extends BaseActivity implements SuggestTypeAdapt
String suggestContent = extras.getString(EntranceUtils.KEY_CONTENT);
String suggestHintType = extras.getString(EntranceUtils.KEY_SUGGEST_HINT_TYPE);
Bundle data = getIntent().getBundleExtra(EntranceUtils.KEY_DATA);
if (data != null) {
suggestContent = data.getString(EntranceUtils.KEY_CONTENT);
suggestHintType = data.getString(EntranceUtils.KEY_SUGGEST_HINT_TYPE);
curType = data.getInt(EntranceUtils.KEY_SUGGESTTYPE);
}
sp = PreferenceManager.getDefaultSharedPreferences(this);
@ -407,7 +401,7 @@ public class SuggestionActivity extends BaseActivity implements SuggestTypeAdapt
String url = mSuggestNewsLinkEt.getText().toString().trim();
if (!TextUtils.isEmpty(url) && !PatternUtils.isUrlAddress(url)) {
Utils.toast(SuggestionActivity.this, getString(R.string.suggestion_url_error_hint));
toast(R.string.suggestion_url_error_hint);
return;
}

View File

@ -137,12 +137,6 @@ public class ViewImageActivity extends Activity implements OnPageChangeListener
urls = extras.getStringArrayList(KEY_URLS);
int current = extras.getInt(KEY_CURRENT, 0);
scaleType = extras.getString(KEY_SCALETYPE);
Bundle data = getIntent().getBundleExtra(EntranceUtils.KEY_DATA);
if (data != null) {
urls = data.getStringArrayList(KEY_URLS);
current = data.getInt(KEY_CURRENT, 0);
scaleType = data.getString(KEY_SCALETYPE);
}
if (savedInstanceState != null) {
current = savedInstanceState.getInt(EntranceUtils.KEY_CURRENTITEM, 0);

View File

@ -17,6 +17,11 @@ import com.halo.assistant.fragment.WebFragment;
@Deprecated
public class WebActivity extends NormalActivity {
@Override
protected Intent provideNormalIntent() {
return getIntent(this, WebFragment.class);
}
@NonNull
public static Intent getWebIntent(Context context) {
Intent intent = new Intent(context, WebActivity.class);

View File

@ -69,7 +69,7 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback {
shareUrl = extras.getString(KET_SHAREURL);
mShareType = extras.getString(KET_TYPE);
Utils.toast(this, getString(R.string.share_skip));
Utils.toast(this, R.string.share_skip);
mWeiboShareAPI = new WbShareHandler(this);
mWeiboShareAPI.registerApp();
@ -139,19 +139,19 @@ public class WeiBoShareActivity extends Activity implements WbShareCallback {
@Override
public void onWbShareSuccess() {
Utils.toast(this, getString(R.string.share_success_hint));
Utils.toast(this, R.string.share_success_hint);
finish();
}
@Override
public void onWbShareCancel() {
Utils.toast(this, getString(R.string.share_cancel_hint));
Utils.toast(this, R.string.share_cancel_hint);
finish();
}
@Override
public void onWbShareFail() {
Utils.toast(this, getString(R.string.share_fail_hint));
Utils.toast(this, R.string.share_fail_hint);
finish();
}
}

View File

@ -27,12 +27,10 @@ import java.util.List;
* Created by khy on 6/12/17.
*/
public class AskSelectGameAdapter extends ListAdapter {
public class AskSelectGameAdapter extends ListAdapter<AskGameSelectEntity> {
private OnListClickListener mListClickListener;
private List<AskGameSelectEntity> mEntityList;
private int mTitlePosition;
private String mCommunityId;
@ -45,8 +43,15 @@ public class AskSelectGameAdapter extends ListAdapter {
}
@Override
protected <T> void provideListData(List<T> listData) {
mEntityList = (List<AskGameSelectEntity>) listData;
protected void provideListData(List<AskGameSelectEntity> listData) {
mEntityList.addAll(listData);
for (int i = 0; i < mEntityList.size(); i++) {
AskGameSelectEntity entity = mEntityList.get(i);
if (TextUtils.isEmpty(entity.getStatus())) {
mEntityList.remove(i);
i--;
}
}
for (int i = 0; i < mEntityList.size(); i++) {
AskGameSelectEntity entity = mEntityList.get(i);
if (i == 0) {

View File

@ -89,7 +89,7 @@ public class CommentDetailAdapter extends BaseRecyclerAdapter<ViewHolder> {
mRecyclerView.setVisibility(View.GONE);
Utils.toast(mContext, R.string.content_delete_toast);
} else {
Utils.toast(mContext, mContext.getString(R.string.comment_failure_hint));
Utils.toast(mContext, R.string.comment_failure_hint);
mIsNetworkError = true;
mIsLoading = false;
notifyItemChanged(getItemCount() - 1);

View File

@ -237,7 +237,7 @@ public class GameNewsAdapter extends BaseRecyclerAdapter<ViewHolder> {
StringUtils.buildString(mEntrance, "+(游戏新闻列表[", mNewsType, "])"));
mContext.startActivity(intent);
} else {
Utils.toast(mContext, mContext.getString(R.string.search_hint));
Utils.toast(mContext, R.string.search_hint);
}
}
});

View File

@ -413,7 +413,7 @@ public class PlatformAdapter extends BaseRecyclerAdapter<PlatformViewHolder> {
String path = downloadEntity.getPath();
if (FileUtils.isEmptyFile(path)) {
Utils.toast(mContext, mContext.getString(R.string.install_failure_hint));
Utils.toast(mContext, R.string.install_failure_hint);
mEntryMap.remove(apkEntity.getUrl());
DownloadManager.getInstance(mContext).cancel(apkEntity.getUrl());
notifyItemChanged(position);
@ -435,7 +435,7 @@ public class PlatformAdapter extends BaseRecyclerAdapter<PlatformViewHolder> {
String path = mEntryMap.get(apkEntity.getUrl()).getPath();
if (FileUtils.isEmptyFile(path)) {
Utils.toast(mContext, mContext.getString(R.string.install_failure_hint));
Utils.toast(mContext, R.string.install_failure_hint);
mEntryMap.remove(apkEntity.getUrl());
DownloadManager.getInstance(mContext).cancel(apkEntity.getUrl());
adapter.notifyItemChanged(location);

View File

@ -23,9 +23,7 @@ import com.gh.gamecenter.entity.ToolBoxEntity;
import com.gh.gamecenter.manager.UserManager;
import com.gh.gamecenter.retrofit.Response;
import com.gh.gamecenter.retrofit.RetrofitManager;
import com.google.gson.Gson;
import com.lightgame.adapter.BaseRecyclerAdapter;
import com.lightgame.config.CommonDebug;
import com.lightgame.utils.Util_System_Keyboard;
import com.lightgame.utils.Utils;
@ -235,7 +233,7 @@ public class ToolBoxRvAdapter extends BaseRecyclerAdapter {
public void onClick(View v) {
if (TextUtils.isEmpty(viewHolder.searchEt.getText().toString())) {
Utils.toast(mContext, mContext.getString(R.string.search_hint));
Utils.toast(mContext, R.string.search_hint);
return;
}
mSearchListener.search(true, viewHolder.searchEt.getText().toString());

View File

@ -23,8 +23,8 @@ import com.gh.common.util.ImageUtils;
import com.gh.common.util.NewsUtils;
import com.gh.common.util.ShareUtils;
import com.gh.common.view.RichEditor;
import com.gh.gamecenter.QuestionsDetailActivity;
import com.gh.gamecenter.NormalActivity;
import com.gh.gamecenter.QuestionsDetailActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.ViewImageActivity;
import com.gh.gamecenter.ask.entity.AnswerDetailEntity;
@ -99,9 +99,12 @@ public class AnswerDetailFragment extends NormalFragment {
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK && requestCode == ANSWER_PATCH_REQUEST) {
mDetailEntity.setContent(data.getStringExtra(EntranceUtils.KEY_ANSWER_CONTENT));
initView();
if (resultCode == Activity.RESULT_OK && requestCode == ANSWER_PATCH_REQUEST && data != null && getActivity() != null) {
if (mDetailEntity != null) {
mDetailEntity.setContent(data.getStringExtra(EntranceUtils.KEY_ANSWER_CONTENT));
initView();
}
getActivity().setResult(Activity.RESULT_OK, new Intent()); // 编辑答案问题详情页面已存在Id只需要一个空Intent
}
}
@ -224,15 +227,17 @@ public class AnswerDetailFragment extends NormalFragment {
public void onClick(View view) {
switch (view.getId()) {
case R.id.answer_detail_edit:
Bundle bundle = new Bundle();
bundle.putString(EntranceUtils.KEY_ANSWER_ID, mAnswerId);
bundle.putString(EntranceUtils.KEY_QUESTIONS_TITLE, mDetailEntity.getQuestion().getTitle());
bundle.putString(EntranceUtils.KEY_ANSWER_CONTENT, mDetailEntity.getContent());
NormalActivity.startFragmentForResult(getContext(), AnswerEditFragment.class, bundle, ANSWER_PATCH_REQUEST);
if (mDetailEntity != null) {
Bundle bundle = new Bundle();
bundle.putString(EntranceUtils.KEY_ANSWER_ID, mAnswerId);
bundle.putString(EntranceUtils.KEY_QUESTIONS_TITLE, mDetailEntity.getQuestion().getTitle());
bundle.putString(EntranceUtils.KEY_ANSWER_CONTENT, mDetailEntity.getContent());
NormalActivity.startFragmentForResult(getContext(), AnswerEditFragment.class, bundle, ANSWER_PATCH_REQUEST);
}
break;
case R.id.answer_detail_vote:
CheckLoginUtils.checkLogin(getContext(), () -> {
if (!mDetailEntity.getMe().isAnswerVoted()) {
if (mDetailEntity != null && !mDetailEntity.getMe().isAnswerVoted()) {
postVote();
} else {
toast(R.string.ask_vote_hint);
@ -245,8 +250,10 @@ public class AnswerDetailFragment extends NormalFragment {
initData();
break;
case R.id.answer_detail_title:
Intent intent = QuestionsDetailActivity.getIntent(getContext(), mDetailEntity.getQuestion().getId(), mEntrance);
startActivity(intent);
if (mDetailEntity != null) {
Intent intent = QuestionsDetailActivity.getIntent(getContext(), mDetailEntity.getQuestion().getId(), mEntrance);
startActivity(intent);
}
break;
}
}

View File

@ -1,7 +1,6 @@
package com.gh.gamecenter.ask;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
@ -13,30 +12,19 @@ import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
import com.gh.gamecenter.ask.entity.AnswerEntity;
import com.gh.gamecenter.baselist.ListAdapter;
import java.util.List;
/**
* Created by khy on 2/12/17.
*/
public class AskQuestionsHotAdapter extends ListAdapter {
public class AskQuestionsHotAdapter extends ListAdapter<AnswerEntity> {
private OnListClickListener mListClickListener;
private List<AnswerEntity> mEntityList;
public AskQuestionsHotAdapter(Context context, OnListClickListener listClickListener) {
super(context);
mListClickListener = listClickListener;
}
@NonNull
@Override
protected <T> void provideListData(List<T> listData) {
mEntityList = (List<AnswerEntity>) listData;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER;

View File

@ -12,32 +12,20 @@ import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
import com.gh.gamecenter.ask.entity.Questions;
import com.gh.gamecenter.baselist.ListAdapter;
import java.util.List;
import butterknife.BindView;
/**
* Created by khy on 5/12/17.
*/
public class AskQuestionsNewBodyAdapter extends ListAdapter {
public class AskQuestionsNewBodyAdapter extends ListAdapter<Questions> {
private OnListClickListener mListClickListener;
private List<Questions> mEntityList;
public AskQuestionsNewBodyAdapter(Context context, OnListClickListener listClickListener) {
super(context);
mListClickListener = listClickListener;
}
@Override
protected <T> void provideListData(List<T> listData) {
mEntityList = (List<Questions>) listData;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER;

View File

@ -3,6 +3,7 @@ package com.gh.gamecenter.ask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.View;
import com.gh.common.util.AskLogUtils;
@ -48,8 +49,8 @@ public class AskQuestionsNewBodyFragment extends ListFragment {
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
mType = getArguments().getString(AskQuestionsNewFragment.ASK_QUESTIONS_TYPE);
mCommunityId = UserManager.getInstance().getCommunityId(getContext());
mType = getArguments().getString(mCommunityId);
super.onCreate(savedInstanceState);
mOnLoggenInListener = () -> {
NormalActivity.startFragment(getContext(), QuestionsEditFragment.class);
@ -61,6 +62,7 @@ public class AskQuestionsNewBodyFragment extends ListFragment {
super.onViewCreated(view, savedInstanceState);
if (!UserManager.getInstance().getCommunityId(getContext()).equals(mCommunityId)) {
mCommunityId = UserManager.getInstance().getCommunityId(getContext());
mType = getArguments().getString(mCommunityId);
onRefresh();
}
}
@ -102,6 +104,13 @@ public class AskQuestionsNewBodyFragment extends ListFragment {
AskLogUtils.uploadQuestions(getContext(), tracers, questions);
break;
}
}
public static Fragment newInstance(String s) {
AskQuestionsNewBodyFragment questionsBodyFragment = new AskQuestionsNewBodyFragment();
Bundle args = new Bundle();
args.putString(UserManager.getInstance().getCommunityId(questionsBodyFragment.getContext()), s);
questionsBodyFragment.setArguments(args);
return questionsBodyFragment;
}
}

View File

@ -8,13 +8,11 @@ import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import com.gh.base.adapter.FragmentAdapter;
import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.ImageUtils;
import com.gh.common.view.TabIndicatorView;
@ -22,10 +20,9 @@ import com.gh.gamecenter.NormalActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.ask.entity.AskTagGroupsEntity;
import com.gh.gamecenter.ask.viewmodel.AskQuestionsNewViewModel;
import com.halo.assistant.HaloApp;
import com.lightgame.view.NoScrollableViewPager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import butterknife.BindView;
@ -52,21 +49,18 @@ public class AskQuestionsNewFragment extends BaseFragment {
@BindView(R.id.list_loading)
View mLoading;
public static final String ASK_QUESTIONS_TYPE = "ask_questions_type";
private AskQuestionsNewViewModel mModel;
private List<AskTagGroupsEntity> mTagGroupsList;
private HashMap<String, Fragment> mCacheFragmentsMap = new HashMap<>();
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == COMMUNITIES_SELECT_REQUEST && resultCode == Activity.RESULT_OK) {
mTagGroupsList.clear();
mCacheFragmentsMap.clear();
mAppBar.setVisibility(View.GONE);
mNoConn.setVisibility(View.GONE);
mViewpager.setVisibility(View.GONE);
mLoading.setVisibility(View.VISIBLE);
mModel.repty();
}
@ -76,24 +70,30 @@ public class AskQuestionsNewFragment extends BaseFragment {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final AskQuestionsNewViewModel.Factory factory = new AskQuestionsNewViewModel.Factory(getActivity().getApplication());
final AskQuestionsNewViewModel.Factory factory = new AskQuestionsNewViewModel.Factory(HaloApp.getInstance().getApplication());
mModel = ViewModelProviders.of(this, factory)
.get(AskQuestionsNewViewModel.class);
subscribeUi(mModel);
// 页面销毁时进行一次重试防止更换社区时页面销毁导致onActivityResult无法接受到信息
if (savedInstanceState != null) {
mModel.repty();
}
}
private void subscribeUi(AskQuestionsNewViewModel viewModel) {
viewModel.getTagGroupsObserable().observe(this, new Observer<List<AskTagGroupsEntity>>() {
viewModel.getTagGroupsObservable().observe(this, new Observer<List<AskTagGroupsEntity>>() {
@Override
public void onChanged(@Nullable List<AskTagGroupsEntity> tagGroups) {
mTagGroupsList = tagGroups;
if (tagGroups != null && tagGroups.size() > 0) {
initFragments();
initTab();
mViewpager.setVisibility(View.VISIBLE);
mAppBar.setVisibility(View.VISIBLE);
mNoConn.setVisibility(View.GONE);
mLoading.setVisibility(View.GONE);
} else {
mViewpager.setVisibility(View.GONE);
mAppBar.setVisibility(View.GONE);
mNoConn.setVisibility(View.VISIBLE);
mLoading.setVisibility(View.GONE);
@ -123,26 +123,8 @@ public class AskQuestionsNewFragment extends BaseFragment {
}
}
private void initFragments() {
if (mCacheFragmentsMap.size() != mTagGroupsList.size()) {
mCacheFragmentsMap.clear();
} else {
return;
}
for (AskTagGroupsEntity tag : mTagGroupsList) {
AskQuestionsNewBodyFragment questionsBodyFragment = new AskQuestionsNewBodyFragment();
Bundle args = new Bundle();
args.putString(ASK_QUESTIONS_TYPE, tag.getName());
questionsBodyFragment.setArguments(args);
mCacheFragmentsMap.put(tag.getName(), questionsBodyFragment);
}
}
private void initTab() {
FragmentAdapter adapter = new FragmentAdapter(getChildFragmentManager(), getFragments());
AskTagPagerFragmentAdapter adapter = new AskTagPagerFragmentAdapter(getChildFragmentManager(), mTagGroupsList);
mViewpager.setAdapter(adapter);
mTablayout.setupWithViewPager(mViewpager);
mTabIndicatorView.setupWithTabLayout(mTablayout);
@ -180,12 +162,4 @@ public class AskQuestionsNewFragment extends BaseFragment {
tabType.setText(tagList.getName());
return view;
}
private List<Fragment> getFragments() {
List<Fragment> fragments = new ArrayList<>();
for (AskTagGroupsEntity tag : mTagGroupsList) {
fragments.add(mCacheFragmentsMap.get(tag.getName()));
}
return fragments;
}
}

View File

@ -17,6 +17,8 @@ import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
import com.gh.base.fragment.WaitingDialogFragment;
import com.gh.common.util.DialogUtils;
import com.gh.common.view.GridDivider;
import com.gh.gamecenter.R;
import com.gh.gamecenter.ask.entity.AskTagGroupsEntity;
@ -46,9 +48,11 @@ public class AskTabOrderFragment extends NormalFragment {
private AskTabOrderAdapter mAdapter;
private WaitingDialogFragment mPostDialog;
private List<AskTagGroupsEntity> mTagList;
private boolean isReseting;
private boolean isReset = true; // 重置/没有调整过排序
@Override
protected int getLayoutId() {
@ -64,12 +68,11 @@ public class AskTabOrderFragment extends NormalFragment {
mViewModel = ViewModelProviders.of(this, factory)
.get(AskQuestionsNewViewModel.class);
mViewModel.getTagGroupsObserable().observe(this, new Observer<List<AskTagGroupsEntity>>() {
mViewModel.getTagGroupsObservable().observe(this, new Observer<List<AskTagGroupsEntity>>() {
@Override
public void onChanged(@Nullable List<AskTagGroupsEntity> askTagGroups) {
if (askTagGroups != null) {
if (mTagList == null || isReseting) {
isReseting = false;
if (mTagList == null || isReset) {
mTagList = askTagGroups;
initView();
}
@ -77,19 +80,30 @@ public class AskTabOrderFragment extends NormalFragment {
mViewModel.cacheAndNotifyTagGroups(null);
getActivity().finish();
}
if (mPostDialog != null) {
mPostDialog.dismissAllowingStateLoss();
}
}
});
}
@OnClick(R.id.asktab_order_reset)
public void onClick(View view) {
isReseting = true;
mViewModel.reset();
DialogUtils.showAlertDialog(getContext(), "提示", "确定要恢复为默认排序吗?"
, "确定", "取消 ", () -> {
mPostDialog = WaitingDialogFragment.newInstance(getString(R.string.ask_tags_reseting));
mPostDialog.show(getChildFragmentManager(), null);
isReset = true;
mViewModel.reset();
}, null);
}
@Override
public boolean onBackPressed() {
mViewModel.update(mTagList);
if (!isReset) mViewModel.update(mTagList);
return super.onBackPressed();
}
@ -100,7 +114,7 @@ public class AskTabOrderFragment extends NormalFragment {
mAdapter = new AskTabOrderAdapter(getContext(), mTagList);
mAsktabOrderRv.setAdapter(mAdapter);
mAsktabOrderRv.addItemDecoration(new GridDivider(getContext(), 1, 7, ContextCompat.getColor(getContext(), R.color.cutting_line)));
mAsktabOrderRv.addItemDecoration(new GridDivider(getContext(), 1, 5, ContextCompat.getColor(getContext(), R.color.cutting_line)));
mAsktabOrderRv.addOnItemTouchListener(new OnRvLongClickListener(mAsktabOrderRv) {
@Override
public void onItemLongClick(RecyclerView.ViewHolder vh) {
@ -161,6 +175,7 @@ public class AskTabOrderFragment extends NormalFragment {
}
mAdapter.notifyItemMoved(fromPosition, toPosition);
isReset = false;
mViewModel.cacheAndNotifyTagGroups(mTagList); // 刷新问答-问题页面
return true;
}

View File

@ -0,0 +1,32 @@
package com.gh.gamecenter.ask;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import com.gh.gamecenter.ask.entity.AskTagGroupsEntity;
import java.util.List;
/**
* Created by khy on 28/01/18.
*/
public class AskTagPagerFragmentAdapter extends FragmentStatePagerAdapter {
private List<AskTagGroupsEntity> mTagList;
public AskTagPagerFragmentAdapter(FragmentManager fm, List<AskTagGroupsEntity> tagList) {
super(fm);
mTagList = tagList;
}
@Override
public Fragment getItem(int position) {
return AskQuestionsNewBodyFragment.newInstance(mTagList.get(position).getName());
}
@Override
public int getCount() {
return mTagList.size();
}
}

View File

@ -114,10 +114,10 @@ public class QuestionsEditFragment extends NormalFragment {
File file = new File(picturePath);
if (file.length() > 8 * 1024 * 1024) {
toast(getString(R.string.suggestion_pic_hint));
toast(R.string.suggestion_pic_hint);
} else {
if (mAdapter.getFileList().size() >= 3) {
toast(getString(R.string.questions_edit_maxpic_hint));
toast(R.string.questions_edit_maxpic_hint);
} else {
postImg(picturePath);
}
@ -203,12 +203,13 @@ public class QuestionsEditFragment extends NormalFragment {
return;
}
try {
Utils.log("===postImg::" + response.toString());
int statusCode = response.getInt("statusCode");
if (statusCode == HttpURLConnection.HTTP_OK) {
mAdapter.addFileList(response.getString("icon"));
} else if (statusCode == 403) {
toast("图片违规");
} else {
toast("图片上传失败,请检查网络");
}
} catch (Exception e) {
e.printStackTrace();
@ -260,14 +261,13 @@ public class QuestionsEditFragment extends NormalFragment {
return;
}
if (title.length() < 30) {
if (title.length() < 50) {
String endString = title.substring(title.length() - 1, title.length());
if (!"?".equals(endString) && !"".equals(endString))
title += "";
}
String content = mContent.getText().toString();
String content = mContent.getText().toString().trim();
QuestionsDetailEntity entity = new QuestionsDetailEntity();
entity.setTitle(title);
entity.setTags(mTagList);
@ -403,7 +403,7 @@ public class QuestionsEditFragment extends NormalFragment {
if (actionId == EditorInfo.IME_ACTION_DONE) {
String nickname = input.getText().toString().trim();
if (TextUtils.isEmpty(nickname)) {
Utils.toast(getContext(), getString(R.string.vote_empty_hint));
toast(R.string.vote_empty_hint);
return true;
}
addTag(nickname, true);
@ -430,7 +430,7 @@ public class QuestionsEditFragment extends NormalFragment {
public void onClick(View v) {
String nickname = input.getText().toString().trim();
if (TextUtils.isEmpty(nickname)) {
Utils.toast(getContext(), getString(R.string.vote_empty_hint));
toast(R.string.vote_empty_hint);
return;
}
addTag(nickname, true);

View File

@ -125,13 +125,15 @@ public class SelectGameFragment extends ListFragment {
switch (view.getId()) {
case R.id.ask_selectgame_item_constraintlayout:
List<AskGameSelectEntity> list = (List<AskGameSelectEntity>) data;
AskGameSelectEntity entity = list.get(position);
if ("opened".equals(entity.getStatus())) {
UserManager.getInstance().setCommunityId(getContext(), entity.getId(), entity.getName());
mAdapter.resetCommunityId(entity.getId());
if (getActivity() != null) {
getActivity().setResult(Activity.RESULT_OK);
getActivity().finish();
if (position < list.size()) {
AskGameSelectEntity entity = list.get(position);
if ("opened".equals(entity.getStatus())) {
UserManager.getInstance().setCommunityId(getContext(), entity.getId(), entity.getName());
mAdapter.resetCommunityId(entity.getId());
if (getActivity() != null) {
getActivity().setResult(Activity.RESULT_OK);
getActivity().finish();
}
}
}
break;
@ -147,10 +149,13 @@ public class SelectGameFragment extends ListFragment {
case R.id.ask_selectgame_item_votebtn:
CheckLoginUtils.checkLogin(getContext(), () -> {
List<AskGameSelectEntity> mEntityList = (List<AskGameSelectEntity>) data;
AskGameSelectEntity askGameSelectEntity = mEntityList.get(position);
MeEntity me = askGameSelectEntity.getMe();
if (me == null || !me.isCommunityVoted())
vote(askGameSelectEntity.getId());
if (position < mEntityList.size()) {
AskGameSelectEntity askGameSelectEntity = mEntityList.get(position);
MeEntity me = askGameSelectEntity.getMe();
if (me == null || !me.isCommunityVoted())
vote(askGameSelectEntity.getId());
}
});
break;

View File

@ -13,30 +13,20 @@ import com.gh.gamecenter.ask.AskQuestionsNewViewHolder;
import com.gh.gamecenter.ask.entity.Questions;
import com.gh.gamecenter.baselist.ListAdapter;
import java.util.List;
/**
* Created by khy on 20/12/17.
*/
class ConcernQuestionsAdapter extends ListAdapter {
class ConcernQuestionsAdapter extends ListAdapter<Questions> {
private OnListClickListener mListClickListener;
private List<Questions> mEntityList;
public ConcernQuestionsAdapter(Context context, OnListClickListener listClickListener) {
super(context);
mListClickListener = listClickListener;
}
@Override
protected <T> void provideListData(List<T> listData) {
mEntityList = (List<Questions>) listData;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER;

View File

@ -13,29 +13,19 @@ import com.gh.gamecenter.ask.entity.AnswerEntity;
import com.gh.gamecenter.ask.questionsdetail.AnswerViewHolder;
import com.gh.gamecenter.baselist.ListAdapter;
import java.util.List;
/**
* Created by khy on 20/12/17.
*/
class MyAnswerAdapter extends ListAdapter {
class MyAnswerAdapter extends ListAdapter<AnswerEntity> {
private OnListClickListener mListClickListener;
private List<AnswerEntity> mEntityList;
MyAnswerAdapter(Context context, OnListClickListener listClickListener) {
super(context);
mListClickListener = listClickListener;
}
@Override
protected <T> void provideListData(List<T> listData) {
mEntityList = (List<AnswerEntity>) listData;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER;

View File

@ -13,29 +13,19 @@ import com.gh.gamecenter.ask.entity.AnswerEntity;
import com.gh.gamecenter.ask.questionsdetail.AnswerViewHolder;
import com.gh.gamecenter.baselist.ListAdapter;
import java.util.List;
/**
* Created by khy on 20/12/17.
*/
class MyDraftAdapter extends ListAdapter {
class MyDraftAdapter extends ListAdapter<AnswerEntity> {
private OnListClickListener mListClickListener;
private List<AnswerEntity> mEntityList;
MyDraftAdapter(Context context, OnListClickListener listClickListener) {
super(context);
mListClickListener = listClickListener;
}
@Override
protected <T> void provideListData(List<T> listData) {
mEntityList = (List<AnswerEntity>) listData;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER;
@ -76,12 +66,6 @@ class MyDraftAdapter extends ListAdapter {
return mEntityList == null || mEntityList.isEmpty() ? 0 : mEntityList.size() + FOOTER_ITEM_COUNT;
}
void answerContentChange(int position, String newContent) {
AnswerEntity answerEntity = mEntityList.get(position);
answerEntity.setBrief(newContent);
notifyItemChanged(position);
}
void removePosition(int draftPosition) {
mEntityList.remove(draftPosition);
notifyDataSetChanged();

View File

@ -6,10 +6,9 @@ import android.os.Bundle;
import android.view.View;
import com.gh.common.util.AskLogUtils;
import com.gh.common.util.AskUtils;
import com.gh.common.util.EntranceUtils;
import com.gh.gamecenter.QuestionsDetailActivity;
import com.gh.gamecenter.NormalActivity;
import com.gh.gamecenter.QuestionsDetailActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.ask.entity.AnswerEntity;
import com.gh.gamecenter.ask.entity.Questions;
@ -54,7 +53,7 @@ public class MyDraftFragment extends ListFragment {
mDraftPosition = -1;
if (mAdapter.getItemCount() == 0) onLoadEmpty();
} else if (resultCode == AnswerEditFragment.SAVE_DRAFTS && data != null) {
mAdapter.answerContentChange(mDraftPosition, AskUtils.stripHtml(data.getStringExtra(EntranceUtils.KEY_ANSWER_CONTENT)));
mListViewModel.load(LoadType.REFRESH);
}
}
}

View File

@ -13,30 +13,20 @@ import com.gh.gamecenter.ask.AskQuestionsNewViewHolder;
import com.gh.gamecenter.ask.entity.Questions;
import com.gh.gamecenter.baselist.ListAdapter;
import java.util.List;
/**
* Created by khy on 20/12/17.
*/
public class MyQuestionsAdapter extends ListAdapter {
public class MyQuestionsAdapter extends ListAdapter<Questions> {
private OnListClickListener mListClickListener;
private List<Questions> mEntityList;
public MyQuestionsAdapter(Context context, OnListClickListener listClickListener) {
super(context);
mListClickListener = listClickListener;
}
@Override
protected <T> void provideListData(List<T> listData) {
mEntityList = (List<Questions>) listData;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER;

View File

@ -190,7 +190,7 @@ public class AnswerEditFragment extends NormalFragment {
ImageUtils.Companion.postImage(getContext(), picturePath, new ImageUtils.OnPostImageListener() {
@Override
public void postSuccess(JSONObject response) {
postDialog.dismissAllowingStateLoss();
if (postDialog != null) postDialog.dismissAllowingStateLoss();
if (response == null) {
toast("图片上传失败,请检查网络");
return;
@ -202,6 +202,8 @@ public class AnswerEditFragment extends NormalFragment {
mEditContent.insertImage(FILE_HOST + picturePath);
} else if (statusCode == 403) {
toast("图片违规");
} else {
toast("图片上传失败,请检查网络");
}
} catch (Exception e) {
e.printStackTrace();
@ -210,7 +212,7 @@ public class AnswerEditFragment extends NormalFragment {
@Override
public void postError() {
postDialog.dismissAllowingStateLoss();
if (postDialog != null) postDialog.dismissAllowingStateLoss();
toast("图片上传失败,请检查网络");
}
});
@ -233,11 +235,11 @@ public class AnswerEditFragment extends NormalFragment {
private void post(String editContent) {
int answerLength = mEditContent.getText().length();
if (answerLength < MIN_ANSWER_TEXT_LENGTH) {
postDialog.dismissAllowingStateLoss();
if (postDialog != null) postDialog.dismissAllowingStateLoss();
toast(R.string.answer_beneath_length_limit);
return;
} else if (answerLength > MAX_ANSWER_TEXT_LENGTH) {
postDialog.dismissAllowingStateLoss();
if (postDialog != null) postDialog.dismissAllowingStateLoss();
DialogUtils.showAlertDialog(getContext(),
getString(R.string.answer_post_failed),
String.format(getString(R.string.answer_exceed_length_limit), Integer.toString(answerLength - MIN_ANSWER_TEXT_LENGTH)),
@ -267,7 +269,7 @@ public class AnswerEditFragment extends NormalFragment {
@Override
public void onResponse(ResponseBody response) {
super.onResponse(response);
postDialog.dismissAllowingStateLoss();
if (postDialog != null) postDialog.dismissAllowingStateLoss();
toast("发布成功");
String answerId = null;
try {
@ -288,7 +290,7 @@ public class AnswerEditFragment extends NormalFragment {
@Override
public void onFailure(HttpException e) {
super.onFailure(e);
postDialog.dismissAllowingStateLoss();
if (postDialog != null) postDialog.dismissAllowingStateLoss();
toast("提交失败");
AskErrorResponseUtils.errorResponseControl(getContext(), e);
}
@ -334,7 +336,7 @@ public class AnswerEditFragment extends NormalFragment {
for (String s : mMapImg.keySet()) {
editContent = editContent.replace(FILE_HOST + s, mMapImg.get(s));
}
if (isExit && TextUtils.isEmpty(editContent)) {
if (isExit && TextUtils.isEmpty(editContent) && getActivity() != null) {
getActivity().finish();
return;
} else if (!isExit && TextUtils.isEmpty(editContent)) { // || editContent.equals(mCacheAnswerContent)

View File

@ -12,29 +12,19 @@ import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
import com.gh.gamecenter.ask.entity.AnswerEntity;
import com.gh.gamecenter.baselist.ListAdapter;
import java.util.List;
/**
* Created by khy on 11/12/17.
*/
public class AnswerFoldAdapter extends ListAdapter {
public class AnswerFoldAdapter extends ListAdapter<AnswerEntity> {
private OnListClickListener mListClickListener;
private List<AnswerEntity> mEntityList;
public AnswerFoldAdapter(Context context, OnListClickListener listClickListener) {
super(context);
mListClickListener = listClickListener;
}
@Override
protected <T> void provideListData(List<T> listData) {
mEntityList = (List<AnswerEntity>) listData;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {

View File

@ -68,7 +68,7 @@ public class AnswerFoldFragment extends ListFragment {
@Override
public Observable<List<AnswerEntity>> provideDataObservable() {
return RetrofitManager.getInstance(getContext()).getApi().getQuestionsAnswer(mQuestionsId, true);
return RetrofitManager.getInstance(getContext()).getApi().getQuestionsAnswer(mQuestionsId, true, mListViewModel.getListOffset());
}
@Override

View File

@ -37,14 +37,10 @@ import java.util.List;
* Created by khy on 7/12/17.
*/
public class QuestionsDetailAdapter extends ListAdapter {
private static final int ITEM_FOLD_HINT = 200;
public class QuestionsDetailAdapter extends ListAdapter<AnswerEntity> {
private OnListClickListener mListClickListener;
private List<AnswerEntity> mEntityList;
private QuestionsDetailEntity mQuestionsDetailEntity;
boolean mIsExpand = false;
@ -64,13 +60,15 @@ public class QuestionsDetailAdapter extends ListAdapter {
}
@Override
protected <T> void provideListData(List<T> listData) {
mEntityList = (List<AnswerEntity>) listData;
notifyDataSetChanged();
protected void provideListData(List<AnswerEntity> listData) {
if (listData != null && listData.size() != 0 && mQuestionsDetailEntity != null) {
mEntityList.addAll(listData);
notifyItemRangeInserted(mEntityList.size() - listData.size() + TOP_ITEM_COUNT, listData.size());
}
}
@Override
public void loadChange(LoadStatus status) { // 特殊
public void loadChange(LoadStatus status) {
switch (status) {
case OVER:
mIsOver = true;
@ -81,7 +79,15 @@ public class QuestionsDetailAdapter extends ListAdapter {
case RETRY:
mIsNetworkError = false;
break;
case NORMAL:
mIsNetworkError = false;
mIsOver = false;
return;
case REFRESH:
mEntityList.clear();
break;
}
notifyDataSetChanged();
}
@ -160,7 +166,8 @@ public class QuestionsDetailAdapter extends ListAdapter {
break;
case ItemViewType.ITEM_BODY:
int index = position - ListAdapter.TOP_ITEM_COUNT;
((AnswerViewHolder) holder).initAnswerViewHolder(mContext, mEntityList.get(index));
if (index != -1)
((AnswerViewHolder) holder).initAnswerViewHolder(mContext, mEntityList.get(index));
break;
}
}
@ -200,7 +207,7 @@ public class QuestionsDetailAdapter extends ListAdapter {
params.setMargins(0, DisplayUtils.dip2px(mContext, 5), DisplayUtils.dip2px(mContext, 15),
DisplayUtils.dip2px(mContext, 5));
tagTv.setLayoutParams(params);
holder.mTagRl.addView(view, 0);
holder.mTagRl.addView(view);
}
if (mQuestionsDetailEntity.getMe().isQuestionFollowed()) {
@ -281,6 +288,8 @@ public class QuestionsDetailAdapter extends ListAdapter {
int index = 0;
if (mQuestionsDetailEntity != null) {
index++;
} else {
return index;
}
if (mEntityList != null) {
index += mEntityList.size();

View File

@ -148,7 +148,8 @@ public class QuestionsDetailFragment extends ListFragment {
if (mQuestionsDetailEntity != null && !TextUtils.isEmpty(mQuestionsDetailEntity.getMe().getMyAnswerId())) {
Bundle bundle = new Bundle();
bundle.putString(EntranceUtils.KEY_ANSWER_ID, mQuestionsDetailEntity.getMe().getMyAnswerId());
NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle);
NormalActivity.startFragmentForResult(getContext(), AnswerDetailFragment.class, bundle
, QuestionsDetailActivity.QUESTIONS_DETAIL_ANSWER_REQUEST);
} else {
((QuestionsDetailActivity) getActivity()).show(QuestionsDetailActivity.QUESTIONS_DETAIL_ANSWER);
}
@ -165,7 +166,7 @@ public class QuestionsDetailFragment extends ListFragment {
@Override
public Observable<List<AnswerEntity>> provideDataObservable() {
return RetrofitManager.getInstance(getContext()).getApi().getQuestionsAnswer(mQuestionsId, false);
return RetrofitManager.getInstance(getContext()).getApi().getQuestionsAnswer(mQuestionsId, false, mListViewModel.getListOffset());
}
@Override
@ -181,9 +182,6 @@ public class QuestionsDetailFragment extends ListFragment {
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED))
((QuestionsDetailActivity) getActivity()).show(QuestionsDetailActivity.QUESTIONS_DETAIL_FOLD);
}
break;
case R.id.questionsdetail_footer:
break;
case R.id.ask_answer_item_constraintlayout:
case R.id.ask_answer_item_img:
@ -194,7 +192,8 @@ public class QuestionsDetailFragment extends ListFragment {
Bundle bundle = new Bundle();
bundle.putString(EntranceUtils.KEY_ANSWER_ID, entity.getId());
bundle.putString(EntranceUtils.KEY_ENTRANCE, mEntrance + "+(问题详情)");
NormalActivity.startFragment(getContext(), AnswerDetailFragment.class, bundle);
NormalActivity.startFragmentForResult(getContext(), AnswerDetailFragment.class, bundle
, QuestionsDetailActivity.QUESTIONS_DETAIL_ANSWER_REQUEST);
break;
case R.id.questionsdetail_item_concern:
CheckLoginUtils.checkLogin(getContext(), () -> {
@ -250,14 +249,11 @@ public class QuestionsDetailFragment extends ListFragment {
}
public void postAnswerSuccess(String answerId) {
mQuestionsDetailEntity.getMe().setMyAnswerId(answerId);
if (mQuestionsDetailEntity != null) {
mQuestionsDetailEntity.getMe().setMyAnswerId(answerId);
mBaseHandler.postDelayed(this::getQuestionsDetail, 500);
}
setAnswerTv(R.string.question_detail_myanswer);
mBaseHandler.postDelayed(new Runnable() {
@Override
public void run() {
getQuestionsDetail();
}
}, 500);
}
public void postDraftsSuccess() {

View File

@ -19,21 +19,20 @@ import java.util.List;
* Created by khy on 7/12/17.
*/
public class QuestionsInviteAdapter extends ListAdapter {
public class QuestionsInviteAdapter extends ListAdapter<InviteEntity> {
private OnListClickListener mListClickListener;
private List<InviteEntity> mEntityList;
public QuestionsInviteAdapter(Context context, OnListClickListener listClickListener) {
super(context);
mListClickListener = listClickListener;
}
@Override
protected <T> void provideListData(List<T> listData) {
mEntityList = (List<InviteEntity>) listData;
notifyDataSetChanged();
protected void provideListData(List<InviteEntity> listData) {
if (listData != null && listData.size() != 0) {
mEntityList.addAll(listData);
notifyItemRangeInserted(mEntityList.size() - listData.size() + TOP_ITEM_COUNT, listData.size());
}
}
@Override
@ -71,7 +70,9 @@ public class QuestionsInviteAdapter extends ListAdapter {
case ItemViewType.ITEM_TOP:
break;
case ItemViewType.ITEM_FOOTER:
((FooterViewHolder) holder).initFooterViewHolder(mIsNetworkError, mIsOver, R.string.ask_loadover_hint);
FooterViewHolder footerViewHolder = (FooterViewHolder) holder;
footerViewHolder.initItemPadding();
footerViewHolder.initFooterViewHolder(mIsNetworkError, mIsOver, R.string.ask_loadover_hint);
break;
case ItemViewType.ITEM_BODY:
((QuestionsInviteViewHolder) holder).initQuestionsInviteViewHolder(mContext, mEntityList.get(position - 1));
@ -81,10 +82,10 @@ public class QuestionsInviteAdapter extends ListAdapter {
@Override
public int getItemCount() {
return mEntityList != null ? mEntityList.size() + TOP_ITEM_COUNT + FOOTER_ITEM_COUNT : TOP_ITEM_COUNT + FOOTER_ITEM_COUNT;
return mEntityList.size() != 0 ? mEntityList.size() + TOP_ITEM_COUNT + FOOTER_ITEM_COUNT : 0;
}
public void inviteSucces(String id) {
public void inviteSuccess(String id) {
for (InviteEntity inviteEntity : mEntityList) {
if (id.equals(inviteEntity.getId())) {
MeEntity me = inviteEntity.getMe();

View File

@ -128,7 +128,7 @@ public class QuestionsInviteFragment extends ListFragment {
@Override
public void onResponse(ResponseBody response) {
super.onResponse(response);
mAdapter.inviteSucces(expertId);
mAdapter.inviteSuccess(expertId);
toast(R.string.invite_success);
}

View File

@ -23,12 +23,10 @@ import java.util.List;
* Created by khy on 8/12/17.
*/
public class AskSearchAdapter extends ListAdapter {
public class AskSearchAdapter extends ListAdapter<AskSearchEntity> {
private OnListClickListener mListClickListener;
private List<AskSearchEntity> mEntityList;
private String mSearchKey;
public AskSearchAdapter(Context context, OnListClickListener listClickListener) {
@ -37,11 +35,11 @@ public class AskSearchAdapter extends ListAdapter {
}
@Override
protected <T> void provideListData(List<T> listData) {
protected void provideListData(List<AskSearchEntity> listData) {
if (listData == null) {
mEntityList = null;
mEntityList.clear();
} else {
mEntityList = replayKeyword((List<AskSearchEntity>) listData);
mEntityList.addAll(replayKeyword(listData));
}
notifyDataSetChanged();
}

View File

@ -2,6 +2,7 @@ package com.gh.gamecenter.ask.viewmodel;
import android.arch.lifecycle.MutableLiveData;
import android.content.Context;
import android.text.TextUtils;
import com.gh.common.util.AskErrorResponseUtils;
import com.gh.common.util.GsonUtils;
@ -34,7 +35,7 @@ public class AskQuestionsNewRepository {
private Context mContext;
private List<AskTagGroupsEntity> mCacheTagGroupsList = new ArrayList<>();
private MutableLiveData<List<AskTagGroupsEntity>> mObserableTagGroupsList = new MutableLiveData<>();
private MutableLiveData<List<AskTagGroupsEntity>> mObservableTagGroupsList = new MutableLiveData<>();
public static AskQuestionsNewRepository getInstance(Context context) {
if (mInstance == null) {
@ -61,18 +62,18 @@ public class AskQuestionsNewRepository {
@Override
public void onResponse(List<AskTagGroupsEntity> response) {
super.onResponse(response);
loadDefaultTagGroups(false, response);
loadDefaultTagGroups(response);
}
@Override
public void onApiFailure(ApiResponse<List<AskTagGroupsEntity>> e) {
super.onApiFailure(e);
loadDefaultTagGroups(false, null);
loadDefaultTagGroups(null);
}
});
}
private void loadDefaultTagGroups(boolean isReset, List<AskTagGroupsEntity> userEntity) {
private void loadDefaultTagGroups(List<AskTagGroupsEntity> userEntity) {
RetrofitManager.getInstance(mContext).getApi()
.getDefaultAskTagGroups(UserManager.getInstance().getCommunityId(mContext))
.subscribeOn(Schedulers.io())
@ -87,9 +88,7 @@ public class AskQuestionsNewRepository {
tagGroupsEntity.setName("全部");
response.add(0, tagGroupsEntity);
if (isReset) {
postUserAskTagGroups(response);
} else if (userEntity != null) {
if (userEntity != null) {
for (AskTagGroupsEntity userGroupsEntity : userEntity) {
for (AskTagGroupsEntity defaultGroupsEntity : response) {
if (userGroupsEntity.getId().equals(defaultGroupsEntity.getId())) {
@ -105,7 +104,7 @@ public class AskQuestionsNewRepository {
@Override
public void onApiFailure(ApiResponse<List<AskTagGroupsEntity>> e) {
super.onApiFailure(e);
if (!isReset) cacheAndNotifyTagGroups(null);
cacheAndNotifyTagGroups(null);
}
});
}
@ -141,17 +140,31 @@ public class AskQuestionsNewRepository {
}
private void deleteUserAskTagGroups() {
RetrofitManager.getInstance(mContext)
.getApi()
.deleteUserAskTagGroups(UserManager.getInstance().getCommunityId(mContext))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Response<ResponseBody>() {
@Override
public void onResponse(ResponseBody response) {
super.onResponse(response);
}
});
}
public void cacheAndNotifyTagGroups(List<AskTagGroupsEntity> tagGroups) {
mCacheTagGroupsList = tagGroups;
mObserableTagGroupsList.postValue(tagGroups);
mObservableTagGroupsList.postValue(tagGroups);
}
public MutableLiveData<List<AskTagGroupsEntity>> getTagGroupsObserable() {
public MutableLiveData<List<AskTagGroupsEntity>> getTagGroupsObservable() {
if (mCacheTagGroupsList != null) {
mObserableTagGroupsList.postValue(mCacheTagGroupsList);
mObservableTagGroupsList.postValue(mCacheTagGroupsList);
}
return mObserableTagGroupsList;
return mObservableTagGroupsList;
}
public void repty() {
@ -159,10 +172,15 @@ public class AskQuestionsNewRepository {
}
public void reset() {
loadDefaultTagGroups(true, null);
loadDefaultTagGroups(null);
if (!TextUtils.isEmpty(UserManager.getInstance().getToken())) {
deleteUserAskTagGroups();
}
}
public void update(List<AskTagGroupsEntity> entity) {
postUserAskTagGroups(entity);
if (!TextUtils.isEmpty(UserManager.getInstance().getToken())) {
postUserAskTagGroups(entity);
}
}
}

View File

@ -20,20 +20,20 @@ public class AskQuestionsNewViewModel extends AndroidViewModel {
private AskQuestionsNewRepository mRepository;
private MutableLiveData<List<AskTagGroupsEntity>> mObserableTagGroupsList = new MutableLiveData<>();
private MutableLiveData<List<AskTagGroupsEntity>> mObservableTagGroupsList = new MutableLiveData<>();
public AskQuestionsNewViewModel(@NonNull Application application, AskQuestionsNewRepository repository) {
super(application);
mRepository = repository;
mObserableTagGroupsList = repository.getTagGroupsObserable();
mObservableTagGroupsList = repository.getTagGroupsObservable();
}
public void cacheAndNotifyTagGroups(List<AskTagGroupsEntity> tagGroups) {
mRepository.cacheAndNotifyTagGroups(tagGroups);
}
public LiveData<List<AskTagGroupsEntity>> getTagGroupsObserable() {
return mObserableTagGroupsList;
public LiveData<List<AskTagGroupsEntity>> getTagGroupsObservable() {
return mObservableTagGroupsList;
}
public void reset() {

View File

@ -4,17 +4,20 @@ import android.content.Context;
import com.lightgame.adapter.BaseRecyclerAdapter;
import java.util.ArrayList;
import java.util.List;
/**
* Created by khy on 10/11/17.
*/
public abstract class ListAdapter extends BaseRecyclerAdapter {
public abstract class ListAdapter<DataType> extends BaseRecyclerAdapter {
public static final int FOOTER_ITEM_COUNT = 1;
public static final int TOP_ITEM_COUNT = 1;
protected final List<DataType> mEntityList = new ArrayList<>();
protected boolean mIsOver;
protected boolean mIsNetworkError;
@ -23,7 +26,12 @@ public abstract class ListAdapter extends BaseRecyclerAdapter {
super(context);
}
protected abstract <T> void provideListData(List<T> listData);
protected void provideListData(List<DataType> listData) {
if (listData != null && listData.size() != 0) {
mEntityList.addAll(listData);
notifyItemRangeInserted(mEntityList.size() - listData.size(), listData.size());
}
}
public boolean isNetworkError() {
return mIsNetworkError;
@ -40,11 +48,18 @@ public abstract class ListAdapter extends BaseRecyclerAdapter {
case RETRY:
mIsNetworkError = false;
break;
case NORMAL:
mIsNetworkError = false;
mIsOver = false;
return;
case REFRESH:
mEntityList.clear();
notifyDataSetChanged();
return;
}
if (getItemCount() > 0) {
if (getItemCount() > 0)
notifyItemChanged(getItemCount() - 1);
}
}
}

View File

@ -108,17 +108,20 @@ public abstract class ListFragment<T> extends NormalFragment implements
@Override
public void onRefresh() {
mReuseNoConn.setVisibility(View.GONE);
mReuseNoData.setVisibility(View.GONE);
mListLoading.setVisibility(View.VISIBLE);
mListRv.setVisibility(View.GONE);
mListRefresh.setRefreshing(false);
mBaseHandler.postDelayed(() -> {
mReuseNoConn.setVisibility(View.GONE);
mReuseNoData.setVisibility(View.GONE);
mListLoading.setVisibility(View.VISIBLE);
mListRv.setVisibility(View.GONE);
mListRefresh.setRefreshing(false);
mListViewModel.load(LoadType.REFRESH);
mListViewModel.load(LoadType.REFRESH);
}, 500);
}
@Override
public void onChanged(@Nullable List<T> ts) {
assert ts != null;
provideListAdapter().provideListData(ts);
}
@ -150,6 +153,11 @@ public abstract class ListFragment<T> extends NormalFragment implements
mListRefresh.setRefreshing(false);
}
@Override
public void onLoadNormal() {
provideListAdapter().loadChange(LoadStatus.NORMAL);
}
@Override
public void onLoadMoreError() {
provideListAdapter().loadChange(LoadStatus.ERROR);
@ -159,4 +167,9 @@ public abstract class ListFragment<T> extends NormalFragment implements
public void onLoadOver() {
provideListAdapter().loadChange(LoadStatus.OVER);
}
@Override
public void onLoadRefresh() {
provideListAdapter().loadChange(LoadStatus.REFRESH);
}
}

View File

@ -8,7 +8,6 @@ import com.lightgame.config.CommonDebug;
import com.lightgame.utils.Utils;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import okhttp3.ResponseBody;
@ -26,7 +25,6 @@ public class ListRepository<T> {
public final static int PAGE_SIZE = 20;
private MutableLiveData<List<T>> mListLiveData;
private List<T> mCacheListData;
private OnListLoadListener mLoadListener;
@ -40,7 +38,6 @@ public class ListRepository<T> {
public ListRepository(OnListLoadListener loadListener) {
mListOffset = 0;
mLoadListener = loadListener;
mCacheListData = new ArrayList<>();
mListLiveData = new MutableLiveData<>();
}
@ -61,9 +58,11 @@ public class ListRepository<T> {
if (size == 0 && mListOffset == 0) {
mLoadListener.onLoadEmpty();
} else {
if (size < PAGE_SIZE) {
if (size == 0 || mListOffset == 0 && size < PAGE_SIZE) {
mIsOver = true;
mLoadListener.onLoadOver();
} else {
mLoadListener.onLoadNormal();
}
mListOffset += size;
mLoadListener.onLoadDone();
@ -101,13 +100,13 @@ public class ListRepository<T> {
mListOffset = 0;
mIsOver = false;
mIsNetworkError = false;
mCacheListData.clear();
}
protected void load(LoadType loadType) {
if (loadType == null) loadType = LoadType.NORMAL;
switch (loadType) {
case REFRESH:
mLoadListener.onLoadRefresh();
resetOffset();
break;
case RETRY:
@ -123,14 +122,10 @@ public class ListRepository<T> {
private void cacheAndNotifyListData(List<T> listData) {
mCacheListData.addAll(listData);
mListLiveData.postValue(mCacheListData);
mListLiveData.postValue(listData);
}
public LiveData<List<T>> getListLiveData() {
if (mCacheListData != null) {
mListLiveData.postValue(mCacheListData);
}
return mListLiveData;
}
}

View File

@ -12,5 +12,7 @@ public enum LoadStatus {
REFRESH,
RETRY
RETRY,
NORMAL
}

View File

@ -10,6 +10,10 @@ import rx.Observable;
public interface OnListLoadListener {
void onLoadRefresh();
void onLoadNormal();
void onLoadDone();
void onLoadError();
@ -22,6 +26,7 @@ public interface OnListLoadListener {
/**
* 列表数据接口 先放这里吧
*
* @param <T>
* @return
*/

View File

@ -13,29 +13,19 @@ import com.gh.gamecenter.ask.entity.AnswerEntity;
import com.gh.gamecenter.ask.questionsdetail.AnswerViewHolder;
import com.gh.gamecenter.baselist.ListAdapter;
import java.util.List;
/**
* Created by khy on 22/12/17.
*/
public class AnswerAdapter extends ListAdapter {
public class AnswerAdapter extends ListAdapter<AnswerEntity> {
private OnListClickListener mListClickListener;
private List<AnswerEntity> mEntityList;
public AnswerAdapter(Context context, OnListClickListener listClickListener) {
super(context);
mListClickListener = listClickListener;
}
@Override
protected <T> void provideListData(List<T> listData) {
mEntityList = (List<AnswerEntity>) listData;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if (position == getItemCount() - 1) return ItemViewType.ITEM_FOOTER;

View File

@ -116,7 +116,7 @@ public class ArticleAdapter extends BaseRecyclerAdapter {
mListener.loadError();
}
} else {
Utils.toast(mContext, mContext.getString(R.string.loading_failed_hint));
Utils.toast(mContext, R.string.loading_failed_hint);
isNetworkError = true;
notifyItemChanged(getItemCount() - 1);
}

View File

@ -97,7 +97,7 @@ public class ToolsAdapter extends BaseRecyclerAdapter {
mListener.loadError();
}
} else {
Utils.toast(mContext, mContext.getString(R.string.loading_failed_hint));
Utils.toast(mContext, R.string.loading_failed_hint);
isNetworkError = true;
notifyItemChanged(getItemCount() - 1);
}

View File

@ -11,8 +11,10 @@ import android.widget.RelativeLayout;
import com.facebook.drawee.view.SimpleDraweeView;
import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.CheckLoginUtils;
import com.gh.common.util.DataCollectionUtils;
import com.gh.common.util.ImageUtils;
import com.gh.gamecenter.CleanApkActivity;
import com.gh.gamecenter.DataUtils;
import com.gh.gamecenter.DownloadManagerActivity;
import com.gh.gamecenter.LibaoActivity;
import com.gh.gamecenter.NormalActivity;
@ -29,7 +31,6 @@ import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import butterknife.BindView;
import butterknife.OnClick;
import rx.Observable;
@ -101,6 +102,9 @@ public class DiscoverFragment extends BaseFragment {
switch (view.getId()) {
case R.id.discover_game_trends:
// TODO 其实把 removeDot 操作放到里面请求到数据以后会更合理准确
DataUtils.onEvent(getActivity(), "发现", "游戏动态");
DataCollectionUtils.uploadClick(getActivity(), "游戏动态", "发现");
if (mDiscoverGameUnread.getVisibility() == View.VISIBLE) {
mDiscoverGameUnread.setVisibility(View.GONE);
EventBus.getDefault().post(new EBReuse(HIDE_DISCOVERY_DOT));
@ -109,16 +113,27 @@ public class DiscoverFragment extends BaseFragment {
NormalActivity.startFragment(getContext(), ConcernFragment.class);
break;
case R.id.discover_info:
DataUtils.onEvent(getActivity(), "发现", "资讯中心");
DataCollectionUtils.uploadClick(getActivity(), "资讯中心", "发现");
NormalActivity.startFragment(getContext(), InfoWrapperFragment.class);
break;
case R.id.discover_libao:
DataUtils.onEvent(getActivity(), "发现", "礼包中心");
DataCollectionUtils.uploadClick(getActivity(), "礼包中心", "发现");
Intent intent = LibaoActivity.getIntent(getContext(), "(发现:礼包)");
startActivity(intent);
break;
case R.id.discover_kuaichuan:
DataUtils.onEvent(getActivity(), "发现", "免流量传送");
DataCollectionUtils.uploadClick(getActivity(), "免流量传送", "发现");
startActivity(DownloadManagerActivity.getDownloadMangerIntent(getContext(), 2, "(发现:免流量传送)"));
break;
case R.id.discover_apk_cleaner:
DataUtils.onEvent(getActivity(), "发现", "安装包清理");
DataCollectionUtils.uploadClick(getActivity(), "安装包清理", "发现");
startActivity(CleanApkActivity.getIntent(getContext()));
break;
}

View File

@ -182,10 +182,6 @@ public class GameDownloadFragment extends BaseFragment implements View.OnClickLi
super.initView(view);
String path = getActivity().getIntent().getStringExtra(EntranceUtils.KEY_PATH);
url = getActivity().getIntent().getStringExtra(EntranceUtils.KEY_URL);
if (getActivity().getIntent().getBundleExtra(EntranceUtils.KEY_DATA) != null) {
path = getActivity().getIntent().getBundleExtra(EntranceUtils.KEY_DATA).getString(EntranceUtils.KEY_PATH);
url = getActivity().getIntent().getBundleExtra(EntranceUtils.KEY_DATA).getString(EntranceUtils.KEY_URL);
}
isScroll = false;

View File

@ -291,7 +291,7 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter<ViewHolder> {
showPluginDialog(downloadEntity.getPath());
} else {
if (FileUtils.isEmptyFile(path)) {
Utils.toast(mContext, mContext.getString(R.string.install_failure_hint));
Utils.toast(mContext, R.string.install_failure_hint);
removeDownload(downloadEntity);
} else {
if (downloadEntity.getName().contains("光环助手")) {
@ -431,13 +431,13 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter<ViewHolder> {
public void startAll(DownloadHeadViewHolder viewHolder) {
for (DownloadEntity downloadEntity : downloadingList) {
// DownloadManager.getInstance(mContext).put(downloadEntity.getUrl(),
// System.currentTimeMillis());
// Message msg = Message.obtain();
// msg.what = DownloadConfig.CONTINUE_DOWNLOAD_TASK;
// msg.obj = downloadEntity.getUrl();
// DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000);
DownloadManager.getInstance(mContext).add(downloadEntity);
DownloadManager.getInstance(mContext).put(downloadEntity.getUrl(),
System.currentTimeMillis());
Message msg = Message.obtain();
msg.what = DownloadConfig.CONTINUE_DOWNLOAD_TASK;
msg.obj = downloadEntity.getUrl();
DownloadManager.getInstance(mContext).sendMessageDelayed(msg, 1000);
// DownloadManager.getInstance(mContext).add(downloadEntity);
statusMap.put(downloadEntity.getUrl(), "downloading");
}
@ -485,7 +485,7 @@ class GameDownloadFragmentAdapter extends BaseRecyclerAdapter<ViewHolder> {
}
if (FileUtils.isEmptyFile(path)) {
Utils.toast(mContext, mContext.getString(R.string.install_failure_hint));
Utils.toast(mContext, R.string.install_failure_hint);
} else {
mContext.startActivity(PackageUtils.getUninstallIntent(mContext, path));
}

View File

@ -54,10 +54,6 @@ public class GameUpdateFragment extends BaseFragment {
Intent intent = getActivity().getIntent();
String packageName = intent.getStringExtra("packageName");
boolean isUpdate = intent.getBooleanExtra("isPushIntent", false);
if (intent.getBundleExtra(EntranceUtils.KEY_DATA) != null) {
packageName = intent.getBundleExtra(EntranceUtils.KEY_DATA).getString("packageName");
isUpdate = intent.getBundleExtra(EntranceUtils.KEY_DATA).getBoolean("isPushIntent", false);
}
String entrance = intent.getStringExtra(EntranceUtils.KEY_ENTRANCE);
mGameUpdateLoading = (LinearLayout) view.findViewById(R.id.gameupdate_ll_loading);

View File

@ -11,7 +11,6 @@ import com.facebook.drawee.backends.pipeline.Fresco;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
import com.gh.base.OnRequestCallBackListener;
import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.ApkActiveUtils;
import com.gh.common.util.DownloadItemUtils;
import com.gh.download.DownloadManager;
import com.gh.gamecenter.MainActivity;
@ -80,7 +79,7 @@ public class GameFragment extends BaseFragment implements SwipeRefreshLayout.OnR
for (Integer locationPlugin : locationPluginList) {
gameEntity = adapter.getPluginList().get(locationPlugin);
RecyclerView.Adapter<? extends RecyclerView.ViewHolder> pluginAdapter = adapter.getPluginAdapter();
if (gameEntity != null && pluginAdapter != null ) {
if (gameEntity != null && pluginAdapter != null) {
DownloadItemUtils.processDate(getActivity(), gameEntity,
downloadEntity, pluginAdapter, locationPlugin);
}
@ -224,48 +223,46 @@ public class GameFragment extends BaseFragment implements SwipeRefreshLayout.OnR
if (locationList != null) {
GameEntity gameEntity;
for (int location : locationList) {
gameEntity = adapter.getGameEntityByLocation(location);
if (gameEntity != null) {
ApkActiveUtils.filterHideApk(gameEntity);
if (gameEntity.isPluggable()) {
// 插件化列表
if ("安装".equals(busFour.getType()) || "卸载".equals(busFour.getType())) {
List<GameEntity> list = adapter.getPluginList();
for (int i = 0; i < list.size(); i++) {
final GameEntity entity = list.get(i);
final ArrayList<ApkEntity> apkEntities = entity.getApk();
final ApkEntity normalApkEntity = apkEntities.get(0);
if (location == 1) {
List<GameEntity> pluginList = adapter.getPluginList();
for (int i = 0; i < pluginList.size(); i++) {
final GameEntity entity = pluginList.get(i);
final ArrayList<ApkEntity> apkEntities = entity.getApk();
final ApkEntity pluginApkEntity = apkEntities.get(0);
if (normalApkEntity.getPackageName().equals(busFour.getPackageName())) {
// 安装完成 插件化区域消失
list.remove(i);
if (list.isEmpty()) {
adapter.initItemCount();
adapter.notifyItemRemoved(1);
} else {
adapter.initPlugin();
adapter.initLocationMap();
adapter.notifyItemChanged(1);
}
// }
break;
if (pluginApkEntity.getPackageName().equals(busFour.getPackageName())) {
if ("卸载".equals(busFour.getType()) && // 插件化过程中 卸载卸载原包后 更新下载按钮
DownloadManager.getInstance(getContext()).getDownloadEntityByUrl(pluginApkEntity.getUrl()) != null) {
adapter.notifyItemChanged(1);
} else {
// 安装完成 插件化区域消失
pluginList.remove(i);
if (pluginList.isEmpty()) {
adapter.initItemCount();
adapter.notifyItemRemoved(1);
} else {
adapter.initPlugin();
adapter.initLocationMap();
adapter.notifyItemChanged(1);
}
}
break;
}
} else {
if ("安装".equals(busFour.getType())) {
for (ApkEntity apkEntity : gameEntity.getApk()) {
if (apkEntity.getPackageName().equals(busFour.getPackageName())) {
if (gameEntity.getEntryMap() != null) {
gameEntity.getEntryMap().remove(apkEntity.getPlatform());
}
adapter.notifyItemChanged(location);
break;
}
} else {
gameEntity = adapter.getGameEntityByLocation(location);
if ("安装".equals(busFour.getType())) {
for (ApkEntity apkEntity : gameEntity.getApk()) {
if (apkEntity.getPackageName().equals(busFour.getPackageName())) {
if (gameEntity.getEntryMap() != null) {
gameEntity.getEntryMap().remove(apkEntity.getPlatform());
}
adapter.notifyItemChanged(location);
break;
}
} else if ("卸载".equals(busFour.getType())) {
adapter.notifyItemChanged(location);
}
} else if ("卸载".equals(busFour.getType())) {
adapter.notifyItemChanged(location);
}
}
}

View File

@ -1,5 +1,6 @@
package com.gh.gamecenter.fragment;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.Observer;
import android.arch.lifecycle.ViewModelProviders;
import android.content.Intent;
@ -28,6 +29,7 @@ import com.gh.gamecenter.login.LoginTag;
import com.gh.gamecenter.login.UserViewModel;
import com.gh.gamecenter.normal.NormalFragment;
import com.gh.gamecenter.personal.PersonalFragment;
import com.halo.assistant.HaloApp;
import com.tencent.connect.common.Constants;
import org.greenrobot.eventbus.EventBus;
@ -104,8 +106,7 @@ public class LoginFragment extends NormalFragment implements LoginUtils.onCaptch
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setNavigationTitle("登录光环助手");
final UserViewModel.Factory factory = new UserViewModel.Factory(getActivity().getApplication());
final UserViewModel.Factory factory = new UserViewModel.Factory(HaloApp.getInstance().getApplication());
mUserViewModel = ViewModelProviders.of(this, factory).get(UserViewModel.class);
mUserViewModel.getLoginObsUserinfo().observe(this, this);
@ -205,7 +206,7 @@ public class LoginFragment extends NormalFragment implements LoginUtils.onCaptch
if (response != null && response.getData() != null && mLoginDialog != null) {
EventBus.getDefault().post(new EBReuse(PersonalFragment.LOGIN_TAG));
getActivity().finish();
if (getActivity() != null) getActivity().finish();
}
}
@ -217,8 +218,10 @@ public class LoginFragment extends NormalFragment implements LoginUtils.onCaptch
private void login(JSONObject content, LoginTag loginTag) {
mLoginDialog = WaitingDialogFragment.newInstance(getString(R.string.logging));
mLoginDialog.show(getChildFragmentManager(), null);
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) {
mLoginDialog = WaitingDialogFragment.newInstance(getString(R.string.logging));
mLoginDialog.show(getChildFragmentManager(), null);
}
mUserViewModel.login(content, loginTag);
}

View File

@ -65,7 +65,7 @@ import rx.schedulers.Schedulers;
* Created by CsHeng on 19/12/2017.
* \游戏详情适配器
*/
public class GameDetailFragment extends NormalFragment implements View.OnTouchListener {
public class GameDetailFragment extends NormalFragment {
public static final int INDEX_DYNAMIC = 0;
@ -157,10 +157,6 @@ public class GameDetailFragment extends NormalFragment implements View.OnTouchLi
mGameId = args.getString(EntranceUtils.KEY_GAMEID);
mEntrance = args.getString(EntranceUtils.KEY_ENTRANCE);
Bundle data = args.getBundle(EntranceUtils.KEY_DATA);
if (data != null) {
mGameId = data.getString(EntranceUtils.KEY_GAMEID);
}
if (mGameId == null) {
mGameEntity = args.getParcelable(GameEntity.TAG);
@ -417,16 +413,15 @@ public class GameDetailFragment extends NormalFragment implements View.OnTouchLi
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
public void onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mIsTouchScreen = true;
return true;
break;
case MotionEvent.ACTION_UP:
mIsTouchScreen = false;
return true;
break;
}
return false;
}
@Subscribe(threadMode = ThreadMode.MAIN)

View File

@ -62,7 +62,7 @@ public class GameDetailKaiFuAdapter extends BaseRecyclerAdapter<ViewHolder> {
private String suggestTime;
private String gameName;
private List<CalendarEntity> curDayData;
private List<CalendarEntity> mCurDayData;
private List<KaiFuServerEntity> mServerList;
private GameDetailKaiFuViewHolder viewHolder;
@ -84,7 +84,7 @@ public class GameDetailKaiFuAdapter extends BaseRecyclerAdapter<ViewHolder> {
isNextMonth = false;
isExistCurServer = false;
curDayData = new ArrayList<>();
mCurDayData = new ArrayList<>();
checkExistCurSerer();
@ -211,6 +211,7 @@ public class GameDetailKaiFuAdapter extends BaseRecyclerAdapter<ViewHolder> {
@Override
public void call(Subscriber<? super Integer> subscriber) {
List<CalendarEntity> curDayData = new ArrayList<>();
// 获取当前 年-月
long curDate = System.currentTimeMillis();
SimpleDateFormat formatYear = new SimpleDateFormat("yyyy", Locale.CHINA);
@ -224,7 +225,7 @@ public class GameDetailKaiFuAdapter extends BaseRecyclerAdapter<ViewHolder> {
isNextMonth = true;
if (curMonth == 12) {
curMonth = 1;
curYear ++;
curYear++;
} else {
curMonth = curMonth + 1;
}
@ -242,7 +243,6 @@ public class GameDetailKaiFuAdapter extends BaseRecyclerAdapter<ViewHolder> {
if (curWeek == 1) {
curWeek = 8;
}
curDayData.clear();
int day = 0;
for (int i = 1; i <= 49; i++) {
CalendarEntity entity = new CalendarEntity();
@ -281,6 +281,8 @@ public class GameDetailKaiFuAdapter extends BaseRecyclerAdapter<ViewHolder> {
}
}
mCurDayData.clear();
mCurDayData.addAll(curDayData);
subscriber.onNext(0);
subscriber.onCompleted();
}
@ -295,7 +297,7 @@ public class GameDetailKaiFuAdapter extends BaseRecyclerAdapter<ViewHolder> {
notifyDataSetChanged();
} else if (response == 1) {
ViewGroup.LayoutParams params = viewHolder.kaifuRl.getLayoutParams();
params.height = ((curDayData.size() / 7) - 1) * DisplayUtils.dip2px(mContext, 46)
params.height = ((mCurDayData.size() / 7) - 1) * DisplayUtils.dip2px(mContext, 46)
+ DisplayUtils.dip2px(mContext, 26);
viewHolder.kaifuRl.setLayoutParams(params);
}
@ -350,7 +352,7 @@ public class GameDetailKaiFuAdapter extends BaseRecyclerAdapter<ViewHolder> {
((WeekViewHolder) holder).week.setText(week[position]);
} else if (holder instanceof GameDetailCalenderViewHolder) {
GameDetailCalenderViewHolder viewHolder = (GameDetailCalenderViewHolder) holder;
final CalendarEntity entity = curDayData.get(position - 6);
final CalendarEntity entity = mCurDayData.get(position - 6);
if (entity.getDay() != -1) {
int day = entity.getDay();
if (day == curDay && !isNextMonth) {
@ -377,6 +379,7 @@ public class GameDetailKaiFuAdapter extends BaseRecyclerAdapter<ViewHolder> {
for (int i = 0; i < server.size(); i++) {
KaiFuServerEntity serverEntity = server.get(i);
String type = serverEntity.getType();
if (type == null) break;
switch (type) {
case "删档内测":
serverEntity.setOrder(2);
@ -470,7 +473,7 @@ public class GameDetailKaiFuAdapter extends BaseRecyclerAdapter<ViewHolder> {
@Override
public int getItemCount() {
return curDayData.size();
return mCurDayData.size();
}
private void initKaifuDetail(CalendarEntity entity) {

View File

@ -155,7 +155,7 @@ class ConcernAdapter extends BaseRecyclerAdapter<ViewHolder> {
listener.loadError();
}
} else {
Utils.toast(mContext, mContext.getString(R.string.loading_failed_hint));
Utils.toast(mContext, R.string.loading_failed_hint);
isNetworkError = true;
notifyItemChanged(getItemCount() - 1);
}

View File

@ -231,7 +231,7 @@ public class ConcernFragment extends NormalFragment implements SwipeRefreshLayou
List<Observable<GameEntity>> sequences = new ArrayList<>();
for (int i = 0, size = installedList.size() + 1; i < size; i++) {
if (i == size - 1) {
sequences.add(RetrofitManager.getInstance(getContext()).getApi().getGameDigest(getContext().getString(R.string.ghzs_id)));// 光环助手ID
sequences.add(RetrofitManager.getInstance(getContext()).getApi().getGameDigest(getString(R.string.ghzs_id)));// 光环助手ID
} else {
sequences.add(RetrofitManager.getInstance(getContext()).getApi().getGameDigest(installedList.get(i).getId()));
}

View File

@ -280,7 +280,7 @@ class InfoAdapter extends BaseRecyclerAdapter<ViewHolder> {
listener.loadError();
}
} else {
Utils.toast(mContext, mContext.getString(R.string.loading_failed_hint));
Utils.toast(mContext, R.string.loading_failed_hint);
isNetworkError = true;
notifyItemChanged(getItemCount() - 1);
}

View File

@ -89,7 +89,7 @@ public class InfoWrapperFragment extends BaseFragment_ViewPager_Checkable {
super.onViewCreated(view, savedInstanceState);
setNavigationTitle(getString(R.string.info_center_title));
mLayoutParams.leftMargin = RandomUtils.getInt(mWidth * (mCheckedIndex + 0.25));
mLayoutParams.leftMargin = RandomUtils.getInt(mWidth * (mCheckedIndex + 0.25f));
mNewsSlidebarLine.setLayoutParams(mLayoutParams);
view.postDelayed(new Runnable() {
@ -104,7 +104,7 @@ public class InfoWrapperFragment extends BaseFragment_ViewPager_Checkable {
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
if (positionOffset != 0) {
mLayoutParams.leftMargin = RandomUtils.getInt(mWidth * (position + positionOffset + 0.25));
mLayoutParams.leftMargin = RandomUtils.getInt(mWidth * (position + positionOffset + 0.25f));
mNewsSlidebarLine.setLayoutParams(mLayoutParams);
}
}

View File

@ -271,7 +271,7 @@ class OriginalAdapter extends BaseRecyclerAdapter<ViewHolder> {
listener.loadError();
}
} else {
Utils.toast(mContext, mContext.getString(R.string.loading_failed_hint));
Utils.toast(mContext, R.string.loading_failed_hint);
isNetworkError = true;
notifyItemChanged(getItemCount() - 1);
}

View File

@ -24,7 +24,6 @@ import com.gh.gamecenter.entity.KaiFuServerEntity;
import com.gh.gamecenter.eventbus.EBDownloadStatus;
import com.lightgame.download.DataWatcher;
import com.lightgame.download.DownloadEntity;
import com.lightgame.utils.Utils;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
@ -257,7 +256,7 @@ public class KaiFuVpFragment extends BaseFragment {
@Override
public void loadError() {
super.loadError();
Utils.toast(getContext(), getContext().getString(R.string.loading_failed_hint));
toast(R.string.loading_failed_hint);
mNoConn.setVisibility(View.VISIBLE);
mNoneData.setVisibility(View.GONE);
mLoading.setVisibility(View.GONE);

View File

@ -32,29 +32,6 @@ public class KaiFuWrapperFragment extends NormalFragment {
return R.layout.fragment_kaifu_wrapper;
}
// @Override
// public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
// super.onCreateOptionsMenu(menu, inflater);
// inflater.inflate(R.menu.menu_button, menu);
// mResetMenuItem = menu.findItem(R.id.menu_button);
// mResetMenuItem.setTitle(R.string.menu_text_reset);
// mResetMenuItem.setVisible(false);
// final TextView textView = mResetMenuItem.getActionView().findViewById(R.id.tv_menu_button);
// textView.setText(R.string.menu_text_reset);
// textView.setOnClickListener(this);
// }
// @Override
// protected boolean handleOnClick(View view) {
// switch (view.getId()) {
// case R.id.tv_menu_button:
// resetFragment();
// return true;
//
// }
// return super.handleOnClick(view);
// }
@Override
public void onMenuItemClick(MenuItem menuItem) {
super.onMenuItemClick(menuItem);
@ -71,10 +48,12 @@ public class KaiFuWrapperFragment extends NormalFragment {
initMenu(R.menu.menu_button);
mResetMenuItem = getItemMenu(R.id.menu_button);
mResetMenuItem.setTitle(R.string.menu_text_reset);
mResetMenuItem.setVisible(false);
final TextView textView = mResetMenuItem.getActionView().findViewById(R.id.tv_menu_button);
textView.setText(R.string.menu_text_reset);
if (mResetMenuItem != null) {
mResetMenuItem.setTitle(R.string.menu_text_reset);
mResetMenuItem.setVisible(false);
final TextView textView = mResetMenuItem.getActionView().findViewById(R.id.tv_menu_button);
textView.setText(R.string.menu_text_reset);
}
FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();
@ -91,7 +70,7 @@ public class KaiFuWrapperFragment extends NormalFragment {
FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();
fragmentTransaction.remove(mGameKaiFuFragment);
fragmentTransaction.show(mKaiFuFragment);
fragmentTransaction.commit();
fragmentTransaction.commitAllowingStateLoss();
}
@ -112,7 +91,7 @@ public class KaiFuWrapperFragment extends NormalFragment {
mGameKaiFuFragment.setArguments(args);
fragmentTransaction.add(R.id.layout_fragment_content, mGameKaiFuFragment, KaiFuFragment.class.getSimpleName());
fragmentTransaction.commit();
fragmentTransaction.commitAllowingStateLoss();
} else if (ALL_GAME_KAIFU.equals(reset.getControl())) {
resetFragment();
}

View File

@ -1,7 +1,6 @@
package com.gh.gamecenter.libao;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.AppBarLayout;
import android.support.v4.app.Fragment;
@ -31,7 +30,7 @@ import butterknife.OnClick;
* Created by khy on 5/09/17.
*/
public class Libao1Fragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener, View.OnTouchListener {
public class Libao1Fragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener{
@BindView(R.id.libao_appbar)
AppBarLayout mAppBar;
@ -92,12 +91,6 @@ public class Libao1Fragment extends BaseFragment implements SwipeRefreshLayout.O
});
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
view.setOnTouchListener(this);
}
private void changeFragment() {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
hideFragments(transaction);
@ -107,7 +100,7 @@ public class Libao1Fragment extends BaseFragment implements SwipeRefreshLayout.O
mNewFragment = alterFragment(transaction, LibaoNewFragment.class);
}
transaction.commit();
transaction.commitAllowingStateLoss();
}
private <T extends Fragment> T alterFragment(FragmentTransaction transaction, Class<T> cls) {
@ -184,8 +177,7 @@ public class Libao1Fragment extends BaseFragment implements SwipeRefreshLayout.O
}
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
public void onTouchEvent( MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
mIsTouchScreen = true;
@ -194,7 +186,6 @@ public class Libao1Fragment extends BaseFragment implements SwipeRefreshLayout.O
mIsTouchScreen = false;
break;
}
return true;
}
}

View File

@ -7,6 +7,7 @@ import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.LinearLayout;
@ -96,7 +97,7 @@ public class LibaoWrapperFragment extends NormalFragment implements View.OnClick
getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
mWidth = outMetrics.widthPixels / 3;
mLayoutParams = new LinearLayout.LayoutParams(mWidth / 2, DisplayUtils.dip2px(getContext(), 2));
mLayoutParams.leftMargin = RandomUtils.getInt(mWidth * (mCurrentItem + 0.25));
mLayoutParams.leftMargin = RandomUtils.getInt(mWidth * (mCurrentItem + 0.25f));
mLibaoLine.setLayoutParams(mLayoutParams);
mLibaoTopLl.postDelayed(new Runnable() {
@ -122,7 +123,7 @@ public class LibaoWrapperFragment extends NormalFragment implements View.OnClick
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (positionOffset != 0) {
mLayoutParams.leftMargin = RandomUtils.getInt(mWidth * (position + positionOffset + 0.25));
mLayoutParams.leftMargin = RandomUtils.getInt(mWidth * (position + positionOffset + 0.25f));
mLibaoLine.setLayoutParams(mLayoutParams);
} else {
if (mCurrentItem != mLibaoVp.getCurrentItem()) {
@ -175,4 +176,8 @@ public class LibaoWrapperFragment extends NormalFragment implements View.OnClick
}
}
@Override
public void onTouchEvent(MotionEvent event) {
if (mLibao1Fragment != null) mLibao1Fragment.onTouchEvent(event);
}
}

View File

@ -223,7 +223,7 @@ class UserRepository {
if (LoginTag.qq.equals(loginTag)) {
GetLoginDataUtils.getInstance(mContext).QQLogout();
}
Utils.toast(mContext, mContext.getString(R.string.login_failure_hint));
Utils.toast(mContext, R.string.login_failure_hint);
if (CommonDebug.IS_DEBUG) {
ResponseBody responseBody = httpException.response().errorBody();
@ -411,7 +411,7 @@ class UserRepository {
public void onResponse(UserInfoEntity response) {
super.onResponse(response);
if (loginTag != null) {
Utils.toast(mContext, mContext.getString(R.string.login_success));
Utils.toast(mContext, R.string.login_success);
}
response.setId(mCachedId);
userInfoHandle(response, false);

View File

@ -255,6 +255,8 @@ public class KeFuFragmentAdapter extends BaseRecyclerAdapter<ViewHolder> {
viewHolder.kefuName.setText(name);
}
ImageUtils.Companion.display(viewHolder.kefuIcon, serviceEntity.getIcon());
} else {
ImageUtils.Companion.display(viewHolder.kefuIcon, R.drawable.message_kefu_icon);
}
CommentUtils.setCommentTime(viewHolder.time, keFuEntity.getTime());

View File

@ -17,7 +17,6 @@ import android.widget.ScrollView;
import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import com.gh.base.fragment.BaseFragment;
import com.gh.common.constant.Config;
import com.gh.common.util.CheckLoginUtils;
import com.gh.common.util.DialogUtils;
@ -37,6 +36,7 @@ import com.gh.gamecenter.entity.ViewsEntity;
import com.gh.gamecenter.eventbus.EBReuse;
import com.gh.gamecenter.manager.CommentManager;
import com.gh.gamecenter.manager.UserManager;
import com.gh.gamecenter.normal.NormalFragment;
import com.gh.gamecenter.retrofit.OkHttpCache;
import com.gh.gamecenter.retrofit.Response;
import com.gh.gamecenter.retrofit.RetrofitManager;
@ -67,7 +67,7 @@ import static com.gh.gamecenter.personal.PersonalFragment.LOGIN_TAG;
* Created by CsHeng on 18/12/2017.
* 消息详情界面--评论详情--对话详情
*/
public class MessageDetailFragment extends BaseFragment implements OnCommentCallBackListener, OnBackPressedListener {
public class MessageDetailFragment extends NormalFragment implements OnCommentCallBackListener, OnBackPressedListener {
public static final int REQUEST_UPDATE_COMMENT = 9; // 刷新文章web页面评论数
@ -124,6 +124,7 @@ public class MessageDetailFragment extends BaseFragment implements OnCommentCall
mMessageDetailEt.setText("");
String newText = s.toString().substring(0, 140);
mMessageDetailEt.setText(newText);
mMessageDetailEt.setSelection(mMessageDetailEt.getText().length());
Utils.toast(getContext(), "评论不能多于140字");
}
} else {
@ -420,20 +421,20 @@ public class MessageDetailFragment extends BaseFragment implements OnCommentCall
String detail = errorJson.getString("detail");
switch (detail) {
case "too frequent":
toast(getString(R.string.comment_failed_toofrequent));
toast(R.string.comment_failed_toofrequent);
break;
case "user blocked":
toast(getString(R.string.comment_failed_userblocked));
toast(R.string.comment_failed_userblocked);
break;
case "article blocked":
toast(getString(R.string.comment_failed_articleblocked));
toast(R.string.comment_failed_articleblocked);
setSoftInput(false);
break;
case "illegal":
toast(getString(R.string.comment_failed_illegal));
toast(R.string.comment_failed_illegal);
break;
default:
toast(getString(R.string.comment_failed_unknown));
toast(R.string.comment_failed_unknown);
break;
}
} catch (Exception ex) {
@ -444,7 +445,7 @@ public class MessageDetailFragment extends BaseFragment implements OnCommentCall
}
}
toast(getString(R.string.post_failure_hint));
toast(R.string.post_failure_hint);
}
});
}
@ -511,8 +512,10 @@ public class MessageDetailFragment extends BaseFragment implements OnCommentCall
&& commentNum != adapter.getConcernEntity().getCommentnum()) {
Intent intent = new Intent();
intent.putExtra("commentNum", adapter.getConcernEntity().getCommentnum());
getActivity().setResult(Activity.RESULT_OK, intent);
getActivity().finish();
if (getActivity() != null) {
getActivity().setResult(Activity.RESULT_OK, intent);
getActivity().finish();
}
return true;
}
return false;

View File

@ -12,31 +12,21 @@ import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
import com.gh.gamecenter.baselist.ListAdapter;
import com.gh.gamecenter.entity.MessageEntity;
import java.util.List;
/**
* Created by khy on 2017/4/10.
* 消息-评论适配器
*/
public class MessageFragmentAdapter extends ListAdapter {
public class MessageFragmentAdapter extends ListAdapter<MessageEntity> {
private OnListClickListener mClickListener;
private List<MessageEntity> mEntityList;
public MessageFragmentAdapter(Context context, OnListClickListener clickListener) {
super(context);
mClickListener = clickListener;
}
@Override
protected <T> void provideListData(List<T> listData) {
mEntityList = (List<MessageEntity>) listData;
notifyDataSetChanged();
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;

View File

@ -1,6 +1,7 @@
package com.gh.gamecenter.message;
import android.text.Html;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
@ -103,6 +104,8 @@ public class MessageItemVieHolder extends BaseRecyclerViewHolder {
ImageUtils.Companion.display(mUserIcon, entity.getUserEntity().getIcon());
mUserName.setText(entity.getUserEntity().getName());
mTitle.setText(title);
mTitle.setEllipsize(TextUtils.TruncateAt.END);
mContent.setEllipsize(TextUtils.TruncateAt.END);
NewsUtils.setNewsDetailTime(mTime, entity.getTime());
if (content == null) {

View File

@ -357,13 +357,13 @@ public class NewsDetailAdapter extends BaseRecyclerAdapter<ViewHolder> {
concern.setBackgroundResource(R.drawable.border_red_bg);
concern.setTextColor(ContextCompat.getColor(mContext, R.color.red));
Utils.toast(mContext, mContext.getString(R.string.concern_success));
Utils.toast(mContext, R.string.concern_success);
viewHolder.gamedetailConcern.setEnabled(true);
}
@Override
public void onError() {
Utils.toast(mContext, mContext.getString(R.string.concern_failure));
Utils.toast(mContext, R.string.concern_failure);
viewHolder.gamedetailConcern.setEnabled(true);
}
});
@ -399,7 +399,7 @@ public class NewsDetailAdapter extends BaseRecyclerAdapter<ViewHolder> {
@Override
public void onError() {
Utils.toast(mContext, mContext.getString(R.string.cancel_concern_failure));
Utils.toast(mContext, R.string.cancel_concern_failure);
viewHolder.gamedetailConcern.setEnabled(true);
}
});

View File

@ -4,8 +4,10 @@ import android.os.Bundle;
import android.support.annotation.IdRes;
import android.support.annotation.MenuRes;
import android.support.annotation.Nullable;
import android.support.annotation.StringRes;
import android.text.TextUtils;
import android.view.MenuItem;
import android.view.MotionEvent;
import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.EntranceUtils;
@ -29,6 +31,12 @@ public abstract class NormalFragment extends BaseFragment {
}
}
protected void setNavigationTitle(@StringRes int title) {
if (getActivity() instanceof ToolbarController) {
((ToolbarController) getActivity()).setNavigationTitle(title);
}
}
protected void initMenu(@MenuRes int res) {
if (getActivity() instanceof ToolbarController) {
((ToolbarController) getActivity()).setToolbarMenu(res);
@ -42,6 +50,10 @@ public abstract class NormalFragment extends BaseFragment {
return null;
}
public void onTouchEvent(MotionEvent event) {
}
public void onMenuItemClick(MenuItem menuItem) {
}

View File

@ -13,7 +13,7 @@ public interface ToolbarController {
void setNavigationTitle(@StringRes int res);
void setNavigationTitle(CharSequence res);
void setNavigationTitle(String res);
void setToolbarMenu(@MenuRes int res);

View File

@ -1,5 +1,6 @@
package com.gh.gamecenter.personal;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.Observer;
import android.arch.lifecycle.ViewModelProviders;
import android.content.Context;
@ -250,7 +251,7 @@ public class PersonalFragment extends BaseFragment implements Observer<ApiRespon
startActivity(SettingActivity.getIntent(getContext(), "(我的光环)"));
break;
case R.id.personal_ask:
CheckLoginUtils.checkLogin(getContext(), ()-> {
CheckLoginUtils.checkLogin(getContext(), () -> {
Bundle bundle = new Bundle();
bundle.putString(EntranceUtils.KEY_ENTRANCE, "(我的光环)+(我的问答)");
NormalActivity.startFragment(getContext(), MyAskWrapperFragment.class, bundle);
@ -345,8 +346,10 @@ public class PersonalFragment extends BaseFragment implements Observer<ApiRespon
@Override
public void OnLoginData(JSONObject content, LoginTag loginTag) {
Utils.log("======获取第三方登录信息成功" + content.toString() + "===" + loginTag.name());
mLoginDialog = WaitingDialogFragment.newInstance(getString(R.string.logging));
mLoginDialog.show(getChildFragmentManager(), null);
if (getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED)) {
mLoginDialog = WaitingDialogFragment.newInstance(getString(R.string.logging));
mLoginDialog.show(getChildFragmentManager(), null);
}
mUserViewModel.login(content, loginTag);
}

View File

@ -10,8 +10,6 @@ import com.gh.common.util.ClassUtils;
import com.gh.common.util.RunningUtils;
import com.gh.gamecenter.SplashScreenActivity;
import static com.gh.common.util.EntranceUtils.KEY_DATA;
/**
* Created by khy on 2016/9/1.
* 光环插件跳转助手
@ -32,7 +30,7 @@ public class ActivitySkipReceiver extends BroadcastReceiver {
if (clazz != null) {
Intent intent1 = new Intent(context, clazz);
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent1.putExtra(KEY_DATA, bundle);
intent1.putExtras(bundle);
context.startActivity(intent1);
}
}

Some files were not shown because too many files have changed in this diff Show More