diff --git a/app/build.gradle b/app/build.gradle
index 3e1a0dff7f..38ebbd488a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -188,6 +188,7 @@ dependencies {
compile libs.eventbus
apt libs.eventbusApt
+ compile project(':libraries:LGLibrary')
compile project(':libraries:MiPush')
compile project(':libraries:MTA')
compile project(':libraries:QQShare')
diff --git a/app/src/main/java/com/gh/base/BaseAppCompatToolBarActivity.java b/app/src/main/java/com/gh/base/BaseAppCompatToolBarActivity.java
index b9cc082191..7eafe7edbf 100644
--- a/app/src/main/java/com/gh/base/BaseAppCompatToolBarActivity.java
+++ b/app/src/main/java/com/gh/base/BaseAppCompatToolBarActivity.java
@@ -23,7 +23,7 @@ public abstract class BaseAppCompatToolBarActivity extends BaseAppCompatActivity
private SystemBarTintManager mTintManager;
// TODO 获取沉浸栏管理,要进行版本判断或者判断是否为空
- protected SystemBarTintManager getTintManager() {
+ public SystemBarTintManager getTintManager() {
return mTintManager;
}
diff --git a/app/src/main/java/com/gh/base/BaseFragment.java b/app/src/main/java/com/gh/base/fragment/BaseFragment.java
similarity index 85%
rename from app/src/main/java/com/gh/base/BaseFragment.java
rename to app/src/main/java/com/gh/base/fragment/BaseFragment.java
index 99d1f5f07b..9002fff95a 100644
--- a/app/src/main/java/com/gh/base/BaseFragment.java
+++ b/app/src/main/java/com/gh/base/fragment/BaseFragment.java
@@ -1,6 +1,7 @@
-package com.gh.base;
+package com.gh.base.fragment;
import android.os.Bundle;
+import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
@@ -8,6 +9,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
+import com.gh.base.OnRequestCallBackListener;
import com.gh.common.util.EntranceUtils;
import com.gh.common.util.RuntimeUtils;
import com.gh.gamecenter.eventbus.EBMiPush;
@@ -22,7 +24,7 @@ import butterknife.ButterKnife;
* Created by LGT on 2016/9/4.
* Fragment 基类
*/
-public abstract class BaseFragment extends Fragment implements OnRequestCallBackListener {
+public abstract class BaseFragment extends Fragment implements OnRequestCallBackListener, View.OnClickListener {
// TODO private view
protected View view;
@@ -31,8 +33,23 @@ public abstract class BaseFragment extends Fragment implements OnRequestCallBack
protected String mEntrance;
+ @LayoutRes
protected abstract int getLayoutId();
+ /**
+ * 责任链,谁处理了就返回true,否则返回super.handleOnClick(View view)
+ *
+ * @return
+ */
+ protected boolean handleOnClick(View view) {
+ return true;
+ }
+
+ @Override
+ public void onClick(View v) {
+ handleOnClick(v);
+ }
+
protected void initView(View view) {
}
diff --git a/app/src/main/java/com/gh/base/fragment/BaseFragment_ViewPager.java b/app/src/main/java/com/gh/base/fragment/BaseFragment_ViewPager.java
new file mode 100755
index 0000000000..3417aa45b3
--- /dev/null
+++ b/app/src/main/java/com/gh/base/fragment/BaseFragment_ViewPager.java
@@ -0,0 +1,109 @@
+/**
+ * project: OPlay
+ *
+ *
+ * ========================================================================
+ * amend date amend user amend reason
+ * 2013-3-6 CsHeng
+ */
+
+package com.gh.base.fragment;
+
+import android.os.Bundle;
+import android.support.annotation.IdRes;
+import android.support.annotation.LayoutRes;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.view.View;
+
+import com.lightgame.adapter.BaseFragmentPagerAdapter;
+import com.lightgame.view.DoubleTapTextView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * ViewPager 配合RadioGroup实现双切换
+ * 记得自己控制onCreateView返回和radioGroup里面radiobutton个数,Viewpager的布局
+ *
+ * @author CsHeng
+ * @date 2013-3-6
+ */
+public abstract class BaseFragment_ViewPager extends BaseFragment implements DoubleTapTextView.OnDoubleTapListener {
+
+ private static final String ARGS_INDEX = "index";
+ protected int mCheckedIndex = 0;
+ protected PagerAdapter mAdapter;
+ protected List mFragmentsList;
+ protected ViewPager mViewPager;
+
+ @LayoutRes
+ protected abstract int getLayoutId();
+
+ @IdRes
+ protected abstract int getViewPagerId();
+
+ protected abstract void initFragmentList(List fragments);
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mFragmentsList = new ArrayList<>();
+ initFragmentList(mFragmentsList);
+ mAdapter = BaseFragmentPagerAdapter.newInstance(getChildFragmentManager(), mFragmentsList);
+ final Bundle args = getArguments();
+ if (args != null) {
+ mCheckedIndex = args.getInt(ARGS_INDEX);
+ }
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ 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);
+ }
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ if (getArguments() != null) {
+ getArguments().putInt(ARGS_INDEX, mCheckedIndex);
+ }
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ if (mViewPager != null) {
+ mViewPager.setAdapter(null);
+ }
+ }
+
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ if (mFragmentsList != null) {
+ mFragmentsList.clear();
+ }
+ }
+
+ @Override
+ public boolean onDoubleTap() {
+ final Fragment fragment = mFragmentsList.get(mViewPager.getCurrentItem());
+ return fragment instanceof DoubleTapTextView.OnDoubleTapListener && ((DoubleTapTextView.OnDoubleTapListener)
+ fragment).onDoubleTap();
+ }
+
+}
diff --git a/app/src/main/java/com/gh/base/fragment/BaseFragment_ViewPager_Checkable.java b/app/src/main/java/com/gh/base/fragment/BaseFragment_ViewPager_Checkable.java
new file mode 100755
index 0000000000..8e0be2c8b7
--- /dev/null
+++ b/app/src/main/java/com/gh/base/fragment/BaseFragment_ViewPager_Checkable.java
@@ -0,0 +1,105 @@
+/**
+ * project: OPlay
+ *
+ *
+ * ========================================================================
+ * amend date amend user amend reason
+ * 2013-3-6 CsHeng
+ */
+
+package com.gh.base.fragment;
+
+import android.os.Bundle;
+import android.support.annotation.IdRes;
+import android.support.annotation.Nullable;
+import android.support.v4.view.ViewPager;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Checkable;
+
+
+/**
+ * ViewPager 配合ViewGroup Checkable实现双切换
+ * 记得自己控制onCreateView返回和ViewGroup里面Checkable个数,ViewPager的布局
+ *
+ * @author CsHeng
+ * @date 2013-3-6
+ * @update 2014-09-29
+ */
+public abstract class BaseFragment_ViewPager_Checkable extends BaseFragment_ViewPager implements
+ ViewPager.OnPageChangeListener {
+
+ protected ViewGroup mCheckableGroup;
+
+ @IdRes
+ protected abstract int getCheckableGroupId();
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ mCheckableGroup = (ViewGroup) view.findViewById(getCheckableGroupId());
+ for (int i = 0, size = mCheckableGroup.getChildCount(); i < size; i++) {
+ mCheckableGroup.getChildAt(i).setOnClickListener(this);
+ }
+ mViewPager.addOnPageChangeListener(this);
+ }
+
+ @Override
+ public void onDestroyView() {
+ super.onDestroyView();
+ mViewPager.removeOnPageChangeListener(this);
+ }
+
+ @Override
+ public void onActivityCreated(Bundle savedInstanceState) {
+ super.onActivityCreated(savedInstanceState);
+ checkIndex(mCheckedIndex);
+ }
+
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+
+ }
+
+ @Override
+ public void onPageSelected(int index) {
+ onPageChanged(index);
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+
+ }
+
+ @Override
+ protected boolean handleOnClick(View view) {
+ final int toCheck = mCheckableGroup.indexOfChild(view);
+ if (toCheck != -1) {
+ mViewPager.setCurrentItem(toCheck, false);
+ return true;
+ }
+ return super.handleOnClick(view);
+ }
+
+ protected void checkIndex(int index) {
+ final int childCount = mCheckableGroup.getChildCount();
+ if (index < childCount && mCheckedIndex < childCount) {
+ final View toChecked = mCheckableGroup.getChildAt(index);
+ if (toChecked instanceof Checkable) {
+ ((Checkable) toChecked).setChecked(true);
+ }
+ if (index != mCheckedIndex) {
+ final View checkedChild = mCheckableGroup.getChildAt(mCheckedIndex);
+ if (checkedChild instanceof Checkable) {
+ ((Checkable) checkedChild).setChecked(false);
+ }
+ }
+ mCheckedIndex = index;
+ }
+ }
+
+ protected void onPageChanged(int index) {
+ checkIndex(index);
+ }
+
+}
diff --git a/app/src/main/java/com/gh/common/util/PackageUtils.java b/app/src/main/java/com/gh/common/util/PackageUtils.java
index aca1629360..73dc01c5f5 100644
--- a/app/src/main/java/com/gh/common/util/PackageUtils.java
+++ b/app/src/main/java/com/gh/common/util/PackageUtils.java
@@ -91,12 +91,10 @@ public class PackageUtils {
private static String[] parseSignature(byte[] signature) {
String[] ret = null;
try {
- CertificateFactory certFactory = CertificateFactory
- .getInstance("X.509");
- X509Certificate cert = (X509Certificate) certFactory
- .generateCertificate(new ByteArrayInputStream(signature));
- ret = new String[]{cert.getPublicKey().toString(),
- cert.getSerialNumber().toString()};
+ CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
+ X509Certificate cert = (X509Certificate) certFactory.generateCertificate(
+ new ByteArrayInputStream(signature));
+ ret = new String[]{cert.getPublicKey().toString(), cert.getSerialNumber().toString()};
} catch (CertificateException e) {
e.printStackTrace();
}
@@ -159,8 +157,8 @@ public class PackageUtils {
*/
public static Intent getUninstallIntent(Context context, String path) {
Intent uninstallIntent = new Intent();
- uninstallIntent.setAction("android.intent.action.DELETE");
- uninstallIntent.addCategory("android.intent.category.DEFAULT");
+ uninstallIntent.setAction(Intent.ACTION_DELETE);
+ uninstallIntent.addCategory(Intent.CATEGORY_DEFAULT);
String packageName = getPackageNameByPath(context, path);
uninstallIntent.setData(Uri.parse("package:" + packageName));
InstallUtils.getInstance(context).addUninstall(packageName);
@@ -172,8 +170,7 @@ public class PackageUtils {
*/
public static String getPackageNameByPath(Context context, String path) {
PackageManager packageManager = context.getApplicationContext().getPackageManager();
- PackageInfo info = packageManager.getPackageArchiveInfo(path,
- PackageManager.GET_ACTIVITIES);
+ PackageInfo info = packageManager.getPackageArchiveInfo(path, PackageManager.GET_ACTIVITIES);
if (info != null) {
ApplicationInfo appInfo = info.applicationInfo;
return appInfo.packageName;
diff --git a/app/src/main/java/com/gh/common/view/ScaleAutoScrollViewPager.java b/app/src/main/java/com/gh/common/view/ScaleAutoScrollViewPager.java
new file mode 100644
index 0000000000..bb934f13d5
--- /dev/null
+++ b/app/src/main/java/com/gh/common/view/ScaleAutoScrollViewPager.java
@@ -0,0 +1,49 @@
+package com.gh.common.view;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+
+import com.gh.gamecenter.R;
+
+import cn.trinea.android.view.autoscrollviewpager.AutoScrollViewPager;
+
+/**
+ * @author CsHeng
+ * @Date 17/06/2017
+ * @Time 12:24 PM
+ */
+
+public class ScaleAutoScrollViewPager extends AutoScrollViewPager {
+
+ private boolean mMeasureByHeight = false; // default width
+ private float mScale = 1f;// default square
+
+ public ScaleAutoScrollViewPager(Context context) {
+ super(context);
+ }
+
+ public ScaleAutoScrollViewPager(Context context, AttributeSet set) {
+ super(context, set);
+ TypedArray a = context.obtainStyledAttributes(set, R.styleable.ScaleView);
+ int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0);
+ mScale = a.getFloat(R.styleable.ScaleView_fractionValue, mScale);
+ if (enumV != 0) {
+ mMeasureByHeight = true;
+ }
+ a.recycle();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ int width = MeasureSpec.getSize(widthMeasureSpec);
+ int height = MeasureSpec.getSize(heightMeasureSpec);
+ if (mMeasureByHeight) {
+ setMeasuredDimension((int) (height * mScale), height);
+ } else {
+ setMeasuredDimension(width, (int) (width * mScale));
+ }
+
+ }
+}
diff --git a/app/src/main/java/com/gh/common/view/ScaleSimpleDraweeView.java b/app/src/main/java/com/gh/common/view/ScaleSimpleDraweeView.java
new file mode 100644
index 0000000000..569dfd766f
--- /dev/null
+++ b/app/src/main/java/com/gh/common/view/ScaleSimpleDraweeView.java
@@ -0,0 +1,63 @@
+package com.gh.common.view;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+
+import com.facebook.drawee.view.SimpleDraweeView;
+import com.gh.gamecenter.R;
+
+/**
+ * @author CsHeng
+ * @Date 17/06/2017
+ * @Time 2:46 PM
+ */
+
+public class ScaleSimpleDraweeView extends SimpleDraweeView {
+
+ private boolean mMeasureByHeight = false; // default width
+
+ private float mFraction = 1f;// default square
+
+ public ScaleSimpleDraweeView(Context context) {
+ super(context);
+ }
+
+ public ScaleSimpleDraweeView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ init(context, attrs);
+ }
+
+ public ScaleSimpleDraweeView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ init(context, attrs);
+ }
+
+ public ScaleSimpleDraweeView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ init(context, attrs);
+ }
+
+ public void init(Context context, AttributeSet attrs) {
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ScaleView);
+ int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0);
+ mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction);
+ if (enumV != 0) {
+ mMeasureByHeight = true;
+ }
+ a.recycle();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ int width = MeasureSpec.getSize(widthMeasureSpec);
+ int height = MeasureSpec.getSize(heightMeasureSpec);
+ if (mMeasureByHeight) {
+ setMeasuredDimension((int) (height * mFraction), height);
+ } else {
+ setMeasuredDimension(width, (int) (width * mFraction));
+ }
+ }
+
+
+}
diff --git a/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java b/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java
index e975db4e0f..6a5b336dbe 100644
--- a/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/GameDetailActivity.java
@@ -37,7 +37,7 @@ import com.gh.common.util.PackageUtils;
import com.gh.common.util.ShareUtils;
import com.gh.common.util.Utils;
import com.gh.common.view.DownloadDialog;
-import com.gh.common.view.NoScrollableViewPager;
+import com.lightgame.view.NoScrollableViewPager;
import com.gh.download.DataWatcher;
import com.gh.download.DownloadEntity;
import com.gh.download.DownloadManager;
diff --git a/app/src/main/java/com/gh/gamecenter/LibaoActivity.java b/app/src/main/java/com/gh/gamecenter/LibaoActivity.java
index 8392e676ef..d62e3dc6c7 100644
--- a/app/src/main/java/com/gh/gamecenter/LibaoActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/LibaoActivity.java
@@ -11,7 +11,7 @@ import android.widget.TextView;
import com.gh.base.BaseActivity;
import com.gh.common.util.DisplayUtils;
-import com.gh.common.view.NoScrollableViewPager;
+import com.lightgame.view.NoScrollableViewPager;
import com.gh.base.adapter.FragmentAdapter;
import com.gh.gamecenter.eventbus.EBReuse;
import com.gh.gamecenter.eventbus.EBUISwitch;
diff --git a/app/src/main/java/com/gh/gamecenter/MainActivity.java b/app/src/main/java/com/gh/gamecenter/MainActivity.java
index b7e1c65fa8..b425eb8b44 100644
--- a/app/src/main/java/com/gh/gamecenter/MainActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/MainActivity.java
@@ -5,29 +5,20 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
-import android.graphics.Color;
import android.net.Uri;
-import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.SystemClock;
import android.provider.Settings;
import android.support.annotation.NonNull;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentTransaction;
import android.support.v4.util.ArrayMap;
import android.text.Html;
import android.text.Spanned;
import android.text.TextUtils;
import android.view.KeyEvent;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.CheckedTextView;
-import android.widget.ImageView;
import com.gh.base.AppController;
import com.gh.base.BaseActivity;
-import com.gh.base.SearchBarHint;
import com.gh.common.constant.Config;
import com.gh.common.util.ClassUtils;
import com.gh.common.util.DataCollectionUtils;
@@ -47,37 +38,27 @@ import com.gh.download.DataWatcher;
import com.gh.download.DownloadEntity;
import com.gh.download.DownloadManager;
import com.gh.download.DownloadStatus;
-import com.gh.gamecenter.db.KeFuMarkReadDao;
-import com.gh.gamecenter.db.MessageMarkReadDao;
import com.gh.gamecenter.db.info.ConcernInfo;
import com.gh.gamecenter.db.info.GameInfo;
-import com.gh.gamecenter.db.info.MessageMarkReadInfo;
import com.gh.gamecenter.entity.ApkEntity;
import com.gh.gamecenter.entity.GameDigestEntity;
import com.gh.gamecenter.entity.GameEntity;
import com.gh.gamecenter.entity.GameUpdateEntity;
-import com.gh.gamecenter.entity.MessageUnreadEntity;
import com.gh.gamecenter.eventbus.EBDownloadStatus;
import com.gh.gamecenter.eventbus.EBPackage;
-import com.gh.gamecenter.eventbus.EBReuse;
import com.gh.gamecenter.eventbus.EBShowDialog;
-import com.gh.gamecenter.eventbus.EBSkip;
import com.gh.gamecenter.eventbus.EBUISwitch;
-import com.gh.gamecenter.fragment.GameFragment;
+import com.gh.gamecenter.fragment.MainFragment;
import com.gh.gamecenter.manager.ConcernManager;
import com.gh.gamecenter.manager.DataCollectionManager;
import com.gh.gamecenter.manager.FilterManager;
import com.gh.gamecenter.manager.GameManager;
import com.gh.gamecenter.manager.PackageManager;
import com.gh.gamecenter.manager.UpdateManager;
-import com.gh.gamecenter.message.MessageFragment;
-import com.gh.gamecenter.news.NewsFragment;
-import com.gh.gamecenter.personal.PersonalFragment;
import com.gh.gamecenter.retrofit.JSONObjectResponse;
import com.gh.gamecenter.retrofit.ObservableUtil;
import com.gh.gamecenter.retrofit.Response;
import com.gh.gamecenter.retrofit.RetrofitManager;
-import com.readystatesoftware.systembartint.SystemBarTintManager;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -95,7 +76,6 @@ import java.util.concurrent.CountDownLatch;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
-import butterknife.BindView;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
@@ -109,40 +89,13 @@ import rx.schedulers.Schedulers;
/**
* 项目的主Activity,3个Fragment都嵌入在这里。
*/
-public class MainActivity extends BaseActivity implements OnClickListener {
+public class MainActivity extends BaseActivity {
- public static final int INDEX_GAME = 0;
- public static final int INDEX_NEWS = 1;
- public static final int INDEX_MESSAGE = 2;
- public static final int INDEX_PERSONAL = 3;
public final static String EB_MAINACTIVITY_TAG = "MainActivity";
public final static String EB_SKIP_GAMEFRAGMENT = "GameFragment";
- @BindView(R.id.main_iv_game)
- ImageView ivGame;
- @BindView(R.id.main_iv_news)
- ImageView ivNews;
- @BindView(R.id.main_iv_message)
- ImageView ivMessage;
- @BindView(R.id.main_iv_personal)
- ImageView ivPersonal;
- @BindView(R.id.main_tv_game)
- CheckedTextView tvGame;
- @BindView(R.id.main_tv_news)
- CheckedTextView tvNews;
- @BindView(R.id.main_tv_message)
- CheckedTextView tvMessage;
- @BindView(R.id.main_tv_personal)
- CheckedTextView tvPersonal;
- @BindView(R.id.main_iv_message_hint)
- View mMessageHint;
- private NewsFragment newsFragment;
- private MessageFragment messageFragment;
- private PersonalFragment personalFragment;
- private GameFragment gameFragment;
private SharedPreferences sp;
private ConcernManager concernManager;
- private ArrayList mSearchHintLint;
- private int currentTab;
+
private boolean isSkipped;
Runnable skipRun = new Runnable() {
@Override
@@ -374,13 +327,12 @@ public class MainActivity extends BaseActivity implements OnClickListener {
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
- outState.putInt("currentTab", currentTab);
outState.putBoolean("isSkipped", isSkipped);
}
@Override
protected int getLayoutId() {
- return R.layout.activity_main;
+ return R.layout.layout_wrapper_activity;
}
@Override
@@ -681,19 +633,18 @@ public class MainActivity extends BaseActivity implements OnClickListener {
isSkipped = false;
- initViews();
+// initViews();
if (savedInstanceState != null) {
- currentTab = savedInstanceState.getInt("currentTab");
+// currentTab = savedInstanceState.getInt("currentTab");
isSkipped = savedInstanceState.getBoolean("isSkipped");
- } else {
- currentTab = 0;
+// } else {
+// currentTab = 0;
}
- setTabSelection(currentTab);
+
+ replaceFragment(new MainFragment());
concernManager = new ConcernManager(getApplicationContext());
- getSearchHints();
-
if (!isNewFirstLaunch && sp.getBoolean("autoupdate", true)) {
// 检查助手更新
UpdateManager.getInstance(this).checkUpdate(true, null);
@@ -745,9 +696,6 @@ public class MainActivity extends BaseActivity implements OnClickListener {
getSuggestionType();
- checkMarkRead(); // 检查是否有记录已读消息
-
- checkMessageUnread(true); // 检查是否有未读消息
}
@Override
@@ -762,123 +710,6 @@ public class MainActivity extends BaseActivity implements OnClickListener {
handler.removeCallbacksAndMessages(null);
}
- private void checkMessageUnread(boolean isCheck) {
- TokenUtils.getToken(this, isCheck)
- .flatMap(new Func1>() {
- @Override
- public Observable call(String token) {
- return RetrofitManager.getMessage().getMessageUnread(token);
- }
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Response() {
- @Override
- public void onResponse(MessageUnreadEntity response) {
- super.onResponse(response);
- if (response != null && response.getKefuList() != null && response.getKefuList().size() > 0) {
- KeFuMarkReadDao dao = new KeFuMarkReadDao(MainActivity.this);
- for (int i = 0; i < response.getKefuList().size(); i++) {
- if (dao.isMarkRead(response.getKefuList().get(i))) {
- response.getKefuList().remove(i);
- i--;
- }
- }
-
- if (response.getKefuList() != null && response.getKefuList().size() > 0) {
- mMessageHint.setVisibility(View.VISIBLE);
- }
-
- }
-
- if (response != null && response.getComment() > 0) {
- mMessageHint.setVisibility(View.VISIBLE);
- }
- }
-
- @Override
- public void onFailure(HttpException e) {
- if (e != null && e.code() == 401) {
- checkMessageUnread(false);
- }
- }
- });
- }
-
- private void checkMarkRead() {
- MessageMarkReadDao readDao = new MessageMarkReadDao(MainActivity.this);
- List readInfos = readDao.getAll();
- if (readInfos == null || readInfos.size() == 0) {
- return;
- }
-
- MessageMarkReadInfo readInfo = readInfos.get(0);
- HashMap kefuIds = readInfo.getKefuIds();
- HashMap noticeIds = readInfo.getNoticeIds();
-
- if (kefuIds != null && kefuIds.size() > 0) {
- Utils.log("======提交已读客服消息");
- JSONArray array = new JSONArray();
- for (String s : kefuIds.keySet()) {
- array.put(s);
- }
- Utils.log("======客服id::" + array.toString());
- RequestBody body = RequestBody.create(MediaType.parse("application/json"), array.toString());
- postMarkRead("kefu", true, body, readDao);
- }
-
- if (noticeIds != null && noticeIds.size() > 0) {
- Utils.log("======提交已读公告消息");
- JSONArray array = new JSONArray();
- for (String s : noticeIds.keySet()) {
- array.put(s);
- }
- Utils.log("======客服id::" + array.toString());
- RequestBody body = RequestBody.create(MediaType.parse("application/json"), array.toString());
- postMarkRead("notice", true, body, readDao);
- }
-
- }
-
- private void postMarkRead(final String type, boolean isCkeck, final RequestBody body, final MessageMarkReadDao readDao) {
- TokenUtils
- .getToken(MainActivity.this, isCkeck)
- .flatMap(new Func1>() {
- @Override
- public Observable call(String token) {
- if ("kefu".equals(type)) {
- return RetrofitManager.getMessage().postMarkKeFuRead(body, token);
- } else {
- return RetrofitManager.getMessage().postMarkNoticeRead(body, token);
- }
- }
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Response() {
- @Override
- public void onResponse(ResponseBody response) {
- super.onResponse(response);
- Utils.log("=========postMarkRead::" + type);
- if ("kefu".equals(type)) {
- readDao.cleanKeFu();
- } else {
- readDao.cleanNotice();
- }
-
- }
-
- @Override
- public void onFailure(HttpException e) {
- super.onFailure(e);
- if (e != null && e.code() == 401) {
- postMarkRead(type, false, body, readDao);
- }
- }
- });
-
- }
-
private void getSuggestionType() {
RetrofitManager
.getApi()
@@ -996,7 +827,7 @@ public class MainActivity extends BaseActivity implements OnClickListener {
final ArrayList concernDigest = new ArrayList<>();
if (arrGameId.size() == 0) {
- EventBus.getDefault().post(new EBUISwitch("NewsFragment", -2)); // 没有关注
+ EventBus.getDefault().post(new EBUISwitch("NewsWrapperFragment", -2)); // 没有关注
}
List> list = new ArrayList<>();
@@ -1019,13 +850,6 @@ public class MainActivity extends BaseActivity implements OnClickListener {
});
}
- private void initViews() {
- findViewById(R.id.main_ll_game).setOnClickListener(this);
- findViewById(R.id.main_ll_news).setOnClickListener(this);
- findViewById(R.id.main_ll_message).setOnClickListener(this);
- findViewById(R.id.main_ll_personal).setOnClickListener(this);
- }
-
private void checkPermission() {
List installedList = getPackageManager().getInstalledPackages(0);
if (installedList.isEmpty()) {
@@ -1049,32 +873,6 @@ public class MainActivity extends BaseActivity implements OnClickListener {
}
}
- private void getSearchHints() {
- RetrofitManager.getApi().getSearchHints()
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(new Response>() {
- @Override
- public void onResponse(ArrayList response) {
- if (response.size() != 0) {
-// if (response.size() == 1) {
-// mSearchHintLint = response.get(0);
-// } else {
-// mSearchHintLint = response.get(RandomUtils.nextInt(response.size()));
-// }
-
- mSearchHintLint = response;
- if (gameFragment != null) {
- gameFragment.setHint(mSearchHintLint);
- }
- if (newsFragment != null) {
- newsFragment.setHint(mSearchHintLint);
- }
- }
- }
- });
- }
-
// 获取META-INF中的plugin_update 文件,判断是否从游戏插件中下载的app,是则获取游戏id,启动游戏更新,下载该游戏
private void getPluginUpdate() {
ApplicationInfo appinfo = getApplicationInfo();
@@ -1109,133 +907,6 @@ public class MainActivity extends BaseActivity implements OnClickListener {
}
}
- @Override
- public void onClick(View v) {
- final int id = v.getId();
- switch (v.getId()) {
- case R.id.main_ll_game:
- EventBus.getDefault().post(new EBUISwitch(EB_MAINACTIVITY_TAG, INDEX_GAME));
- setTabSelection(INDEX_GAME);
- break;
- case R.id.main_ll_news:
- EventBus.getDefault().post(new EBUISwitch(EB_MAINACTIVITY_TAG, INDEX_NEWS));
- setTabSelection(INDEX_NEWS);
- break;
- case R.id.main_ll_message:
- EventBus.getDefault().post(new EBUISwitch(EB_MAINACTIVITY_TAG, INDEX_MESSAGE));
- setTabSelection(INDEX_MESSAGE);
- break;
- case R.id.main_ll_personal:
- EventBus.getDefault().post(new EBUISwitch(EB_MAINACTIVITY_TAG, INDEX_PERSONAL));
- setTabSelection(INDEX_PERSONAL);
- break;
- default:
- break;
- }
-
- SystemBarTintManager tintManager = getTintManager();
- if (tintManager != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
- if (id == R.id.main_ll_personal) {
- tintManager.setStatusBarTintResource(R.color.theme);
- } else if (Build.MANUFACTURER.equals("Meizu") || Build.MANUFACTURER.equals("Xiaomi")) {
- tintManager.setStatusBarTintColor(Color.WHITE);
- } else {
- tintManager.setStatusBarTintColor(Color.BLACK);
- }
- }
- }
-
- private void setTabSelection(int index) {
- clearSelection();
- FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
- hideFragments(transaction);
- switch (index) {
- case INDEX_GAME:
- ivGame.setImageResource(R.drawable.ic_game_select);
- tvGame.setChecked(true);
- gameFragment = alterFragment(transaction, GameFragment.class);
- break;
- case INDEX_NEWS:
- ivNews.setImageResource(R.drawable.ic_news_select);
- tvNews.setChecked(true);
- newsFragment = alterFragment(transaction, NewsFragment.class);
- break;
- case INDEX_MESSAGE:
- ivMessage.setImageResource(R.drawable.ic_message_select);
- tvMessage.setChecked(true);
- messageFragment = alterFragment(transaction, MessageFragment.class);
- break;
- case INDEX_PERSONAL:
- ivPersonal.setImageResource(R.drawable.ic_user_select);
- tvPersonal.setChecked(true);
- personalFragment = alterFragment(transaction, PersonalFragment.class);
- break;
- default:
- break;
- }
- currentTab = index;
- transaction.commit();
- }
-
- // 清除掉所有的选中状态。
- private void clearSelection() {
- ivGame.setImageResource(R.drawable.ic_game_unselect);
- ivNews.setImageResource(R.drawable.ic_news_unselect);
- ivMessage.setImageResource(R.drawable.ic_message_unselect);
- ivPersonal.setImageResource(R.drawable.ic_user_unselect);
-
- tvGame.setChecked(false);
- tvNews.setChecked(false);
- tvMessage.setChecked(false);
- tvPersonal.setChecked(false);
- }
-
- // 将所有的Fragment都置为隐藏状态。
- private void hideFragments(FragmentTransaction transaction) {
- List list = getSupportFragmentManager().getFragments();
- if (list != null) {
- for (Fragment fragment : list) {
- transaction.hide(fragment);
- }
- }
- }
-
- // private T alterFragment(Class cls) {
- private T alterFragment(FragmentTransaction transaction, Class cls) {
- T fragmentByTag = (T) getSupportFragmentManager().findFragmentByTag(cls.getSimpleName());
- try {
- if (fragmentByTag != null) {
- transaction.show(fragmentByTag);
- } else {
- fragmentByTag = cls.newInstance();
- transaction.add(R.id.main_content, fragmentByTag, cls.getSimpleName());
- if (fragmentByTag instanceof SearchBarHint && mSearchHintLint != null && mSearchHintLint.size() > 0) {
- ((SearchBarHint) fragmentByTag).setHint(mSearchHintLint);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return fragmentByTag;
- }
-
- @Subscribe(threadMode = ThreadMode.MAIN)
- public void onEventMainThread(EBSkip skip) {
- if (EB_SKIP_GAMEFRAGMENT.equals(skip.getType())) {
- EventBus.getDefault().post(new EBUISwitch(EB_MAINACTIVITY_TAG, INDEX_GAME));
- setTabSelection(INDEX_GAME);
- EventBus.getDefault().post(new EBSkip(EB_MAINACTIVITY_TAG, skip.getCurrentItem()));
- }
- }
-
- @Subscribe(threadMode = ThreadMode.MAIN)
- public void onEventMainThread(EBReuse reuse) {
- if (MessageFragment.MESSAGE_READ_OVER.equals(reuse.getType())) {
- Utils.log("======= over??");
- mMessageHint.setVisibility(View.GONE);
- }
- }
-
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(EBPackage busFour) {
final String packageName = busFour.getPackageName();
diff --git a/app/src/main/java/com/gh/gamecenter/SkipActivity.java b/app/src/main/java/com/gh/gamecenter/SkipActivity.java
index 2974e5fd42..cc97b12c43 100644
--- a/app/src/main/java/com/gh/gamecenter/SkipActivity.java
+++ b/app/src/main/java/com/gh/gamecenter/SkipActivity.java
@@ -38,7 +38,7 @@ public class SkipActivity extends BaseActivity {
@Override
protected int getLayoutId() {
//TODO 暂时无意义设置,避免崩溃罢了,修改完主题和Toolbar相关内容会干掉这个
- return R.layout.activity_main;
+ return R.layout.fragment_main;
}
@Override
diff --git a/app/src/main/java/com/gh/gamecenter/adapter/ImagePagerAdapter.java b/app/src/main/java/com/gh/gamecenter/adapter/ImagePagerAdapter.java
index 9a10c42c60..e75347b229 100644
--- a/app/src/main/java/com/gh/gamecenter/adapter/ImagePagerAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/adapter/ImagePagerAdapter.java
@@ -70,6 +70,7 @@ public class ImagePagerAdapter extends RecyclingPagerAdapter {
ImageUtils.getInstance().display(mContext.getResources(), (SimpleDraweeView) view,
slideEntity.getImage(), R.drawable.preload);
+
// indicator.setPosition(mSlideEntityList.mSize(), getPosition(position));
view.setOnClickListener(new View.OnClickListener() {
diff --git a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewPagerViewHolder.java b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewPagerViewHolder.java
index 027209efb0..e4f5b76ff6 100644
--- a/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewPagerViewHolder.java
+++ b/app/src/main/java/com/gh/gamecenter/adapter/viewholder/GameViewPagerViewHolder.java
@@ -1,8 +1,9 @@
package com.gh.gamecenter.adapter.viewholder;
import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
import android.widget.LinearLayout;
-import android.widget.RelativeLayout;
import android.widget.TextView;
import com.gh.base.BaseRecyclerViewHolder;
@@ -23,15 +24,18 @@ public class GameViewPagerViewHolder extends BaseRecyclerViewHolder {
public LinearLayout viewpager_ll_hint;
@BindView(R.id.viewpager_tv_failure)
public TextView viewpager_tv_failure;
- @BindView(R.id.home_subject_rl)
- public RelativeLayout subjectRl;
@BindView(R.id.home_subject_failure)
public TextView subjectFailure;
@BindView(R.id.home_subject_ll)
public LinearLayout subjectLl;
- public GameViewPagerViewHolder(View itemView) {
+ public GameViewPagerViewHolder(View itemView, int width) {
super(itemView);
+ // 傻逼viewpager拿不到高度,一定要自己算下,妈的,先不管了
+ FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT, (int) (width / 16f * 7f));
+ viewPager.setLayoutParams(params);
+
}
}
diff --git a/app/src/main/java/com/gh/gamecenter/download/FileSendFragment.java b/app/src/main/java/com/gh/gamecenter/download/FileSendFragment.java
index db930a33d1..a5724f9943 100644
--- a/app/src/main/java/com/gh/gamecenter/download/FileSendFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/download/FileSendFragment.java
@@ -6,7 +6,7 @@ import android.text.Html;
import android.view.View;
import android.widget.TextView;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.DialogUtils;
import com.gh.common.util.StringUtils;
import com.gh.gamecenter.CleanApkActivity;
diff --git a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java
index 0639feb55a..52a438c1ac 100644
--- a/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/download/GameDownloadFragment.java
@@ -15,7 +15,7 @@ import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.constant.Constants;
import com.gh.common.util.DialogUtils;
import com.gh.common.util.NetworkUtils;
diff --git a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java
index ff40f55e54..f36aa86354 100644
--- a/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/download/GameUpdateFragment.java
@@ -7,7 +7,7 @@ import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.EntranceUtils;
import com.gh.gamecenter.MainActivity;
import com.gh.gamecenter.R;
diff --git a/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java
index 5ce40754a5..9eeeef4aff 100644
--- a/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/fragment/GameFragment.java
@@ -37,7 +37,7 @@ import java.util.List;
* Created by khy on 2016/12/6.
* 新主界面
*/
-public class GameFragment extends HomeFragment implements SwipeRefreshLayout.OnRefreshListener, OnRequestCallBackListener {
+public class GameFragment extends SearchToolbarFragment implements SwipeRefreshLayout.OnRefreshListener, OnRequestCallBackListener {
private SwipeRefreshLayout fm_game_swipe_refresh;
private RecyclerView fm_game_rv_list;
@@ -91,8 +91,7 @@ public class GameFragment extends HomeFragment implements SwipeRefreshLayout.OnR
@Override
protected void initView(final View view) {
super.initView(view);
- View inflate = View.inflate(getActivity(), R.layout.fragment_game, null);
- ((LinearLayout) view).addView(inflate);
+
reuse_no_connection = (LinearLayout) view.findViewById(R.id.reuse_no_connection);
fm_game_swipe_refresh = (SwipeRefreshLayout) view.findViewById(R.id.fm_game_swipe_refresh);
fm_game_rv_list = (RecyclerView) view.findViewById(R.id.fm_game_rv_list);
@@ -115,7 +114,7 @@ public class GameFragment extends HomeFragment implements SwipeRefreshLayout.OnR
((DefaultItemAnimator) fm_game_rv_list.getItemAnimator()).setSupportsChangeAnimations(false);
fm_game_rv_list.setHasFixedSize(true);
fm_game_rv_list.setLayoutManager(new LinearLayoutManager(getActivity()));
- adapter = new GameFragmentAdapter(GameFragment.this, fm_game_swipe_refresh);
+ adapter = new GameFragmentAdapter(this, fm_game_swipe_refresh);
fm_game_rv_list.setAdapter(adapter);
fm_game_rv_list.addOnScrollListener(new RecyclerView.OnScrollListener() {
diff --git a/app/src/main/java/com/gh/gamecenter/fragment/MainFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/MainFragment.java
index ba241ecb20..1af3438a05 100644
--- a/app/src/main/java/com/gh/gamecenter/fragment/MainFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/fragment/MainFragment.java
@@ -1,10 +1,295 @@
-//package com.gh.gamecenter.fragment;
-//
-///**
-// * @author CsHeng
-// * @Date 05/05/2017
-// * @Time 3:26 PM
-// */
-//
-//public class MainFragment {
-//}
+package com.gh.gamecenter.fragment;
+
+import android.content.Context;
+import android.graphics.Color;
+import android.os.Build;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.view.View;
+
+import com.gh.base.SearchBarHint;
+import com.gh.base.fragment.BaseFragment_ViewPager_Checkable;
+import com.gh.common.util.TokenUtils;
+import com.gh.common.util.Utils;
+import com.gh.gamecenter.MainActivity;
+import com.gh.gamecenter.R;
+import com.gh.gamecenter.db.KeFuMarkReadDao;
+import com.gh.gamecenter.db.MessageMarkReadDao;
+import com.gh.gamecenter.db.info.MessageMarkReadInfo;
+import com.gh.gamecenter.entity.MessageUnreadEntity;
+import com.gh.gamecenter.eventbus.EBReuse;
+import com.gh.gamecenter.eventbus.EBSkip;
+import com.gh.gamecenter.eventbus.EBUISwitch;
+import com.gh.gamecenter.message.MessageFragment;
+import com.gh.gamecenter.news.NewsWrapperFragment;
+import com.gh.gamecenter.personal.PersonalFragment;
+import com.gh.gamecenter.retrofit.Response;
+import com.gh.gamecenter.retrofit.RetrofitManager;
+import com.lightgame.view.NoScrollableViewPager;
+import com.readystatesoftware.systembartint.SystemBarTintManager;
+
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
+import org.json.JSONArray;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import butterknife.BindView;
+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;
+
+import static com.gh.gamecenter.MainActivity.EB_MAINACTIVITY_TAG;
+import static com.gh.gamecenter.MainActivity.EB_SKIP_GAMEFRAGMENT;
+
+/**
+ * @author CsHeng
+ * @Date 05/05/2017
+ * @Time 3:26 PM
+ */
+
+public class MainFragment extends BaseFragment_ViewPager_Checkable {
+
+ public static final int INDEX_GAME = 0;
+ public static final int INDEX_NEWS = 1;
+ public static final int INDEX_MESSAGE = 2;
+ public static final int INDEX_PERSONAL = 3;
+ private ArrayList mSearchHintLint;
+ @BindView(R.id.main_iv_message_hint)
+ View mMessageHint;
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.fragment_main;
+ }
+
+ @Override
+ protected int getCheckableGroupId() {
+ return R.id.lightgame_tab_container;
+ }
+
+ @Override
+ protected int getViewPagerId() {
+ return R.id.lightgame_tab_viewpager;
+ }
+
+ @Override
+ protected void initFragmentList(List fragments) {
+ fragments.add(new GameFragment());
+ fragments.add(new NewsWrapperFragment());
+ fragments.add(new MessageFragment());
+ fragments.add(new PersonalFragment());
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ checkMarkRead(getContext()); // 检查是否有记录已读消息
+ checkMessageUnread(getContext(), true); // 检查是否有未读消息
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ if (mViewPager instanceof NoScrollableViewPager) {
+ ((NoScrollableViewPager) mViewPager).setScrollable(false);
+ }
+ getSearchHints();
+ }
+
+ @Override
+ protected boolean handleOnClick(View view) {
+ boolean res = super.handleOnClick(view);
+ EventBus.getDefault().post(new EBUISwitch(EB_MAINACTIVITY_TAG, mCheckedIndex));
+ return res;
+ }
+
+ @Override
+ protected void onPageChanged(int index) {
+ super.onPageChanged(index);
+
+ Fragment fragment = mFragmentsList.get(index);
+ if (fragment instanceof SearchBarHint && mSearchHintLint != null && !mSearchHintLint.isEmpty()) {
+ ((SearchBarHint) fragment).setHint(mSearchHintLint);
+ }
+
+ if (getActivity() instanceof MainActivity) {
+ SystemBarTintManager tintManager = ((MainActivity) getActivity()).getTintManager();
+ if (tintManager != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
+ if (index == INDEX_PERSONAL) {
+ tintManager.setStatusBarTintResource(R.color.theme);
+ } else if (Build.MANUFACTURER.equals("Meizu") || Build.MANUFACTURER.equals("Xiaomi")) {
+ tintManager.setStatusBarTintColor(Color.WHITE);
+ } else {
+ tintManager.setStatusBarTintColor(Color.BLACK);
+ }
+ }
+ }
+ }
+
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ public void onEventMainThread(EBSkip skip) {
+ if (EB_SKIP_GAMEFRAGMENT.equals(skip.getType())) {
+ EventBus.getDefault().post(new EBUISwitch(EB_MAINACTIVITY_TAG, INDEX_GAME));
+ checkIndex(INDEX_GAME);
+ EventBus.getDefault().post(new EBSkip(EB_MAINACTIVITY_TAG, skip.getCurrentItem()));
+ }
+ }
+
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ public void onEventMainThread(EBReuse reuse) {
+ if (MessageFragment.MESSAGE_READ_OVER.equals(reuse.getType())) {
+ if (mMessageHint != null) {
+ mMessageHint.setVisibility(View.GONE);
+ }
+ }
+ }
+
+ private void getSearchHints() {
+ RetrofitManager.getApi().getSearchHints()
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Response>() {
+ @Override
+ public void onResponse(ArrayList response) {
+ if (response.size() != 0) {
+ mSearchHintLint = response;
+
+ for (Fragment fragment : mFragmentsList) {
+ if (fragment instanceof SearchBarHint) {
+ ((SearchBarHint) fragment).setHint(mSearchHintLint);
+ }
+ }
+ }
+ }
+ });
+ }
+
+ private void checkMessageUnread(final Context context, boolean isCheck) {
+ TokenUtils.getToken(context, isCheck)
+ .flatMap(new Func1>() {
+ @Override
+ public Observable call(String token) {
+ return RetrofitManager.getMessage().getMessageUnread(token);
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Response() {
+ @Override
+ public void onResponse(MessageUnreadEntity response) {
+ super.onResponse(response);
+ if (response != null && response.getKefuList() != null && response.getKefuList().size() > 0) {
+ KeFuMarkReadDao dao = new KeFuMarkReadDao(context);
+ for (int i = 0; i < response.getKefuList().size(); i++) {
+ if (dao.isMarkRead(response.getKefuList().get(i))) {
+ response.getKefuList().remove(i);
+ i--;
+ }
+ }
+
+ if (response.getKefuList() != null && response.getKefuList().size() > 0) {
+ mMessageHint.setVisibility(View.VISIBLE);
+ }
+
+ }
+
+ if (response != null && response.getComment() > 0) {
+ mMessageHint.setVisibility(View.VISIBLE);
+ }
+ }
+
+ @Override
+ public void onFailure(HttpException e) {
+ if (e != null && e.code() == 401) {
+ checkMessageUnread(getContext(), false);
+ }
+ }
+ });
+ }
+
+ private void checkMarkRead(Context context) {
+ MessageMarkReadDao readDao = new MessageMarkReadDao(context);
+ List readInfos = readDao.getAll();
+ if (readInfos == null || readInfos.size() == 0) {
+ return;
+ }
+
+ MessageMarkReadInfo readInfo = readInfos.get(0);
+ HashMap kefuIds = readInfo.getKefuIds();
+ HashMap noticeIds = readInfo.getNoticeIds();
+
+ if (kefuIds != null && kefuIds.size() > 0) {
+ Utils.log("======提交已读客服消息");
+ JSONArray array = new JSONArray();
+ for (String s : kefuIds.keySet()) {
+ array.put(s);
+ }
+ Utils.log("======客服id::" + array.toString());
+ RequestBody body = RequestBody.create(MediaType.parse("application/json"), array.toString());
+ postMarkRead(context, "kefu", true, body, readDao);
+ }
+
+ if (noticeIds != null && noticeIds.size() > 0) {
+ Utils.log("======提交已读公告消息");
+ JSONArray array = new JSONArray();
+ for (String s : noticeIds.keySet()) {
+ array.put(s);
+ }
+ Utils.log("======客服id::" + array.toString());
+ RequestBody body = RequestBody.create(MediaType.parse("application/json"), array.toString());
+ postMarkRead(context, "notice", true, body, readDao);
+ }
+
+ }
+
+ private void postMarkRead(final Context context, final String type, boolean isCkeck, final RequestBody body,
+ final MessageMarkReadDao readDao) {
+ TokenUtils.getToken(context, isCkeck)
+ .flatMap(new Func1>() {
+ @Override
+ public Observable call(String token) {
+ if ("kefu".equals(type)) {
+ return RetrofitManager.getMessage().postMarkKeFuRead(body, token);
+ } else {
+ return RetrofitManager.getMessage().postMarkNoticeRead(body, token);
+ }
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
+ .subscribe(new Response() {
+ @Override
+ public void onResponse(ResponseBody response) {
+ super.onResponse(response);
+ Utils.log("=========postMarkRead::" + type);
+ if ("kefu".equals(type)) {
+ readDao.cleanKeFu();
+ } else {
+ readDao.cleanNotice();
+ }
+
+ }
+
+ @Override
+ public void onFailure(HttpException e) {
+ super.onFailure(e);
+ if (e != null && e.code() == 401) {
+ postMarkRead(context, type, false, body, readDao);
+ }
+ }
+ });
+
+ }
+
+}
diff --git a/app/src/main/java/com/gh/gamecenter/fragment/NewsFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/NewsFragment.java
new file mode 100644
index 0000000000..636ff5a57d
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/fragment/NewsFragment.java
@@ -0,0 +1,129 @@
+package com.gh.gamecenter.fragment;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.support.v4.app.Fragment;
+import android.util.DisplayMetrics;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import com.gh.base.fragment.BaseFragment_ViewPager_Checkable;
+import com.gh.common.util.DataCollectionUtils;
+import com.gh.common.util.DisplayUtils;
+import com.gh.gamecenter.MainActivity;
+import com.gh.gamecenter.R;
+import com.gh.gamecenter.eventbus.EBUISwitch;
+import com.gh.gamecenter.news.News1Fragment;
+import com.gh.gamecenter.news.News2Fragment;
+import com.gh.gamecenter.news.News3Fragment;
+import com.gh.gamecenter.news.News4Fragment;
+
+import org.greenrobot.eventbus.EventBus;
+import org.greenrobot.eventbus.Subscribe;
+import org.greenrobot.eventbus.ThreadMode;
+
+import java.util.List;
+
+import butterknife.BindView;
+
+import static com.gh.gamecenter.news.NewsWrapperFragment.EB_NEWSFRAGMENT_TAG;
+
+/**
+ * @author CsHeng
+ * @Date 17/06/2017
+ * @Time 10:30 AM
+ */
+
+public class NewsFragment extends BaseFragment_ViewPager_Checkable {
+
+ @BindView(R.id.slidebar_line)
+ View mNewsSlidebarLine;
+ private LinearLayout.LayoutParams mLayoutParams;
+ private int mWidth;
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.fragment_news;
+ }
+
+ @Override
+ protected int getCheckableGroupId() {
+ return R.id.lightgame_tab_container;
+ }
+
+ @Override
+ protected int getViewPagerId() {
+ return R.id.lightgame_tab_viewpager;
+ }
+
+ @Override
+ protected void initFragmentList(List fragments) {
+ fragments.add(new News1Fragment());
+ fragments.add(new News2Fragment());
+ fragments.add(new News3Fragment());
+ fragments.add(new News4Fragment());
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ DisplayMetrics outMetrics = new DisplayMetrics();
+ getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
+ mWidth = outMetrics.widthPixels / 4;
+ mLayoutParams = new LinearLayout.LayoutParams(mWidth / 2, DisplayUtils.dip2px(getActivity(), 2));
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+
+ mLayoutParams.leftMargin = (int) (mWidth * (mCheckedIndex + 0.25f));
+ mNewsSlidebarLine.setLayoutParams(mLayoutParams);
+
+ view.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ EventBus.getDefault().post(new EBUISwitch(EB_NEWSFRAGMENT_TAG, mCheckedIndex));
+ }
+ }, 100);
+ }
+
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ super.onPageScrolled(position, positionOffset, positionOffsetPixels);
+ if (positionOffset != 0) {
+ mLayoutParams.leftMargin = (int) (mWidth * (position + positionOffset + 0.25f));
+ mNewsSlidebarLine.setLayoutParams(mLayoutParams);
+// } else {
+// if (currentItem != mNewsVP.getCurrentItem()) {
+// currentItem = mNewsVP.getCurrentItem();
+// EventBus.getDefault().post(new EBUISwitch(EB_NEWSFRAGMENT_TAG, currentItem));
+// }
+ }
+ }
+
+ @Override
+ protected void onPageChanged(int index) {
+ super.onPageChanged(index);
+ if (index == 0) {
+ DataCollectionUtils.uploadPosition(getActivity(), "资讯", "1", "资讯");
+ } else if (index == 1) {
+ DataCollectionUtils.uploadPosition(getActivity(), "资讯", "2", "攻略");
+ } else if (index == 2) {
+ DataCollectionUtils.uploadPosition(getActivity(), "资讯", "3", "原创");
+ } else if (index == 3) {
+ DataCollectionUtils.uploadPosition(getActivity(), "资讯", "4", "关注");
+ }
+ }
+
+ @Subscribe(threadMode = ThreadMode.MAIN)
+ public void onEventMainThread(EBUISwitch busNine) {
+ if (MainActivity.EB_MAINACTIVITY_TAG.equals(busNine.getFrom())) {
+ if (busNine.getPosition() == 1) {
+ EventBus.getDefault().post(new EBUISwitch(EB_NEWSFRAGMENT_TAG, mCheckedIndex));
+ }
+ }
+ }
+
+
+}
diff --git a/app/src/main/java/com/gh/gamecenter/fragment/HomeFragment.java b/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java
similarity index 64%
rename from app/src/main/java/com/gh/gamecenter/fragment/HomeFragment.java
rename to app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java
index 5c9404e453..b27fe10d93 100644
--- a/app/src/main/java/com/gh/gamecenter/fragment/HomeFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/fragment/SearchToolbarFragment.java
@@ -7,15 +7,13 @@ import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.ScaleAnimation;
-import android.widget.LinearLayout;
import android.widget.TextView;
-import com.gh.base.BaseFragment;
import com.gh.base.SearchBarHint;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.constant.Config;
import com.gh.common.util.DataCollectionUtils;
import com.gh.common.util.DataUtils;
-import com.gh.common.util.DisplayUtils;
import com.gh.common.util.EntranceUtils;
import com.gh.download.DownloadManager;
import com.gh.gamecenter.ConcernActivity;
@@ -38,39 +36,35 @@ import butterknife.BindView;
* Created by LGT on 2016/9/9.
* 工具栏 搜索控制
*/
-public abstract class HomeFragment extends BaseFragment implements View.OnClickListener, SearchBarHint {
+public class SearchToolbarFragment extends BaseFragment implements View.OnClickListener, SearchBarHint {
- private TextView downloadHint;
- private TextView searchHint;
+ @BindView(R.id.action_tip)
+ TextView mDownloadHintTv;
+
+ @BindView(R.id.actionbar_search_input)
+ TextView mSearchHintTv;
+
+ @BindView(R.id.actionbar_rl_download)
+ View mDownloadView;
private AlphaAnimation mAlphaAnimation;
- private ArrayList hintList;
- private int hintIndex;
+ private ArrayList mHintList;
+ private int mHintIndex;
- @BindView(R.id.actionbar_rl_download)
- View mActionBarDownloadView;
+ @Override
+ protected int getLayoutId() {
+ return R.layout.fragment_toolbar;
+ }
@Override
protected void initView(View view) {
super.initView(view);
-// SharedPreferences sp = getActivity().getSharedPreferences(
-// Config.PREFERENCE, Context.MODE_PRIVATE);
- LinearLayout home_actionbar = (LinearLayout) view.findViewById(R.id.home_actionbar);
- LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(getActivity(), 55));
-
-// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
-// int top = DisplayUtils.getStatusBarHeight(getResources());
-// home_actionbar.setPadding(0, top, 0, 0);
-// lparams.height += top;
-// }
- home_actionbar.setLayoutParams(lparams);
initActionBar(view);
- final ScaleAnimation scaleAnimation = new ScaleAnimation(0.4f, 1.0f, 0.4f, 1.0f
- , Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
+ final ScaleAnimation scaleAnimation = new ScaleAnimation(0.4f, 1.0f, 0.4f, 1.0f,
+ Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnimation.setDuration(500);
mAlphaAnimation = new AlphaAnimation(1f, 0.2f);
@@ -86,7 +80,7 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL
@Override
public void onAnimationEnd(Animation animation) {
if (mAlphaAnimation != null) {
- searchHint.setAnimation(mAlphaAnimation);
+ mSearchHintTv.setAnimation(mAlphaAnimation);
mAlphaAnimation.start();
}
}
@@ -106,14 +100,14 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL
@Override
public void onAnimationEnd(Animation animation) {
// 切换数据
- if (hintIndex > hintList.size() - 1) {
- hintIndex = 0;
+ if (mHintIndex > mHintList.size() - 1) {
+ mHintIndex = 0;
}
- searchHint.setHint(hintList.get(hintIndex));
- hintIndex++;
+ mSearchHintTv.setHint(mHintList.get(mHintIndex));
+ mHintIndex++;
if (scaleAnimation != null) {
- searchHint.setAnimation(scaleAnimation);
+ mSearchHintTv.setAnimation(scaleAnimation);
scaleAnimation.start();
}
}
@@ -124,12 +118,12 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL
}
});
- if (hintList != null && hintList.size() > 0) {
- if (hintList.size() > 1) {
- searchHint.setAnimation(mAlphaAnimation);
+ if (mHintList != null && mHintList.size() > 0) {
+ if (mHintList.size() > 1) {
+ mSearchHintTv.setAnimation(mAlphaAnimation);
} else {
- String hint = hintList.get(0);
- searchHint.setHint(hint);
+ String hint = mHintList.get(0);
+ mSearchHintTv.setHint(hint);
}
}
@@ -140,49 +134,47 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
- hintList = savedInstanceState.getStringArrayList("hint");
+ mHintList = savedInstanceState.getStringArrayList("hint");
}
- hintIndex = 0;
+ mHintIndex = 0;
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
- if (hintList != null && !hintList.isEmpty()) {
- outState.putStringArrayList("hint", hintList);
+ if (mHintList != null && !mHintList.isEmpty()) {
+ outState.putStringArrayList("hint", mHintList);
}
}
private void initActionBar(View view) {
- mActionBarDownloadView.setOnClickListener(this);
+ mDownloadView.setOnClickListener(this);
view.findViewById(R.id.actionbar_iv_search).setOnClickListener(this);
view.findViewById(R.id.actionbar_notification).setOnClickListener(this);
view.findViewById(R.id.actionbar_search_rl).setOnClickListener(this);
if (Config.isShow(getActivity())) {
- mActionBarDownloadView.setVisibility(View.VISIBLE);
+ mDownloadView.setVisibility(View.VISIBLE);
} else {
- mActionBarDownloadView.setVisibility(View.GONE);
+ mDownloadView.setVisibility(View.GONE);
}
- downloadHint = (TextView) view.findViewById(R.id.action_tip);
int updateSize = PackageManager.getUpdateListSize();
int downloadSize = DownloadManager.getInstance(getActivity()).getAll().size();
if (downloadSize != 0) {
- downloadHint.setVisibility(View.VISIBLE);
- downloadHint.setText(String.valueOf(downloadSize));
+ mDownloadHintTv.setVisibility(View.VISIBLE);
+ mDownloadHintTv.setText(String.valueOf(downloadSize));
} else if (updateSize != 0) {
- downloadHint.setVisibility(View.VISIBLE);
- downloadHint.setText(String.valueOf(updateSize));
+ mDownloadHintTv.setVisibility(View.VISIBLE);
+ mDownloadHintTv.setText(String.valueOf(updateSize));
} else {
- downloadHint.setVisibility(View.GONE);
+ mDownloadHintTv.setVisibility(View.GONE);
}
- searchHint = (TextView) view.findViewById(R.id.actionbar_search_input);
- searchHint.setOnClickListener(this);
+ mSearchHintTv.setOnClickListener(this);
}
@Override
@@ -199,7 +191,7 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL
Intent intent = new Intent(getActivity(), SearchActivity.class);
intent.putExtra("clicked", true);
- intent.putExtra("hint", searchHint.getHint().toString());
+ intent.putExtra("hint", mSearchHintTv.getHint().toString());
intent.putExtra(EntranceUtils.KEY_ENTRANCE, "(工具栏)");
startActivity(intent);
} else if (id == R.id.actionbar_search_input || id == R.id.actionbar_search_rl) {
@@ -208,7 +200,7 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL
Intent intent = new Intent(getActivity(), SearchActivity.class);
intent.putExtra("clicked", false);
- intent.putExtra("hint", searchHint.getHint().toString());
+ intent.putExtra("hint", mSearchHintTv.getHint().toString());
intent.putExtra(EntranceUtils.KEY_ENTRANCE, "(工具栏)");
startActivity(intent);
} else if (id == R.id.actionbar_notification) {
@@ -226,9 +218,9 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL
public void onEventMainThread(EBReuse reuse) {
if ("Refresh".equals(reuse.getType())) {
if (Config.isShow(getActivity())) {
- mActionBarDownloadView.setVisibility(View.VISIBLE);
+ mDownloadView.setVisibility(View.VISIBLE);
} else {
- mActionBarDownloadView.setVisibility(View.GONE);
+ mDownloadView.setVisibility(View.GONE);
}
}
}
@@ -238,24 +230,24 @@ public abstract class HomeFragment extends BaseFragment implements View.OnClickL
int updateSize = PackageManager.getUpdateListSize();
int downloadSize = DownloadManager.getInstance(getActivity()).getAll().size();
if (downloadSize != 0) {
- downloadHint.setVisibility(View.VISIBLE);
- downloadHint.setText(String.valueOf(downloadSize));
+ mDownloadHintTv.setVisibility(View.VISIBLE);
+ mDownloadHintTv.setText(String.valueOf(downloadSize));
} else if (updateSize != 0) {
- downloadHint.setVisibility(View.VISIBLE);
- downloadHint.setText(String.valueOf(updateSize));
+ mDownloadHintTv.setVisibility(View.VISIBLE);
+ mDownloadHintTv.setText(String.valueOf(updateSize));
} else {
- downloadHint.setVisibility(View.GONE);
+ mDownloadHintTv.setVisibility(View.GONE);
}
}
@Override
public void setHint(ArrayList hint) {
if (hint != null && hint.size() > 0) {
- hintList = hint;
- if (hint.size() == 1 && searchHint != null) {
- searchHint.setHint(hintList.get(0));
- } else if (mAlphaAnimation != null && searchHint != null) {
- searchHint.setAnimation(mAlphaAnimation);
+ mHintList = hint;
+ if (hint.size() == 1 && mSearchHintTv != null) {
+ mSearchHintTv.setHint(mHintList.get(0));
+ } else if (mAlphaAnimation != null && mSearchHintTv != null) {
+ mSearchHintTv.setAnimation(mAlphaAnimation);
}
}
}
diff --git a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java
index 3e2472a771..a01fa78a0c 100644
--- a/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java
+++ b/app/src/main/java/com/gh/gamecenter/game/GameFragmentAdapter.java
@@ -11,18 +11,18 @@ import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.text.TextUtils;
import android.util.DisplayMetrics;
-import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
-import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.drawee.view.SimpleDraweeView;
+import com.gh.base.OnRequestCallBackListener;
+import com.gh.base.adapter.BaseRecyclerAdapter;
import com.gh.common.constant.ItemViewType;
import com.gh.common.util.ApkActiveUtils;
import com.gh.common.util.DataCollectionUtils;
@@ -46,7 +46,6 @@ import com.gh.gamecenter.PluginActivity;
import com.gh.gamecenter.R;
import com.gh.gamecenter.SubjectActivity;
import com.gh.gamecenter.ToolBoxActivity;
-import com.gh.base.adapter.BaseRecyclerAdapter;
import com.gh.gamecenter.adapter.ImagePagerAdapter;
import com.gh.gamecenter.adapter.viewholder.FooterViewHolder;
import com.gh.gamecenter.adapter.viewholder.GameHeadViewHolder;
@@ -62,7 +61,6 @@ import com.gh.gamecenter.entity.SlideEntity;
import com.gh.gamecenter.entity.SubjectDigestEntity;
import com.gh.gamecenter.entity.SubjectEntity;
import com.gh.gamecenter.fragment.GameFragment;
-import com.gh.base.OnRequestCallBackListener;
import com.gh.gamecenter.manager.GameManager;
import com.gh.gamecenter.manager.PackageManager;
import com.gh.gamecenter.retrofit.Response;
@@ -74,7 +72,6 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
-import cn.trinea.android.view.autoscrollviewpager.AutoScrollViewPager;
import retrofit2.HttpException;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Func1;
@@ -108,7 +105,6 @@ public class GameFragmentAdapter extends BaseRecyclerAdapter {
private boolean mIsOver;
private boolean mIsInitPlugin;
private boolean mIsAutoScroll;
- private int mTopHeight;
public GameFragmentAdapter(GameFragment gameFragment, SwipeRefreshLayout refreshLayout) {
super(gameFragment.getContext());
@@ -137,11 +133,6 @@ public class GameFragmentAdapter extends BaseRecyclerAdapter {
mIsInitPlugin = false;
mIsAutoScroll = false;
- DisplayMetrics outMetrics = new DisplayMetrics();
- gameFragment.getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
-
- mTopHeight = (int) (outMetrics.widthPixels / 16f * 10.5f);
-
initSubjectDigest(true);
}
@@ -461,52 +452,20 @@ public class GameFragmentAdapter extends BaseRecyclerAdapter {
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == ItemViewType.GAME_SLIDE) {
- View view = mLayoutInflater.inflate(R.layout.game_viewpager_item, parent, false);
DisplayMetrics outMetrics = new DisplayMetrics();
mGameFragment.getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
- LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.MATCH_PARENT, mTopHeight); //整个头部大小16:10 viewpager大小16:7
- view.setLayoutParams(params);
-
- AutoScrollViewPager viewPager = (AutoScrollViewPager) view.findViewById(R.id.view_pager);
- RelativeLayout.LayoutParams vpParams = new RelativeLayout.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT, (int) (outMetrics.widthPixels / 16f * 7f));
- viewPager.setLayoutParams(vpParams);
-
- RelativeLayout subjectRl = (RelativeLayout) view.findViewById(R.id.home_subject_rl);
- RelativeLayout.LayoutParams subjectParams = new RelativeLayout.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT, (int) (outMetrics.widthPixels / 16f * 3.5f));
- subjectParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
- subjectRl.setLayoutParams(subjectParams);
-
- LinearLayout hint = (LinearLayout) view.findViewById(R.id.viewpager_ll_hint);
- RelativeLayout.LayoutParams hintParams = new RelativeLayout.LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
- hintParams.setMargins(0, (int) (outMetrics.widthPixels / 16f * 6.5f), DisplayUtils.dip2px(mContext, 10), 0);
- hintParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
- hint.setLayoutParams(hintParams);
-
- return new GameViewPagerViewHolder(view);
+ return new GameViewPagerViewHolder(mLayoutInflater.inflate(R.layout.game_viewpager_item, parent, false),
+ outMetrics.widthPixels);
} else if (viewType == ItemViewType.COLUMN_HEADER) {
- View view = LayoutInflater.from(parent.getContext()).inflate(
- R.layout.game_head_item, parent, false);
- return new GameHeadViewHolder(view);
+ return new GameHeadViewHolder(mLayoutInflater.inflate(R.layout.game_head_item, parent, false));
} else if (viewType == ItemViewType.GAME_NORMAL) {
- View view = LayoutInflater.from(parent.getContext()).inflate(
- R.layout.game_normal_item, parent, false);
- return new GameNormalViewHolder(view);
+ return new GameNormalViewHolder(mLayoutInflater.inflate(R.layout.game_normal_item, parent, false));
} else if (viewType == ItemViewType.GAME_TEST) {
- View view = LayoutInflater.from(parent.getContext()).inflate(
- R.layout.game_test_item, parent, false);
- return new GameTestViewHolder(view);
+ return new GameTestViewHolder(mLayoutInflater.inflate(R.layout.game_test_item, parent, false));
} else if (viewType == ItemViewType.GAME_IMAGE) {
- View view = LayoutInflater.from(parent.getContext()).inflate(
- R.layout.game_image_item, parent, false);
- return new GameImageViewHolder(view);
+ return new GameImageViewHolder(mLayoutInflater.inflate(R.layout.game_image_item, parent, false));
} else if (viewType == ItemViewType.LOADING) {
- View view = LayoutInflater.from(parent.getContext()).inflate(
- R.layout.refresh_footerview, parent, false);
- return new FooterViewHolder(view);
+ return new FooterViewHolder(mLayoutInflater.inflate(R.layout.refresh_footerview, parent, false));
}
return null;
}
@@ -604,18 +563,18 @@ public class GameFragmentAdapter extends BaseRecyclerAdapter {
if (mSlideList.size() != 0 && viewHolder.viewPager.getAdapter() == null) {
viewHolder.viewpager_ll_hint.removeAllViews();
+ int margin = DisplayUtils.dip2px(mContext, 6);
for (int i = 0, size = mSlideList.size(); i < size; i++) {
ImageView imageView = new ImageView(mContext);
- LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(
- DisplayUtils.dip2px(mContext, 6), DisplayUtils.dip2px(mContext, 6));
- lparams.bottomMargin = DisplayUtils.dip2px(mContext, 6);
+ LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(margin, margin);
+// lparams.bottomMargin = DisplayUtils.dip2px(mContext, 6);
if (i == 0) {
imageView.setImageResource(R.drawable.oval_hint_up);
} else {
imageView.setImageResource(R.drawable.oval_hint_dn);
}
if (i != 0) {
- lparams.leftMargin = DisplayUtils.dip2px(mContext, 6);
+ lparams.leftMargin = margin;
}
imageView.setLayoutParams(lparams);
viewHolder.viewpager_ll_hint.addView(imageView);
diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/FuliFragment.java b/app/src/main/java/com/gh/gamecenter/gamedetail/FuliFragment.java
index e40be171e5..0729d73060 100644
--- a/app/src/main/java/com/gh/gamecenter/gamedetail/FuliFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/gamedetail/FuliFragment.java
@@ -5,7 +5,7 @@ import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.view.View;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.view.MeasureLinearLayoutManager;
import com.gh.common.view.VerticalItemDecoration;
import com.gh.gamecenter.GameDetailActivity;
diff --git a/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiFragment.java b/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiFragment.java
index b3a76e3c4b..b84e1eed6e 100644
--- a/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/gamedetail/XinXiFragment.java
@@ -5,7 +5,7 @@ import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.DownloadItemUtils;
import com.gh.download.DataWatcher;
import com.gh.download.DownloadEntity;
diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao1Fragment.java b/app/src/main/java/com/gh/gamecenter/libao/Libao1Fragment.java
index 2339f6d070..d840ff36ee 100644
--- a/app/src/main/java/com/gh/gamecenter/libao/Libao1Fragment.java
+++ b/app/src/main/java/com/gh/gamecenter/libao/Libao1Fragment.java
@@ -11,7 +11,7 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.EntranceUtils;
import com.gh.common.view.SwipeLayout;
import com.gh.common.view.VerticalItemDecoration;
diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao2Fragment.java b/app/src/main/java/com/gh/gamecenter/libao/Libao2Fragment.java
index 232b53ee31..50a9fe81f0 100644
--- a/app/src/main/java/com/gh/gamecenter/libao/Libao2Fragment.java
+++ b/app/src/main/java/com/gh/gamecenter/libao/Libao2Fragment.java
@@ -10,7 +10,7 @@ import android.view.View;
import android.widget.LinearLayout;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.view.VerticalItemDecoration;
import com.gh.gamecenter.LibaoActivity;
import com.gh.gamecenter.R;
diff --git a/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java b/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java
index cf1e8802a4..71af321214 100644
--- a/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java
+++ b/app/src/main/java/com/gh/gamecenter/libao/Libao3Fragment.java
@@ -9,7 +9,7 @@ import android.view.View;
import android.widget.LinearLayout;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.view.VerticalItemDecoration;
import com.gh.gamecenter.R;
import com.gh.gamecenter.eventbus.EBReuse;
diff --git a/app/src/main/java/com/gh/gamecenter/message/CommentFragment.java b/app/src/main/java/com/gh/gamecenter/message/CommentFragment.java
index eeb1191701..2808189945 100644
--- a/app/src/main/java/com/gh/gamecenter/message/CommentFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/message/CommentFragment.java
@@ -11,7 +11,7 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.view.VerticalItemDecoration;
import com.gh.gamecenter.R;
import com.gh.gamecenter.eventbus.EBUISwitch;
diff --git a/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java b/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java
index c83fbfdfc2..5d326a1584 100644
--- a/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/message/KeFuFragment.java
@@ -10,7 +10,7 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.view.VerticalItemDecoration;
import com.gh.gamecenter.R;
import com.gh.gamecenter.eventbus.EBUISwitch;
diff --git a/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java
index 5ff6c3a6bc..9c3e4f25ad 100644
--- a/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/message/MessageFragment.java
@@ -1,21 +1,19 @@
package com.gh.gamecenter.message;
import android.content.Context;
+import android.os.Bundle;
+import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v4.view.ViewPager;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.LinearLayout;
-import android.widget.RelativeLayout;
import android.widget.TextView;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment_ViewPager_Checkable;
import com.gh.common.util.DisplayUtils;
import com.gh.common.util.TokenUtils;
import com.gh.common.util.Utils;
import com.gh.gamecenter.R;
-import com.gh.base.adapter.FragmentAdapter;
import com.gh.gamecenter.db.KeFuMarkReadDao;
import com.gh.gamecenter.entity.MessageUnreadEntity;
import com.gh.gamecenter.eventbus.EBReuse;
@@ -27,11 +25,9 @@ import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
-import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
-import butterknife.OnClick;
import okhttp3.ResponseBody;
import retrofit2.HttpException;
import rx.Observable;
@@ -43,28 +39,22 @@ import rx.schedulers.Schedulers;
* Created by khy on 2017/4/5.
* 首页-消息
*/
-public class MessageFragment extends BaseFragment implements ViewPager.OnPageChangeListener {
+public class MessageFragment extends BaseFragment_ViewPager_Checkable {
public static final String MESSAGE_READ_OVER = "messageReadOver";
public static final String EB_MESSAGEFRAGMENT_TAG = "MessageFragment";
- @BindView(R.id.message_comment_tv)
- TextView mMessageCommentTv;
+
@BindView(R.id.message_comment_hint)
TextView mMessageCommentHint;
- @BindView(R.id.message_comment_ll)
- LinearLayout mMessageCommentLl;
- @BindView(R.id.message_kefu_tv)
- TextView mMessageKefuTv;
+
@BindView(R.id.message_kefu_hint)
View mMessageKefuHint;
- @BindView(R.id.message_kefu_rl)
- RelativeLayout mMessageKefuRl;
+
@BindView(R.id.message_slide_line)
View mMessageSlideLine;
- @BindView(R.id.meaasge_viewPager)
- ViewPager mMeaasgeViewPager;
- private LinearLayout.LayoutParams lparams;
- private int width;
+
+ private LinearLayout.LayoutParams mLayoutParams;
+ private int mWidth;
private int mKeFuUnreadCount;
@Override
@@ -72,45 +62,49 @@ public class MessageFragment extends BaseFragment implements ViewPager.OnPageCha
return R.layout.fragment_message;
}
+ @Override
+ protected int getCheckableGroupId() {
+ return R.id.lightgame_tab_container;
+ }
+
+ @Override
+ protected int getViewPagerId() {
+ return R.id.lightgame_tab_viewpager;
+ }
+
+ @Override
+ protected void initFragmentList(List fragments) {
+ fragments.add(new CommentFragment());
+ fragments.add(new KeFuFragment());
+ }
+
@Override
protected void initView(View view) {
super.initView(view);
- LinearLayout title = (LinearLayout) view.findViewById(R.id.actionbar_title_ll);
- LinearLayout.LayoutParams tparams = new LinearLayout.LayoutParams(
- LinearLayout.LayoutParams.MATCH_PARENT, DisplayUtils.dip2px(getActivity(), 55));
-
- title.setLayoutParams(tparams);
-
DisplayMetrics outMetrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
- width = outMetrics.widthPixels / 2;
- lparams = new LinearLayout.LayoutParams((int) (width * 0.6),
- DisplayUtils.dip2px(getContext(), 2));
- lparams.leftMargin = (int) (width * (0 + 0.2f));
- mMessageSlideLine.setLayoutParams(lparams);
+ mWidth = outMetrics.widthPixels / 2;
+ mLayoutParams = new LinearLayout.LayoutParams((int) (mWidth * 0.6), DisplayUtils.dip2px(getContext(), 2));
+ mLayoutParams.leftMargin = (int) (mWidth * (0 + 0.2f));
+ mMessageSlideLine.setLayoutParams(mLayoutParams);
- mMessageCommentTv.setSelected(true);
+ initMessageUnread(getContext(), true);
- List list = new ArrayList<>();
- list.add(new CommentFragment());
- list.add(new KeFuFragment());
- mMeaasgeViewPager.setAdapter(new FragmentAdapter(getChildFragmentManager(), list));
- mMeaasgeViewPager.addOnPageChangeListener(this);
- mMeaasgeViewPager.setCurrentItem(0);
+ }
- initMessageUnread(true);
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
view.postDelayed(new Runnable() {
@Override
public void run() {
- EventBus.getDefault().post(new EBUISwitch(EB_MESSAGEFRAGMENT_TAG, mMeaasgeViewPager.getCurrentItem()));
+ EventBus.getDefault().post(new EBUISwitch(EB_MESSAGEFRAGMENT_TAG, mCheckedIndex));
}
}, 100);
}
- private void initMessageUnread(boolean isCheck) {
- Context context = getContext();
- if (context == null) return;
+ private void initMessageUnread(final Context context, boolean isCheck) {
TokenUtils.getToken(context, isCheck)
.flatMap(new Func1>() {
@Override
@@ -130,7 +124,7 @@ public class MessageFragment extends BaseFragment implements ViewPager.OnPageCha
}
if (response.getKefuList() != null && response.getKefuList().size() > 0) {
- KeFuMarkReadDao dao = new KeFuMarkReadDao(getContext());
+ KeFuMarkReadDao dao = new KeFuMarkReadDao(context);
for (int i = 0; i < response.getKefuList().size(); i++) {
if (dao.isMarkRead(response.getKefuList().get(i))) {
response.getKefuList().remove(i);
@@ -148,7 +142,7 @@ public class MessageFragment extends BaseFragment implements ViewPager.OnPageCha
@Override
public void onFailure(HttpException e) {
if (e != null && e.code() == 401) {
- initMessageUnread(false);
+ initMessageUnread(context, false);
}
}
});
@@ -157,27 +151,23 @@ public class MessageFragment extends BaseFragment implements ViewPager.OnPageCha
// 隐藏未读提示
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(EBUISwitch reuse) {
- if ("kefuMarkReadCount".equals(reuse.getFrom())
- && reuse.getPosition() == mKeFuUnreadCount) {
+ if ("kefuMarkReadCount".equals(reuse.getFrom()) && reuse.getPosition() == mKeFuUnreadCount) {
mMessageKefuHint.setVisibility(View.GONE);
- if (mMessageKefuHint.getVisibility() == View.GONE
- && mMessageCommentHint.getVisibility() == View.GONE) {
+ if (mMessageKefuHint.getVisibility() == View.GONE && mMessageCommentHint.getVisibility() == View.GONE) {
EventBus.getDefault().post(new EBReuse(MESSAGE_READ_OVER));
}
- } else if ("commentMarkRead".equals(reuse.getFrom())
- && mMessageCommentHint.getVisibility() == View.VISIBLE) {
+ } else if ("commentMarkRead".equals(reuse.getFrom()) && mMessageCommentHint.getVisibility() == View.VISIBLE) {
mMessageCommentHint.setVisibility(View.GONE);
- postMarkCommentRead(true);
- if (mMessageKefuHint.getVisibility() == View.GONE
- && mMessageCommentHint.getVisibility() == View.GONE) {
+ postMarkCommentRead(getContext(), true);
+ if (mMessageKefuHint.getVisibility() == View.GONE && mMessageCommentHint.getVisibility() == View.GONE) {
EventBus.getDefault().post(new EBReuse(MESSAGE_READ_OVER));
}
}
}
- private void postMarkCommentRead(boolean isCheck) {
+ private void postMarkCommentRead(final Context context, boolean isCheck) {
TokenUtils
- .getToken(getContext(), isCheck)
+ .getToken(context, isCheck)
.flatMap(new Func1>() {
@Override
public Observable call(String token) {
@@ -197,67 +187,25 @@ public class MessageFragment extends BaseFragment implements ViewPager.OnPageCha
public void onFailure(HttpException e) {
super.onFailure(e);
if (e != null && e.code() == 401) {
- postMarkCommentRead(false);
+ postMarkCommentRead(context, false);
}
}
});
}
-
- @OnClick({R.id.message_comment_ll, R.id.message_kefu_rl})
- public void onViewClicked(View view) {
- switch (view.getId()) {
- case R.id.message_comment_ll:
- mMeaasgeViewPager.setCurrentItem(0);
- break;
- case R.id.message_kefu_rl:
- mMeaasgeViewPager.setCurrentItem(1);
- break;
- }
- }
-
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ super.onPageScrolled(position, positionOffset, positionOffsetPixels);
if (positionOffset != 0) {
- lparams.leftMargin = (int) (width * (position + positionOffset + 0.2f));
- mMessageSlideLine.setLayoutParams(lparams);
+ mLayoutParams.leftMargin = (int) (mWidth * (position + positionOffset + 0.2f));
+ mMessageSlideLine.setLayoutParams(mLayoutParams);
}
}
@Override
- public void onPageSelected(int position) {
- if (position == 0) {
- EventBus.getDefault().post(new EBUISwitch(EB_MESSAGEFRAGMENT_TAG, 0));
- mMessageCommentTv.setSelected(true);
- mMessageKefuTv.setSelected(false);
- } else if (position == 1) {
- EventBus.getDefault().post(new EBUISwitch(EB_MESSAGEFRAGMENT_TAG, 1));
- mMessageCommentTv.setSelected(false);
- mMessageKefuTv.setSelected(true);
- }
+ protected void onPageChanged(int index) {
+ super.onPageChanged(index);
+ EventBus.getDefault().post(new EBUISwitch(EB_MESSAGEFRAGMENT_TAG, index));
}
- @Override
- public void onPageScrollStateChanged(int state) {
-
- }
-
- @Override
- public void onHiddenChanged(boolean hidden) {
- super.onHiddenChanged(hidden);
- FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
- List list = getChildFragmentManager().getFragments();
- if (list != null) {
- if (hidden) {
- for (Fragment fragment : getChildFragmentManager().getFragments()) {
- transaction.hide(fragment);
- }
- } else {
- for (Fragment fragment : getChildFragmentManager().getFragments()) {
- transaction.show(fragment);
- }
- }
- }
- transaction.commit();
- }
}
diff --git a/app/src/main/java/com/gh/gamecenter/message/NoticeFragment.java b/app/src/main/java/com/gh/gamecenter/message/NoticeFragment.java
index dc633ea79a..0737b98149 100644
--- a/app/src/main/java/com/gh/gamecenter/message/NoticeFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/message/NoticeFragment.java
@@ -10,7 +10,7 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.view.VerticalItemDecoration;
import com.gh.gamecenter.R;
import com.gh.gamecenter.eventbus.EBUISwitch;
diff --git a/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java b/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java
index c11d07cec7..99d49b8249 100644
--- a/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java
+++ b/app/src/main/java/com/gh/gamecenter/news/News1Fragment.java
@@ -9,7 +9,7 @@ import android.view.View;
import android.widget.LinearLayout;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.view.VerticalItemDecoration;
import com.gh.gamecenter.R;
import com.gh.gamecenter.eventbus.EBNetworkState;
@@ -119,7 +119,7 @@ public class News1Fragment extends BaseFragment implements SwipeRefreshLayout.On
// 资讯Fragment界面切换事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(EBUISwitch busNine) {
- if (NewsFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) {
+ if (NewsWrapperFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) {
if (busNine.getPosition() == 0) {
if (loadingLayout.getVisibility() == View.VISIBLE) {
adapter.addList(0);
diff --git a/app/src/main/java/com/gh/gamecenter/news/News2Fragment.java b/app/src/main/java/com/gh/gamecenter/news/News2Fragment.java
index c86766ab03..0c1dc9f714 100644
--- a/app/src/main/java/com/gh/gamecenter/news/News2Fragment.java
+++ b/app/src/main/java/com/gh/gamecenter/news/News2Fragment.java
@@ -16,7 +16,7 @@ import android.widget.TextView;
import com.facebook.drawee.view.SimpleDraweeView;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.ApkActiveUtils;
import com.gh.common.util.ImageUtils;
import com.gh.common.util.PackageUtils;
@@ -436,7 +436,7 @@ public class News2Fragment extends BaseFragment implements SwipeRefreshLayout.On
// Fragment界面切换事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(EBUISwitch swith) {
- if (NewsFragment.EB_NEWSFRAGMENT_TAG.equals(swith.getFrom())) {
+ if (NewsWrapperFragment.EB_NEWSFRAGMENT_TAG.equals(swith.getFrom())) {
if (swith.getPosition() == 1) {
if (loadingLayout.getVisibility() == View.VISIBLE) {
adapter.addList(0);
diff --git a/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java b/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java
index f6cc71edd1..fe33d9f7b4 100644
--- a/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java
+++ b/app/src/main/java/com/gh/gamecenter/news/News3Fragment.java
@@ -13,7 +13,7 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.DisplayUtils;
import com.gh.common.util.EntranceUtils;
import com.gh.gamecenter.ConcernActivity;
@@ -220,7 +220,7 @@ public class News3Fragment extends BaseFragment implements SwipeRefreshLayout.On
// 资讯Fragment界面切换事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(EBUISwitch busNine) {
- if (NewsFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) {
+ if (NewsWrapperFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) {
if (busNine.getPosition() == 2 && mLoading.getVisibility() == View.VISIBLE) {
mStrategyAdapter.addList(0);
}
diff --git a/app/src/main/java/com/gh/gamecenter/news/News4Fragment.java b/app/src/main/java/com/gh/gamecenter/news/News4Fragment.java
index fa8a828059..37e95a3645 100644
--- a/app/src/main/java/com/gh/gamecenter/news/News4Fragment.java
+++ b/app/src/main/java/com/gh/gamecenter/news/News4Fragment.java
@@ -9,7 +9,7 @@ import android.view.View;
import android.widget.LinearLayout;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.view.VerticalItemDecoration;
import com.gh.gamecenter.R;
import com.gh.gamecenter.eventbus.EBNetworkState;
@@ -119,7 +119,7 @@ public class News4Fragment extends BaseFragment implements SwipeRefreshLayout.On
// 资讯Fragment界面切换事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(EBUISwitch busNine) {
- if (NewsFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) {
+ if (NewsWrapperFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) {
if (busNine.getPosition() == 3) {
if (loadingLayout.getVisibility() == View.VISIBLE) {
adapter.addList(0);
diff --git a/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java b/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java
deleted file mode 100644
index 80d5c41aea..0000000000
--- a/app/src/main/java/com/gh/gamecenter/news/NewsFragment.java
+++ /dev/null
@@ -1,212 +0,0 @@
-package com.gh.gamecenter.news;
-
-import android.os.Bundle;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentTransaction;
-import android.support.v4.view.ViewPager;
-import android.util.DisplayMetrics;
-import android.view.View;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.gh.common.util.DataCollectionUtils;
-import com.gh.common.util.DisplayUtils;
-import com.gh.gamecenter.MainActivity;
-import com.gh.gamecenter.R;
-import com.gh.base.adapter.FragmentAdapter;
-import com.gh.gamecenter.eventbus.EBUISwitch;
-import com.gh.gamecenter.fragment.HomeFragment;
-
-import org.greenrobot.eventbus.EventBus;
-import org.greenrobot.eventbus.Subscribe;
-import org.greenrobot.eventbus.ThreadMode;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import butterknife.BindView;
-import butterknife.OnClick;
-
-
-/**
- * Created by khy on 2016/6/29.
- * 资讯Fragment
- */
-public class NewsFragment extends HomeFragment implements View.OnClickListener, ViewPager.OnPageChangeListener {
-
- public final static String EB_NEWSFRAGMENT_TAG = "NewsFragment";
- private View mNewsSlidebarLine;
- private ViewPager mNewsVP;
- private LinearLayout.LayoutParams lparams;
-
- @BindView(R.id.news_zixun_tv)
- TextView mNewsZixun;
-
- @BindView(R.id.news_guanzhu_tv)
- TextView mNewsGuanzhu;
-
- @BindView(R.id.news_gonglve_tv)
- TextView mNewsGonglve;
-
- @BindView(R.id.news_yuanchuang_tv)
- TextView mNewsYuanchuang;
-
- private int width;
- private int currentItem;
-
- @Override
- protected int getLayoutId() {
- return R.layout.fragment_news;
- }
-
- @Override
- protected void initView(View view) {
- super.initView(view);
- mNewsSlidebarLine = view.findViewById(R.id.slidebar_line);
- mNewsVP = (ViewPager) view.findViewById(R.id.page_vp_content);
- mNewsZixun.setSelected(true);
- }
-
- @Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- List list = new ArrayList<>();
- list.add(new News1Fragment());
- list.add(new News2Fragment());
- list.add(new News3Fragment());
- list.add(new News4Fragment());
- mNewsVP.setAdapter(new FragmentAdapter(getChildFragmentManager(), list));
- mNewsVP.addOnPageChangeListener(this);
-
- currentItem = 0;
- if (savedInstanceState != null) {
- currentItem = savedInstanceState.getInt("currentItem");
- }
-
- mNewsVP.setCurrentItem(currentItem);
-
- DisplayMetrics outMetrics = new DisplayMetrics();
- getActivity().getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
- width = outMetrics.widthPixels / 4;
- lparams = new LinearLayout.LayoutParams(width / 2,
- DisplayUtils.dip2px(getActivity(), 2));
- lparams.leftMargin = (int) (width * (currentItem + 0.25f));
- mNewsSlidebarLine.setLayoutParams(lparams);
-
- view.postDelayed(new Runnable() {
- @Override
- public void run() {
- EventBus.getDefault().post(new EBUISwitch(EB_NEWSFRAGMENT_TAG, mNewsVP.getCurrentItem()));
- }
- }, 100);
- }
-
- @Override
- public void onSaveInstanceState(Bundle outState) {
- super.onSaveInstanceState(outState);
- outState.putInt("currentItem", currentItem);
- }
-
- @OnClick({R.id.news_zixun_tv, R.id.news_guanzhu_tv, R.id.news_yuanchuang_tv, R.id.news_gonglve_tv})
- @Override
- public void onClick(View v) {
-// super.onClick(v);
- switch (v.getId()) {
- case R.id.news_zixun_tv:
- mNewsVP.setCurrentItem(0);
- break;
- case R.id.news_guanzhu_tv:
- mNewsVP.setCurrentItem(1);
- break;
- case R.id.news_gonglve_tv:
- mNewsVP.setCurrentItem(2);
- break;
- case R.id.news_yuanchuang_tv:
- mNewsVP.setCurrentItem(3);
- break;
- }
- }
-
- @Override
- public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
- if (positionOffset != 0) {
- lparams.leftMargin = (int) (width * (position + positionOffset + 0.25f));
- mNewsSlidebarLine.setLayoutParams(lparams);
- } else {
- if (currentItem != mNewsVP.getCurrentItem()) {
- currentItem = mNewsVP.getCurrentItem();
- EventBus.getDefault().post(new EBUISwitch(EB_NEWSFRAGMENT_TAG, currentItem));
- }
- }
- }
-
- @Override
- public void onPageSelected(int position) {
- if (position == 0) {
- mNewsZixun.setSelected(true);
- mNewsGuanzhu.setSelected(false);
- mNewsGonglve.setSelected(false);
- mNewsYuanchuang.setSelected(false);
-
- DataCollectionUtils.uploadPosition(getActivity(), "资讯", "1", "资讯");
- } else if (position == 1) {
- mNewsZixun.setSelected(false);
- mNewsGuanzhu.setSelected(true);
- mNewsGonglve.setSelected(false);
- mNewsYuanchuang.setSelected(false);
-
- DataCollectionUtils.uploadPosition(getActivity(), "资讯", "2", "攻略");
- } else if (position == 2) {
- mNewsZixun.setSelected(false);
- mNewsGuanzhu.setSelected(false);
- mNewsGonglve.setSelected(true);
- mNewsYuanchuang.setSelected(false);
-
- DataCollectionUtils.uploadPosition(getActivity(), "资讯", "3", "原创");
- } else if (position == 3) {
- mNewsZixun.setSelected(false);
- mNewsGuanzhu.setSelected(false);
- mNewsGonglve.setSelected(false);
- mNewsYuanchuang.setSelected(true);
-
- DataCollectionUtils.uploadPosition(getActivity(), "资讯", "4", "关注");
- }
- }
-
- @Override
- public void onPageScrollStateChanged(int i) {
-
- }
-
- @Subscribe(threadMode = ThreadMode.MAIN)
- public void onEventMainThread(EBUISwitch busNine) {
- if (MainActivity.EB_MAINACTIVITY_TAG.equals(busNine.getFrom())) {
- if (busNine.getPosition() == 1) {
- EventBus.getDefault().post(new EBUISwitch(EB_NEWSFRAGMENT_TAG, mNewsVP.getCurrentItem()));
- }
- }
- }
-
- @Override
- public void onHiddenChanged(boolean hidden) {
- super.onHiddenChanged(hidden);
- FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
- List list = getChildFragmentManager().getFragments();
- if (list != null) {
- if (hidden) {
- for (Fragment fragment : getChildFragmentManager().getFragments()) {
- transaction.hide(fragment);
- }
- } else {
- for (Fragment fragment : getChildFragmentManager().getFragments()) {
- transaction.show(fragment);
- }
- }
- }
- transaction.commit();
- }
-
-}
-
diff --git a/app/src/main/java/com/gh/gamecenter/news/NewsWrapperFragment.java b/app/src/main/java/com/gh/gamecenter/news/NewsWrapperFragment.java
new file mode 100644
index 0000000000..4466d0956d
--- /dev/null
+++ b/app/src/main/java/com/gh/gamecenter/news/NewsWrapperFragment.java
@@ -0,0 +1,53 @@
+package com.gh.gamecenter.news;
+
+import android.os.Bundle;
+import android.support.annotation.Nullable;
+import android.view.View;
+
+import com.gh.base.SearchBarHint;
+import com.gh.base.fragment.BaseFragment;
+import com.gh.gamecenter.R;
+import com.gh.gamecenter.fragment.NewsFragment;
+import com.gh.gamecenter.fragment.SearchToolbarFragment;
+
+import java.util.ArrayList;
+
+
+/**
+ * Created by khy on 2016/6/29.
+ * 资讯Fragment
+ */
+public class NewsWrapperFragment extends BaseFragment implements SearchBarHint {
+
+ public final static String EB_NEWSFRAGMENT_TAG = "NewsWrapperFragment";
+
+ private SearchToolbarFragment mSearchToolbarFragment;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mSearchToolbarFragment = new SearchToolbarFragment();
+ }
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.fragment_wrapper_toolbar;
+ }
+
+ @Override
+ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ getChildFragmentManager().beginTransaction()
+ .replace(R.id.wrapper_toolbar, mSearchToolbarFragment)
+ .replace(R.id.wrapper_main_content, new NewsFragment()).commitAllowingStateLoss();
+ }
+
+ @Override
+ public void setHint(ArrayList hintList) {
+ if (mSearchToolbarFragment != null) {
+ mSearchToolbarFragment.setHint(hintList);
+ }
+ }
+
+}
+
diff --git a/app/src/main/java/com/gh/gamecenter/personal/ConcernFragment.java b/app/src/main/java/com/gh/gamecenter/personal/ConcernFragment.java
index ecd779a9cc..312ed76d2a 100644
--- a/app/src/main/java/com/gh/gamecenter/personal/ConcernFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/personal/ConcernFragment.java
@@ -8,7 +8,7 @@ import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.DownloadItemUtils;
import com.gh.common.view.VerticalItemDecoration;
import com.gh.download.DataWatcher;
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 e24e881765..6c2b577dcb 100644
--- a/app/src/main/java/com/gh/gamecenter/personal/InstallFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/personal/InstallFragment.java
@@ -10,7 +10,7 @@ import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.DialogUtils;
import com.gh.common.util.DownloadItemUtils;
import com.gh.common.view.SwipeLayout;
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 375af455dd..a4930ee705 100644
--- a/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/personal/PersonalFragment.java
@@ -26,7 +26,7 @@ import android.widget.TextView;
import android.widget.Toast;
import com.facebook.drawee.view.SimpleDraweeView;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.constant.Config;
import com.gh.common.util.DataCollectionUtils;
import com.gh.common.util.DataUtils;
diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragment.java b/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragment.java
index e79cc8a236..be6191004f 100644
--- a/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/search/SearchGameDetailFragment.java
@@ -13,7 +13,7 @@ import android.view.ViewTreeObserver;
import android.widget.LinearLayout;
import android.widget.TextView;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.DisplayUtils;
import com.gh.common.util.DownloadItemUtils;
import com.gh.common.view.VerticalItemDecoration;
diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchGameListFragment.java b/app/src/main/java/com/gh/gamecenter/search/SearchGameListFragment.java
index f9f1de6d34..69224520ff 100644
--- a/app/src/main/java/com/gh/gamecenter/search/SearchGameListFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/search/SearchGameListFragment.java
@@ -13,7 +13,7 @@ import android.view.ViewTreeObserver;
import android.widget.LinearLayout;
import android.widget.TextView;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.DisplayUtils;
import com.gh.common.util.DownloadItemUtils;
import com.gh.common.view.VerticalItemDecoration;
diff --git a/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragment.java b/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragment.java
index 70cdc97b81..90ec0114a0 100644
--- a/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/search/SearchHistoryFragment.java
@@ -9,7 +9,7 @@ import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.DialogUtils;
import com.gh.common.util.DisplayUtils;
import com.gh.gamecenter.R;
diff --git a/app/src/main/java/com/gh/gamecenter/subject/SubjectFragment.java b/app/src/main/java/com/gh/gamecenter/subject/SubjectFragment.java
index 42644d190c..6c773311c4 100644
--- a/app/src/main/java/com/gh/gamecenter/subject/SubjectFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/subject/SubjectFragment.java
@@ -10,7 +10,7 @@ import android.view.View;
import android.widget.LinearLayout;
import com.gc.materialdesign.views.ProgressBarCircularIndeterminate;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.ApkActiveUtils;
import com.gh.common.util.DownloadItemUtils;
import com.gh.common.util.EntranceUtils;
@@ -26,7 +26,7 @@ import com.gh.gamecenter.eventbus.EBNetworkState;
import com.gh.gamecenter.eventbus.EBPackage;
import com.gh.gamecenter.eventbus.EBReuse;
import com.gh.gamecenter.eventbus.EBUISwitch;
-import com.gh.gamecenter.news.NewsFragment;
+import com.gh.gamecenter.news.NewsWrapperFragment;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -108,6 +108,7 @@ public class SubjectFragment extends BaseFragment {
mName = arguments.getString("name");
mIsOrder = arguments.getBoolean("order");
mType = arguments.getString("type");
+ //TODO ????? order 是 boolean
mOrder = arguments.getString("order");
mTagType = arguments.getString("tagType");
mEntrance = arguments.getString(EntranceUtils.KEY_ENTRANCE);
@@ -287,7 +288,7 @@ public class SubjectFragment extends BaseFragment {
// 资讯Fragment界面切换事件
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEventMainThread(EBUISwitch busNine) {
- if (NewsFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) {
+ if (NewsWrapperFragment.EB_NEWSFRAGMENT_TAG.equals(busNine.getFrom())) {
if (busNine.getPosition() == 0) {
if (subject_pb_loading.getVisibility() == View.VISIBLE) {
adapter.initList(1);
diff --git a/app/src/main/java/com/gh/gamecenter/subject/SubjectTileFragment.java b/app/src/main/java/com/gh/gamecenter/subject/SubjectTileFragment.java
index 2a5135d7f2..5cbf1817f7 100644
--- a/app/src/main/java/com/gh/gamecenter/subject/SubjectTileFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/subject/SubjectTileFragment.java
@@ -17,7 +17,7 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
-import com.gh.base.BaseFragment;
+import com.gh.base.fragment.BaseFragment;
import com.gh.common.util.DisplayUtils;
import com.gh.common.util.StringUtils;
import com.gh.gamecenter.R;
diff --git a/app/src/main/java/com/gh/gamecenter/wenda/WenDaFragment.java b/app/src/main/java/com/gh/gamecenter/wenda/WenDaFragment.java
index 01d0913294..cba995b85d 100644
--- a/app/src/main/java/com/gh/gamecenter/wenda/WenDaFragment.java
+++ b/app/src/main/java/com/gh/gamecenter/wenda/WenDaFragment.java
@@ -1,6 +1,6 @@
//package com.gh.gamecenter.wenda;
//
-//import com.gh.base.BaseFragment;
+//import com.gh.base.fragment.BaseFragment;
//import com.gh.gamecenter.eventbus.EBNetworkState;
//
//import org.greenrobot.eventbus.Subscribe;
diff --git a/app/src/main/res/drawable/selector_ic_game.xml b/app/src/main/res/drawable/selector_ic_game.xml
new file mode 100644
index 0000000000..66ed99c36d
--- /dev/null
+++ b/app/src/main/res/drawable/selector_ic_game.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_ic_message.xml b/app/src/main/res/drawable/selector_ic_message.xml
new file mode 100644
index 0000000000..f5eafa020f
--- /dev/null
+++ b/app/src/main/res/drawable/selector_ic_message.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_ic_news.xml b/app/src/main/res/drawable/selector_ic_news.xml
new file mode 100644
index 0000000000..087dc331c8
--- /dev/null
+++ b/app/src/main/res/drawable/selector_ic_news.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/selector_ic_user.xml b/app/src/main/res/drawable/selector_ic_user.xml
new file mode 100644
index 0000000000..e461a4ace1
--- /dev/null
+++ b/app/src/main/res/drawable/selector_ic_user.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_libao.xml b/app/src/main/res/layout/activity_libao.xml
index a0e2dfb1e2..ecf17def08 100644
--- a/app/src/main/res/layout/activity_libao.xml
+++ b/app/src/main/res/layout/activity_libao.xml
@@ -68,7 +68,7 @@
android:layout_width = "match_parent"
android:layout_height = "match_parent" >
-
-
+ android:layout_height = "match_parent" >
-
+
-
+ android:layout_height = "match_parent"
+ android:layout_below = "@+id/home_actionbar" >
-
+ android:layout_height = "wrap_content" />
-
+
-
+
-
+
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/fragment_main.xml
similarity index 76%
rename from app/src/main/res/layout/activity_main.xml
rename to app/src/main/res/layout/fragment_main.xml
index 2bf2e2e948..13894d43ca 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -2,20 +2,20 @@
android:layout_width = "match_parent"
android:layout_height = "match_parent" >
-
+ android:layout_above = "@id/lightgame_tab_container" />
-
-
+ android:src = "@drawable/selector_ic_game" />
-
-
+
+
-
+ android:src = "@drawable/selector_ic_news" />
-
+
-
-
+ android:src = "@drawable/selector_ic_message" />
-
+
-
-
-
+ android:src = "@drawable/selector_ic_user" />
-
+
diff --git a/app/src/main/res/layout/fragment_message.xml b/app/src/main/res/layout/fragment_message.xml
index e48d4ab602..e6963c2fb1 100644
--- a/app/src/main/res/layout/fragment_message.xml
+++ b/app/src/main/res/layout/fragment_message.xml
@@ -7,12 +7,12 @@
-
-
-
-
+
diff --git a/app/src/main/res/layout/fragment_news.xml b/app/src/main/res/layout/fragment_news.xml
index b330b5d77e..c19595ca6e 100644
--- a/app/src/main/res/layout/fragment_news.xml
+++ b/app/src/main/res/layout/fragment_news.xml
@@ -1,13 +1,74 @@
-
-
+
-
+
-
+
-
\ No newline at end of file
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_news_slidebar.xml b/app/src/main/res/layout/fragment_news_slidebar.xml
deleted file mode 100644
index af88ac8797..0000000000
--- a/app/src/main/res/layout/fragment_news_slidebar.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_page.xml b/app/src/main/res/layout/fragment_page.xml
deleted file mode 100644
index 07d7c8856a..0000000000
--- a/app/src/main/res/layout/fragment_page.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_toolbar.xml b/app/src/main/res/layout/fragment_toolbar.xml
new file mode 100644
index 0000000000..fd642c1410
--- /dev/null
+++ b/app/src/main/res/layout/fragment_toolbar.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_wrapper_toolbar.xml b/app/src/main/res/layout/fragment_wrapper_toolbar.xml
new file mode 100644
index 0000000000..426052332d
--- /dev/null
+++ b/app/src/main/res/layout/fragment_wrapper_toolbar.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/game_viewpager_item.xml b/app/src/main/res/layout/game_viewpager_item.xml
index ed85df3471..f4897f94fb 100644
--- a/app/src/main/res/layout/game_viewpager_item.xml
+++ b/app/src/main/res/layout/game_viewpager_item.xml
@@ -1,11 +1,20 @@
-
+ android:layout_height = "wrap_content"
+ android:orientation = "vertical"
+ app:fractionValue = "0.65625"
+ app:layout_heightPercent = "65.625%"
+ app:measureBy = "width" >
+
-
+
+ android:layout_height = "wrap_content"
+ app:fractionValue = "0.4375"
+ app:measureBy = "width" >
+ android:layout_gravity = "bottom|right"
+ android:gravity = "center"
+ android:orientation = "horizontal"
+ android:paddingBottom = "6dp"
+ android:paddingLeft = "10dp"
+ android:paddingRight = "10dp" />
-
+
-
+
+ android:layout_height = "wrap_content"
+ android:layout_gravity = "bottom"
+ app:fractionValue = "0.21875"
+ app:measureBy = "width" >
+ android:textSize = "14sp" />
+ android:paddingTop = "2dp" />
-
+
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/gamedetail_body.xml b/app/src/main/res/layout/gamedetail_body.xml
index 85b556e455..5cbbd1104b 100644
--- a/app/src/main/res/layout/gamedetail_body.xml
+++ b/app/src/main/res/layout/gamedetail_body.xml
@@ -100,7 +100,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 9ca90332c4..b0adb442b3 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -8,7 +8,7 @@
9dp
- 48dp
+ 55dp
72dp
diff --git a/libraries/EventBus/libs/EventBus-2.4.0.jar b/libraries/EventBus/libs/EventBus-2.4.0.jar
deleted file mode 100644
index 106ed5b53d..0000000000
Binary files a/libraries/EventBus/libs/EventBus-2.4.0.jar and /dev/null differ
diff --git a/libraries/EventBus/src/main/AndroidManifest.xml b/libraries/EventBus/src/main/AndroidManifest.xml
deleted file mode 100644
index 4df1b5b2fd..0000000000
--- a/libraries/EventBus/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
diff --git a/libraries/EventBus/build.gradle b/libraries/LGLibrary/build.gradle
similarity index 69%
rename from libraries/EventBus/build.gradle
rename to libraries/LGLibrary/build.gradle
index 89d074a4f1..cc778bafa7 100644
--- a/libraries/EventBus/build.gradle
+++ b/libraries/LGLibrary/build.gradle
@@ -2,6 +2,9 @@ apply plugin: 'com.android.library'
dependencies {
compile fileTree(dir: 'libs', exclude: 'android-support-*.jar', include: '*.jar')
+ provided libs.supportV4
+ provided libs.supportAppCompat
+ provided libs.supportRecyclerView
}
android {
diff --git a/libraries/EventBus/proguard-library.txt b/libraries/LGLibrary/proguard-library.txt
similarity index 63%
rename from libraries/EventBus/proguard-library.txt
rename to libraries/LGLibrary/proguard-library.txt
index 44a1304068..f2fe1559a2 100644
--- a/libraries/EventBus/proguard-library.txt
+++ b/libraries/LGLibrary/proguard-library.txt
@@ -18,21 +18,3 @@
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
-
--keep class de.greenrobot.event.** {*;}
--keepclassmembers class ** {
- public void onEvent*(**);
- void onEvent*(**);
-}
-
--keepattributes *Annotation*
-#-keepclassmembers class ** {
-# @org.greenrobot.eventbus.Subscribe ;
-#}
--keep enum de.greenrobot.event.ThreadMode { *; }
-
-# Only required if you use AsyncExecutor
--keepclassmembers class * extends de.greenrobot.event.util.ThrowableFailureEvent {
- (java.lang.Throwable);
-}
-
diff --git a/libraries/LGLibrary/src/main/AndroidManifest.xml b/libraries/LGLibrary/src/main/AndroidManifest.xml
new file mode 100644
index 0000000000..269e0bc84d
--- /dev/null
+++ b/libraries/LGLibrary/src/main/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/adapter/BaseFragmentPagerAdapter.java b/libraries/LGLibrary/src/main/java/com/lightgame/adapter/BaseFragmentPagerAdapter.java
new file mode 100755
index 0000000000..b852e5a473
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/adapter/BaseFragmentPagerAdapter.java
@@ -0,0 +1,53 @@
+/**
+ * project: OPlay
+ *
+ *
+ * ========================================================================
+ * amend date amend user amend reason
+ * 2013-3-5 CsHeng
+ */
+
+package com.lightgame.adapter;
+
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentPagerAdapter;
+
+import java.util.List;
+
+/**
+ * 通用Fragment Page Adapter
+ *
+ * @author CsHeng
+ * @date 2013-3-8
+ */
+public class BaseFragmentPagerAdapter extends FragmentPagerAdapter {
+
+ List extends Fragment> mFragments;
+
+ // nested fragment should pass getChildFragmentManager()
+ private BaseFragmentPagerAdapter(FragmentManager fm, List fragments) {
+ super(fm);
+ mFragments = fragments;
+ }
+
+ /**
+ * @param fm Pass getSupportFragmentManager() or Nested Fragment Should Pass getChildFragmentManager()
+ * @param fragments
+ * @return
+ */
+ public static BaseFragmentPagerAdapter newInstance(FragmentManager fm, List fragments) {
+ return new BaseFragmentPagerAdapter(fm, fragments);
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ return mFragments.get(position);
+ }
+
+ @Override
+ public int getCount() {
+ return mFragments.size();
+ }
+
+}
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/listeners/IllegalAttachException.java b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/IllegalAttachException.java
new file mode 100644
index 0000000000..0deb12be25
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/IllegalAttachException.java
@@ -0,0 +1,23 @@
+package com.lightgame.listeners;
+
+/**
+ * Fragment Attach 到Activity时若不满足条件则抛出
+ * Created by csheng on 15-9-29.
+ */
+public class IllegalAttachException extends RuntimeException {
+
+ public IllegalAttachException() {
+ }
+
+ public IllegalAttachException(String detailMessage) {
+ super(detailMessage);
+ }
+
+ public IllegalAttachException(String detailMessage, Throwable throwable) {
+ super(detailMessage, throwable);
+ }
+
+ public IllegalAttachException(Throwable throwable) {
+ super(throwable);
+ }
+}
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/listeners/OnBackPressedListener.java b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/OnBackPressedListener.java
new file mode 100755
index 0000000000..60d1894405
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/OnBackPressedListener.java
@@ -0,0 +1,9 @@
+package com.lightgame.listeners;
+
+/**
+ * Forward activity onBackPressed() events to fragment
+ * (If nested fragments need this, just forward again)
+ */
+public interface OnBackPressedListener {
+ public boolean onHandleBackPressed();
+}
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/listeners/OnBrowserActionListener.java b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/OnBrowserActionListener.java
new file mode 100644
index 0000000000..b845c84dc0
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/OnBrowserActionListener.java
@@ -0,0 +1,13 @@
+package com.lightgame.listeners;
+
+/**
+ * @author CsHeng
+ * @Date 14-10-16
+ * @Time 下午9:11
+ */
+public interface OnBrowserActionListener {
+ public void onRotateImage();
+
+ public void onSaveImage();
+}
+
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/listeners/UpdateableFragment.java b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/UpdateableFragment.java
new file mode 100755
index 0000000000..81b205a531
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/listeners/UpdateableFragment.java
@@ -0,0 +1,12 @@
+package com.lightgame.listeners;
+
+import java.util.List;
+
+/**
+ * @author: CsHeng (csheng1204[at]gmail[dot]com)
+ * Date: 13-12-24
+ * Time: 下午2:52
+ */
+public interface UpdateableFragment {
+ public void onFragmentNeedsUpdate(List listData);
+}
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/CheckableImageView.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/CheckableImageView.java
new file mode 100644
index 0000000000..5a3afd29ae
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/CheckableImageView.java
@@ -0,0 +1,42 @@
+package com.lightgame.view;
+
+import android.content.Context;
+import android.support.v7.widget.AppCompatImageView;
+import android.util.AttributeSet;
+import android.widget.Checkable;
+
+public class CheckableImageView extends AppCompatImageView implements Checkable {
+
+ private boolean mChecked;
+ private static final int[] CHECKED_STATE_SET = {
+ android.R.attr.state_checked
+ };
+
+ public CheckableImageView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ @Override
+ public int[] onCreateDrawableState(int extraSpace) {
+ final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
+ if (isChecked()) {
+ mergeDrawableStates(drawableState, CHECKED_STATE_SET);
+ }
+ return drawableState;
+ }
+
+ public void toggle() {
+ setChecked(!mChecked);
+ }
+
+ public boolean isChecked() {
+ return mChecked;
+ }
+
+ public void setChecked(boolean checked) {
+ if (mChecked != checked) {
+ mChecked = checked;
+ refreshDrawableState();
+ }
+ }
+}
\ No newline at end of file
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/CheckableLinearLayout.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/CheckableLinearLayout.java
new file mode 100644
index 0000000000..07edc46f66
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/CheckableLinearLayout.java
@@ -0,0 +1,57 @@
+package com.lightgame.view;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Checkable;
+import android.widget.LinearLayout;
+
+public class CheckableLinearLayout extends LinearLayout implements Checkable {
+
+ private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked};
+
+ private boolean mChecked = false;
+
+ public CheckableLinearLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public boolean isChecked() {
+ return mChecked;
+ }
+
+ public void setChecked(boolean b) {
+ if (b != mChecked) {
+ mChecked = b;
+ refreshDrawableState();
+ setChildChecked(this, b);
+ }
+ }
+
+ private void setChildChecked(ViewGroup vg, boolean checked) {
+ for (int i = 0, size = vg.getChildCount(); i < size; i++) {
+ final View child = vg.getChildAt(i);
+ if (child instanceof Checkable) {
+ ((Checkable) child).setChecked(checked);
+ }
+ if (child instanceof ViewGroup) {
+ setChildChecked((ViewGroup) child, checked);
+ }
+ }
+ }
+
+ public void toggle() {
+ setChecked(!mChecked);
+ }
+
+ @Override
+ public int[] onCreateDrawableState(int extraSpace) {
+ final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
+ if (isChecked()) {
+ mergeDrawableStates(drawableState, CHECKED_STATE_SET);
+ }
+ return drawableState;
+ }
+
+}
\ No newline at end of file
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/DoubleTapTextView.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/DoubleTapTextView.java
new file mode 100644
index 0000000000..df8c4d0aad
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/DoubleTapTextView.java
@@ -0,0 +1,69 @@
+package com.lightgame.view;
+
+import android.content.Context;
+import android.support.v7.widget.AppCompatTextView;
+import android.util.AttributeSet;
+import android.view.GestureDetector;
+import android.view.MotionEvent;
+
+/**
+ * @author CsHeng
+ * @Date 14-10-29
+ * @Time 下午3:16
+ */
+public class DoubleTapTextView extends AppCompatTextView {
+
+ private OnDoubleTapListener mOnDoubleTapListener;
+ private GestureDetector mGestureDetector;
+
+ public DoubleTapTextView(Context context) {
+ super(context);
+ mGestureDetector = new GestureDetector(getContext(), new GestureListener());
+ }
+
+ public DoubleTapTextView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mGestureDetector = new GestureDetector(getContext(), new GestureListener());
+ }
+
+ public DoubleTapTextView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ mGestureDetector = new GestureDetector(getContext(), new GestureListener());
+ }
+
+ public void setOnDoubleTapListener(OnDoubleTapListener onDoubleTapListener) {
+ mOnDoubleTapListener = onDoubleTapListener;
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ return mGestureDetector.onTouchEvent(event);
+ }
+
+ private class GestureListener extends GestureDetector.SimpleOnGestureListener {
+
+ @Override
+ public boolean onDown(MotionEvent e) {
+ return true;
+ }
+
+ @Override
+ public boolean onDoubleTap(MotionEvent e) {
+ if (mOnDoubleTapListener != null) {
+ return mOnDoubleTapListener.onDoubleTap();
+ }
+ return false;
+ }
+ }
+
+ /**
+ * @author CsHeng
+ * @Date 14-10-29
+ * @Time 下午3:15
+ */
+ public interface OnDoubleTapListener {
+ boolean onDoubleTap();
+ }
+
+}
+
diff --git a/app/src/main/java/com/gh/common/view/NoScrollableViewPager.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/NoScrollableViewPager.java
similarity index 70%
rename from app/src/main/java/com/gh/common/view/NoScrollableViewPager.java
rename to libraries/LGLibrary/src/main/java/com/lightgame/view/NoScrollableViewPager.java
index 0218c116bd..2aa022f254 100644
--- a/app/src/main/java/com/gh/common/view/NoScrollableViewPager.java
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/NoScrollableViewPager.java
@@ -1,4 +1,4 @@
-package com.gh.common.view;
+package com.lightgame.view;
import android.content.Context;
import android.support.v4.view.ViewPager;
@@ -11,30 +11,30 @@ import android.view.MotionEvent;
*/
public class NoScrollableViewPager extends ViewPager {
- private boolean isScrollable;
+ private boolean mIsScrollable;
public NoScrollableViewPager(Context context) {
super(context);
- isScrollable = true;
+ mIsScrollable = true;
}
public NoScrollableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
- isScrollable = true;
-
+ mIsScrollable = true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
- return isScrollable && super.onInterceptTouchEvent(ev);
+ return mIsScrollable && super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
- return isScrollable && super.onTouchEvent(ev);
+ return mIsScrollable && super.onTouchEvent(ev);
}
public void setScrollable(boolean scrollable) {
- isScrollable = scrollable;
+ mIsScrollable = scrollable;
}
+
}
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/AspectRatioImageView.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/AspectRatioImageView.java
new file mode 100755
index 0000000000..ba99a7028e
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/AspectRatioImageView.java
@@ -0,0 +1,73 @@
+package com.lightgame.view.imageview;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.support.v7.widget.AppCompatImageView;
+import android.util.AttributeSet;
+
+import com.lightgame.R;
+
+
+/**
+ * 按照宽度适配,高度保持比例即可
+ *
+ * @author CsHeng
+ * @date 2013-3-13
+ */
+public class AspectRatioImageView extends AppCompatImageView {
+
+ private boolean mMeasureByHeight = false; // default width
+ private float mFraction = 1f;// default square
+
+ public AspectRatioImageView(Context context) {
+ super(context);
+ }
+
+ public AspectRatioImageView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ScaleView);
+ int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0);
+ mMeasureByHeight = enumV != 0;
+ mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction);
+ a.recycle();
+ }
+
+ public AspectRatioImageView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ScaleView);
+ int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0);
+ mMeasureByHeight = enumV != 0;
+ mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction);
+ a.recycle();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ Drawable drawable = getDrawable();
+ if (drawable != null) {
+ if (mMeasureByHeight) {
+ int height = MeasureSpec.getSize(heightMeasureSpec);
+ int dih = drawable.getIntrinsicHeight();
+ if (dih > 0) {
+ int width = height * drawable.getIntrinsicWidth() / dih;
+ setMeasuredDimension(width, height);
+ } else {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+ } else {
+ int width = MeasureSpec.getSize(widthMeasureSpec);
+ int diw = drawable.getIntrinsicWidth();
+ if (diw > 0) {
+ int height = width * drawable.getIntrinsicHeight() / diw;
+ setMeasuredDimension(width, height);
+ } else {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+ }
+ } else {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+
+ }
+}
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedDrawable.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedDrawable.java
new file mode 100755
index 0000000000..24ffe3901e
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedDrawable.java
@@ -0,0 +1,366 @@
+package com.lightgame.view.imageview;
+
+import android.content.res.ColorStateList;
+import android.graphics.Bitmap;
+import android.graphics.Bitmap.Config;
+import android.graphics.BitmapShader;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.ColorFilter;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.PixelFormat;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.graphics.Shader;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
+import android.util.Log;
+import android.widget.ImageView.ScaleType;
+
+@SuppressWarnings("UnusedDeclaration")
+public class RoundedDrawable extends Drawable {
+
+ public static final String TAG = "RoundedDrawable";
+ public static final int DEFAULT_BORDER_COLOR = Color.BLACK;
+ private ColorStateList mBorderColor = ColorStateList.valueOf(DEFAULT_BORDER_COLOR);
+ private final RectF mBounds = new RectF();
+ private final RectF mDrawableRect = new RectF();
+ private final RectF mBitmapRect = new RectF();
+ private final BitmapShader mBitmapShader;
+ private final Paint mBitmapPaint;
+ private final int mBitmapWidth;
+ private final int mBitmapHeight;
+ private final RectF mBorderRect = new RectF();
+ private final Paint mBorderPaint;
+ private final Matrix mShaderMatrix = new Matrix();
+ private float mCornerRadius = 0;
+ private boolean mOval = false;
+ private float mBorderWidth = 0;
+ private ScaleType mScaleType = ScaleType.FIT_CENTER;
+
+ public RoundedDrawable(Bitmap bitmap) {
+
+ mBitmapWidth = bitmap.getWidth();
+ mBitmapHeight = bitmap.getHeight();
+ mBitmapRect.set(0, 0, mBitmapWidth, mBitmapHeight);
+
+ mBitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
+ mBitmapShader.setLocalMatrix(mShaderMatrix);
+
+ mBitmapPaint = new Paint();
+ mBitmapPaint.setStyle(Paint.Style.FILL);
+ mBitmapPaint.setAntiAlias(true);
+ mBitmapPaint.setShader(mBitmapShader);
+
+ mBorderPaint = new Paint();
+ mBorderPaint.setStyle(Paint.Style.STROKE);
+ mBorderPaint.setAntiAlias(true);
+ mBorderPaint.setColor(mBorderColor.getColorForState(getState(), DEFAULT_BORDER_COLOR));
+ mBorderPaint.setStrokeWidth(mBorderWidth);
+ }
+
+ public static RoundedDrawable fromBitmap(Bitmap bitmap) {
+ if (bitmap != null) {
+ return new RoundedDrawable(bitmap);
+ } else {
+ return null;
+ }
+ }
+
+ public static Drawable fromDrawable(Drawable drawable) {
+ if (drawable != null) {
+ if (drawable instanceof RoundedDrawable) {
+ // just return if it's already a RoundedDrawable
+ return drawable;
+ } else if (drawable instanceof LayerDrawable) {
+ LayerDrawable ld = (LayerDrawable) drawable;
+ int num = ld.getNumberOfLayers();
+
+ // loop through layers to and change to RoundedDrawables if possible
+ for (int i = 0; i < num; i++) {
+ Drawable d = ld.getDrawable(i);
+ ld.setDrawableByLayerId(ld.getId(i), fromDrawable(d));
+ }
+ return ld;
+ }
+
+ // try to get a bitmap from the drawable and
+ Bitmap bm = drawableToBitmap(drawable);
+ if (bm != null) {
+ return new RoundedDrawable(bm);
+ } else {
+ Log.w(TAG, "Failed to create bitmap from drawable!");
+ }
+ }
+ return drawable;
+ }
+
+ public static Bitmap drawableToBitmap(Drawable drawable) {
+ if (drawable instanceof BitmapDrawable) {
+ return ((BitmapDrawable) drawable).getBitmap();
+ }
+
+ Bitmap bitmap;
+ int width = Math.max(drawable.getIntrinsicWidth(), 1);
+ int height = Math.max(drawable.getIntrinsicHeight(), 1);
+ try {
+ bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
+ Canvas canvas = new Canvas(bitmap);
+ drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
+ drawable.draw(canvas);
+ } catch (Exception e) {
+ e.printStackTrace();
+ bitmap = null;
+ }
+
+ return bitmap;
+ }
+
+ private void updateShaderMatrix() {
+ float scale;
+ float dx;
+ float dy;
+
+ switch (mScaleType) {
+ case CENTER:
+ mBorderRect.set(mBounds);
+ mBorderRect.inset((mBorderWidth) / 2, (mBorderWidth) / 2);
+
+ mShaderMatrix.set(null);
+ mShaderMatrix.setTranslate((int) ((mBorderRect.width() - mBitmapWidth) * 0.5f + 0.5f),
+ (int) ((mBorderRect.height() - mBitmapHeight) * 0.5f + 0.5f));
+ break;
+
+ case CENTER_CROP:
+ mBorderRect.set(mBounds);
+ mBorderRect.inset((mBorderWidth) / 2, (mBorderWidth) / 2);
+
+ mShaderMatrix.set(null);
+
+ dx = 0;
+ dy = 0;
+
+ if (mBitmapWidth * mBorderRect.height() > mBorderRect.width() * mBitmapHeight) {
+ scale = mBorderRect.height() / (float) mBitmapHeight;
+ dx = (mBorderRect.width() - mBitmapWidth * scale) * 0.5f;
+ } else {
+ scale = mBorderRect.width() / (float) mBitmapWidth;
+ dy = (mBorderRect.height() - mBitmapHeight * scale) * 0.5f;
+ }
+
+ mShaderMatrix.setScale(scale, scale);
+ mShaderMatrix.postTranslate((int) (dx + 0.5f) + mBorderWidth,
+ (int) (dy + 0.5f) + mBorderWidth);
+ break;
+
+ case CENTER_INSIDE:
+ mShaderMatrix.set(null);
+
+ if (mBitmapWidth <= mBounds.width() && mBitmapHeight <= mBounds.height()) {
+ scale = 1.0f;
+ } else {
+ scale = Math.min(mBounds.width() / (float) mBitmapWidth,
+ mBounds.height() / (float) mBitmapHeight);
+ }
+
+ dx = (int) ((mBounds.width() - mBitmapWidth * scale) * 0.5f + 0.5f);
+ dy = (int) ((mBounds.height() - mBitmapHeight * scale) * 0.5f + 0.5f);
+
+ mShaderMatrix.setScale(scale, scale);
+ mShaderMatrix.postTranslate(dx, dy);
+
+ mBorderRect.set(mBitmapRect);
+ mShaderMatrix.mapRect(mBorderRect);
+ mBorderRect.inset((mBorderWidth) / 2, (mBorderWidth) / 2);
+ mShaderMatrix.setRectToRect(mBitmapRect, mBorderRect, Matrix.ScaleToFit.FILL);
+ break;
+
+ default:
+ case FIT_CENTER:
+ mBorderRect.set(mBitmapRect);
+ mShaderMatrix.setRectToRect(mBitmapRect, mBounds, Matrix.ScaleToFit.CENTER);
+ mShaderMatrix.mapRect(mBorderRect);
+ mBorderRect.inset((mBorderWidth) / 2, (mBorderWidth) / 2);
+ mShaderMatrix.setRectToRect(mBitmapRect, mBorderRect, Matrix.ScaleToFit.FILL);
+ break;
+
+ case FIT_END:
+ mBorderRect.set(mBitmapRect);
+ mShaderMatrix.setRectToRect(mBitmapRect, mBounds, Matrix.ScaleToFit.END);
+ mShaderMatrix.mapRect(mBorderRect);
+ mBorderRect.inset((mBorderWidth) / 2, (mBorderWidth) / 2);
+ mShaderMatrix.setRectToRect(mBitmapRect, mBorderRect, Matrix.ScaleToFit.FILL);
+ break;
+
+ case FIT_START:
+ mBorderRect.set(mBitmapRect);
+ mShaderMatrix.setRectToRect(mBitmapRect, mBounds, Matrix.ScaleToFit.START);
+ mShaderMatrix.mapRect(mBorderRect);
+ mBorderRect.inset((mBorderWidth) / 2, (mBorderWidth) / 2);
+ mShaderMatrix.setRectToRect(mBitmapRect, mBorderRect, Matrix.ScaleToFit.FILL);
+ break;
+
+ case FIT_XY:
+ mBorderRect.set(mBounds);
+ mBorderRect.inset((mBorderWidth) / 2, (mBorderWidth) / 2);
+ mShaderMatrix.set(null);
+ mShaderMatrix.setRectToRect(mBitmapRect, mBorderRect, Matrix.ScaleToFit.FILL);
+ break;
+ }
+
+ mDrawableRect.set(mBorderRect);
+ mBitmapShader.setLocalMatrix(mShaderMatrix);
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+
+ if (mOval) {
+ if (mBorderWidth > 0) {
+ canvas.drawOval(mDrawableRect, mBitmapPaint);
+ canvas.drawOval(mBorderRect, mBorderPaint);
+ } else {
+ canvas.drawOval(mDrawableRect, mBitmapPaint);
+ }
+ } else {
+ if (mBorderWidth > 0) {
+ canvas.drawRoundRect(mDrawableRect, Math.max(mCornerRadius, 0),
+ Math.max(mCornerRadius, 0), mBitmapPaint);
+ canvas.drawRoundRect(mBorderRect, mCornerRadius, mCornerRadius, mBorderPaint);
+ } else {
+ canvas.drawRoundRect(mDrawableRect, mCornerRadius, mCornerRadius, mBitmapPaint);
+ }
+ }
+ }
+
+ @Override
+ public void setDither(boolean dither) {
+ mBitmapPaint.setDither(dither);
+ invalidateSelf();
+ }
+
+ @Override
+ public void setFilterBitmap(boolean filter) {
+ mBitmapPaint.setFilterBitmap(filter);
+ invalidateSelf();
+ }
+
+ @Override
+ public void setAlpha(int alpha) {
+ mBitmapPaint.setAlpha(alpha);
+ invalidateSelf();
+ }
+
+ @Override
+ public void setColorFilter(ColorFilter cf) {
+ mBitmapPaint.setColorFilter(cf);
+ invalidateSelf();
+ }
+
+ @Override
+ public boolean isStateful() {
+ return mBorderColor.isStateful();
+ }
+
+ @Override
+ public int getOpacity() {
+ return PixelFormat.TRANSLUCENT;
+ }
+
+ @Override
+ protected boolean onStateChange(int[] state) {
+ int newColor = mBorderColor.getColorForState(state, 0);
+ if (mBorderPaint.getColor() != newColor) {
+ mBorderPaint.setColor(newColor);
+ return true;
+ } else {
+ return super.onStateChange(state);
+ }
+ }
+
+ @Override
+ protected void onBoundsChange(Rect bounds) {
+ super.onBoundsChange(bounds);
+
+ mBounds.set(bounds);
+
+ updateShaderMatrix();
+ }
+
+ @Override
+ public int getIntrinsicWidth() {
+ return mBitmapWidth;
+ }
+
+ @Override
+ public int getIntrinsicHeight() {
+ return mBitmapHeight;
+ }
+
+ public float getCornerRadius() {
+ return mCornerRadius;
+ }
+
+ public RoundedDrawable setCornerRadius(float radius) {
+ mCornerRadius = radius;
+ return this;
+ }
+
+ public float getBorderWidth() {
+ return mBorderWidth;
+ }
+
+ public RoundedDrawable setBorderWidth(int width) {
+ mBorderWidth = width;
+ mBorderPaint.setStrokeWidth(mBorderWidth);
+ return this;
+ }
+
+ public int getBorderColor() {
+ return mBorderColor.getDefaultColor();
+ }
+
+ public RoundedDrawable setBorderColor(int color) {
+ return setBorderColors(ColorStateList.valueOf(color));
+ }
+
+ public ColorStateList getBorderColors() {
+ return mBorderColor;
+ }
+
+ public RoundedDrawable setBorderColors(ColorStateList colors) {
+ mBorderColor = colors != null ? colors : ColorStateList.valueOf(0);
+ mBorderPaint.setColor(mBorderColor.getColorForState(getState(), DEFAULT_BORDER_COLOR));
+ return this;
+ }
+
+ public boolean isOval() {
+ return mOval;
+ }
+
+ public RoundedDrawable setOval(boolean oval) {
+ mOval = oval;
+ return this;
+ }
+
+ public ScaleType getScaleType() {
+ return mScaleType;
+ }
+
+ public RoundedDrawable setScaleType(ScaleType scaleType) {
+ if (scaleType == null) {
+ scaleType = ScaleType.FIT_CENTER;
+ }
+ if (mScaleType != scaleType) {
+ mScaleType = scaleType;
+ updateShaderMatrix();
+ }
+ return this;
+ }
+
+ public Bitmap toBitmap() {
+ return drawableToBitmap(this);
+ }
+}
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedImageView.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedImageView.java
new file mode 100755
index 0000000000..a74e174dbd
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedImageView.java
@@ -0,0 +1,323 @@
+package com.lightgame.view.imageview;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.LayerDrawable;
+import android.net.Uri;
+import android.support.v7.widget.AppCompatImageView;
+import android.util.AttributeSet;
+import android.util.Log;
+
+import com.lightgame.R;
+
+
+@SuppressWarnings("UnusedDeclaration")
+public class RoundedImageView extends AppCompatImageView {
+
+ public static final String TAG = "RoundedImageView";
+ public static final int DEFAULT_RADIUS = 0;
+ private int mCornerRadius = DEFAULT_RADIUS;
+ public static final int DEFAULT_BORDER_WIDTH = 0;
+ private int mBorderWidth = DEFAULT_BORDER_WIDTH;
+ private static final ScaleType[] SCALE_TYPES = {
+ ScaleType.MATRIX,
+ ScaleType.FIT_XY,
+ ScaleType.FIT_START,
+ ScaleType.FIT_CENTER,
+ ScaleType.FIT_END,
+ ScaleType.CENTER,
+ ScaleType.CENTER_CROP,
+ ScaleType.CENTER_INSIDE
+ };
+ private ColorStateList mBorderColor =
+ ColorStateList.valueOf(RoundedDrawable.DEFAULT_BORDER_COLOR);
+ private boolean mOval = false;
+ private boolean mRoundBackground = false;
+
+ private int mResource;
+ private Drawable mDrawable;
+ private Drawable mBackgroundDrawable;
+
+ private ScaleType mScaleType;
+
+ public RoundedImageView(Context context) {
+ super(context);
+ }
+
+ public RoundedImageView(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public RoundedImageView(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RoundedImageView, defStyle, 0);
+
+ int index = a.getInt(R.styleable.RoundedImageView_android_scaleType, -1);
+ if (index >= 0) {
+ setScaleType(SCALE_TYPES[index]);
+ } else {
+ // default scaletype to FIT_CENTER
+ setScaleType(ScaleType.FIT_CENTER);
+ }
+
+ mCornerRadius = a.getDimensionPixelSize(R.styleable.RoundedImageView_corner_radius, -1);
+ mBorderWidth = a.getDimensionPixelSize(R.styleable.RoundedImageView_border_width, -1);
+
+ // don't allow negative values for radius and border
+ if (mCornerRadius < 0) {
+ mCornerRadius = DEFAULT_RADIUS;
+ }
+ if (mBorderWidth < 0) {
+ mBorderWidth = DEFAULT_BORDER_WIDTH;
+ }
+
+ mBorderColor = a.getColorStateList(R.styleable.RoundedImageView_border_color);
+ if (mBorderColor == null) {
+ mBorderColor = ColorStateList.valueOf(RoundedDrawable.DEFAULT_BORDER_COLOR);
+ }
+
+ mRoundBackground = a.getBoolean(R.styleable.RoundedImageView_round_background, false);
+ mOval = a.getBoolean(R.styleable.RoundedImageView_is_oval, false);
+
+ updateDrawableAttrs();
+ updateBackgroundDrawableAttrs();
+
+ a.recycle();
+ }
+
+ @Override
+ public void setImageResource(int resId) {
+ if (mResource != resId) {
+ mResource = resId;
+ mDrawable = resolveResource();
+ updateDrawableAttrs();
+ super.setImageDrawable(mDrawable);
+ }
+ }
+
+ @Override
+ public void setImageURI(Uri uri) {
+ super.setImageURI(uri);
+ setImageDrawable(getDrawable());
+ } @Override
+ protected void drawableStateChanged() {
+ super.drawableStateChanged();
+ invalidate();
+ }
+
+ @Override
+ public void setImageDrawable(Drawable drawable) {
+ mResource = 0;
+ mDrawable = RoundedDrawable.fromDrawable(drawable);
+ updateDrawableAttrs();
+ super.setImageDrawable(mDrawable);
+ }
+
+ @Override
+ public void setImageBitmap(Bitmap bm) {
+ mResource = 0;
+ mDrawable = RoundedDrawable.fromBitmap(bm);
+ updateDrawableAttrs();
+ super.setImageDrawable(mDrawable);
+ } /**
+ * Return the current scale type in use by this ImageView.
+ *
+ * @attr ref android.R.styleable#ImageView_scaleType
+ * @see ScaleType
+ */
+ @Override
+ public ScaleType getScaleType() {
+ return mScaleType;
+ }
+
+ private Drawable resolveResource() {
+ Resources rsrc = getResources();
+ if (rsrc == null) {
+ return null;
+ }
+
+ Drawable d = null;
+
+ if (mResource != 0) {
+ try {
+ d = rsrc.getDrawable(mResource);
+ } catch (Exception e) {
+ Log.w(TAG, "Unable to find resource: " + mResource, e);
+ // Don't try again.
+ mResource = 0;
+ }
+ }
+ return RoundedDrawable.fromDrawable(d);
+ }
+
+ @Override
+ public void setBackground(Drawable background) {
+ setBackgroundDrawable(background);
+ } /**
+ * Controls how the image should be resized or moved to match the size
+ * of this ImageView.
+ *
+ * @param scaleType The desired scaling mode.
+ * @attr ref android.R.styleable#ImageView_scaleType
+ */
+ @Override
+ public void setScaleType(ScaleType scaleType) {
+ if (scaleType == null) {
+ throw new NullPointerException();
+ }
+
+ if (mScaleType != scaleType) {
+ mScaleType = scaleType;
+
+ switch (scaleType) {
+ case CENTER:
+ case CENTER_CROP:
+ case CENTER_INSIDE:
+ case FIT_CENTER:
+ case FIT_START:
+ case FIT_END:
+ case FIT_XY:
+ super.setScaleType(ScaleType.FIT_XY);
+ break;
+ default:
+ super.setScaleType(scaleType);
+ break;
+ }
+
+ updateDrawableAttrs();
+ updateBackgroundDrawableAttrs();
+ invalidate();
+ }
+ }
+
+ @Override
+ @Deprecated
+ public void setBackgroundDrawable(Drawable background) {
+ mBackgroundDrawable = RoundedDrawable.fromDrawable(background);
+ updateBackgroundDrawableAttrs();
+ super.setBackgroundDrawable(mBackgroundDrawable);
+ }
+
+ private void updateDrawableAttrs() {
+ updateAttrs(mDrawable, false);
+ }
+
+ private void updateBackgroundDrawableAttrs() {
+ updateAttrs(mBackgroundDrawable, true);
+ }
+
+ private void updateAttrs(Drawable drawable, boolean background) {
+ if (drawable == null) {
+ return;
+ }
+
+ if (drawable instanceof RoundedDrawable) {
+ ((RoundedDrawable) drawable)
+ .setScaleType(mScaleType)
+ .setCornerRadius(background && !mRoundBackground ? 0 : mCornerRadius)
+ .setBorderWidth(background && !mRoundBackground ? 0 : mBorderWidth)
+ .setBorderColors(mBorderColor)
+ .setOval(mOval);
+ } else if (drawable instanceof LayerDrawable) {
+ // loop through layers to and set drawable attrs
+ LayerDrawable ld = ((LayerDrawable) drawable);
+ int layers = ld.getNumberOfLayers();
+ for (int i = 0; i < layers; i++) {
+ updateAttrs(ld.getDrawable(i), background);
+ }
+ }
+ }
+
+ public int getCornerRadius() {
+ return mCornerRadius;
+ }
+
+ public void setCornerRadius(int radius) {
+ if (mCornerRadius == radius) {
+ return;
+ }
+
+ mCornerRadius = radius;
+ updateDrawableAttrs();
+ updateBackgroundDrawableAttrs();
+ }
+
+ public int getBorderWidth() {
+ return mBorderWidth;
+ }
+
+ public void setBorderWidth(int width) {
+ if (mBorderWidth == width) {
+ return;
+ }
+
+ mBorderWidth = width;
+ updateDrawableAttrs();
+ updateBackgroundDrawableAttrs();
+ invalidate();
+ }
+
+ public int getBorderColor() {
+ return mBorderColor.getDefaultColor();
+ }
+
+ public void setBorderColor(int color) {
+ setBorderColors(ColorStateList.valueOf(color));
+ }
+
+ public ColorStateList getBorderColors() {
+ return mBorderColor;
+ }
+
+ public void setBorderColors(ColorStateList colors) {
+ if (mBorderColor.equals(colors)) {
+ return;
+ }
+
+ mBorderColor =
+ (colors != null) ? colors : ColorStateList.valueOf(RoundedDrawable.DEFAULT_BORDER_COLOR);
+ updateDrawableAttrs();
+ updateBackgroundDrawableAttrs();
+ if (mBorderWidth > 0) {
+ invalidate();
+ }
+ }
+
+ public boolean isOval() {
+ return mOval;
+ }
+
+ public void setOval(boolean oval) {
+ mOval = oval;
+ updateDrawableAttrs();
+ updateBackgroundDrawableAttrs();
+ invalidate();
+ }
+
+ public boolean isRoundBackground() {
+ return mRoundBackground;
+ }
+
+ public void setRoundBackground(boolean roundBackground) {
+ if (mRoundBackground == roundBackground) {
+ return;
+ }
+
+ mRoundBackground = roundBackground;
+ updateBackgroundDrawableAttrs();
+ invalidate();
+ }
+
+
+
+
+
+
+
+
+}
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedTransformationBuilder.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedTransformationBuilder.java
new file mode 100644
index 0000000000..efabe2c00c
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/RoundedTransformationBuilder.java
@@ -0,0 +1,121 @@
+/*
+* Copyright (C) 2015 Vincent Mi
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+package com.lightgame.view.imageview;
+
+import android.content.res.ColorStateList;
+import android.content.res.Resources;
+import android.util.DisplayMetrics;
+import android.util.TypedValue;
+import android.widget.ImageView;
+
+public final class RoundedTransformationBuilder {
+
+ //private final Resources mResources;
+ private final DisplayMetrics mDisplayMetrics;
+
+ private float mCornerRadius = 0;
+ private boolean mOval = false;
+ private float mBorderWidth = 0;
+ private ColorStateList mBorderColor =
+ ColorStateList.valueOf(RoundedDrawable.DEFAULT_BORDER_COLOR);
+ private ImageView.ScaleType mScaleType = ImageView.ScaleType.FIT_CENTER;
+
+ public RoundedTransformationBuilder() {
+ mDisplayMetrics = Resources.getSystem().getDisplayMetrics();
+ }
+
+ public RoundedTransformationBuilder scaleType(ImageView.ScaleType scaleType) {
+ mScaleType = scaleType;
+ return this;
+ }
+
+ /**
+ * set corner radius in px
+ */
+ public RoundedTransformationBuilder cornerRadius(float radiusPx) {
+ mCornerRadius = radiusPx;
+ return this;
+ }
+
+ /**
+ * set corner radius in dip
+ */
+ public RoundedTransformationBuilder cornerRadiusDp(float radiusDp) {
+ mCornerRadius = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, radiusDp, mDisplayMetrics);
+ return this;
+ }
+
+ /**
+ * set border width in px
+ */
+ public RoundedTransformationBuilder borderWidth(float widthPx) {
+ mBorderWidth = widthPx;
+ return this;
+ }
+
+ /**
+ * set border width in dip
+ */
+ public RoundedTransformationBuilder borderWidthDp(float widthDp) {
+ mBorderWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, widthDp, mDisplayMetrics);
+ return this;
+ }
+
+
+ /**
+ * set border color
+ */
+ public RoundedTransformationBuilder borderColor(int color) {
+ mBorderColor = ColorStateList.valueOf(color);
+ return this;
+ }
+
+ public RoundedTransformationBuilder borderColor(ColorStateList colors) {
+ mBorderColor = colors;
+ return this;
+ }
+
+ public RoundedTransformationBuilder oval(boolean oval) {
+ mOval = oval;
+ return this;
+ }
+
+// public Transformation build() {
+// return new Transformation() {
+// @Override public Bitmap transform(Bitmap source) {
+// Bitmap transformed = RoundedDrawable.fromBitmap(source)
+// .setScaleType(mScaleType)
+// .setCornerRadius(mCornerRadius)
+// .setBorderWidth(mBorderWidth)
+// .setBorderColor(mBorderColor)
+// .setOval(mOval)
+// .toBitmap();
+// if (!source.equals(transformed)) {
+// source.recycle();
+// }
+// return transformed;
+// }
+//
+// @Override public String key() {
+// return "r:" + mCornerRadius
+// + "b:" + mBorderWidth
+// + "c:" + mBorderColor
+// + "o:" + mOval;
+// }
+// };
+// }
+}
\ No newline at end of file
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/ScaleImageView.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/ScaleImageView.java
new file mode 100755
index 0000000000..4bdd7b2e47
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/ScaleImageView.java
@@ -0,0 +1,47 @@
+package com.lightgame.view.imageview;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.support.v7.widget.AppCompatImageView;
+import android.util.AttributeSet;
+
+import com.lightgame.R;
+
+
+/**
+ * 按照百分比来保持View的大小,可选以width或者height做参考系
+ *
+ * @author CsHeng
+ * @date 2013-3-14
+ */
+public class ScaleImageView extends AppCompatImageView {
+
+ private boolean mMeasureByHeight = false; // default width
+
+ private float mFraction = 1f;// default square
+
+ public ScaleImageView(Context context, AttributeSet set) {
+ super(context, set);
+ TypedArray a = context.obtainStyledAttributes(set, R.styleable.ScaleView);
+ int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0);
+ mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction);
+ if (enumV != 0) {
+ mMeasureByHeight = true;
+ }
+ a.recycle();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ int width = MeasureSpec.getSize(widthMeasureSpec);
+ int height = MeasureSpec.getSize(heightMeasureSpec);
+ if (mMeasureByHeight) {
+ width = (int) (height * mFraction);
+ } else {
+ height = (int) (width * mFraction);
+ }
+ setMeasuredDimension(width, height);
+
+ }
+
+}
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/ScaleRoundedImageView.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/ScaleRoundedImageView.java
new file mode 100755
index 0000000000..dc7dc1a0b3
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/imageview/ScaleRoundedImageView.java
@@ -0,0 +1,47 @@
+package com.lightgame.view.imageview;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+
+import com.lightgame.R;
+
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: CsHeng
+ * Date: 13-3-26
+ * Time: 下午12:54
+ * To change this template use File | Settings | File Templates.
+ */
+public class ScaleRoundedImageView extends RoundedImageView {
+
+ private boolean mMeasureByHeight = false; // default width
+
+ private float mFraction = 1f;// default square
+
+ public ScaleRoundedImageView(Context context, AttributeSet set) {
+ super(context, set);
+ TypedArray a = context.obtainStyledAttributes(set, R.styleable.ScaleView);
+ int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0);
+ mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction);
+ if (enumV != 0) {
+ mMeasureByHeight = true;
+ }
+ a.recycle();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ int width = MeasureSpec.getSize(widthMeasureSpec);
+ int height = MeasureSpec.getSize(heightMeasureSpec);
+ if (mMeasureByHeight) {
+ setMeasuredDimension((int) (height * mFraction), height);
+ } else {
+ setMeasuredDimension(width, (int) (width * mFraction));
+ }
+ }
+
+}
+
+
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleFrameLayout.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleFrameLayout.java
new file mode 100755
index 0000000000..aec369e112
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleFrameLayout.java
@@ -0,0 +1,50 @@
+package com.lightgame.view.scale;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.widget.FrameLayout;
+
+import com.lightgame.R;
+
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: CsHeng
+ * Date: 13-3-15
+ * Time: 下午4:38
+ * To change this template use File | Settings | File Templates.
+ */
+public class ScaleFrameLayout extends FrameLayout {
+
+ private boolean mMeasureByHeight = false; // default width
+ private float mFraction = 1f;// default square
+
+ public ScaleFrameLayout(Context context) {
+ super(context);
+ }
+
+ public ScaleFrameLayout(Context context, AttributeSet set) {
+ super(context, set);
+ TypedArray a = context.obtainStyledAttributes(set, R.styleable.ScaleView);
+ int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0);
+ mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction);
+ if (enumV != 0) {
+ mMeasureByHeight = true;
+ }
+ a.recycle();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ int width = MeasureSpec.getSize(widthMeasureSpec);
+ int height = MeasureSpec.getSize(heightMeasureSpec);
+ if (mMeasureByHeight) {
+ setMeasuredDimension((int) (height * mFraction), height);
+ } else {
+ setMeasuredDimension(width, (int) (width * mFraction));
+ }
+ }
+
+}
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleLinearLayout.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleLinearLayout.java
new file mode 100755
index 0000000000..dd4ef8be93
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleLinearLayout.java
@@ -0,0 +1,51 @@
+package com.lightgame.view.scale;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.widget.LinearLayout;
+
+import com.lightgame.R;
+
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: CsHeng
+ * Date: 13-3-15
+ * Time: 下午12:31
+ * To change this template use File | Settings | File Templates.
+ */
+public class ScaleLinearLayout extends LinearLayout {
+
+ private boolean mMeasureByHeight = false; // default width
+ private float mFraction = 1f;// default square
+
+ public ScaleLinearLayout(Context context) {
+ super(context);
+ }
+
+ public ScaleLinearLayout(Context context, AttributeSet set) {
+ super(context, set);
+ TypedArray a = context.obtainStyledAttributes(set, R.styleable.ScaleView);
+ int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0);
+ mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction);
+ if (enumV != 0) {
+ mMeasureByHeight = true;
+ }
+ a.recycle();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ int width = MeasureSpec.getSize(widthMeasureSpec);
+ int height = MeasureSpec.getSize(heightMeasureSpec);
+ if (mMeasureByHeight) {
+ setMeasuredDimension((int) (height * mFraction), height);
+ } else {
+ setMeasuredDimension(width, (int) (width * mFraction));
+ }
+ }
+
+
+}
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleRelativeLayout.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleRelativeLayout.java
new file mode 100755
index 0000000000..8e2d29cb3a
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleRelativeLayout.java
@@ -0,0 +1,50 @@
+package com.lightgame.view.scale;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.widget.RelativeLayout;
+
+import com.lightgame.R;
+
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: CsHeng
+ * Date: 13-3-15
+ * Time: 下午4:38
+ * To change this template use File | Settings | File Templates.
+ */
+public class ScaleRelativeLayout extends RelativeLayout {
+
+ private boolean mMeasureByHeight = false; // default width
+ private float mFraction = 1f;// default square
+
+ public ScaleRelativeLayout(Context context) {
+ super(context);
+ }
+
+ public ScaleRelativeLayout(Context context, AttributeSet set) {
+ super(context, set);
+ TypedArray a = context.obtainStyledAttributes(set, R.styleable.ScaleView);
+ int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0);
+ mFraction = a.getFloat(R.styleable.ScaleView_fractionValue, mFraction);
+ if (enumV != 0) {
+ mMeasureByHeight = true;
+ }
+ a.recycle();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ int width = MeasureSpec.getSize(widthMeasureSpec);
+ int height = MeasureSpec.getSize(heightMeasureSpec);
+ if (mMeasureByHeight) {
+ setMeasuredDimension((int) (height * mFraction), height);
+ } else {
+ setMeasuredDimension(width, (int) (width * mFraction));
+ }
+ }
+
+}
diff --git a/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleViewPager.java b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleViewPager.java
new file mode 100644
index 0000000000..e76d014a47
--- /dev/null
+++ b/libraries/LGLibrary/src/main/java/com/lightgame/view/scale/ScaleViewPager.java
@@ -0,0 +1,51 @@
+package com.lightgame.view.scale;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+
+import com.lightgame.R;
+
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: CsHeng
+ * Date: 13-3-15
+ * Time: 下午4:38
+ * To change this template use File | Settings | File Templates.
+ */
+public class ScaleViewPager extends ViewPager {
+
+ private boolean mMeasureByHeight = false; // default width
+ private float mScale = 1f;// default square
+
+ public ScaleViewPager(Context context) {
+ super(context);
+ }
+
+ public ScaleViewPager(Context context, AttributeSet set) {
+ super(context, set);
+ TypedArray a = context.obtainStyledAttributes(set, R.styleable.ScaleView);
+ int enumV = a.getInt(R.styleable.ScaleView_measureBy, 0);
+ mScale = a.getFloat(R.styleable.ScaleView_fractionValue, mScale);
+ if (enumV != 0) {
+ mMeasureByHeight = true;
+ }
+ a.recycle();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ int width = MeasureSpec.getSize(widthMeasureSpec);
+ int height = MeasureSpec.getSize(heightMeasureSpec);
+ if (mMeasureByHeight) {
+ setMeasuredDimension((int) (height * mScale), height);
+ } else {
+ setMeasuredDimension(width, (int) (width * mScale));
+ }
+
+ }
+
+}
diff --git a/libraries/LGLibrary/src/main/res/values/lightgame_attrs.xml b/libraries/LGLibrary/src/main/res/values/lightgame_attrs.xml
new file mode 100644
index 0000000000..ae0ab99f67
--- /dev/null
+++ b/libraries/LGLibrary/src/main/res/values/lightgame_attrs.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/LGLibrary/src/main/res/values/lightgame_ids.xml b/libraries/LGLibrary/src/main/res/values/lightgame_ids.xml
new file mode 100644
index 0000000000..430479cb2c
--- /dev/null
+++ b/libraries/LGLibrary/src/main/res/values/lightgame_ids.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/settings.gradle b/settings.gradle
index 7c18cde3e4..db9e7de06e 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,4 +1,5 @@
include ':app'
+include ':libraries:LGLibrary'
include ':libraries:MiPush'
include ':libraries:MTA'
include ':libraries:QQShare'