From 5c834ec09cf48bf56ca199aac443b7a39d0a5ca7 Mon Sep 17 00:00:00 2001 From: kehaoyuan Date: Mon, 19 Jun 2017 11:05:16 +0800 Subject: [PATCH] =?UTF-8?q?gradle=E5=BC=95=E5=85=A5weiboSDK,=E6=8E=A5?= =?UTF-8?q?=E5=85=A5=E7=AC=AC=E4=B8=89=E7=82=B9=E7=99=BB=E5=BD=95=EF=BC=88?= =?UTF-8?q?QQ=E3=80=81=E5=BE=AE=E4=BF=A1=E3=80=81=E5=BE=AE=E5=8D=9A?= =?UTF-8?q?=EF=BC=88=E6=9C=AA=E5=AE=8C=E5=96=84=EF=BC=89=EF=BC=89,=20?= =?UTF-8?q?=E6=88=91=E7=9A=84=E5=85=89=E7=8E=AF=E6=94=B9=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 4 +- app/proguard-rules.txt | 2 + app/src/main/AndroidManifest.xml | 9 + .../java/com/gh/common/util/LoginUtils.java | 179 ++++++ .../java/com/gh/common/util/ShareUtils.java | 5 + .../com/gh/gamecenter/InstallActivity.java | 157 +++++ .../com/gh/gamecenter/WeiBoShareActivity.java | 78 +-- .../adapter/InstallFragmentAdapter.java | 577 ++++++++++++++++++ .../gamecenter/personal/InstallFragment.java | 2 +- .../gamecenter/personal/PersonalFragment.java | 446 +++----------- .../drawable-hdpi/personal_answer_icon.png | Bin 0 -> 3175 bytes .../personal_collection_icon.png | Bin 0 -> 3676 bytes .../drawable-hdpi/personal_drafts_icon.png | Bin 0 -> 2506 bytes .../res/drawable-hdpi/personal_game_icon.png | Bin 0 -> 2548 bytes .../res/drawable-hdpi/personal_libao_icon.png | Bin 0 -> 2064 bytes .../drawable-hdpi/personal_message_icon.png | Bin 0 -> 3183 bytes .../drawable-hdpi/personal_question_icon.png | Bin 0 -> 2890 bytes .../drawable-hdpi/personal_setting_icon.png | Bin 0 -> 2404 bytes .../res/drawable-hdpi/personal_share_icon.png | Bin 0 -> 2366 bytes .../res/drawable-hdpi/personal_sign_icon.png | Bin 0 -> 2821 bytes .../personal_suggestion_icon.png | Bin 0 -> 1679 bytes .../main/res/drawable-hdpi/qq_login_icon.png | Bin 0 -> 3901 bytes .../res/drawable-hdpi/wechat_login_icon.png | Bin 0 -> 3939 bytes .../res/drawable-hdpi/weibo_login_icon.png | Bin 0 -> 3016 bytes app/src/main/res/layout/activity_install.xml | 20 + app/src/main/res/layout/fragment_personal.xml | 516 ++++++++++++---- app/src/main/res/values/colors.xml | 3 +- app/src/main/res/values/strings.xml | 6 +- app/src/main/res/values/styles_themes.xml | 4 +- build.gradle | 9 + dependencies.gradle | 2 + 31 files changed, 1459 insertions(+), 560 deletions(-) create mode 100644 app/src/main/java/com/gh/common/util/LoginUtils.java create mode 100644 app/src/main/java/com/gh/gamecenter/InstallActivity.java create mode 100644 app/src/main/java/com/gh/gamecenter/adapter/InstallFragmentAdapter.java create mode 100644 app/src/main/res/drawable-hdpi/personal_answer_icon.png create mode 100644 app/src/main/res/drawable-hdpi/personal_collection_icon.png create mode 100644 app/src/main/res/drawable-hdpi/personal_drafts_icon.png create mode 100644 app/src/main/res/drawable-hdpi/personal_game_icon.png create mode 100644 app/src/main/res/drawable-hdpi/personal_libao_icon.png create mode 100644 app/src/main/res/drawable-hdpi/personal_message_icon.png create mode 100644 app/src/main/res/drawable-hdpi/personal_question_icon.png create mode 100644 app/src/main/res/drawable-hdpi/personal_setting_icon.png create mode 100644 app/src/main/res/drawable-hdpi/personal_share_icon.png create mode 100644 app/src/main/res/drawable-hdpi/personal_sign_icon.png create mode 100644 app/src/main/res/drawable-hdpi/personal_suggestion_icon.png create mode 100644 app/src/main/res/drawable-hdpi/qq_login_icon.png create mode 100644 app/src/main/res/drawable-hdpi/wechat_login_icon.png create mode 100644 app/src/main/res/drawable-hdpi/weibo_login_icon.png create mode 100644 app/src/main/res/layout/activity_install.xml diff --git a/app/build.gradle b/app/build.gradle index 6a35015967..91342150d2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -216,6 +216,8 @@ dependencies { // provided libs.tinker_anno // compile libs.tinker_lib + compile libs.weiboSDK + compile libs.eventbus apt libs.eventbusApt // compile project(':libraries:EventBus') @@ -225,7 +227,7 @@ dependencies { compile project(':libraries:TalkingData') compile project(':libraries:UmengPush') compile project(':libraries:WechatShare') - compile project(':libraries:WeiboShare') +// compile project(':libraries:WeiboShare') compile project(':libraries:iosched') } diff --git a/app/proguard-rules.txt b/app/proguard-rules.txt index 52ed580b8f..ea91562c9a 100644 --- a/app/proguard-rules.txt +++ b/app/proguard-rules.txt @@ -117,6 +117,8 @@ (java.lang.Throwable); } +# weiboSdk +-keep class com.sina.weibo.sdk.** { *; } # app models -keep class com.gh.common.view.** {*;} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 15574ac7b5..9eb9383c9f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -179,6 +179,15 @@ android:name = "com.gh.gamecenter.ToolBoxActivity" android:screenOrientation = "portrait" android:windowSoftInputMode="stateHidden"/> + + + + + diff --git a/app/src/main/java/com/gh/common/util/LoginUtils.java b/app/src/main/java/com/gh/common/util/LoginUtils.java new file mode 100644 index 0000000000..0ffe64eea0 --- /dev/null +++ b/app/src/main/java/com/gh/common/util/LoginUtils.java @@ -0,0 +1,179 @@ +package com.gh.common.util; + +import android.app.Activity; +import android.content.Context; +import android.widget.Toast; + +import com.gh.common.constant.Config; +import com.sina.weibo.sdk.WbSdk; +import com.sina.weibo.sdk.auth.AuthInfo; +import com.sina.weibo.sdk.auth.Oauth2AccessToken; +import com.sina.weibo.sdk.auth.WbConnectErrorMessage; +import com.sina.weibo.sdk.auth.sso.SsoHandler; +import com.tencent.connect.UserInfo; +import com.tencent.connect.auth.QQToken; +import com.tencent.mm.sdk.openapi.IWXAPI; +import com.tencent.mm.sdk.openapi.SendAuth; +import com.tencent.mm.sdk.openapi.WXAPIFactory; +import com.tencent.tauth.IUiListener; +import com.tencent.tauth.Tencent; +import com.tencent.tauth.UiError; + +import org.json.JSONObject; + +import java.text.SimpleDateFormat; + +/** + * Created by khy on 14/06/17. + */ + +public class LoginUtils { + + private static LoginUtils instance; + + private Context mContext; + + private Tencent mTencent; + private IWXAPI mIWXAPI; + private SsoHandler mSsoHandler; + + private Oauth2AccessToken mAccessToken; // wb + public static final String SCOPE = + "email,direct_messages_read,direct_messages_write," + + "friendships_groups_read,friendships_groups_write,statuses_to_me_read," + + "follow_app_official_microblog," + "invitation_write"; + + private LoginUtils(Context context) { + mTencent = Tencent.createInstance(Config.TENCENT_APPID, context); //初始化QQ分享 + mIWXAPI = WXAPIFactory.createWXAPI(context, Config.WECHAT_APPID, true); //初始化微信分享 + WbSdk.install(context,new AuthInfo(context, Config.WEIBO_APPKEY, "http://www.sina.com", SCOPE)); + mSsoHandler = new SsoHandler((Activity) context); + mContext = context; + Utils.log("LoginUtils", "initLogin"); + } + + public static LoginUtils getInstance(Activity context) { + if (instance == null) { + instance = new LoginUtils(context); + } + return instance; + } + + //QQ登录回调处理 + public IUiListener QqLoginListener = new IUiListener() { + @Override + public void onComplete(Object o) { + Toast.makeText(mContext, "登录成功", Toast.LENGTH_SHORT).show(); + if (o instanceof JSONObject) { + String s = o.toString(); + Utils.log("LoginUtils", "QQLoginComplete::" + s); + } + + QQToken qqToken = mTencent.getQQToken(); + UserInfo userInfo = new UserInfo(mContext, qqToken); + userInfo.getUserInfo(new IUiListener() { + @Override + public void onComplete(Object o) { + Utils.log("LoginUtils", "QQUserInfo::" + o.toString()); + } + + @Override + public void onError(UiError uiError) { + Utils.log("LoginUtils", "QQUserInfoUiError::" + uiError.errorDetail + "==" + uiError.errorMessage + "==" + uiError.errorCode); + } + + @Override + public void onCancel() { + Utils.log("LoginUtils", "QQUserInfoonCancel"); + } + }); + } + + @Override + public void onError(UiError uiError) { + Toast.makeText(mContext, "登录失败", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onCancel() { + Toast.makeText(mContext, "登录取消", Toast.LENGTH_SHORT).show(); + } + }; + + + public void QQLogin() { + if (mTencent != null && !mTencent.isSessionValid()) { + mTencent.login((Activity) mContext, "all", QqLoginListener); + } + } + + public void QQLogout() { + if (mTencent != null) { + mTencent.logout(mContext); + } + } + + public void WCLogin() { + if (mIWXAPI != null) { + boolean register = mIWXAPI.registerApp("wx3ffd0785fad18396"); + + SendAuth.Req req = new SendAuth.Req(); + req.scope = "all"; + req.state = "光环助手"; + boolean b = mIWXAPI.sendReq(req); + Utils.log("LoginUtils", "微信注册状态::" + register + "\n 发送状态::" + b); + } + } + + public void WeiBoLogin() { + mSsoHandler.authorizeClientSso(new SelfWbAuthListener()); + } + + private class SelfWbAuthListener implements com.sina.weibo.sdk.auth.WbAuthListener{ + @Override + public void onSuccess(final Oauth2AccessToken token) { + ((Activity) mContext).runOnUiThread(new Runnable() { + @Override + public void run() { + mAccessToken = token; + if (mAccessToken.isSessionValid()) { + // 显示 Token + updateTokenView(false); + // 保存 Token 到 SharedPreferences + AccessTokenKeeper.writeAccessToken(mContext, mAccessToken); + Toast.makeText(mContext, "授权成功", Toast.LENGTH_SHORT).show(); + } + } + }); + } + + @Override + public void cancel() { + Toast.makeText(mContext, "取消授权", Toast.LENGTH_LONG).show(); + } + + @Override + public void onFailure(WbConnectErrorMessage errorMessage) { + Toast.makeText(mContext, errorMessage.getErrorMessage(), Toast.LENGTH_LONG).show(); + } + } + + /** + * 显示当前 Token 信息。 + * + * @param hasExisted 配置文件中是否已存在 token 信息并且合法 + */ + private void updateTokenView(boolean hasExisted) { + String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format( + new java.util.Date(mAccessToken.getExpiresTime())); + String format = "Token:%1$s \\n有效期:%2$s"; + String token = String.format(format, mAccessToken.getToken(), date); + Utils.log("LoginUtils::WB_TOKEN::" + token); + String message = String.format(format, mAccessToken.getToken(), date); + if (hasExisted) { + message = "Token 仍在有效期内,无需再次登录。" + "\n" + message; + } + Utils.log("LoginUtils::WB_MESSAGE::" + message); + } + +} diff --git a/app/src/main/java/com/gh/common/util/ShareUtils.java b/app/src/main/java/com/gh/common/util/ShareUtils.java index 48f89f4856..66774bf607 100644 --- a/app/src/main/java/com/gh/common/util/ShareUtils.java +++ b/app/src/main/java/com/gh/common/util/ShareUtils.java @@ -31,6 +31,8 @@ import com.facebook.imagepipeline.image.CloseableImage; import com.gh.common.constant.Config; import com.gh.gamecenter.R; import com.gh.gamecenter.WeiBoShareActivity; +import com.sina.weibo.sdk.WbSdk; +import com.sina.weibo.sdk.auth.AuthInfo; import com.tencent.connect.share.QQShare; import com.tencent.connect.share.QzoneShare; import com.tencent.mm.sdk.openapi.IWXAPI; @@ -47,6 +49,8 @@ import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.List; +import static com.gh.common.util.LoginUtils.SCOPE; + /** * Created by khy on 2016/9/4. */ @@ -99,6 +103,7 @@ public class ShareUtils { private ShareUtils(Context context) { mTencent = Tencent.createInstance(Config.TENCENT_APPID, context); //初始化QQ分享 mIWXAPI = WXAPIFactory.createWXAPI(context, Config.WECHAT_APPID); //初始化微信分享 + WbSdk.install(context,new AuthInfo(context, Config.WEIBO_APPKEY, "http://www.sina.com", SCOPE)); mContext = context; } diff --git a/app/src/main/java/com/gh/gamecenter/InstallActivity.java b/app/src/main/java/com/gh/gamecenter/InstallActivity.java new file mode 100644 index 0000000000..f8cb192ad2 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/InstallActivity.java @@ -0,0 +1,157 @@ +package com.gh.gamecenter; + +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.gh.base.BaseActivity; +import com.gh.common.util.DialogUtils; +import com.gh.common.util.DownloadItemUtils; +import com.gh.common.view.SwipeLayout; +import com.gh.common.view.VerticalItemDecoration; +import com.gh.download.DataWatcher; +import com.gh.download.DownloadEntity; +import com.gh.download.DownloadManager; +import com.gh.gamecenter.adapter.InstallFragmentAdapter; +import com.gh.gamecenter.entity.GameEntity; +import com.gh.gamecenter.eventbus.EBPackage; +import com.gh.gamecenter.eventbus.EBReuse; +import com.gh.gamecenter.eventbus.EBSkip; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.greenrobot.eventbus.ThreadMode; + +import java.util.ArrayList; + +import butterknife.BindView; + +/** + * Created by khy on 15/06/17. + */ + +public class InstallActivity extends BaseActivity implements InstallFragmentAdapter.onSmoothLayoutListener { + + @BindView(R.id.fm_install_rv_show) + RecyclerView fm_install_rv_show; + @BindView(R.id.reuse_nodata_skip) + LinearLayout reuse_nodata_skip; + @BindView(R.id.reuse_nodata_skip_tv_hint) + TextView reuse_nodata_skip_tv_hint; + @BindView(R.id.reuse_nodata_skip_tv_btn) + TextView reuse_nodata_skip_tv_btn; + + private InstallFragmentAdapter mAdapter; + + private DataWatcher dataWatcher = new DataWatcher() { + @Override + public void onDataChanged(DownloadEntity downloadEntity) { + ArrayList locationList = mAdapter.getLocationMap().get(downloadEntity.getPackageName()); + if (locationList != null && locationList.size() != 0) { + GameEntity gameEntity; + for (int location : locationList) { + gameEntity = mAdapter.getGameList().get(location); + if (gameEntity != null) { + DownloadItemUtils.processDate(InstallActivity.this, gameEntity, + downloadEntity, mAdapter, location); + } + } + } + } + }; + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + + // 分享成绩单 + if (requestCode == 0x170 || requestCode == 0x180) { + DialogUtils.showKuaiChuanResult(this, new Handler(), requestCode, "shareKc.jpg"); + + } + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + init("我的游戏"); + reuse_nodata_skip.setVisibility(View.GONE); + reuse_nodata_skip_tv_hint.setText("暂无游戏"); + reuse_nodata_skip_tv_btn.setText("查看精品推荐"); + reuse_nodata_skip_tv_btn.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + EventBus.getDefault().post(new EBSkip(MainActivity.EB_SKIP_GAMEFRAGMENT, 1)); + } + }); + + fm_install_rv_show.setHasFixedSize(true); + fm_install_rv_show.setLayoutManager(new LinearLayoutManager(this)); + mAdapter = new InstallFragmentAdapter(this); + fm_install_rv_show.addItemDecoration(new VerticalItemDecoration(this, 1, true)); + fm_install_rv_show.setAdapter(mAdapter); + } + + @Override + protected int getLayoutId() { + return R.layout.activity_install; + } + + @Override + public void onResume() { +// if (isEverpause) { +// for (GameEntity entity : mAdapter.getGameList()) { +// entity.setEntryMap(DownloadManager.getInstance(this).getEntryMap(entity.getName())); +// } +// mAdapter.notifyDataSetChanged(); +// } + super.onResume(); + DownloadManager.getInstance(this).addObserver(dataWatcher); + } + + @Override + public void onPause() { + super.onPause(); + DownloadManager.getInstance(this).removeObserver(dataWatcher); + } + + @Override + public void loadEmpty() { + fm_install_rv_show.setVisibility(View.GONE); + reuse_nodata_skip.setVisibility(View.VISIBLE); + } + + // 打开下载按钮事件 + @Subscribe(threadMode = ThreadMode.MAIN) + public void onEventMainThread(EBReuse reuse) { + if (("Refresh".equals(reuse.getType()) || "PlatformChanged".equals(reuse.getType())) + && mAdapter != null) { + mAdapter.notifyItemRangeChanged(0, mAdapter.getItemCount()); + } + } + + //安装、卸载事件 + @Subscribe(threadMode = ThreadMode.MAIN) + public void onEventMainThread(EBPackage busFour) { + if ("安装".equals(busFour.getType()) || "卸载".equals(busFour.getType())) { + fm_install_rv_show.setVisibility(View.VISIBLE); + reuse_nodata_skip.setVisibility(View.GONE); + mAdapter = new InstallFragmentAdapter(this); + fm_install_rv_show.setAdapter(mAdapter); + } + } + + // 滑动item + @Override + public void onSmooth() { + View childAt = fm_install_rv_show.getChildAt(fm_install_rv_show.getChildCount() - 2); + SwipeLayout swipeLayout = (SwipeLayout) childAt.findViewById(R.id.swipeLayout); + if (swipeLayout == null) return; + swipeLayout.openAndColse(); +// swipeLayout.close(); + } +} diff --git a/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java b/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java index 0a9561928f..cdf49c470f 100644 --- a/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java +++ b/app/src/main/java/com/gh/gamecenter/WeiBoShareActivity.java @@ -12,8 +12,6 @@ import com.facebook.common.references.CloseableReference; import com.facebook.datasource.DataSource; import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber; import com.facebook.imagepipeline.image.CloseableImage; -import com.gh.common.constant.Config; -import com.gh.common.util.AccessTokenKeeper; import com.gh.common.util.ImageUtils; import com.gh.common.util.ShareUtils; import com.gh.common.util.Utils; @@ -21,16 +19,8 @@ import com.sina.weibo.sdk.api.ImageObject; import com.sina.weibo.sdk.api.TextObject; import com.sina.weibo.sdk.api.WebpageObject; import com.sina.weibo.sdk.api.WeiboMultiMessage; -import com.sina.weibo.sdk.api.share.BaseResponse; -import com.sina.weibo.sdk.api.share.IWeiboHandler; -import com.sina.weibo.sdk.api.share.IWeiboShareAPI; -import com.sina.weibo.sdk.api.share.SendMultiMessageToWeiboRequest; -import com.sina.weibo.sdk.api.share.WeiboShareSDK; -import com.sina.weibo.sdk.auth.AuthInfo; -import com.sina.weibo.sdk.auth.Oauth2AccessToken; -import com.sina.weibo.sdk.auth.WeiboAuthListener; -import com.sina.weibo.sdk.constant.WBConstants; -import com.sina.weibo.sdk.exception.WeiboException; +import com.sina.weibo.sdk.share.WbShareCallback; +import com.sina.weibo.sdk.share.WbShareHandler; import com.sina.weibo.sdk.utils.Utility; /** @@ -38,7 +28,7 @@ import com.sina.weibo.sdk.utils.Utility; *

* 微博分享 */ -public class WeiBoShareActivity extends Activity implements IWeiboHandler.Response { +public class WeiBoShareActivity extends Activity implements WbShareCallback { private String shareUrl; private String shareGameName; @@ -49,7 +39,7 @@ public class WeiBoShareActivity extends Activity implements IWeiboHandler.Respon private boolean ispopupWindow; private boolean isToolsBox; - private IWeiboShareAPI mWeiboShareAPI; + private WbShareHandler mWeiboShareAPI; @NonNull public static Intent getWeiboshareIntent(Context context, String shareNewsTitle, String shareIcon, @@ -83,7 +73,7 @@ public class WeiBoShareActivity extends Activity implements IWeiboHandler.Respon Utils.toast(this, "分享跳转中..."); - mWeiboShareAPI = WeiboShareSDK.createWeiboAPI(this, Config.WEIBO_APPKEY); + mWeiboShareAPI = new WbShareHandler(this); mWeiboShareAPI.registerApp(); weiboLoadBitMap(shareIcon); @@ -92,7 +82,7 @@ public class WeiBoShareActivity extends Activity implements IWeiboHandler.Respon protected void onNewIntent(Intent intent) { super.onNewIntent(intent); - mWeiboShareAPI.handleWeiboResponse(intent, this); //当前应用唤起微博分享后,返回当前应用 + mWeiboShareAPI.doResultIntent(intent, this); //当前应用唤起微博分享后,返回当前应用 } private void weiboLoadBitMap(String iconUrl) { @@ -135,36 +125,8 @@ public class WeiBoShareActivity extends Activity implements IWeiboHandler.Respon weiboMessage.textObject = textObject; weiboMessage.imageObject = imageObject; weiboMessage.mediaObject = webObject; - SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest(); - request.transaction = String.valueOf(System.currentTimeMillis()); - request.multiMessage = weiboMessage; - AuthInfo authInfo = new AuthInfo(WeiBoShareActivity.this, Config.WEIBO_APPKEY, "https://api.weibo.com/oauth2/default.html", ""); - Oauth2AccessToken accessToken = AccessTokenKeeper.readAccessToken(WeiBoShareActivity.this); - String token = ""; - if (accessToken != null) { - token = accessToken.getToken(); - } - - mWeiboShareAPI.sendRequest(WeiBoShareActivity.this, request, authInfo, token, new WeiboAuthListener() { - @Override - public void onComplete(Bundle bundle) { -// Oauth2AccessToken newToken = Oauth2AccessToken.parseAccessToken(bundle); -// AccessTokenKeeper.writeAccessToken(getApplicationContext(), newToken); -// Toast.makeText(getApplicationContext(), "onAuthorizeComplete token = " + newToken.getToken(), 0).show(); - } - - // 微博web端 - @Override - public void onWeiboException(WeiboException arg0) { - - } - - @Override - public void onCancel() { - - } - }); + mWeiboShareAPI.shareMessage(weiboMessage, false); } @Override @@ -175,18 +137,20 @@ public class WeiBoShareActivity extends Activity implements IWeiboHandler.Respon } @Override - public void onResponse(BaseResponse baseResponse) { - switch (baseResponse.errCode) { - case WBConstants.ErrorCode.ERR_OK: - Toast.makeText(this, "分享成功", Toast.LENGTH_SHORT).show(); - break; - case WBConstants.ErrorCode.ERR_CANCEL: - Toast.makeText(this, "分享取消", Toast.LENGTH_SHORT).show(); - break; - case WBConstants.ErrorCode.ERR_FAIL: - Toast.makeText(this, "分享失败", Toast.LENGTH_SHORT).show(); - break; - } + public void onWbShareSuccess() { + Toast.makeText(this, "分享成功", Toast.LENGTH_SHORT).show(); + finish(); + } + + @Override + public void onWbShareCancel() { + Toast.makeText(this, "分享取消", Toast.LENGTH_SHORT).show(); + finish(); + } + + @Override + public void onWbShareFail() { + Toast.makeText(this, "分享失败", Toast.LENGTH_SHORT).show(); finish(); } } diff --git a/app/src/main/java/com/gh/gamecenter/adapter/InstallFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/InstallFragmentAdapter.java new file mode 100644 index 0000000000..4c126c4976 --- /dev/null +++ b/app/src/main/java/com/gh/gamecenter/adapter/InstallFragmentAdapter.java @@ -0,0 +1,577 @@ +package com.gh.gamecenter.adapter; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.graphics.drawable.Drawable; +import android.support.v4.util.ArrayMap; +import android.support.v7.widget.RecyclerView.ViewHolder; +import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import com.gh.base.AppController; +import com.gh.common.constant.Config; +import com.gh.common.constant.ItemViewType; +import com.gh.common.util.ApkActiveUtils; +import com.gh.common.util.BitmapUtils; +import com.gh.common.util.DataCollectionUtils; +import com.gh.common.util.DataUtils; +import com.gh.common.util.DisplayUtils; +import com.gh.common.util.DownloadItemUtils; +import com.gh.common.util.GameViewUtils; +import com.gh.common.util.ImageUtils; +import com.gh.common.util.PackageUtils; +import com.gh.common.util.PlatformUtils; +import com.gh.common.util.TrafficUtils; +import com.gh.common.view.SwipeLayout; +import com.gh.download.DownloadManager; +import com.gh.gamecenter.ChooseReceiverActivity; +import com.gh.gamecenter.GameDetailActivity; +import com.gh.gamecenter.InstallActivity; +import com.gh.gamecenter.R; +import com.gh.gamecenter.adapter.viewholder.FooterViewHolder; +import com.gh.gamecenter.adapter.viewholder.GameNormalSwipeViewHolder; +import com.gh.gamecenter.db.info.ConcernInfo; +import com.gh.gamecenter.entity.ApkEntity; +import com.gh.gamecenter.entity.GameEntity; +import com.gh.gamecenter.entity.GameInfoEntity; +import com.gh.gamecenter.kuaichuan.FileInfo; +import com.gh.gamecenter.manager.ConcernManager; +import com.gh.gamecenter.manager.GameManager; +import com.gh.gamecenter.retrofit.Response; +import com.gh.gamecenter.retrofit.RetrofitManager; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import rx.Observable; +import rx.android.schedulers.AndroidSchedulers; +import rx.schedulers.Schedulers; + +/** + * Created by LGT on 2016/8/12. + * 已安装界面-数据适配器 + */ +public class InstallFragmentAdapter extends BaseRecyclerAdapter { + + private InstallActivity mActivity; + + private onSmoothLayoutListener smoothListener; + + private SharedPreferences sp; + + private ArrayList gameList; + private ArrayList sortedList; + + //下载用到的map + private ArrayMap> locationMap; + + private boolean isRemove; + + private boolean isSwipe; + + private boolean showUserNameHint; + + private boolean showKcHint; + + private int maxWidth; + + + public InstallFragmentAdapter(InstallActivity activity) { + super(activity); + this.mActivity = activity; + smoothListener = activity; + + gameList = new ArrayList<>(); + sortedList = new ArrayList<>(); + + locationMap = new ArrayMap<>(); + + isRemove = false; + isSwipe = false; + + sp = mContext.getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE); + showUserNameHint = sp.getBoolean("showUserNameHint", true); + showKcHint = sp.getBoolean("showKcHint", true); + + maxWidth = mContext.getResources().getDisplayMetrics().widthPixels; + + ConcernManager cManager = new ConcernManager(mContext); + List runnableGame = cManager.getInstalledGame(); + if (runnableGame.isEmpty()) { + mActivity.loadEmpty(); + } else { + AppController.MAIN_EXECUTOR.execute(new Runnable() { + @Override + public void run() { + init(); + List ids = new ArrayList<>(); + for (GameInfoEntity info : sortedList) { + if (!ids.contains(info.getId())) { + ids.add(info.getId()); + } + } + initGameList(ids); + } + }); + } + } + + //初始化 + private void init() { + + ArrayList list = new ArrayList<>(); + ArrayList signatureList = new ArrayList<>(); // 是我们签名的游戏 + ArrayList unsignatureList = new ArrayList<>(); // 不是我们签名的游戏 + ArrayList noopenList = new ArrayList<>(); // 未打开过的游戏 + ArrayList oftenuseList = new ArrayList<>(); // 已经打开过的游戏 + + TrafficUtils trafficUtils = TrafficUtils.getInstance(mContext); + + ConcernManager cManager = new ConcernManager(mContext); + List runnableGame = cManager.getInstalledGame(); + for (ConcernInfo concernEntity : runnableGame) { + for (Map.Entry entry : concernEntity.getPackageNames().entrySet()) { + if (entry.getValue()) { + GameInfoEntity info = new GameInfoEntity(); + info.setId(concernEntity.getId()); + info.setPackageName(entry.getKey()); + info.setTraffic(trafficUtils.getTraffice(entry.getKey())); + info.setSignature(PackageUtils.isSignature(mContext, entry.getKey())); + info.setInstallTime(PackageUtils.getInstalledTime(mContext, entry.getKey())); + list.add(info); + } + } + } + + ArrayMap> map = new ArrayMap<>(); + ArrayList mList; + for (int i = 0, size = list.size(); i < size; i++) { + mList = map.get(list.get(i).getPackageName()); + if (mList == null) { + mList = new ArrayList<>(); + map.put(list.get(i).getPackageName(), mList); + } + mList.add(list.get(i)); + } + Comparator comparator = new Comparator() { + @Override + public int compare(GameInfoEntity lhs, GameInfoEntity rhs) { + return rhs.getId().compareTo(lhs.getId()); + } + }; + Object gh_id; + for (String key : map.keySet()) { + mList = map.get(key); + if (mList.size() > 1) { + Collections.sort(mList, comparator); + } + if (mList.get(0).isSignature()) { + gh_id = PackageUtils.getMetaData(mContext, key, "gh_id"); + for (GameInfoEntity info : mList) { + if (gh_id == null || info.getId().equals(gh_id)) { + signatureList.add(info); + break; + } + } + } else { + unsignatureList.add(mList.get(0)); + } + } + + for (GameInfoEntity info : signatureList) { + if (info.getTraffic() == 0) { + noopenList.add(info); + } else { + oftenuseList.add(info); + } + } + + comparator = new Comparator() { + @Override + public int compare(GameInfoEntity lhs, GameInfoEntity rhs) { + if (rhs.getInstallTime() > lhs.getInstallTime()) { + return 1; + } else if (rhs.getInstallTime() < lhs.getInstallTime()) { + return -1; + } else { + return 0; + } + } + }; + Collections.sort(noopenList, comparator); + + comparator = new Comparator() { + @Override + public int compare(GameInfoEntity lhs, GameInfoEntity rhs) { + if (rhs.getTraffic() > lhs.getTraffic()) { + return 1; + } else if (rhs.getTraffic() < lhs.getTraffic()) { + return -1; + } else { + return 0; + } + } + }; + Collections.sort(oftenuseList, comparator); + + Collections.sort(unsignatureList, comparator); + + sortedList.addAll(noopenList); + sortedList.addAll(oftenuseList); + sortedList.addAll(unsignatureList); + } + + //获取游戏简介 + private void initGameList(List ids) { + final List result = new ArrayList<>(); + + List> sequences = new ArrayList<>(); + for (String id : ids) { + sequences.add(RetrofitManager.getApi().getGameDigest(id)); + } + Observable.merge(sequences) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Response() { + @Override + public void onCompleted() { + processingData(result); + } + + @Override + public void onNext(GameEntity response) { + ApkActiveUtils.filterHideApk(response); + result.add(response); + } + }); + } + + private void processingData(List gameList) { + if (gameList.size() != 0) { + for (int i = 0, size = sortedList.size(); i < size; i++) { + String id = sortedList.get(i).getId(); + for (GameEntity entity : gameList) { + if (entity.getId().equals(id)) { + GameEntity newEntity = entity.clone(); + newEntity.setLibaoExists(entity.isLibaoExists()); + if (newEntity.getApk().size() > 1) { + for (ApkEntity apkEntity : newEntity.getApk()) { + if (sortedList.get(i).getPackageName().equals(apkEntity.getPackageName())) { + ArrayList list = new ArrayList<>(); + list.add(apkEntity); + newEntity.setApk(list); + break; + } + } + } + this.gameList.add(newEntity); + break; + } + } + } + GameManager manager = new GameManager(mContext); + for (GameEntity entity : this.gameList) { + entity.setEntryMap(DownloadManager.getInstance(mContext).getEntryMap(entity.getName())); + manager.addOrUpdate(entity.getApk(), entity.getId(), entity.getName()); + } + } + + if (this.gameList.size() != 0) { + ArrayMap> map = new ArrayMap<>(); + ArrayList list; + for (GameEntity gameEntity : this.gameList) { + list = map.get(gameEntity.getId()); + if (list == null) { + list = new ArrayList<>(); + map.put(gameEntity.getId(), list); + } + list.add(gameEntity); + } + list = new ArrayList<>(); + for (String key : map.keySet()) { + list.addAll(map.get(key)); + } + this.gameList = list; + isRemove = true; + notifyDataSetChanged(); + + initLocationMap(); + } + } + + private void initLocationMap() { + locationMap.clear(); + GameEntity gameEntity; + ArrayList list; + for (int i = 0; i < gameList.size(); i++) { + gameEntity = gameList.get(i); + if (gameEntity.getApk() != null && gameEntity.getApk().size() != 0) { + for (ApkEntity apkEntity : gameEntity.getApk()) { + list = locationMap.get(apkEntity.getPackageName()); + if (list == null) { + list = new ArrayList<>(); + locationMap.put(apkEntity.getPackageName(), list); + } + list.add(i); + } + } + } + } + + public ArrayList getGameList() { + return gameList; + } + + public ArrayMap> getLocationMap() { + return locationMap; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + switch (viewType) { + case ItemViewType.GAME_NORMAL: + return new GameNormalSwipeViewHolder( + mLayoutInflater.inflate(R.layout.game_normal_item_swipe, parent, false)); + case ItemViewType.LOADING: + return new FooterViewHolder( + mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false)); + case ItemViewType.KC_HINT: + return new KcHintViewHolder( + mLayoutInflater.inflate(R.layout.installfragment_footerview, parent, false)); + default: + break; + } + return null; + } + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + if (holder instanceof GameNormalSwipeViewHolder) { + initGameNormal((GameNormalSwipeViewHolder) holder, gameList.get(position), position); + } else if (holder instanceof KcHintViewHolder) { + ((KcHintViewHolder) holder).mTextView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + sp.edit().putBoolean("showKcHint", false).apply(); + smoothListener.onSmooth(); + ((KcHintViewHolder) holder).mTextView.postDelayed(new Runnable() { + @Override + public void run() { + showKcHint = false; + notifyDataSetChanged(); + } + }, 500); + } + }); + } + } + + @Override + public int getItemViewType(int position) { + if (gameList.size() != 0 && position >= 0 && position < gameList.size()) { + return ItemViewType.GAME_NORMAL; + } + + if (isRemove && !showUserNameHint && showKcHint) { + return ItemViewType.KC_HINT; + } + + return ItemViewType.LOADING; + } + + @Override + public int getItemCount() { + if (gameList.isEmpty() && !isRemove) { + return 1; + } + if (isRemove && !showUserNameHint && showKcHint) { + return gameList.size() + 1; + } + if (isRemove) { + return gameList.size(); + } + return gameList.size() + 1; + } + + private void initGameNormal(final GameNormalSwipeViewHolder holder, final GameEntity gameEntity, final int i) { + + holder.swipeText.setPadding(0, 0, DisplayUtils.dip2px(mContext, 15), 0); + + ImageUtils.display(holder.gameThumb, gameEntity.getIcon()); + + if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty() + || gameEntity.getTag() == null || gameEntity.getTag().isEmpty()) { + if (gameEntity.getApk() != null && gameEntity.getApk().size() > 0 + && !TextUtils.isEmpty(gameEntity.getApk().get(0).getVersion())) { + holder.gameDes.setText(String.format("V%s", gameEntity.getApk().get(0).getVersion())); + } else { + holder.gameDes.setText(gameEntity.getBrief()); + } + holder.gameName.setText(gameEntity.getName()); + } else { + holder.gameName.setText(String.format("%s - %s", gameEntity.getName(), + PlatformUtils.getInstance(mContext).getPlatformName(gameEntity.getApk().get(0).getPlatform()))); + holder.gameDes.setText(String.format("V%s", gameEntity.getApk().get(0).getVersion())); + } + GameViewUtils.setLabelList(mContext, holder.gameLabelList, gameEntity.getTag(), ""); + + holder.cardView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (!isSwipe) { + Map kv = new HashMap<>(); + kv.put("名字", gameEntity.getName()); + kv.put("位置", String.valueOf(holder.getPosition() + 1)); + DataUtils.onEvent(mContext, "点击", "我的光环-已安装", kv); + + DataCollectionUtils.uploadClick(mContext, "列表", "我的光环-已安装", gameEntity.getName()); + + GameDetailActivity.startGameDetailActivity(mContext, gameEntity.getId(), "(我的光环-已安装)"); + } + } + }); + + + int paddRight = 0; + String serverType = gameEntity.getServerType(); + if (TextUtils.isEmpty(serverType)) { + holder.gameServerType.setVisibility(View.GONE); + } else { + holder.gameServerType.setVisibility(View.VISIBLE); + holder.gameServerType.setText(serverType); + if ("删档内测".equals(serverType) || "不删档内测".equals(serverType)) { + holder.gameServerType.setBackgroundResource(R.drawable.textview_server_tag); + if ("删档内测".equals(serverType)) { + paddRight = DisplayUtils.dip2px(mContext, 50); + } else { + paddRight = DisplayUtils.dip2px(mContext, 60); + } + } else { + holder.gameServerType.setBackgroundResource(R.drawable.textview_orange_up); + paddRight = DisplayUtils.dip2px(mContext, 30); + } + } + holder.gameName.setPadding(0, 0, paddRight, 0); + + DownloadItemUtils.setOnClickListener(mContext, holder.gameDownloadBtn, gameEntity, i, + this, "(我的光环-已安装)", "我的光环-已安装" + ":" + gameEntity.getName()); + + DownloadItemUtils.updateItem(mContext, gameEntity, holder, false); + + holder.swipeLayout.close(); + holder.swipeShareText.setPadding((maxWidth / 12), 0, 0, 0); + holder.swipeLayout.addSwipeListener(new SwipeLayout.SwipeListener() { + @Override + public void onStartOpen(SwipeLayout layout) { + isSwipe = true; + + } + + @Override + public void onOpen(SwipeLayout layout) { + skipKc(i); + holder.swipeLayout.close(); +// holder.swipeLayout.postDelayed(new Runnable() { +// @Override +// public void run() { +// notifyItemRangeChanged(0 ,getItemCount()); +// } +// }, 500); + } + + @Override + public void onStartClose(SwipeLayout layout) { + } + + @Override + public void onClose(SwipeLayout layout) { + isSwipe = false; +// holder.swipeText.setPadding(0, 0, DisplayUtils.dip2px(mContext, 15), 0); + holder.swipeText.setText("右划发给好友\n免流量安装"); + } + + @Override + public void onUpdate(SwipeLayout layout, int leftOffset, int topOffset) { + if (leftOffset > maxWidth / 2.7 && leftOffset < maxWidth / 2.5) { +// holder.swipeText.setPadding(0, 0, DisplayUtils.dip2px(mContext, 30), 0); + holder.swipeText.setVisibility(View.GONE); + holder.swipeShareText.setVisibility(View.VISIBLE); + } else if (leftOffset > maxWidth / 2.5) { + holder.swipeText.setVisibility(View.GONE); + holder.swipeShareText.setVisibility(View.VISIBLE); + holder.swipeShareText.setText("放手发给好友\n免流量安装"); + } else if (leftOffset < maxWidth / 2.7) { +// holder.swipeText.setPadding(0, 0, DisplayUtils.dip2px(mContext, 15), 0); + holder.swipeText.setVisibility(View.VISIBLE); + holder.swipeShareText.setVisibility(View.GONE); + holder.swipeShareText.setText("右划发给好友\n免流量安装"); + } + } + + @Override + public void onHandRelease(SwipeLayout layout, float xvel, float yvel) { + } + }); + } + + //跳转到快传 - 搜索接收者页面 + public void skipKc(int i) { + GameEntity gameEntity = gameList.get(i); + String packageName = gameEntity.getApk().get(0).getPackageName(); + PackageManager pm = mContext.getPackageManager(); + FileInfo fileInfo = new FileInfo(); + List installedPackages = pm.getInstalledPackages(0); + for (PackageInfo installedPackage : installedPackages) { + if ((installedPackage.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0 + && installedPackage.packageName.equals(packageName)) { + fileInfo.setFilePath(installedPackage.applicationInfo.sourceDir); + File file = new File(installedPackage.applicationInfo.sourceDir); + fileInfo.setSize(file.length()); + Drawable drawable = installedPackage.applicationInfo.loadIcon(pm); + fileInfo.setBitmap(BitmapUtils.drawableToBitmap(drawable)); + fileInfo.setFileTag(String.valueOf(System.currentTimeMillis())); + } + } + if (gameEntity.getApk() == null || gameEntity.getApk().isEmpty() + || gameEntity.getTag() == null || gameEntity.getTag().isEmpty()) { + fileInfo.setName(gameEntity.getName()); + } else { + fileInfo.setName(String.format("%s - %s", gameEntity.getName(), + PlatformUtils.getInstance(mContext).getPlatformName(gameEntity.getApk().get(0).getPlatform()))); + } + fileInfo.setPackageName(packageName); + List fileInfos = new ArrayList<>(); + fileInfos.add(fileInfo); + + AppController.put(AppController.KEY_FILE_INFO, fileInfos); + Intent intent = new Intent(mContext, ChooseReceiverActivity.class); + intent.putExtra("showConnHintDialog", true); + mActivity.startActivityForResult(intent, 0x170); + + } + + public interface onSmoothLayoutListener { + void onSmooth(); + } + + public class KcHintViewHolder extends ViewHolder { + TextView mTextView; + + public KcHintViewHolder(View itemView) { + super(itemView); + mTextView = (TextView) itemView.findViewById(R.id.kuaichuan_hint); + } + } + +} diff --git a/app/src/main/java/com/gh/gamecenter/personal/InstallFragment.java b/app/src/main/java/com/gh/gamecenter/personal/InstallFragment.java index d09511e27f..988a3b72b8 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/InstallFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/InstallFragment.java @@ -122,7 +122,7 @@ public class InstallFragment extends BaseFragment implements InstallFragmentAdap public void loadEmpty() { fm_install_rv_show.setVisibility(View.GONE); reuse_nodata_skip.setVisibility(View.VISIBLE); - EventBus.getDefault().post(new EBReuse(PersonalFragment.NO_INSTALL_HINT)); +// EventBus.getDefault().post(new EBReuse(PersonalFragment.NO_INSTALL_HINT)); } // 打开下载按钮事件 diff --git a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java index e9e3970dae..1b4ccce009 100644 --- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java +++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java @@ -1,220 +1,114 @@ package com.gh.gamecenter.personal; -import android.app.Dialog; -import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; -import android.content.SharedPreferences; -import android.database.Cursor; -import android.net.Uri; -import android.os.Build; import android.os.Bundle; -import android.provider.MediaStore; import android.support.annotation.Nullable; -import android.support.v4.app.FragmentTransaction; -import android.text.TextUtils; -import android.util.DisplayMetrics; -import android.view.KeyEvent; import android.view.View; -import android.view.Window; -import android.view.inputmethod.EditorInfo; -import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; -import android.widget.Toast; import com.facebook.drawee.view.SimpleDraweeView; import com.gh.base.BaseFragment; -import com.gh.common.constant.Config; import com.gh.common.util.DataCollectionUtils; import com.gh.common.util.DataUtils; -import com.gh.common.util.DialogUtils; -import com.gh.common.util.DisplayUtils; import com.gh.common.util.EntranceUtils; -import com.gh.common.util.ImageUtils; -import com.gh.common.util.TokenUtils; -import com.gh.common.util.Util_System_Keyboard; -import com.gh.common.util.Utils; +import com.gh.common.util.LoginUtils; +import com.gh.gamecenter.InstallActivity; import com.gh.gamecenter.LibaoActivity; import com.gh.gamecenter.R; -import com.gh.gamecenter.SelectUserIconActivity; import com.gh.gamecenter.SettingActivity; import com.gh.gamecenter.ShareGhActivity; import com.gh.gamecenter.SuggestSelectActivity; import com.gh.gamecenter.eventbus.EBNetworkState; -import com.gh.gamecenter.eventbus.EBReuse; -import com.gh.gamecenter.retrofit.Response; -import com.gh.gamecenter.retrofit.RetrofitManager; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; -import org.json.JSONObject; - -import java.util.HashMap; -import java.util.Map; import butterknife.BindView; import butterknife.OnClick; -import okhttp3.MediaType; -import okhttp3.RequestBody; -import okhttp3.ResponseBody; -import retrofit2.HttpException; -import rx.Observable; -import rx.android.schedulers.AndroidSchedulers; -import rx.functions.Func1; -import rx.schedulers.Schedulers; /** * @author 温冠超 * 294299195@qq.com * 2015-8-8 我的光环页面 */ -public class PersonalFragment extends BaseFragment implements View.OnClickListener { +public class PersonalFragment extends BaseFragment { - public final static String NO_INSTALL_HINT = "noInstallHint"; - @BindView(R.id.me_iv_top_icon) - SimpleDraweeView me_iv_top_icon; - @BindView(R.id.me_tv_top_name) - TextView me_tv_top_name; + + @BindView(R.id.personal_login_qq) + LinearLayout mLoginQq; + @BindView(R.id.personal_login_wechat) + LinearLayout mLoginWechat; + @BindView(R.id.personal_login_weibo) + LinearLayout mLoginWeibo; + @BindView(R.id.personal_user_icon) + SimpleDraweeView mUserIcon; @BindView(R.id.user_name_hint) - ImageView userNameHint; - @BindView(R.id.personal_entrance_libao) - LinearLayout entranceLibao; - @BindView(R.id.personal_entrance_setting) - LinearLayout entranceSetting; - @BindView(R.id.personal_entrance_share) - LinearLayout entranceShare; - @BindView(R.id.personal_entrance_suggest) - LinearLayout entranceSuggest; - @BindView(R.id.me_ll_info) - RelativeLayout infoLl; - @BindView(R.id.personal_share_hint) - TextView shareHint; - private boolean isLogin; - private SharedPreferences sp; + ImageView mUserNameHint; + @BindView(R.id.personal_user_name) + TextView mUserName; + @BindView(R.id.login_qq_icon) + ImageView mLoginQqIcon; + @BindView(R.id.login_qq_tv) + TextView mLoginQqTv; + @BindView(R.id.login_wechat_icon) + ImageView mLoginWechatIcon; + @BindView(R.id.login_wechat_tv) + TextView mLoginWechatTv; + @BindView(R.id.login_weibo_icon) + ImageView mLoginWeiboIcon; + @BindView(R.id.login_weibo_tv) + TextView mLoginWeiboTv; + @BindView(R.id.personal_game) + RelativeLayout mPersonalGame; + @BindView(R.id.personal_libao) + RelativeLayout mPersonalLibao; + @BindView(R.id.personal_share) + RelativeLayout mPersonalShare; + @BindView(R.id.personal_suggestion) + RelativeLayout mPersonalSuggestion; + @BindView(R.id.personal_setting_update_hint) + TextView mPersonalSettingUpdateHint; + @BindView(R.id.personal_setting) + RelativeLayout mPersonalSetting; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); - init(R.layout.fragment_personal); - - sp = getActivity().getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE); - - me_iv_top_icon.setOnClickListener(this); - me_tv_top_name.setOnClickListener(this); - userNameHint.setOnClickListener(this); - - userNameHint = (ImageView) view.findViewById(R.id.user_name_hint); - - if (sp.getBoolean("showUserNameHint", true)) { - userNameHint.setVisibility(View.VISIBLE); - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - - RelativeLayout me_ll_info = (RelativeLayout) view.findViewById(R.id.me_ll_info); - me_ll_info.setPadding(0, DisplayUtils.getStatusBarHeight(getResources()), 0, 0); - } - - DisplayMetrics outMetrics = new DisplayMetrics(); - getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics); - - isLogin = false; - - login(null); - - FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); - InstallFragment fragment = new InstallFragment(); - transaction.add(R.id.personal_install_fl, fragment); - transaction.commit(); } - public void login(final Dialog dialog) { - TokenUtils.getToken(getActivity(), true) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response() { - @Override - public void onResponse(String token) { - if (getActivity() != null) { - TokenUtils.checkDeviceInfo(getActivity(), token); - - SharedPreferences sp = getActivity().getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE); - String name = sp.getString("user_name", null); - if (!TextUtils.isEmpty(name)) { - me_tv_top_name.setText(name); - checkUserName(name); - } - String icon = sp.getString("user_icon", null); - if (!TextUtils.isEmpty(icon)) { - ImageUtils.display(me_iv_top_icon, icon); - } - isLogin = true; - } - if (dialog != null) { - Toast.makeText(getActivity(), "登录成功", Toast.LENGTH_SHORT).show(); - dialog.dismiss(); - } - } - - @Override - public void onFailure(HttpException e) { - if (dialog != null) { - Toast.makeText(getActivity(), "登录失败", Toast.LENGTH_SHORT).show(); - dialog.dismiss(); - } - } - }); - } - - private void checkUserName(String name) { - if (sp.getBoolean("showUserNameHint", true) && - (!name.startsWith("光环用户") || name.length() != 10)) { - sp.edit().putBoolean("showUserNameHint", false).apply(); - userNameHint.setVisibility(View.GONE); - } - } // 连接上网络事件 @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMainThread(EBNetworkState busNetworkState) { - if (busNetworkState.isNetworkConnected() && !isLogin) { - login(null); - } } - // 安装列表为空,隐藏分享提示 - @Subscribe(threadMode = ThreadMode.MAIN) - public void onEventMainThread(EBReuse reuse) { - if (NO_INSTALL_HINT.equals(reuse.getType())) { - shareHint.setVisibility(View.GONE); - } - } - - @OnClick({R.id.personal_entrance_suggest, R.id.personal_entrance_share, R.id.personal_entrance_setting - , R.id.personal_entrance_libao}) - public void onEntranceClick(View v) { - switch (v.getId()) { - case R.id.personal_entrance_suggest: - Intent intent1 = new Intent(getActivity(), SuggestSelectActivity.class); - getActivity().startActivity(intent1); + @OnClick({R.id.personal_login_qq, R.id.personal_login_wechat, R.id.personal_login_weibo, R.id.personal_user_icon, + R.id.personal_user_name, R.id.personal_game, R.id.personal_libao, R.id.personal_share, R.id.personal_suggestion, + R.id.personal_setting}) + public void onViewClicked(View view) { + switch (view.getId()) { + case R.id.personal_login_qq: + LoginUtils.getInstance(getActivity()).QQLogin(); break; - case R.id.personal_entrance_share: - Intent intent2 = new Intent(getActivity(), ShareGhActivity.class); - getActivity().startActivity(intent2); + case R.id.personal_login_wechat: + LoginUtils.getInstance(getActivity()).WCLogin(); break; - case R.id.personal_entrance_setting: - DataUtils.onEvent(getActivity(), "我的光环", "设置图标"); - DataCollectionUtils.uploadClick(getActivity(), "设置图标", "我的光环"); - - Intent intent3 = new Intent(getActivity(), SettingActivity.class); - intent3.putExtra(EntranceUtils.KEY_ENTRANCE, "(我的光环)"); - startActivity(intent3); + case R.id.personal_login_weibo: + LoginUtils.getInstance(getActivity()).WeiBoLogin(); break; - case R.id.personal_entrance_libao: + case R.id.personal_user_icon: + break; + case R.id.personal_user_name: + break; + case R.id.personal_game: + Intent intent0 = new Intent(getContext(), InstallActivity.class); + getContext().startActivity(intent0); + break; + case R.id.personal_libao: DataUtils.onEvent(getActivity(), "主页", "礼包图标"); DataCollectionUtils.uploadClick(getActivity(), "礼包图标", "我的光环"); Intent intent = new Intent(getActivity(), LibaoActivity.class); @@ -223,213 +117,23 @@ public class PersonalFragment extends BaseFragment implements View.OnClickListen DataCollectionUtils.uploadPosition(getActivity(), "我的光环", "1", "礼包"); break; + case R.id.personal_share: + Intent intent2 = new Intent(getActivity(), ShareGhActivity.class); + getActivity().startActivity(intent2); + break; + case R.id.personal_suggestion: + Intent intent1 = new Intent(getActivity(), SuggestSelectActivity.class); + getActivity().startActivity(intent1); + break; + case R.id.personal_setting: + DataUtils.onEvent(getActivity(), "我的光环", "设置图标"); + DataCollectionUtils.uploadClick(getActivity(), "设置图标", "我的光环"); + + Intent intent3 = new Intent(getActivity(), SettingActivity.class); + intent3.putExtra(EntranceUtils.KEY_ENTRANCE, "(我的光环)"); + startActivity(intent3); + break; } } - @Override - public void onClick(View v) { - final int id = v.getId(); - if (id == R.id.me_tv_top_name) { - DataUtils.onEvent(getActivity(), "我的光环", "用户昵称"); - DataCollectionUtils.uploadClick(getActivity(), "用户昵称", "我的光环"); - - if (isLogin) { - showModifyNicknameDialog(me_tv_top_name.getText().toString()); - } else { - login(DialogUtils.showWaitDialog(getActivity(), "登录中...")); - } - } else if (id == R.id.me_iv_top_icon) { - DataUtils.onEvent(getActivity(), "我的光环", "用户头像"); - DataCollectionUtils.uploadClick(getActivity(), "用户头像", "我的光环"); - - if (isLogin) { - Intent intent = new Intent(getContext(), SelectUserIconActivity.class); - startActivityForResult(intent, 0x125); - } else { - login(DialogUtils.showWaitDialog(getActivity(), "登录中...")); - } - } else if (id == R.id.user_name_hint) { - DataUtils.onEvent(getActivity(), "我的光环", "用户昵称"); - DataCollectionUtils.uploadClick(getActivity(), "用户昵称", "我的光环"); - - if (isLogin) { - showModifyNicknameDialog(me_tv_top_name.getText().toString()); - } else { - login(DialogUtils.showWaitDialog(getActivity(), "登录中...")); - } - } - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if (data != null && requestCode == 0x123) { - Uri selectedImage = data.getData(); - if (selectedImage == null) { - return; - } - String[] filePathColumn = {MediaStore.Images.Media.DATA}; - - Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null); - if (cursor == null) { - return; - } - cursor.moveToFirst(); - - int columnIndex = cursor.getColumnIndex(filePathColumn[0]); - String picturePath = cursor.getString(columnIndex); - cursor.close(); - - Utils.log("picturePath = " + picturePath); - // 上传头像 -// Intent intent = new Intent(getActivity(), CropImageActivity.class); -// intent.putExtra("path", picturePath); -// intent.putExtra("mEntrance", "(我的光环)"); -// startActivityForResult(intent, 0x124); - } else if (data != null && requestCode == 0x125) { - String url = data.getExtras().getString("url"); - sp.edit().putString("user_icon", url).apply(); -// me_iv_top_icon.setImageURI(url); - ImageUtils.display(me_iv_top_icon, url); - } - } - - private void showModifyNicknameDialog(String name) { - final Dialog dialog = new Dialog(getActivity()); - - View view = View.inflate(getActivity(), R.layout.dialog_modify_nickname, null); - - final EditText input = (EditText) view.findViewById(R.id.dialog_nickname_input); - input.setText(name); - input.setSelection(input.getText().length()); - - input.setOnEditorActionListener(new TextView.OnEditorActionListener() { - @Override - public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { - if (actionId == EditorInfo.IME_ACTION_DONE) { - String nickname = input.getText().toString().trim(); - if (TextUtils.isEmpty(nickname)) { - Toast.makeText(getActivity(), "请输入昵称", Toast.LENGTH_SHORT).show(); - return true; - } - modifyNickname(nickname); - dialog.dismiss(); - return true; - } - return false; - } - }); - - // 取消按钮 - TextView cancel = (TextView) view.findViewById(R.id.dialog_nickname_cancel); - cancel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - dialog.dismiss(); - } - }); - - // 确定按钮 - TextView confirm = (TextView) view.findViewById(R.id.dialog_nickname_confirm); - confirm.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (userNameHint.getVisibility() == View.VISIBLE) { - userNameHint.setVisibility(View.GONE); - sp.edit().putBoolean("showUserNameHint", false).apply(); - } - - String nickname = input.getText().toString().trim(); - if (TextUtils.isEmpty(nickname)) { - Toast.makeText(getActivity(), "请输入昵称", Toast.LENGTH_SHORT).show(); - return; - } - dialog.dismiss(); - modifyNickname(nickname); - } - }); - - dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { - @Override - public void onDismiss(DialogInterface dialog) { - Util_System_Keyboard.hideSoftKeyboard(getActivity()); - } - }); - - dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); - dialog.setContentView(view); - dialog.show(); - - input.postDelayed(new Runnable() { - @Override - public void run() { - Util_System_Keyboard.showSoftKeyboard(getContext(), input); - } - }, 300); - } - - private void modifyNickname(String nickname) { - final Dialog waitDialog = DialogUtils.showWaitDialog(getActivity(), "修改中..."); - modifyNickname(waitDialog, nickname, true); - } - - private void modifyNickname(final Dialog waitDialog, final String nickname, final boolean isCheck) { - TokenUtils.getToken(getActivity(), isCheck) - .flatMap(new Func1>() { - @Override - public Observable call(String token) { - Map params = new HashMap<>(); - params.put("name", nickname); - RequestBody body = RequestBody.create(MediaType.parse("application/json"), - new JSONObject(params).toString()); - return RetrofitManager.getUser().postName(token, body); - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Response() { - @Override - public void onResponse(ResponseBody response) { - waitDialog.dismiss(); - - SharedPreferences sp = getActivity().getSharedPreferences(Config.PREFERENCE, Context.MODE_PRIVATE); - sp.edit().putString("user_name", nickname).apply(); - Toast.makeText(getActivity(), "修改成功", Toast.LENGTH_SHORT).show(); - me_tv_top_name.setText(nickname); - } - - @Override - public void onFailure(HttpException e) { - if (e != null) { - if (e.code() == 401) { - modifyNickname(waitDialog, nickname, false); - return; - } - if (e.code() == 403) { - try { - JSONObject response = new JSONObject(new String(e.response().errorBody().bytes())); - String detail = response.getString("detail"); - if ("too long".equals(detail)) { - Toast.makeText(getActivity(), "昵称太长", Toast.LENGTH_SHORT).show(); - } else if ("invalid".equals(detail)) { - Toast.makeText(getActivity(), "非法字符", Toast.LENGTH_SHORT).show(); - } else if ("repeat".equals(detail)) { - Toast.makeText(getActivity(), "昵称已存在", Toast.LENGTH_SHORT).show(); - } else if ("no change".equals(detail)) { - Toast.makeText(getActivity(), "昵称一致", Toast.LENGTH_SHORT).show(); - } else if ("too frequent".equals(detail)) { - Toast.makeText(getActivity(), "每天最多修改2次昵称", Toast.LENGTH_SHORT).show(); - } - } catch (Exception ex) { - ex.printStackTrace(); - Toast.makeText(getActivity(), "修改失败", Toast.LENGTH_SHORT).show(); - } - } - } - Toast.makeText(getActivity(), "修改失败", Toast.LENGTH_SHORT).show(); - waitDialog.dismiss(); - } - }); - } - } diff --git a/app/src/main/res/drawable-hdpi/personal_answer_icon.png b/app/src/main/res/drawable-hdpi/personal_answer_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..23dcaa8417e0dcedae48d04972d840b4adf516f4 GIT binary patch literal 3175 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/personal_drafts_icon.png b/app/src/main/res/drawable-hdpi/personal_drafts_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..078752a58fc7808901db9532e6b62e45e330aa68 GIT binary patch literal 2506 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/personal_libao_icon.png b/app/src/main/res/drawable-hdpi/personal_libao_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f271100f670640fa2c951b94c44003e9dc8e4a3b GIT binary patch literal 2064 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/personal_question_icon.png b/app/src/main/res/drawable-hdpi/personal_question_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e00f1d3191f44ae951302b0fae82b28caf3a8bcd GIT binary patch literal 2890 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 F|8G%H?27;Z literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/personal_share_icon.png b/app/src/main/res/drawable-hdpi/personal_share_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..60f5796239a05b2644e856a9958a28b1c646741d GIT binary patch literal 2366 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 P=8q=Gk4kRviP`ZdOmg50 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/personal_sign_icon.png b/app/src/main/res/drawable-hdpi/personal_sign_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa99dfec9c2585ff480ebf9a3fed9b1ef7dea4c GIT binary patch literal 2821 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/personal_suggestion_icon.png b/app/src/main/res/drawable-hdpi/personal_suggestion_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b7fc28be8d1870c5cc94715fbbb0a7cc08beeed8 GIT binary patch literal 1679 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable-hdpi/wechat_login_icon.png b/app/src/main/res/drawable-hdpi/wechat_login_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..becef1586766acf0dfed49234d3fdd3cce8b8c7e GIT binary patch literal 3939 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 KMNUMnLSTaDcc}RQ literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_install.xml b/app/src/main/res/layout/activity_install.xml new file mode 100644 index 0000000000..1ebeb51357 --- /dev/null +++ b/app/src/main/res/layout/activity_install.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_personal.xml b/app/src/main/res/layout/fragment_personal.xml index 80bec5853a..ae4bcc809e 100644 --- a/app/src/main/res/layout/fragment_personal.xml +++ b/app/src/main/res/layout/fragment_personal.xml @@ -3,18 +3,18 @@ xmlns:fresco = "http://schemas.android.com/apk/res-auto" android:layout_width = "match_parent" android:layout_height = "match_parent" + android:background = "@android:color/white" android:orientation = "vertical" > - + android:layout_height = "match_parent" + android:scrollbars="none"> - + android:orientation = "vertical" > @@ -34,178 +34,442 @@ android:id = "@+id/user_name_hint" android:layout_width = "wrap_content" android:layout_height = "wrap_content" - android:layout_above = "@+id/me_tv_top_name" + android:layout_above = "@+id/personal_user_name" android:layout_marginBottom = "-13dp" android:layout_marginLeft = "2dp" - android:layout_toRightOf = "@+id/me_iv_top_icon" + android:layout_toRightOf = "@+id/personal_user_icon" android:src = "@drawable/user_name_hint" android:visibility = "gone" /> - + android:textColor = "@android:color/black" + android:textSize = "15sp" /> + android:layout_height = "wrap_content" + android:layout_marginTop = "55dp" + android:layout_marginBottom="15dp"> - + + + + - + android:layout_marginTop = "14dp" + android:text = "QQ" + android:textColor = "@color/title" /> - + + + + + + - + android:layout_marginTop = "14dp" + android:text = "微信" + android:textColor = "@color/title" /> - + + + + + + + - - - - - - - - - + android:layout_marginTop = "14dp" + android:text = "新浪微博" + android:textColor = "@color/title" /> - - - + - + - + - + - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index ca5c692d11..ecaba96a87 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -27,7 +27,7 @@ #00B7FA - @color/text_3a3a3a + @color/text_5d5d5d @color/text_9a9a9a @@ -83,5 +83,6 @@ #b2b2b2 #9a9a9a #3a3a3a + #5d5d5d \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cd3f16ff6f..cf5e901803 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -32,12 +32,16 @@ 推荐关注 关注 分享 - 礼包 + 礼包中心 反馈 设置 我的游戏 (右划免流量分享给好友) 光环用户 + 我的问题 + 我的回答 + 我的草稿 + 新版本 请输入搜索关键字 搜索 44.5% diff --git a/app/src/main/res/values/styles_themes.xml b/app/src/main/res/values/styles_themes.xml index 00ef25bd9e..fd31cc7756 100644 --- a/app/src/main/res/values/styles_themes.xml +++ b/app/src/main/res/values/styles_themes.xml @@ -60,8 +60,8 @@ true - @color/theme - @color/theme + + diff --git a/build.gradle b/build.gradle index 1bfb361c8a..8de45112f6 100644 --- a/build.gradle +++ b/build.gradle @@ -5,6 +5,8 @@ apply from: 'dependencies.gradle' buildscript { repositories { jcenter() + + maven { url "https://dl.bintray.com/thelasterstar/maven/" } //weiboSDK } dependencies { classpath 'com.android.tools.build:gradle:2.3.1' @@ -18,6 +20,13 @@ buildscript { } } +allprojects { + repositories { + jcenter() + maven { url "https://dl.bintray.com/thelasterstar/maven/" }//weiboSDK + } +} + subprojects { subproject -> afterEvaluate { diff --git a/dependencies.gradle b/dependencies.gradle index 5697bf9995..72b24c7432 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -53,6 +53,7 @@ ext { swipeLayout = "1.2.0@aar" autoScrollViewPager = "1.1.2" circleImageView = "2.1.0" + weiboSDK = "2.0.3" onesignal = "2.3.0@aar" google_play_services = "8.4.0" @@ -120,6 +121,7 @@ ext { tinker_anno : "com.tencent.tinker:tinker-android-anno:${tinker}", tinker_lib : "com.tencent.tinker:tinker-android-lib:${tinker}", apkChannelPackage : "com.leon.channel:helper:${apkChannelPackage}", + weiboSDK : "com.sina.weibo.sdk:core:${weiboSDK}:openDefaultRelease@aar", ]